From gaod@cse.tw  Fri Nov 22 05:39:56 2013
Return-Path: <gaod@cse.tw>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1])
	(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by hub.freebsd.org (Postfix) with ESMTPS id 436B69C5
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 22 Nov 2013 05:39:56 +0000 (UTC)
Received: from cse.tw (cse.tw [140.138.145.234])
	by mx1.freebsd.org (Postfix) with ESMTP id 119BA29C0
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 22 Nov 2013 05:39:55 +0000 (UTC)
Received: from cse.tw (localhost [127.0.0.1])
	by cse.tw (Postfix) with ESMTP id D8E52187BE2A;
	Fri, 22 Nov 2013 13:39:58 +0800 (CST)
Received: (from gaod@localhost)
	by cse.tw (8.14.5/8.14.5/Submit) id rAM5dw3f016259;
	Fri, 22 Nov 2013 13:39:58 +0800 (CST)
	(envelope-from gaod)
Message-Id: <201311220539.rAM5dw3f016259@cse.tw>
Date: Fri, 22 Nov 2013 13:39:58 +0800 (CST)
From: Hung-Yi Chen <gaod@hychen.org>
Reply-To: Hung-Yi Chen <gaod@hychen.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc: jnlin@csie.nctu.edu.tw
Subject: [PATCH] www/trafficserver: update to 4.0.2, take maintainership
X-Send-Pr-Version: 3.113
X-GNATS-Notify: jnlin@csie.nctu.edu.tw

>Number:         184160
>Category:       ports
>Synopsis:       [PATCH] www/trafficserver: update to 4.0.2, take maintainership
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    sunpoet
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 22 05:50:00 UTC 2013
>Closed-Date:    Tue May 27 14:14:22 UTC 2014
>Last-Modified:  Tue May 27 14:14:22 UTC 2014
>Originator:     Hung-Yi Chen
>Release:        FreeBSD 9.1-RELEASE-p6 amd64
>Organization:
>Environment:
System: FreeBSD cse.tw 9.1-RELEASE-p6 FreeBSD 9.1-RELEASE-p6 #0: Wed Aug 21 20:40:52 UTC 2013 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64


>Description:
- Update to 4.0.2 with minor patch from upstream
- Take maintainership
- Fix pkg-plist

Port maintainer (jnlin@csie.nctu.edu.tw) is cc'd.

Because the diff is too large to fit the policy of send-pr(1).

Please fetch http://http://distfiles.cse.tw/~gaod/trafficserver.diff

>How-To-Repeat:
>Fix:

fetch http://http://distfiles.cse.tw/~gaod/trafficserver.diff
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-ports-bugs->sunpoet 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Fri Nov 22 05:50:13 UTC 2013 
Responsible-Changed-Why:  
sunpoet@ wants this submitter's PRs (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=184160 
State-Changed-From-To: open->feedback 
State-Changed-By: edwin 
State-Changed-When: Fri Nov 22 05:50:15 UTC 2013 
State-Changed-Why:  
Awaiting maintainers feedback (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=184160 

From: Edwin Groothuis <edwin@FreeBSD.org>
To: jnlin@csie.nctu.edu.tw
Cc: bug-followup@FreeBSD.org
Subject: Re: ports/184160: [PATCH] www/trafficserver: update to 4.0.2, take maintainership
Date: Fri, 22 Nov 2013 05:50:14 UT

 Maintainer of www/trafficserver,
 
 Please note that PR ports/184160 has just been submitted.
 
 If it contains a patch for an upgrade, an enhancement or a bug fix
 you agree on, reply to this email stating that you approve the patch
 and a committer will take care of it.
 
 The full text of the PR can be found at:
     http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/184160
 
 -- 
 Edwin Groothuis via the GNATS Auto Assign Tool
 edwin@FreeBSD.org

From: Jui-Nan Lin <jnlin@csie.nctu.edu.tw>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: ports/184160: [PATCH] www/trafficserver: update to 4.0.2, take maintainership
Date: Sat, 23 Nov 2013 22:35:22 +0800

 --047d7b5db7beb63c2d04ebd90bf9
 Content-Type: text/plain; charset=UTF-8
 
 Hello,
 
 Please commit the patch attached in this email, thanks!
 
 On Fri, Nov 22, 2013 at 1:50 PM, Edwin Groothuis <edwin@freebsd.org> wrote:
 > Maintainer of www/trafficserver,
 >
 > Please note that PR ports/184160 has just been submitted.
 >
 > If it contains a patch for an upgrade, an enhancement or a bug fix
 > you agree on, reply to this email stating that you approve the patch
 > and a committer will take care of it.
 >
 > The full text of the PR can be found at:
 >     http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/184160
 >
 > --
 > Edwin Groothuis via the GNATS Auto Assign Tool
 > edwin@FreeBSD.org
 
 --047d7b5db7beb63c2d04ebd90bf9
 Content-Type: application/octet-stream; name="trafficserver-4.0.2.patch"
 Content-Disposition: attachment; filename="trafficserver-4.0.2.patch"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_hocymg2o0
 
 ZGlmZiAtcnVOIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2ZXIvTWFrZWZpbGUgLi9NYWtlZmls
 ZQotLS0gL3Vzci9wb3J0cy93d3cvdHJhZmZpY3NlcnZlci9NYWtlZmlsZQkyMDEzLTEwLTIzIDIw
 OjEyOjQwLjAwMDAwMDAwMCArMDgwMAorKysgLi9NYWtlZmlsZQkyMDEzLTExLTIzIDIyOjI4OjU5
 LjE0NjQzODczMyArMDgwMApAQCAtMSwxMiArMSwxMiBAQAogIyBDcmVhdGVkIGJ5OiBKdWktTmFu
 IExpbiA8am5saW5AY3NpZS5uY3R1LmVkdS50dz4KLSMgJEZyZWVCU0Q6IHd3dy90cmFmZmljc2Vy
 dmVyL01ha2VmaWxlIDMzMTM3OCAyMDEzLTEwLTIzIDEyOjEyOjQwWiBkZWNrZSAkCisjICRGcmVl
 QlNEOiBoZWFkL3d3dy90cmFmZmljc2VydmVyL01ha2VmaWxlIDMzMTM3OCAyMDEzLTEwLTIzIDEy
 OjEyOjQwWiBkZWNrZSAkCiAKIFBPUlROQU1FPQl0cmFmZmljc2VydmVyCi1QT1JUVkVSU0lPTj0J
 My4yLjUKK1BPUlRWRVJTSU9OPQk0LjAuMgogQ0FURUdPUklFUz0Jd3d3CiBNQVNURVJfU0lURVM9
 CUFQQUNIRS8ke1BPUlROQU1FfQogCi1NQUlOVEFJTkVSPQlqbmxpbkBjc2llLm5jdHUuZWR1LnR3
 CitNQUlOVEFJTkVSPQlnYW9kQGh5Y2hlbi5vcmcKIENPTU1FTlQ9CUEgZmFzdCwgc2NhbGFibGUg
 YW5kIGV4dGVuc2libGUgSFRUUCBwcm94eSBzZXJ2ZXIKIAogTElDRU5TRT0JQUwyCkBAIC0yMyw3
 ICsyMyw2IEBACiBVU0VfVENMPQl5ZXMKIFVTRV9SQ19TVUJSPQkke1BPUlROQU1FfQogVVNFX0xE
 Q09ORklHPQl5ZXMKLVVTRV9HQ0M9CWFueQogT05MWV9GT1JfQVJDSFM9CWkzODYgYW1kNjQKIAog
 TERGTEFHUys9CS1MJHtMT0NBTEJBU0V9L2xpYgpAQCAtMzMsNiArMzIsMTkgQEAKIAogLmluY2x1
 ZGUgPGJzZC5wb3J0LnByZS5taz4KIAorLmlmICR7T1NWRVJTSU9OfSA+PSA5MDAwMzMgJiYgZXhp
 c3RzKC91c3IvYmluL2NsYW5nKQorQ0M9CQljbGFuZworQ1hYPQkJY2xhbmcrKworLmVsc2UKK1VT
 RV9HQ0M9CTQuNAorLmVuZGlmCisKKy5pZiAke1BPUlRfT1BUSU9OUzpNRE9DU30KK1JFQURNRURJ
 Uj0JJHtET0NTRElSfQorLmVsc2UKK1JFQURNRURJUj0Jbm8KKy5lbmRpZgorCiBwb3N0LXBhdGNo
 OgogCUAke1JFSU5QTEFDRV9DTUR9IC1lICdzLHx8IG12LHx8IGNwIC1wLCcgJHtXUktTUkN9L3By
 b3h5L2NvbmZpZy9NYWtlZmlsZS5hbQogCmRpZmYgLXJ1TiAvdXNyL3BvcnRzL3d3dy90cmFmZmlj
 c2VydmVyL2Rpc3RpbmZvIC4vZGlzdGluZm8KLS0tIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2
 ZXIvZGlzdGluZm8JMjAxMy0xMC0yMyAyMDoxMjo0MC4wMDAwMDAwMDAgKzA4MDAKKysrIC4vZGlz
 dGluZm8JMjAxMy0xMS0yMyAyMjoyODo1OS4xNDc0Mzk1MDggKzA4MDAKQEAgLTEsMiArMSwyIEBA
 Ci1TSEEyNTYgKHRyYWZmaWNzZXJ2ZXItMy4yLjUudGFyLmJ6MikgPSA2Y2FkYTU5Y2I4ZDg4MDBk
 NDgzNDRmYTcxMWFlYzY5NjQwODNhMTgyZGVlZTIxZmE0NDVjMzEyMjdiY2QxYzkwCi1TSVpFICh0
 cmFmZmljc2VydmVyLTMuMi41LnRhci5iejIpID0gMjUzNTQ5OAorU0hBMjU2ICh0cmFmZmljc2Vy
 dmVyLTQuMC4yLnRhci5iejIpID0gMmUyYzFmNTRjNTkwYmJkMzdiYmQ3ODFiMzNkYWZiMzBhNjk1
 YTgwMzBlMjg2NWY3MWUzN2Y3NDQ0MjVlODYzNQorU0laRSAodHJhZmZpY3NlcnZlci00LjAuMi50
 YXIuYnoyKSA9IDYwNzEwODQKZGlmZiAtcnVOIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2ZXIv
 ZmlsZXMvcGF0Y2gtTWFrZWZpbGUuYW0gLi9maWxlcy9wYXRjaC1NYWtlZmlsZS5hbQotLS0gL3Vz
 ci9wb3J0cy93d3cvdHJhZmZpY3NlcnZlci9maWxlcy9wYXRjaC1NYWtlZmlsZS5hbQkxOTcwLTAx
 LTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysgLi9maWxlcy9wYXRjaC1NYWtlZmlsZS5h
 bQkyMDEzLTExLTIzIDIyOjI4OjU5LjE0ODQzODc2NCArMDgwMApAQCAtMCwwICsxLDMwIEBACist
 LS0gTWFrZWZpbGUuYW0ub3JpZwkyMDEzLTEwLTA3IDIyOjAyOjAzLjAwMDAwMDAwMCArMDAwMAor
 KysrIE1ha2VmaWxlLmFtCTIwMTMtMTEtMjAgMTI6NTU6MTAuMDAwMDAwMDAwICswMDAwCitAQCAt
 MjEsMjQgKzIxLDIyIEBACisgIyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2Uv
 bWFudWFsL2F1dG9tYWtlLmh0bWwjTG9jYWwtTWFjcm9zCisgQUNMT0NBTF9BTUZMQUdTID0gLUkg
 YnVpbGQKKyAKKy1leHBvcnQgQ0NBQ0hFX0JBU0VESVIKKy0KKyAjIFRPRE86IFRoZXJlJ3Mgc3Rp
 bGwgc29tZSB3ZWlyZG5lc3MgaW4gdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHByb3h5CisgIyBh
 bmQgbWdtdCwgaGVuY2Ugd2UgaGF2ZSB0byBidWlsZCBwcm94eS9oZHJzIGZpcnN0LgorIAorICMg
 cHJveHkvYXBpL3RzIGhhcyB0byBiZSBidWlsdCBmaXJzdCwgc2luY2Ugc28gbXVjaCBvZiBsaWJy
 YXJpZXMgYW5kICJjb3JlCisgIyBkZXBlbmRzIG9uIHRoZSBnZW5lcmF0ZXMgdHMvdHMuaCBpbmNs
 dWRlIGZpbGUuCisgaWYgU1RBTkRBTE9ORV9JT0NPUkUKKy1TVUJESVJTID0gIHByb3h5L2FwaS90
 cyBpb2NvcmUgbGliIHByb3h5L2hkcnMgbWdtdCBwcm94eSBjb3AgcGx1Z2lucyB0b29scyBleGFt
 cGxlCisrU1VCRElSUyA9ICBwcm94eS9hcGkvdHMgaW9jb3JlIGxpYiBwcm94eS9oZHJzIG1nbXQg
 cHJveHkgY29wIHBsdWdpbnMgdG9vbHMKKyBlbHNlCistU1VCRElSUyA9ICBwcm94eS9hcGkvdHMg
 aW9jb3JlIGxpYiBwcm94eS9oZHJzIG1nbXQgcHJveHkgY29wIHJjIGRvYyBwbHVnaW5zIHRvb2xz
 IGV4YW1wbGUKKytTVUJESVJTID0gIHByb3h5L2FwaS90cyBpb2NvcmUgbGliIHByb3h5L2hkcnMg
 bWdtdCBwcm94eSBjb3AgcmMgZG9jIHBsdWdpbnMgdG9vbHMKKyBlbmRpZgorIAorIERJU1RfQlVJ
 TERfVVNFUj1gaWQgLW51YAorIERJU1RfQlVJTERfVVNFUl9HUk9VUD1gaWQgLW5nYAorIERJU1RD
 SEVDS19DT05GSUdVUkVfRkxBR1M9LS13aXRoLXVzZXI9JHtESVNUX0JVSUxEX1VTRVJ9IC0td2l0
 aC1ncm91cD0ke0RJU1RfQlVJTERfVVNFUl9HUk9VUH0KKyAKKy1FWFRSQV9ESVNUPUNIQU5HRVMg
 SU5TVEFMTCBTVEFUVVMgTk9USUNFIExBWU9VVCBMSUNFTlNFIGV4YW1wbGUgY29udHJpYiBSRUFE
 TUUtRUMyIFJFVklFV0VSUworK0VYVFJBX0RJU1Q9Q0hBTkdFUyBJTlNUQUxMIFNUQVRVUyBOT1RJ
 Q0UgTEFZT1VUIExJQ0VOU0UgY29udHJpYiBSRUFETUUtRUMyIFJFVklFV0VSUworIAorICMgaWdh
 bGljIGNhbid0IHJlbWVtYmVyIGlmIHRoaXMgaXMgbWFrZSBjaGVjayBvciBtYWtlIHRlc3QgYW5k
 IG5laXRoZXIgc2hvdWxkIHlvdS4KKyB0ZXN0OiBjaGVjawpkaWZmIC1ydU4gL3Vzci9wb3J0cy93
 d3cvdHJhZmZpY3NlcnZlci9maWxlcy9wYXRjaC1NYWtlZmlsZS5pbiAuL2ZpbGVzL3BhdGNoLU1h
 a2VmaWxlLmluCi0tLSAvdXNyL3BvcnRzL3d3dy90cmFmZmljc2VydmVyL2ZpbGVzL3BhdGNoLU1h
 a2VmaWxlLmluCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKyAuL2ZpbGVz
 L3BhdGNoLU1ha2VmaWxlLmluCTIwMTMtMTEtMjMgMjI6Mjg6NTkuMTQ5NDM4NTU1ICswODAwCkBA
 IC0wLDAgKzEsMzMgQEAKKy0tLSBNYWtlZmlsZS5pbi5vcmlnCTIwMTMtMTEtMjAgMTI6NTU6Mjcu
 MDAwMDAwMDAwICswMDAwCisrKysgTWFrZWZpbGUuaW4JMjAxMy0xMS0yMCAxMjo1NTo0MC4wMDAw
 MDAwMDAgKzAwMDAKK0BAIC0xODksNyArMTg5LDcgQEAKKyBDVEFHUyA9IGN0YWdzCisgQ1NDT1BF
 ID0gY3Njb3BlCisgRElTVF9TVUJESVJTID0gcHJveHkvYXBpL3RzIGlvY29yZSBsaWIgcHJveHkv
 aGRycyBtZ210IHByb3h5IGNvcCByYyBcCistCWRvYyBwbHVnaW5zIHRvb2xzIGV4YW1wbGUKKysJ
 ZG9jIHBsdWdpbnMgdG9vbHMKKyBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09V
 UkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorIGRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQo
 VkVSU0lPTikKKyB0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK0BAIC01NzAsMTggKzU3MCwxOCBA
 QAorICMgTG9jYWwgTWFjcm9zCisgIyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21h
 a2UvbWFudWFsL2F1dG9tYWtlLmh0bWwjTG9jYWwtTWFjcm9zCisgQUNMT0NBTF9BTUZMQUdTID0g
 LUkgYnVpbGQKKy1AU1RBTkRBTE9ORV9JT0NPUkVfRkFMU0VAU1VCRElSUyA9IHByb3h5L2FwaS90
 cyBpb2NvcmUgbGliIHByb3h5L2hkcnMgbWdtdCBwcm94eSBjb3AgcmMgZG9jIHBsdWdpbnMgdG9v
 bHMgZXhhbXBsZQorK0BTVEFOREFMT05FX0lPQ09SRV9GQUxTRUBTVUJESVJTID0gcHJveHkvYXBp
 L3RzIGlvY29yZSBsaWIgcHJveHkvaGRycyBtZ210IHByb3h5IGNvcCByYyBkb2MgcGx1Z2lucyB0
 b29scworIAorICMgVE9ETzogVGhlcmUncyBzdGlsbCBzb21lIHdlaXJkbmVzcyBpbiB0aGUgZGVw
 ZW5kZW5jaWVzIGJldHdlZW4gcHJveHkKKyAjIGFuZCBtZ210LCBoZW5jZSB3ZSBoYXZlIHRvIGJ1
 aWxkIHByb3h5L2hkcnMgZmlyc3QuCisgCisgIyBwcm94eS9hcGkvdHMgaGFzIHRvIGJlIGJ1aWx0
 IGZpcnN0LCBzaW5jZSBzbyBtdWNoIG9mIGxpYnJhcmllcyBhbmQgImNvcmUKKyAjIGRlcGVuZHMg
 b24gdGhlIGdlbmVyYXRlcyB0cy90cy5oIGluY2x1ZGUgZmlsZS4KKy1AU1RBTkRBTE9ORV9JT0NP
 UkVfVFJVRUBTVUJESVJTID0gcHJveHkvYXBpL3RzIGlvY29yZSBsaWIgcHJveHkvaGRycyBtZ210
 IHByb3h5IGNvcCBwbHVnaW5zIHRvb2xzIGV4YW1wbGUKKytAU1RBTkRBTE9ORV9JT0NPUkVfVFJV
 RUBTVUJESVJTID0gcHJveHkvYXBpL3RzIGlvY29yZSBsaWIgcHJveHkvaGRycyBtZ210IHByb3h5
 IGNvcCBwbHVnaW5zIHRvb2xzCisgRElTVF9CVUlMRF9VU0VSID0gYGlkIC1udWAKKyBESVNUX0JV
 SUxEX1VTRVJfR1JPVVAgPSBgaWQgLW5nYAorIERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPSAt
 LXdpdGgtdXNlcj0ke0RJU1RfQlVJTERfVVNFUn0gLS13aXRoLWdyb3VwPSR7RElTVF9CVUlMRF9V
 U0VSX0dST1VQfQorLUVYVFJBX0RJU1QgPSBDSEFOR0VTIElOU1RBTEwgU1RBVFVTIE5PVElDRSBM
 QVlPVVQgTElDRU5TRSBleGFtcGxlIGNvbnRyaWIgUkVBRE1FLUVDMiBSRVZJRVdFUlMKKytFWFRS
 QV9ESVNUID0gQ0hBTkdFUyBJTlNUQUxMIFNUQVRVUyBOT1RJQ0UgTEFZT1VUIExJQ0VOU0UgY29u
 dHJpYiBSRUFETUUtRUMyIFJFVklFV0VSUworIGFsbDogYWxsLXJlY3Vyc2l2ZQorIAorIC5TVUZG
 SVhFUzoKZGlmZiAtcnVOIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2ZXIvZmlsZXMvcGF0Y2gt
 Y2lfcmVncmVzc2lvbiAuL2ZpbGVzL3BhdGNoLWNpX3JlZ3Jlc3Npb24KLS0tIC91c3IvcG9ydHMv
 d3d3L3RyYWZmaWNzZXJ2ZXIvZmlsZXMvcGF0Y2gtY2lfcmVncmVzc2lvbgkxOTcwLTAxLTAxIDA4
 OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysgLi9maWxlcy9wYXRjaC1jaV9yZWdyZXNzaW9uCTIw
 MTMtMTEtMjMgMjI6Mjg6NTkuMTUwNDM5MzcxICswODAwCkBAIC0wLDAgKzEsMzkgQEAKKy0tLSBj
 aS9yZWdyZXNzaW9uLm9yaWcJMjAxMy0xMS0wNCAxNToxODoxMi4yODM1MzMwNTYgKzA4MDAKKysr
 KyBjaS9yZWdyZXNzaW9uCTIwMTMtMTEtMDQgMTU6MTk6MDEuMTczODQ5MzQ2ICswODAwCitAQCAt
 MzMsOCArMzMsNiBAQAorIE9CSlJPT1Q9JHtPQkpST09UOi0iJFRNUERJUi8kQlVJTERJRC9vYmoi
 fSAjIHdoZXJlIHdlIGFyZSBidWlsZGluZworIERTVFJPT1Q9JHtEU1RST09UOi0iJFRNUERJUi8k
 QlVJTERJRC9kc3QifSAjIHdoZXJlIHdlIGFyZSBpbnN0YWxsaW5nCisgCistZXhwb3J0IENDQUNI
 RV9CQVNFRElSPSIkU1JDUk9PVCIKKy0KKyAjIEZvcmNlIGxvdyBtYWtlIHBhcmFsbGVsaXphdGlv
 biBzbyB0aGF0IHRoZSBidWlsZCBjYW4gY29tcGxldGUgaW4gYSBWTSB3aXRoCisgIyBvbmx5IGEg
 c21hbGwgYW1vdW50IG9mIG1lbW9yeS4KKyBOUFJPQ1M9JHtOUFJPQ1M6LTJ9CitAQCAtNDksMTQg
 KzQ3LDE0IEBACisgICAgICAgY2FzZSAkKHVuYW1lIC12KSBpbgorICAgICAgICAgRGFyd2luKikg
 ZWNobyBjbGFuZyA7OworICAgICAgICAgb21uaW9zKikgZWNobyAvb3B0L2djYy00LjYuMy9iaW4v
 Z2NjIDs7CistICAgICAgICAqKSBlY2hvIGNjYWNoZSBjYyA7OworKyAgICAgICAgKikgZWNobyBj
 YyA7OworICAgICAgIGVzYWMKKyAgICAgICA7OworICAgICBjeHgpCisgICAgICAgY2FzZSAkKHVu
 YW1lIC12KSBpbgorICAgICAgICAgRGFyd2luKikgZWNobyBjbGFuZysrIDs7CisgICAgICAgICBv
 bW5pb3MqKSBlY2hvIC9vcHQvZ2NjLTQuNi4zL2Jpbi9nKysgOzsKKy0gICAgICAgICopIGVjaG8g
 Y2NhY2hlIGMrKyA7OworKyAgICAgICAgKikgZWNobyBjKysgOzsKKyAgICAgICBlc2FjCisgICAg
 ICAgOzsKKyAgICAgbWFrZSkKK0BAIC04OSw4ICs4Nyw4IEBACisgICAgICAgLS1lbmFibGUtd2Nj
 cCBcCisgICAgICAgLS1lbmFibGUtZXhwZXJpbWVudGFsLXBsdWdpbnMgXAorICAgICAgICQoZXh0
 cmFzKSBcCistICAgICAgQ0M9IiRDQyIgXAorLSAgICAgIENYWD0iJENYWCIKKysgICAgICBDQz0k
 Q0MgXAorKyAgICAgIENYWD0kQ1hYCisgICApCisgfQorIApkaWZmIC1ydU4gL3Vzci9wb3J0cy93
 d3cvdHJhZmZpY3NlcnZlci9maWxlcy9wYXRjaC1jb25maWd1cmUuYWMgLi9maWxlcy9wYXRjaC1j
 b25maWd1cmUuYWMKLS0tIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2ZXIvZmlsZXMvcGF0Y2gt
 Y29uZmlndXJlLmFjCTIwMTMtMTAtMjMgMjA6MTI6NDAuMDAwMDAwMDAwICswODAwCisrKyAuL2Zp
 bGVzL3BhdGNoLWNvbmZpZ3VyZS5hYwkyMDEzLTExLTIzIDIyOjI4OjU5LjE1MTQ0MDIxMSArMDgw
 MApAQCAtMSwxNyArMSwzNiBAQAotLS0tIGNvbmZpZ3VyZS5hYy5vcmlnCTIwMTMtMDctMDMgMDQ6
 MTc6MjguMDAwMDAwMDAwICswODAwCi0rKysgY29uZmlndXJlLmFjCTIwMTMtMDgtMzAgMDU6MjM6
 NDQuMDg5ODgyNzIzICswODAwCistLS0gY29uZmlndXJlLmFjLm9yaWcJMjAxMy0xMC0wOCAwNjow
 MjowMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjb25maWd1cmUuYWMJMjAxMy0xMS0wNSAxODoyOToy
 MS4zNjY1MzI0NjQgKzA4MDAKIEBAIC00MCw3ICs0MCw3IEBACiAgQUNfQ09ORklHX0FVWF9ESVIo
 W2J1aWxkL2F1eF0pCiAgQUNfQ09ORklHX1NSQ0RJUihbcHJveHkvTWFpbi5jY10pCiAgQUNfQ09O
 RklHX01BQ1JPX0RJUihbYnVpbGRdKQotLUFNX0lOSVRfQVVUT01BS0UoWy1XYWxsIC1XZXJyb3Ig
 Zm9yZWlnbiBuby1pbnN0YWxsaW5mbyBuby1pbnN0YWxsbWFuIDEuOS4yXSkKLStBTV9JTklUX0FV
 VE9NQUtFKFstV2FsbCAtV2Vycm9yIGZvcmVpZ24gbm8taW5zdGFsbGluZm8gbm8taW5zdGFsbG1h
 biAxLjkuMiBzdWJkaXItb2JqZWN0c10pCi0gQU1fQ09ORklHX0hFQURFUihbbGliL3RzL2lua19h
 dXRvY29uZi5oXSkKKy1BTV9JTklUX0FVVE9NQUtFKFstV2FsbCAtV2Vycm9yIHRhci11c3RhciBm
 b3JlaWduIG5vLWluc3RhbGxpbmZvIG5vLWluc3RhbGxtYW4gMS45LjJdKQorK0FNX0lOSVRfQVVU
 T01BS0UoWy1XYWxsIC1XZXJyb3IgdGFyLXVzdGFyIGZvcmVpZ24gbm8taW5zdGFsbGluZm8gbm8t
 aW5zdGFsbG1hbiAxLjkuMiBzdWJkaXItb2JqZWN0c10pCisgQUNfQ09ORklHX0hFQURFUlMoW2xp
 Yi90cy9pbmtfYXV0b2NvbmYuaF0pCiAgCiAgIyBDb25maWd1cmUgd2l0aCAtLWRpc2FibGUtc2ls
 ZW50LXJ1bGVzIHRvIGdldCB2ZXJib3NlIG91dHB1dC4gRm9yIG1vcmUgaW5mbywgc2VlCi1AQCAt
 NDk3LDYgKzQ5NywxMCBAQAotICAgICAgIFtBTV9QUk9HX0FSXSkKK0BAIC00ODEsNiArNDgxLDE4
 IEBACisgQU1fQ09ORElUSU9OQUwoW0JVSUxEX0VYUEVSSU1FTlRBTF9QTFVHSU5TXSwgWyB0ZXN0
 ICJ4JHtlbmFibGVfZXhwZXJpbWVudGFsX3BsdWdpbnN9IiA9ICJ4eWVzIiBdKQogIAorICMKKysj
 IGJ1aWxkIGMrKyBhcGkKKysjCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIGMr
 KyBhcGldKQorK0FDX0FSR19FTkFCTEUoW2NwcGFwaV0sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0t
 ZW5hYmxlLWNwcGFwaV0sW0J1aWxkIHRoZSBjKysgYXBpXSldLAorKyAgW10sCisrICBbZW5hYmxl
 X2NwcGFwaT0ibm8iXQorKykKKytBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2NwcGFwaV0pCisrQU1f
 Q09ORElUSU9OQUwoW0VOQUJMRV9DUFBBUEldLCBbIHRlc3QgIngke2VuYWJsZV9jcHBhcGl9IiA9
 ICJ4eWVzIiBdKQorKworKyMKKyAjIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllcworICMgRm9yIGVh
 Y2ggdmFyIHRoZSBmb2xsb3dpbmcgaXMgZXZhbHVhdGVkCisgIyBmb28gICAgICBTdGFuZGFyZCB2
 YXJpYWJsZSAgZWcuICR7cHJlZml4fS9mb28KK0BAIC01NDAsNiArNTUyLDEwIEBACisgQUNfUFJP
 R19DQyhbY2MgZ2NjIGNsYW5nIGljY10pCisgQUNfUFJPR19DWFgoW2MrKyBnKysgY2xhbmcrKyBp
 Y3BjXSkKICAKICsjIHJlcXVpcmVkIGJ5IGF1dG9tYWtlLTEuMTIKICttNF9wYXR0ZXJuX2FsbG93
 KFtBTV9QUk9HX0FSXSkKQEAgLTIwLDExICszOSw3MyBAQAogIEFDX1BST0dfQ1BQCiAgQUNfUFJP
 R19DWFhDUFAKICBBTV9QUk9HX0FTCi1AQCAtNTA2LDcgKzUxMCw2IEBACitAQCAtNjUyLDcgKzY2
 OCw2IEBACiAgQUNfUFJPR19MSUJUT09MCiAgQUNfQ0hFQ0tfUFJPRyhSTSwgcm0sIHJtKQogIEFD
 X0NIRUNLX1BST0coQVNDUFAsIGNwcCwgY3BwKQogLUFDX0NIRUNLX1RPT0woQVIsIGFyLCBhcikK
 ICBBQ19JU0NfUE9TSVgKLSBBU19JRihbdGVzdCAieCRlbmFibGVfd2NjcCIgPSAieHllcyJdLAot
 ICAgWworIAorICMgRG8gYmlzb24gY2hlY2sgYnkgaGFuZCBiZWNhdXNlIHdlIG11c3QgZG8gYSB2
 ZXJzaW9uIGNoZWNrLgorQEAgLTk5NSwxNSArMTAxMCwxNyBAQAorIAorICMKKyAjIENQUCAxMSBB
 UEkKKysjIFRPRE86IGJyaWFuZywgdGhpcyBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIHRvIGEgZGVm
 aW5lCisrIyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBjKysgYXBpIHRvIGVuYWJsZSBjKysxMSBh
 cGkgZmVhdHVyZXMuCisgIworLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgYysr
 MTEgYXBpXSkKKy1BQ19BUkdfV0lUSChbY3BwMTFhcGldLAorLSAgW0FTX0hFTFBfU1RSSU5HKFst
 LXdpdGgtY3BwMTFhcGldLFtlbmFibGUgc3VwcG9ydCBmb3IgY3BwMTFhcGkgW2RlZmF1bHQ9YXV0
 b11dKV0sCistICBbY3BwMTFhcGk9JHdpdGh2YWxdLAorLSAgW2NwcDExYXBpPSRlbmFibGVfY3h4
 XzExX3N1cHBvcnRdCistKQorLUFDX01TR19SRVNVTFQoWyRjcHAxMWFwaV0pCistQU1fQ09ORElU
 SU9OQUwoW0JVSUxEX0NQUDExQVBJXSwgW3Rlc3QgIiRjcHAxMWFwaSIgPSB5ZXNdKQorKyNBQ19N
 U0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGMrKzExIGFwaV0pCisrI0FDX0FSR19XSVRI
 KFtjcHAxMWFwaV0sCisrIyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3BwMTFhcGldLFtlbmFi
 bGUgc3VwcG9ydCBmb3IgY3BwMTFhcGkgW2RlZmF1bHQ9YXV0b11dKV0sCisrIyAgW2NwcDExYXBp
 PSR3aXRodmFsXSwKKysjICBbY3BwMTFhcGk9JGVuYWJsZV9jeHhfMTFfc3VwcG9ydF0KKysjKQor
 KyNBQ19NU0dfUkVTVUxUKFskY3BwMTFhcGldKQorKyNBTV9DT05ESVRJT05BTChbQlVJTERfQ1BQ
 MTFBUEldLCBbdGVzdCAiJGNwcDExYXBpIiA9IHllc10pCisgCisgIyBDaGVjayBmb3IgY2NhY2hl
 IChpZiBleHBsaWNpdGx5IGVuYWJsZWQpCisgaWYgdGVzdCAieCRlbmFibGVfY2NhY2hlIiA9ICJ4
 eWVzIjsgdGhlbgorQEAgLTE4MjQsMTEgKzE4NDEsMzQgQEAKKyAgIGlvY29yZS9uZXQvTWFrZWZp
 bGUKKyAgIGlvY29yZS91dGlscy9NYWtlZmlsZQorICAgbGliL01ha2VmaWxlCistICBsaWIvY3Bw
 MTFhcGkvTWFrZWZpbGUKKyAgIGxpYi9yZWNvcmRzL01ha2VmaWxlCisgICBsaWIvdHMvTWFrZWZp
 bGUKKyAgIGxpYi90cy9pbmtfY29uZmlnLmgKKyAgIGxpYi90c2NvbmZpZy9NYWtlZmlsZQorKyAg
 bGliL2F0c2NwcGFwaS9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9zcmMvTWFrZWZpbGUKKysg
 IGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvTWFrZWZpbGUKKysgIGxpYi9hdHNjcHBhcGkvZXhhbXBs
 ZXMvaGVsbG93b3JsZC9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9nbG9iYWxo
 b29rL01ha2VmaWxlCisrICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3RyYW5zYWN0aW9uaG9vay9N
 YWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9tdWx0aXBsZV90cmFuc2FjdGlvbl9o
 b29rcy9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9jbGllbnRyZXF1ZXN0L01h
 a2VmaWxlCisrICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2RhdGFfY2FjaGluZy9NYWtlZmlsZQor
 KyAgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9zZXJ2ZXJyZXNwb25zZS9NYWtlZmlsZQorKyAgbGli
 L2F0c2NwcGFwaS9leGFtcGxlcy9jbGllbnRyZWRpcmVjdC9NYWtlZmlsZQorKyAgbGliL2F0c2Nw
 cGFwaS9leGFtcGxlcy9jdXN0b21yZXNwb25zZS9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9l
 eGFtcGxlcy9udWxsX3RyYW5zZm9ybWF0aW9uX3BsdWdpbi9NYWtlZmlsZQorKyAgbGliL2F0c2Nw
 cGFwaS9leGFtcGxlcy9wb3N0X2J1ZmZlci9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy9sb2dnZXJfZXhhbXBsZS9NYWtlZmlsZQorKyAgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9k
 ZXRhY2hlZHJlcXVlc3QvTWFrZWZpbGUKKysgIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc3RhdF9l
 eGFtcGxlL01ha2VmaWxlCisrICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2FzeW5jX2h0dHBfZmV0
 Y2gvTWFrZWZpbGUKKysgIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcmVtYXBfcGx1Z2luL01ha2Vm
 aWxlCisrICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2d6aXBfdHJhbnNmb3JtYXRpb24vTWFrZWZp
 bGUKKysgIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvdGltZW91dF9leGFtcGxlL01ha2VmaWxlCisr
 ICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2ludGVybmFsX3RyYW5zYWN0aW9uX2hhbmRsaW5nL01h
 a2VmaWxlCisrICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2FzeW5jX3RpbWVyL01ha2VmaWxlCisr
 ICBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3JlcXVlc3RfY29va2llcy9NYWtlZmlsZQorICAgbGli
 L3djY3AvTWFrZWZpbGUKKyAgIGxpYi9wZXJsL01ha2VmaWxlCisgICBtZ210L01ha2VmaWxlCmRp
 ZmYgLXJ1TiAvdXNyL3BvcnRzL3d3dy90cmFmZmljc2VydmVyL2ZpbGVzL3BhdGNoLWxpYl9NYWtl
 ZmlsZS5hbSAuL2ZpbGVzL3BhdGNoLWxpYl9NYWtlZmlsZS5hbQotLS0gL3Vzci9wb3J0cy93d3cv
 dHJhZmZpY3NlcnZlci9maWxlcy9wYXRjaC1saWJfTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODow
 MDowMC4wMDAwMDAwMDAgKzA4MDAKKysrIC4vZmlsZXMvcGF0Y2gtbGliX01ha2VmaWxlLmFtCTIw
 MTMtMTEtMjMgMjI6Mjg6NTkuMTUyNDM4NTk4ICswODAwCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBs
 aWIvTWFrZWZpbGUuYW0ub3JpZwkyMDEzLTExLTA1IDE4OjI5OjQ5LjE0NzUzMjcxNCArMDgwMAor
 KysrIGxpYi9NYWtlZmlsZS5hbQkyMDEzLTExLTA1IDE4OjMwOjIxLjUyNTYxNzQzOCArMDgwMAor
 QEAgLTI3LDYgKzI3LDYgQEAKKyBTVUJESVJTICs9IHRzY29uZmlnIHdjY3AKKyBlbmRpZgorIAor
 LWlmIEJVSUxEX0NQUDExQVBJCistU1VCRElSUyArPSBjcHAxMWFwaQorK2lmIEVOQUJMRV9DUFBB
 UEkKKytTVUJESVJTICs9IGF0c2NwcGFwaQorIGVuZGlmCmRpZmYgLXJ1TiAvdXNyL3BvcnRzL3d3
 dy90cmFmZmljc2VydmVyL2ZpbGVzL3BhdGNoLWxpYl9hdHNjcHBhcGkgLi9maWxlcy9wYXRjaC1s
 aWJfYXRzY3BwYXBpCi0tLSAvdXNyL3BvcnRzL3d3dy90cmFmZmljc2VydmVyL2ZpbGVzL3BhdGNo
 LWxpYl9hdHNjcHBhcGkJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrIC4v
 ZmlsZXMvcGF0Y2gtbGliX2F0c2NwcGFwaQkyMDEzLTExLTIzIDIyOjI4OjU5LjMxNDQ0MDAxOCAr
 MDgwMApAQCAtMCwwICsxLDExNzQxIEBACitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9NYWtlZmls
 ZS5hbSBsaWIvYXRzY3BwYXBpL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9NYWtlZmls
 ZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBh
 cGkvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi43MDQ1MzI1ODIgKzA4MDAKK0BAIC0w
 LDAgKzEsMTggQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBh
 Z3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhp
 cyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVnYXJkaW5nIGNvcHlyaWdo
 dCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMgIHRvIHlvdSB1bmRl
 ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysjICAiTGljZW5zZSIpOyB5
 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrIyAgd2l0aCB0
 aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKyMK
 KysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrIwor
 KyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
 dGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
 T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyMgIFNl
 ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
 aW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysKKytTVUJESVJT
 ID0gc3JjCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9NYWtlZmlsZS5hbSBsaWIv
 YXRzY3BwYXBpL2V4YW1wbGVzL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxl
 cy9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxp
 Yi9hdHNjcHBhcGkvZXhhbXBsZXMvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTk1
 MzI0NzkgKzA4MDAKK0BAIC0wLDAgKzEsMzggQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFw
 YWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29u
 dHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRp
 c3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAg
 cmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmls
 ZQorKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUK
 KysjICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
 bGlhbmNlCisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
 aGUgTGljZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
 L0xJQ0VOU0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
 ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0
 aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhP
 VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
 ciBpbXBsaWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
 IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
 ZW5zZS4KKysKKytTVUJESVJTID0gaGVsbG93b3JsZCBcCisrCSAgZ2xvYmFsaG9vayBcCisrICAg
 ICAgdHJhbnNhY3Rpb25ob29rIFwKKysJICBtdWx0aXBsZV90cmFuc2FjdGlvbl9ob29rcyBcCisr
 CSAgZGF0YV9jYWNoaW5nIFwKKysJICBjbGllbnRyZXF1ZXN0IFwKKysJICBzZXJ2ZXJyZXNwb25z
 ZSBcCisrCSAgY2xpZW50cmVkaXJlY3QgXAorKwkgIGN1c3RvbXJlc3BvbnNlIFwKKysJICBudWxs
 X3RyYW5zZm9ybWF0aW9uX3BsdWdpbiBcCisrCSAgcG9zdF9idWZmZXIgXAorKwkgIGxvZ2dlcl9l
 eGFtcGxlIFwKKysgICAgICBkZXRhY2hlZHJlcXVlc3QgXAorKwkgIHN0YXRfZXhhbXBsZSBcCisr
 ICAgICAgcmVtYXBfcGx1Z2luIFwKKysJICBhc3luY19odHRwX2ZldGNoIFwKKysJICBnemlwX3Ry
 YW5zZm9ybWF0aW9uIFwKKysJICB0aW1lb3V0X2V4YW1wbGUgXAorKyAgICAgIGludGVybmFsX3Ry
 YW5zYWN0aW9uX2hhbmRsaW5nIFwKKysgICAgICBhc3luY190aW1lciBcCisrICAgICAgcmVxdWVz
 dF9jb29raWVzCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLXJ1TiBsaWIvYXRz
 Y3BwYXBpL2V4YW1wbGVzL2FzeW5jX2h0dHBfZmV0Y2gvQXN5bmNIdHRwRmV0Y2guY2MgbGliL2F0
 c2NwcGFwaS9leGFtcGxlcy9hc3luY19odHRwX2ZldGNoL0FzeW5jSHR0cEZldGNoLmNjCistLS0g
 bGliL2F0c2NwcGFwaS9leGFtcGxlcy9hc3luY19odHRwX2ZldGNoL0FzeW5jSHR0cEZldGNoLmNj
 CTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9l
 eGFtcGxlcy9hc3luY19odHRwX2ZldGNoL0FzeW5jSHR0cEZldGNoLmNjCTIwMTMtMTEtMTEgMTQ6
 MDM6MTIuNjk0NTMyNTkwICswODAwCitAQCAtMCwwICsxLDE0NCBAQAorKy8qKgorKyAgTGljZW5z
 ZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAg
 b3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBm
 aWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1h
 dGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2Vz
 IHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
 LjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
 aW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29w
 eSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
 bnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIg
 dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhP
 VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
 ciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
 Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
 c2UuCisrICovCisrCisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9HbG9iYWxQbHVnaW4uaD4KKysj
 aW5jbHVkZSA8YXRzY3BwYXBpL1RyYW5zYWN0aW9uUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2Nw
 cGFwaS9Mb2dnZXIuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0FzeW5jLmg+CisrI2luY2x1ZGUg
 PGF0c2NwcGFwaS9Bc3luY0h0dHBGZXRjaC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2lu
 SW5pdC5oPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjYXNzZXJ0PgorKworK3Vz
 aW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrLy8gVGhp
 cyBpcyBmb3IgdGhlIC1UIHRhZyBkZWJ1Z2dpbmcKKysvLyBUbyB2aWV3IHRoZSBkZWJ1ZyBtZXNz
 YWdlcyAuL3RyYWZmaWNfc2VydmVyIC1UICJhc3luY19odHRwX2ZldGNoX2V4YW1wbGUuKiIKKysj
 ZGVmaW5lIFRBRyAiYXN5bmNfaHR0cF9mZXRjaF9leGFtcGxlIgorKworK2NsYXNzIEFzeW5jSHR0
 cEZldGNoMiA6IHB1YmxpYyBBc3luY0h0dHBGZXRjaCB7CisrcHVibGljOgorKyAgQXN5bmNIdHRw
 RmV0Y2gyKHN0cmluZyByZXF1ZXN0KSA6IEFzeW5jSHR0cEZldGNoKHJlcXVlc3QpIHsgfTsKKyt9
 OworKworK2NsYXNzIEFzeW5jSHR0cEZldGNoMyA6IHB1YmxpYyBBc3luY0h0dHBGZXRjaCB7Cisr
 cHVibGljOgorKyAgQXN5bmNIdHRwRmV0Y2gzKHN0cmluZyByZXF1ZXN0LCBIdHRwTWV0aG9kIG1l
 dGhvZCkgOiBBc3luY0h0dHBGZXRjaChyZXF1ZXN0LCBtZXRob2QpIHsgfTsKKyt9OworKworK2Ns
 YXNzIFRyYW5zYWN0aW9uSG9va1BsdWdpbiA6IHB1YmxpYyBUcmFuc2FjdGlvblBsdWdpbiwgcHVi
 bGljIEFzeW5jUmVjZWl2ZXI8QXN5bmNIdHRwRmV0Y2g+LAorKyAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIHB1YmxpYyBBc3luY1JlY2VpdmVyPEFzeW5jSHR0cEZldGNoMj4sIHB1YmxpYyBB
 c3luY1JlY2VpdmVyPEFzeW5jSHR0cEZldGNoMz4geworK3B1YmxpYzoKKysgIFRyYW5zYWN0aW9u
 SG9va1BsdWdpbihUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIDoKKysgICAgVHJhbnNhY3Rpb25Q
 bHVnaW4odHJhbnNhY3Rpb24pLCB0cmFuc2FjdGlvbl8odHJhbnNhY3Rpb24pLCBudW1fZmV0Y2hl
 c19wZW5kaW5nXygwKSB7CisrICAgIFRTX0RFQlVHKFRBRywgIkNvbnN0cnVjdGVkIFRyYW5zYWN0
 aW9uSG9va1BsdWdpbiwgc2F2ZWQgYSByZWZlcmVuY2UgdG8gdGhpcyB0cmFuc2FjdGlvbi4iKTsK
 KysgICAgcmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVFVRVNUX0hFQURFUlMpOworKyAgfQorKwor
 KyAgdm9pZCBoYW5kbGVTZW5kUmVxdWVzdEhlYWRlcnMoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9u
 KSB7CisrICAgIEFzeW5jOjpleGVjdXRlPEFzeW5jSHR0cEZldGNoPih0aGlzLCBuZXcgQXN5bmNI
 dHRwRmV0Y2goImh0dHA6Ly8xMjcuMC4wLjEvIiksIGdldE11dGV4KCkpOworKyAgICArK251bV9m
 ZXRjaGVzX3BlbmRpbmdfOworKworKyAgICAvLyB3ZSdsbCBhZGQgc29tZSBjdXN0b20gaGVhZGVy
 cyBmb3IgdGhpcyByZXF1ZXN0CisrICAgIEFzeW5jSHR0cEZldGNoMiAqcHJvdmlkZXIyID0gbmV3
 IEFzeW5jSHR0cEZldGNoMigiaHR0cDovLzEyNy4wLjAuMS8iKTsKKysgICAgSGVhZGVycyAmcmVx
 dWVzdF9oZWFkZXJzID0gcHJvdmlkZXIyLT5nZXRSZXF1ZXN0SGVhZGVycygpOworKyAgICByZXF1
 ZXN0X2hlYWRlcnMuc2V0KCJIZWFkZXIxIiwgIlZhbHVlMSIpOworKyAgICByZXF1ZXN0X2hlYWRl
 cnMuc2V0KCJIZWFkZXIyIiwgIlZhbHVlMiIpOworKyAgICBBc3luYzo6ZXhlY3V0ZTxBc3luY0h0
 dHBGZXRjaDI+KHRoaXMsIHByb3ZpZGVyMiwgZ2V0TXV0ZXgoKSk7CisrICAgICsrbnVtX2ZldGNo
 ZXNfcGVuZGluZ187CisrICB9CisrCisrICB2b2lkIGhhbmRsZUFzeW5jQ29tcGxldGUoQXN5bmNI
 dHRwRmV0Y2ggJmFzeW5jX2h0dHBfZmV0Y2gpIHsKKysgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxl
 ZCB3aGVuIG91ciBhc3luYyBldmVudCBpcyBjb21wbGV0ZS4KKysgICAgVFNfREVCVUcoVEFHLCAi
 QXN5bmNIdHRwRmV0Y2ggY29tcGxldGVkIik7CisrICAgIGhhbmRsZUFueUFzeW5jQ29tcGxldGUo
 YXN5bmNfaHR0cF9mZXRjaCk7CisrICB9CisrCisrICB2b2lkIGhhbmRsZUFzeW5jQ29tcGxldGUo
 QXN5bmNIdHRwRmV0Y2gyICZhc3luY19odHRwX2ZldGNoKSB7CisrICAgIC8vIFRoaXMgd2lsbCBi
 ZSBjYWxsZWQgd2hlbiBvdXIgYXN5bmMgZXZlbnQgaXMgY29tcGxldGUuCisrICAgIFRTX0RFQlVH
 KFRBRywgIkFzeW5jSHR0cEZldGNoMiBjb21wbGV0ZWQiKTsKKysgICAgaGFuZGxlQW55QXN5bmND
 b21wbGV0ZShhc3luY19odHRwX2ZldGNoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgflRyYW5zYWN0
 aW9uSG9va1BsdWdpbigpIHsKKysgICAgVFNfREVCVUcoVEFHLCAiRGVzdHJveWVkIFRyYW5zYWN0
 aW9uSG9va1BsdWdpbiEiKTsKKysgICAgLy8gc2luY2Ugd2UgZGllIHJpZ2h0IGF3YXksIHdlIHNo
 b3VsZCBub3QgcmVjZWl2ZSB0aGUgY2FsbGJhY2sgZm9yIHRoaXMgKHVzaW5nIFBPU1QgcmVxdWVz
 dCB0aGlzIHRpbWUpCisrICAgIEFzeW5jOjpleGVjdXRlPEFzeW5jSHR0cEZldGNoMz4odGhpcywg
 bmV3IEFzeW5jSHR0cEZldGNoMygiaHR0cDovLzEyNy4wLjAuMS8iLCBIVFRQX01FVEhPRF9QT1NU
 KSwgZ2V0TXV0ZXgoKSk7CisrICB9CisrCisrICB2b2lkIGhhbmRsZUFzeW5jQ29tcGxldGUoQXN5
 bmNIdHRwRmV0Y2gzICZhc3luY19odHRwX2ZldGNoKSB7CisrICAgIGFzc2VydCghIkFzeW5jSHR0
 cEZldGNoMyBzaG91bGRuJ3QgaGF2ZSBjb21wbGV0ZWQhIik7CisrICB9CisrCisrcHJpdmF0ZToK
 KysgIFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbl87CisrICBpbnQgbnVtX2ZldGNoZXNfcGVuZGlu
 Z187CisrCisrICB2b2lkIGhhbmRsZUFueUFzeW5jQ29tcGxldGUoQXN5bmNIdHRwRmV0Y2ggJmFz
 eW5jX2h0dHBfZmV0Y2gpIHsKKysgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuIG91ciBh
 c3luYyBldmVudCBpcyBjb21wbGV0ZS4KKysgICAgY29uc3QgUmVzcG9uc2UgJnJlc3BvbnNlID0g
 YXN5bmNfaHR0cF9mZXRjaC5nZXRSZXNwb25zZSgpOworKyAgICBpZiAoYXN5bmNfaHR0cF9mZXRj
 aC5nZXRSZXN1bHQoKSA9PSBBc3luY0h0dHBGZXRjaDo6UkVTVUxUX1NVQ0NFU1MpIHsKKysgICAg
 ICBUU19ERUJVRyhUQUcsICJSZXNwb25zZSB2ZXJzaW9uIGlzIFslc10sIHN0YXR1cyBjb2RlICVk
 LCByZWFzb24gcGhyYXNlIFslc10iLAorKyAgICAgICAgICAgICAgIEhUVFBfVkVSU0lPTl9TVFJJ
 TkdTW3Jlc3BvbnNlLmdldFZlcnNpb24oKV0uY19zdHIoKSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29k
 ZSgpLCAKKysgICAgICAgICAgICAgICByZXNwb25zZS5nZXRSZWFzb25QaHJhc2UoKS5jX3N0cigp
 KTsKKysgICAgICBmb3IgKEhlYWRlcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByZXNwb25zZS5n
 ZXRIZWFkZXJzKCkuYmVnaW4oKSwgZW5kID0gcmVzcG9uc2UuZ2V0SGVhZGVycygpLmVuZCgpOwor
 KyAgICAgICAgICAgaXRlciAhPSBlbmQ7ICsraXRlcikgeworKyAgICAgICAgVFNfREVCVUcoVEFH
 LCAiKioqKioqKioqKioqKioqIFJlc3BvbnNlIGhlYWRlcjogbmFtZSBbJXNdLCB2YWx1ZXMgWyVz
 XSIsIGl0ZXItPmZpcnN0LmNfc3RyKCksIAorKyAgICAgICAgICAgICAgICAgSGVhZGVyczo6Z2V0
 Sm9pbmVkVmFsdWVzKGl0ZXItPnNlY29uZCkuY19zdHIoKSk7OworKyAgICAgIH0KKysgICAgICBj
 b25zdCB2b2lkICpib2R5OworKyAgICAgIHNpemVfdCBib2R5X3NpemU7CisrICAgICAgYXN5bmNf
 aHR0cF9mZXRjaC5nZXRSZXNwb25zZUJvZHkoYm9keSwgYm9keV9zaXplKTsKKysgICAgICBUU19E
 RUJVRyhUQUcsICJSZXNwb25zZSBib2R5IGlzIFslLipzXSIsIGJvZHlfc2l6ZSwgYm9keSk7Cisr
 ICAgIH0gZWxzZSB7CisrICAgICAgVFNfRVJST1IoVEFHLCAiRmV0Y2ggZGlkIG5vdCBjb21wbGV0
 ZSBzdWNjZXNzZnVsbHk7IFJlc3VsdCAlZCIsCisrICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
 aW50Pihhc3luY19odHRwX2ZldGNoLmdldFJlc3VsdCgpKSk7CisrICAgIH0KKysgICAgaWYgKC0t
 bnVtX2ZldGNoZXNfcGVuZGluZ18gPT0gMCkgeworKyAgICAgIFRTX0RFQlVHKFRBRywgIlJlZW5h
 YmxpbmcgdHJhbnNhY3Rpb24iKTsKKysgICAgICB0cmFuc2FjdGlvbl8ucmVzdW1lKCk7CisrICAg
 IH0KKysgIH0KKysKKyt9OworKworK2NsYXNzIEdsb2JhbEhvb2tQbHVnaW4gOiBwdWJsaWMgR2xv
 YmFsUGx1Z2luIHsKKytwdWJsaWM6CisrICBHbG9iYWxIb29rUGx1Z2luKCkgeworKyAgICBUU19E
 RUJVRyhUQUcsICJSZWdpc3RlcmluZyBhIGdsb2JhbCBob29rIEhPT0tfUkVBRF9SRVFVRVNUX0hF
 QURFUlNfUE9TVF9SRU1BUCIpOworKyAgICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFUVVFU1Rf
 SEVBREVSU19QT1NUX1JFTUFQKTsKKysgIH0KKysKKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFk
 UmVxdWVzdEhlYWRlcnNQb3N0UmVtYXAoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAg
 IFRTX0RFQlVHKFRBRywgIlJlY2VpdmVkIGEgcmVxdWVzdCBpbiBoYW5kbGVSZWFkUmVxdWVzdEhl
 YWRlcnNQb3N0UmVtYXAuIik7CisrCisrICAgIC8vIElmIHdlIGRvbid0IG1ha2Ugc3VyZSB0byBj
 aGVjayBpZiBpdCdzIGFuIGludGVybmFsIHJlcXVlc3Qgd2UgY2FuIGdldCBvdXJzZWx2ZXMgaW50
 byBhbiBpbmZpbml0ZSBsb29wIQorKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzSW50ZXJuYWxSZXF1
 ZXN0KCkpIHsKKysgICAgICB0cmFuc2FjdGlvbi5hZGRQbHVnaW4obmV3IFRyYW5zYWN0aW9uSG9v
 a1BsdWdpbih0cmFuc2FjdGlvbikpOworKyAgICB9CisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgp
 OworKyAgfQorK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFyZ2MgQVRTQ1BQQVBJX1VO
 VVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQpIHsKKysgIFRTX0RFQlVH
 KFRBRywgIkxvYWRlZCBhc3luY19odHRwX2ZldGNoX2V4YW1wbGUgcGx1Z2luIik7CisrICBHbG9i
 YWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IEdsb2JhbEhvb2tQbHVnaW4oKTsKKyt9CisrCitkaWZm
 IC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9hc3luY19odHRwX2ZldGNoL01ha2VmaWxlLmFt
 IGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfaHR0cF9mZXRjaC9NYWtlZmlsZS5hbQorLS0t
 IGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfaHR0cF9mZXRjaC9NYWtlZmlsZS5hbQkxOTcw
 LTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBs
 ZXMvYXN5bmNfaHR0cF9mZXRjaC9NYWtlZmlsZS5hbQkyMDEzLTExLTExIDE0OjAzOjEyLjY5NDUz
 MjU5MCArMDgwMAorQEAgLTAsMCArMSwzMCBAQAorKyMKKysjICBMaWNlbnNlZCB0byB0aGUgQXBh
 Y2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrIyAgb3IgbW9yZSBjb250
 cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrIyAgZGlz
 dHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysjICBy
 ZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxl
 CisrIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQor
 KyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
 aWFuY2UKKysjICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
 ZSBMaWNlbnNlIGF0CisrIworKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
 TElDRU5TRS0yLjAKKysjCisrIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
 IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
 ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrIyAgV0lUSE9V
 VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
 IGltcGxpZWQuCisrIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
 Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
 bnNlLgorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3Jj
 L2luY2x1ZGUgLVduby11bnVzZWQtdmFyaWFibGUKKysKKyt0YXJnZXQ9QXN5bmNIdHRwRmV0Y2gu
 c28KKytwa2dsaWJkaXIgPSAke3BrZ2xpYmV4ZWNkaXJ9CisrcGtnbGliX0xUTElCUkFSSUVTID0g
 QXN5bmNIdHRwRmV0Y2gubGEKKytBc3luY0h0dHBGZXRjaF9sYV9TT1VSQ0VTID0gQXN5bmNIdHRw
 RmV0Y2guY2MKKytBc3luY0h0dHBGZXRjaF9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVy
 c2lvbiAtc2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy8gLWxhdHNjcHBh
 cGkKKysKKythbGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysKKytjbGVhbi1sb2NhbDoK
 KysJcm0gLWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9hc3lu
 Y190aW1lci9Bc3luY1RpbWVyLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfdGltZXIv
 QXN5bmNUaW1lci5jYworLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfdGltZXIvQXN5
 bmNUaW1lci5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9h
 dHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfdGltZXIvQXN5bmNUaW1lci5jYwkyMDEzLTExLTExIDE0
 OjAzOjEyLjY5NDUzMjU5MCArMDgwMAorQEAgLTAsMCArMSw3NSBAQAorKy8qKgorKyAgTGljZW5z
 ZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAg
 b3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBm
 aWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1h
 dGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2Vz
 IHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
 LjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
 aW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29w
 eSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
 bnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIg
 dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhP
 VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
 ciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
 Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
 c2UuCisrICovCisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9Mb2dnZXIuaD4KKysjaW5jbHVkZSA8
 YXRzY3BwYXBpL1BsdWdpbkluaXQuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0FzeW5jVGltZXIu
 aD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oPgorKworK3VzaW5nIG5hbWVz
 cGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrI2RlZmluZSBUQUcgImFz
 eW5jX3RpbWVyIgorKworK2NsYXNzIFRpbWVyRXZlbnRSZWNlaXZlciA6IHB1YmxpYyBBc3luY1Jl
 Y2VpdmVyPEFzeW5jVGltZXI+IHsKKytwdWJsaWM6CisrICBUaW1lckV2ZW50UmVjZWl2ZXIoQXN5
 bmNUaW1lcjo6VHlwZSB0eXBlLCBpbnQgcGVyaW9kX2luX21zLCBpbnQgaW5pdGlhbF9wZXJpb2Rf
 aW5fbXMgPSAwLCBpbnQgbWF4X2luc3RhbmNlcyA9IDApCisrICAgIDogbWF4X2luc3RhbmNlc18o
 bWF4X2luc3RhbmNlcyksIGluc3RhbmNlX2NvdW50XygwKSwgdHlwZV8odHlwZSkgeworKyAgICB0
 aW1lcl8gPSBuZXcgQXN5bmNUaW1lcih0eXBlLCBwZXJpb2RfaW5fbXMsIGluaXRpYWxfcGVyaW9k
 X2luX21zKTsKKysgICAgQXN5bmM6OmV4ZWN1dGU8QXN5bmNUaW1lcj4odGhpcywgdGltZXJfLCBz
 aGFyZWRfcHRyPE11dGV4PigpKTsgLy8gbGV0dGluZyB0aGUgc3lzdGVtIGNyZWF0ZSB0aGUgbXV0
 ZXgKKysgIH0KKysKKysgIHZvaWQgaGFuZGxlQXN5bmNDb21wbGV0ZShBc3luY1RpbWVyICZ0aW1l
 ciBBVFNDUFBBUElfVU5VU0VEKSB7CisrICAgIFRTX0RFQlVHKFRBRywgIkdvdCB0aW1lciBldmVu
 dCBpbiBvYmplY3QgJXAhIiwgdGhpcyk7CisrICAgIGlmICgodHlwZV8gPT0gQXN5bmNUaW1lcjo6
 VFlQRV9PTkVfT0ZGKSB8fCAobWF4X2luc3RhbmNlc18gJiYgKCsraW5zdGFuY2VfY291bnRfID09
 IG1heF9pbnN0YW5jZXNfKSkpIHsKKysgICAgICBUU19ERUJVRyhUQUcsICJTdG9wcGluZyB0aW1l
 ciBpbiBvYmplY3QgJXAhIiwgdGhpcyk7CisrICAgICAgZGVsZXRlIHRoaXM7CisrICAgIH0KKysg
 IH0KKysKKysgIH5UaW1lckV2ZW50UmVjZWl2ZXIoKSB7CisrICAgIGRlbGV0ZSB0aW1lcl87Cisr
 ICB9CisrCisrcHJpdmF0ZToKKysgIGludCBtYXhfaW5zdGFuY2VzXzsKKysgIGludCBpbnN0YW5j
 ZV9jb3VudF87CisrICBBc3luY1RpbWVyOjpUeXBlIHR5cGVfOworKyAgQXN5bmNUaW1lciAqdGlt
 ZXJfOworK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFyZ2MgQVRTQ1BQQVBJX1VOVVNF
 RCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQpIHsKKysgIGludCBwZXJpb2Rf
 aW5fbXMgPSAxMDAwOworKyAgVGltZXJFdmVudFJlY2VpdmVyICp0aW1lcjEgPSBuZXcgVGltZXJF
 dmVudFJlY2VpdmVyKEFzeW5jVGltZXI6OlRZUEVfUEVSSU9ESUMsIHBlcmlvZF9pbl9tcyk7Cisr
 ICBUU19ERUJVRyhUQUcsICJDcmVhdGVkIHBlcmlvZGljIHRpbWVyICVwIHdpdGggaW5pdGlhbCBw
 ZXJpb2QgMCwgcmVndWxhciBwZXJpb2QgJWQgYW5kIG1heCBpbnN0YW5jZXMgMCIsIHRpbWVyMSwK
 KysgICAgICAgICAgIHBlcmlvZF9pbl9tcyk7CisrICBpbnQgaW5pdGlhbF9wZXJpb2RfaW5fbXMg
 PSAxMDA7CisrICBUaW1lckV2ZW50UmVjZWl2ZXIgKnRpbWVyMiA9IG5ldyBUaW1lckV2ZW50UmVj
 ZWl2ZXIoQXN5bmNUaW1lcjo6VFlQRV9QRVJJT0RJQywgcGVyaW9kX2luX21zLAorKyAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcGVy
 aW9kX2luX21zKTsKKysgIFRTX0RFQlVHKFRBRywgIkNyZWF0ZWQgcGVyaW9kaWMgdGltZXIgJXAg
 d2l0aCBpbml0aWFsIHBlcmlvZCAlZCwgcmVndWxhciBwZXJpb2QgJWQgYW5kIG1heCBpbnN0YW5j
 ZXMgMCIsIHRpbWVyMiwKKysgICAgICAgICAgIGluaXRpYWxfcGVyaW9kX2luX21zLCBwZXJpb2Rf
 aW5fbXMpOworKyAgaW5pdGlhbF9wZXJpb2RfaW5fbXMgPSAyMDA7CisrICBpbnQgbWF4X2luc3Rh
 bmNlcyA9IDEwOworKyAgVGltZXJFdmVudFJlY2VpdmVyICp0aW1lcjMgPSBuZXcgVGltZXJFdmVu
 dFJlY2VpdmVyKEFzeW5jVGltZXI6OlRZUEVfUEVSSU9ESUMsIHBlcmlvZF9pbl9tcywgaW5pdGlh
 bF9wZXJpb2RfaW5fbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgbWF4X2luc3RhbmNlcyk7CisrICBUU19ERUJVRyhUQUcsICJDcmVhdGVk
 IHBlcmlvZGljIHRpbWVyICVwIHdpdGggaW5pdGlhbCBwZXJpb2QgJWQsIHJlZ3VsYXIgcGVyaW9k
 ICVkIGFuZCBtYXggaW5zdGFuY2VzICVkIiwgdGltZXIzLAorKyAgICAgICAgICAgaW5pdGlhbF9w
 ZXJpb2RfaW5fbXMsIHBlcmlvZF9pbl9tcywgbWF4X2luc3RhbmNlcyk7CisrCisrICBUaW1lckV2
 ZW50UmVjZWl2ZXIgKnRpbWVyNCA9IG5ldyBUaW1lckV2ZW50UmVjZWl2ZXIoQXN5bmNUaW1lcjo6
 VFlQRV9PTkVfT0ZGLCBwZXJpb2RfaW5fbXMpOworKyAgVFNfREVCVUcoVEFHLCAiQ3JlYXRlZCBv
 bmUtb2ZmIHRpbWVyICVwIHdpdGggcGVyaW9kICVkIiwgdGltZXI0LCBwZXJpb2RfaW5fbXMpOwor
 K30KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2FzeW5jX3RpbWVyL01ha2VmaWxl
 LmFtIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvYXN5bmNfdGltZXIvTWFrZWZpbGUuYW0KKy0tLSBs
 aWIvYXRzY3BwYXBpL2V4YW1wbGVzL2FzeW5jX3RpbWVyL01ha2VmaWxlLmFtCTE5NzAtMDEtMDEg
 MDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9hc3lu
 Y190aW1lci9NYWtlZmlsZS5hbQkyMDEzLTExLTExIDE0OjAzOjEyLjY5NDUzMjU5MCArMDgwMAor
 QEAgLTAsMCArMSwyOSBAQAorKyMKKysjICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJl
 IEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNl
 bnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrIyAgZGlzdHJpYnV0ZWQgd2l0
 aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysjICByZWdhcmRpbmcgY29w
 eXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrIyAgdG8geW91
 IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyMgICJMaWNlbnNl
 Iik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysjICB3
 aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
 CisrIworKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
 KysjCisrIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
 biB3cml0aW5nLCBzb2Z0d2FyZQorKyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
 IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrIyAgV0lUSE9VVCBXQVJSQU5USUVT
 IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisr
 IyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
 cm1pc3Npb25zIGFuZAorKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKworK0FN
 X0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUgLVdu
 by11bnVzZWQtdmFyaWFibGUKKyt0YXJnZXQ9QXN5bmNUaW1lci5zbworK3BrZ2xpYmRpciA9ICR7
 cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJSQVJJRVMgPSBBc3luY1RpbWVyLmxhCisrQXN5
 bmNUaW1lcl9sYV9TT1VSQ0VTID0gQXN5bmNUaW1lci5jYworK0FzeW5jVGltZXJfbGFfTERGTEFH
 UyA9ICAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9h
 dHNjcHBhcGkvc3JjLyAtbGF0c2NwcGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFy
 Z2V0KQorKworK2NsZWFuLWxvY2FsOgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIv
 YXRzY3BwYXBpL2V4YW1wbGVzL2NsaWVudHJlZGlyZWN0L0NsaWVudFJlZGlyZWN0LmNjIGxpYi9h
 dHNjcHBhcGkvZXhhbXBsZXMvY2xpZW50cmVkaXJlY3QvQ2xpZW50UmVkaXJlY3QuY2MKKy0tLSBs
 aWIvYXRzY3BwYXBpL2V4YW1wbGVzL2NsaWVudHJlZGlyZWN0L0NsaWVudFJlZGlyZWN0LmNjCTE5
 NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy9jbGllbnRyZWRpcmVjdC9DbGllbnRSZWRpcmVjdC5jYwkyMDEzLTExLTExIDE0OjAzOjEy
 LjY5NDUzMjU5MCArMDgwMAorQEAgLTAsMCArMSw3NiBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8g
 dGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9y
 ZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisr
 ICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgor
 KyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMg
 ZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
 ZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
 cGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
 aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
 SUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
 cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
 Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FS
 UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
 aWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
 aW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisr
 ICovCisrCisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvR2xvYmFs
 UGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9UcmFuc2FjdGlvblBsdWdpbi5oPgorKyNp
 bmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNj
 cHBhcGk7CisrCisrdXNpbmcgc3RkOjpjb3V0OworK3VzaW5nIHN0ZDo6ZW5kbDsKKyt1c2luZyBz
 dGQ6Omxpc3Q7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrCisrY2xhc3MgQ2xpZW50UmVkaXJl
 Y3RUcmFuc2FjdGlvblBsdWdpbiA6IHB1YmxpYyBhdHNjcHBhcGk6OlRyYW5zYWN0aW9uUGx1Z2lu
 IHsKKytwdWJsaWM6CisrICBDbGllbnRSZWRpcmVjdFRyYW5zYWN0aW9uUGx1Z2luKFRyYW5zYWN0
 aW9uICZ0cmFuc2FjdGlvbiwgY29uc3Qgc3RyaW5nICZsb2NhdGlvbikKKysgICAgIDogVHJhbnNh
 Y3Rpb25QbHVnaW4odHJhbnNhY3Rpb24pLCBsb2NhdGlvbl8obG9jYXRpb24pIHsKKysKKysgICAg
 Ly8KKysgICAgLy8gV2Ugd2lsbCBzZXQgdGhpcyB0cmFuc2FjdGlvbiB0byBqdW1wIHRvIGVycm9y
 IHN0YXRlIGFuZCB0aGVuIHdlIHdpbGwgc2V0dXAKKysgICAgLy8gdGhlIHJlZGlyZWN0IG9uIFNF
 TkRfUkVTUE9OU0VfSEVBREVSUworKyAgICAvLworKyAgICBUcmFuc2FjdGlvblBsdWdpbjo6cmVn
 aXN0ZXJIb29rKEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTKTsKKysgICAgdHJhbnNhY3Rpb24u
 ZXJyb3IoKTsKKysgIH0KKysKKysgIHZvaWQgaGFuZGxlU2VuZFJlc3BvbnNlSGVhZGVycyhUcmFu
 c2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgdHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVzcG9u
 c2UoKS5zZXRTdGF0dXNDb2RlKEhUVFBfU1RBVFVTX01PVkVEX1RFTVBPUkFSSUxZKTsKKysgICAg
 dHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVzcG9uc2UoKS5zZXRSZWFzb25QaHJhc2UoIk1vdmVkIFRl
 bXBvcmFyaWx5Iik7CisrICAgIHRyYW5zYWN0aW9uLmdldENsaWVudFJlc3BvbnNlKCkuZ2V0SGVh
 ZGVycygpLnNldCgiTG9jYXRpb24iLCBsb2NhdGlvbl8pOworKyAgICB0cmFuc2FjdGlvbi5yZXN1
 bWUoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgfkNsaWVudFJlZGlyZWN0VHJhbnNhY3Rpb25QbHVn
 aW4oKSB7IH0KKytwcml2YXRlOgorKyAgc3RyaW5nIGxvY2F0aW9uXzsKKyt9OworKworKworK2Ns
 YXNzIENsaWVudFJlZGlyZWN0R2xvYmFsUGx1Z2luIDogcHVibGljIEdsb2JhbFBsdWdpbiB7Cisr
 cHVibGljOgorKyAgQ2xpZW50UmVkaXJlY3RHbG9iYWxQbHVnaW4oKSB7CisrICAgIHJlZ2lzdGVy
 SG9vayhIT09LX1NFTkRfUkVRVUVTVF9IRUFERVJTKTsKKysgIH0KKysKKysgIHZvaWQgaGFuZGxl
 U2VuZFJlcXVlc3RIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBpZih0
 cmFuc2FjdGlvbi5nZXRDbGllbnRSZXF1ZXN0KCkuZ2V0VXJsKCkuZ2V0UXVlcnkoKS5maW5kKCJy
 ZWRpcmVjdD0xIikgIT0gc3RyaW5nOjpucG9zKSB7CisrICAgICAgdHJhbnNhY3Rpb24uYWRkUGx1
 Z2luKG5ldyBDbGllbnRSZWRpcmVjdFRyYW5zYWN0aW9uUGx1Z2luKHRyYW5zYWN0aW9uLCAiaHR0
 cDovL3d3dy5saW5rZWRpbi5jb20vIikpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICB0
 cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0
 KGludCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElf
 VU5VU0VEKSB7CisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IENsaWVudFJlZGlyZWN0
 R2xvYmFsUGx1Z2luKCk7CisrfQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY2xp
 ZW50cmVkaXJlY3QvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9jbGllbnRyZWRp
 cmVjdC9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY2xpZW50cmVkaXJl
 Y3QvTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBs
 aWIvYXRzY3BwYXBpL2V4YW1wbGVzL2NsaWVudHJlZGlyZWN0L01ha2VmaWxlLmFtCTIwMTMtMTEt
 MTEgMTQ6MDM6MTIuNjk0NTMyNTkwICswODAwCitAQCAtMCwwICsxLDI4IEBACisrIworKyMgIExp
 Y2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUK
 KysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9U
 SUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBp
 bmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBs
 aWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
 ZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
 ZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9i
 dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAgICAgIGh0dHA6Ly93d3cuYXBh
 Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBVbmxlc3MgcmVxdWlyZWQgYnkg
 YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrIyAgZGlz
 dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
 QVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
 ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
 cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrIyAgbGltaXRhdGlv
 bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZSAtV25vLXVudXNlZC12YXJpYWJsZQorK3RhcmdldD1DbGll
 bnRSZWRpcmVjdC5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRM
 SUJSQVJJRVMgPSBDbGllbnRSZWRpcmVjdC5sYQorK0NsaWVudFJlZGlyZWN0X2xhX1NPVVJDRVMg
 PSBDbGllbnRSZWRpcmVjdC5jYworK0NsaWVudFJlZGlyZWN0X2xhX0xERkxBR1MgPSAgLW1vZHVs
 ZSAtYXZvaWQtdmVyc2lvbiAtc2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3Ny
 Yy8gLWxhdHNjcHBhcGkKKysKKythbGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysKKytj
 bGVhbi1sb2NhbDoKKysJcm0gLWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9l
 eGFtcGxlcy9jbGllbnRyZXF1ZXN0L0NsaWVudFJlcXVlc3QuY2MgbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy9jbGllbnRyZXF1ZXN0L0NsaWVudFJlcXVlc3QuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL2V4
 YW1wbGVzL2NsaWVudHJlcXVlc3QvQ2xpZW50UmVxdWVzdC5jYwkxOTcwLTAxLTAxIDA4OjAwOjAw
 LjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY2xpZW50cmVxdWVz
 dC9DbGllbnRSZXF1ZXN0LmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk0NTMyNTkwICswODAwCitA
 QCAtMCwwICsxLDEzMyBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2Fy
 ZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNl
 bnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRo
 IHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHly
 aWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVu
 ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsg
 eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0
 aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKwor
 KyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAg
 VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
 LCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
 ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
 T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBM
 aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
 ZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrI2luY2x1ZGUg
 PGlvc3RyZWFtPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmg+CisrI2luY2x1
 ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS91dGlscy5o
 PgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrCisrdXNpbmcgc3RkOjpjb3V0Owor
 K3VzaW5nIHN0ZDo6ZW5kbDsKKyt1c2luZyBzdGQ6Omxpc3Q7CisrdXNpbmcgc3RkOjpzdHJpbmc7
 CisrCisrY2xhc3MgR2xvYmFsSG9va1BsdWdpbiA6IHB1YmxpYyBHbG9iYWxQbHVnaW4geworK3B1
 YmxpYzoKKysgIEdsb2JhbEhvb2tQbHVnaW4oKSB7CisrICAgIHJlZ2lzdGVySG9vayhIT09LX1JF
 QURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCk7CisrICAgIHJlZ2lzdGVySG9vayhIT09LX1JF
 QURfUkVRVUVTVF9IRUFERVJTX1BPU1RfUkVNQVApOworKyAgICByZWdpc3Rlckhvb2soSE9PS19T
 RU5EX1JFUVVFU1RfSEVBREVSUyk7CisrICB9CisrCisrCisrICB2b2lkIGhhbmRsZVJlYWRSZXF1
 ZXN0SGVhZGVyc1ByZVJlbWFwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBjb3V0
 IDw8ICJIZWxsbyBmcm9tIGhhbmRsZVJlYWRSZXF1ZXNIZWFkZXJzUHJlUmVtYXAhIiA8PCBlbmRs
 OworKworKyAgICBDbGllbnRSZXF1ZXN0ICZjbGllbnRfcmVxdWVzdCA9IHRyYW5zYWN0aW9uLmdl
 dENsaWVudFJlcXVlc3QoKTsKKysgICAgVXJsICZyZXF1ZXN0X3VybCA9IGNsaWVudF9yZXF1ZXN0
 LmdldFVybCgpOworKyAgICBjb25zdCBVcmwgJnByaXN0aW5lX3JlcXVlc3RfdXJsID0gY2xpZW50
 X3JlcXVlc3QuZ2V0UHJpc3RpbmVVcmwoKTsKKysKKysgICAgY291dCA8PCAiTWV0aG9kIGlzICIg
 PDwgSFRUUF9NRVRIT0RfU1RSSU5HU1tjbGllbnRfcmVxdWVzdC5nZXRNZXRob2QoKV0gPDwgZW5k
 bDsKKysgICAgY291dCA8PCAiVmVyc2lvbiBpcyAiIDw8IEhUVFBfVkVSU0lPTl9TVFJJTkdTW2Ns
 aWVudF9yZXF1ZXN0LmdldFZlcnNpb24oKV0gPDwgZW5kbDsKKysgICAgY291dCA8PCAiLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwor
 KyAgICBjb3V0IDw8ICJVUkwgaXMgIiA8PCByZXF1ZXN0X3VybC5nZXRVcmxTdHJpbmcoKSA8PCBl
 bmRsOworKyAgICBjb3V0IDw8ICJQYXRoIGlzICIgPDwgcmVxdWVzdF91cmwuZ2V0UGF0aCgpIDw8
 IGVuZGw7CisrICAgIGNvdXQgPDwgIlF1ZXJ5IGlzICIgPDwgcmVxdWVzdF91cmwuZ2V0UXVlcnko
 KSA8PCBlbmRsOworKyAgICBjb3V0IDw8ICJIb3N0IGlzICIgPDwgcmVxdWVzdF91cmwuZ2V0SG9z
 dCgpIDw8IGVuZGw7CisrICAgIGNvdXQgPDwgIlBvcnQgaXMgIiA8PCByZXF1ZXN0X3VybC5nZXRQ
 b3J0KCkgPDwgZW5kbDsKKysgICAgY291dCA8PCAiU2NoZW1lIGlzICIgPDwgcmVxdWVzdF91cmwu
 Z2V0U2NoZW1lKCkgPDwgZW5kbDsKKysgICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOworKyAgICBpZiAocmVxdWVz
 dF91cmwuZ2V0UGF0aCgpID09ICJyZW1hcF9tZSIpIHsKKysgICAgICByZXF1ZXN0X3VybC5zZXRQ
 YXRoKCJpbmRleC5odG1sIik7CisrICAgIH0KKysKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7
 CisrICB9CisrCisrCisrICB2b2lkIGhhbmRsZVJlYWRSZXF1ZXN0SGVhZGVyc1Bvc3RSZW1hcChU
 cmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgY291dCA8PCAiSGVsbG8gZnJvbSBoYW5k
 bGVSZWFkUmVxdWVzSGVhZGVyc1Bvc3RSZW1hcCEiIDw8IGVuZGw7CisrCisrICAgIENsaWVudFJl
 cXVlc3QgJmNsaWVudF9yZXF1ZXN0ID0gdHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpOwor
 KyAgICBVcmwgJnJlcXVlc3RfdXJsID0gY2xpZW50X3JlcXVlc3QuZ2V0VXJsKCk7CisrICAgIGNv
 bnN0IFVybCAmcHJpc3RpbmVfcmVxdWVzdF91cmwgPSBjbGllbnRfcmVxdWVzdC5nZXRQcmlzdGlu
 ZVVybCgpOworKworKyAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLVBSSVNUSU5FLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CisrICAgIGNvdXQgPDwgIlVSTCBpcyAiIDw8
 IHByaXN0aW5lX3JlcXVlc3RfdXJsLmdldFVybFN0cmluZygpIDw8IGVuZGw7CisrICAgIGNvdXQg
 PDwgIlBhdGggaXMgIiA8PCBwcmlzdGluZV9yZXF1ZXN0X3VybC5nZXRQYXRoKCkgPDwgZW5kbDsK
 KysgICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS1QT1NUIFJFTUFQLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tIiA8PCBlbmRsOworKyAgICBjb3V0IDw8ICJVUkwgaXMgIiA8PCByZXF1ZXN0X3Vy
 bC5nZXRVcmxTdHJpbmcoKSA8PCBlbmRsOworKyAgICBjb3V0IDw8ICJQYXRoIGlzICIgPDwgcmVx
 dWVzdF91cmwuZ2V0UGF0aCgpIDw8IGVuZGw7CisrICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKKysKKysgICAg
 SGVhZGVycyAmY2xpZW50X3JlcXVlc3RfaGVhZGVycyA9IGNsaWVudF9yZXF1ZXN0LmdldEhlYWRl
 cnMoKTsKKysKKysgICAgSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgaWkgPSBjbGllbnRfcmVxdWVz
 dF9oZWFkZXJzLmZpbmQoIkFjY2VwVC1FbmNvZGluRyIpOworKyAgICBpZihpaSAhPSBjbGllbnRf
 cmVxdWVzdF9oZWFkZXJzLmVuZCgpKSB7CisrICAgICAgY291dCA8PCAiRGVsZXRpbmcgYWNjZXB0
 LWVuY29kaW5nIGhlYWRlciIgPDwgZW5kbDsKKysgICAgICBjbGllbnRfcmVxdWVzdF9oZWFkZXJz
 LmVyYXNlKCJBY2NlcFQtRW5Db0RpbmciKTsgLy8gQ2FzZSBJbnNlbnNpdGl2ZQorKyAgICB9Cisr
 CisrICAgIC8vIFRoZXNlIHdpbGwgYmUgc3BsaXQgYmFjayB1cCBpbnRvIGEgbGlzdCBvZiB0aHJl
 ZSB2YWx1ZXMgYXV0b21hdGljYWxseSAoc2VlIGhlYWRlciBvdXRwdXQgYmVsb3cpLgorKyAgICBj
 b3V0IDw8ICJBZGRpbmcgYmFjayBBY2NlcHQtRW5jb2RpbmcuIiA8PCBlbmRsOworKyAgICBjbGll
 bnRfcmVxdWVzdF9oZWFkZXJzLnNldCgiYWNjZXB0LWVuY29kaW5nIiwgImd6aXAsIGlkZW50aXR5
 LCBteV9zcGVjaWFsX2Zvcm1hdCIpOworKworKyAgICBjb3V0IDw8ICJBZGRpbmcgYSBuZXcgYWNj
 ZXB0IHR5cGUgYWNjZXB0IGhlYWRlciIgPDwgZW5kbDsKKysgICAgY2xpZW50X3JlcXVlc3RfaGVh
 ZGVycy5hcHBlbmQoImFjY2VwdCIsICJ0ZXh0L2JsYWgiKTsKKysKKysgICAgZm9yIChIZWFkZXJz
 Ojpjb25zdF9pdGVyYXRvciBoZWFkZXJfaXRlciA9IGNsaWVudF9yZXF1ZXN0X2hlYWRlcnMuYmVn
 aW4oKSwKKysgICAgICAgICAgIGhlYWRlcl9lbmQgPSBjbGllbnRfcmVxdWVzdF9oZWFkZXJzLmVu
 ZCgpOyBoZWFkZXJfaXRlciAhPSBoZWFkZXJfZW5kOyArK2hlYWRlcl9pdGVyKSB7CisrICAgICAg
 Y29uc3Qgc3RyaW5nICZuYW1lID0gaGVhZGVyX2l0ZXItPmZpcnN0OworKyAgICAgIGNvbnN0IGxp
 c3Q8c3RyaW5nPiAmdmFsdWVfbGlzdCA9IGhlYWRlcl9pdGVyLT5zZWNvbmQ7CisrICAgICAgY291
 dCA8PCAiSGVhZGVyLiAiIDw8IG5hbWUgPDwgICI6ICIgPDwgZW5kbDsKKysgICAgICBmb3IgKGxp
 c3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdmFsdWVfaXRlciA9IHZhbHVlX2xpc3QuYmVnaW4o
 KSwgdmFsdWVfZW5kID0gdmFsdWVfbGlzdC5lbmQoKTsKKysgICAgICAgICAgIHZhbHVlX2l0ZXIg
 IT0gdmFsdWVfZW5kOyArK3ZhbHVlX2l0ZXIpIHsKKysgICAgICAgIGNvdXQgPDwgIlx0IiA8PCAq
 dmFsdWVfaXRlciA8PCBlbmRsOworKyAgICAgIH0KKysgICAgfQorKworKyAgICAvKgorKyAgICAg
 KiBUaGVzZSB3aWxsIG91dHB1dDoKKysgICAgICogSm9pbmluZyBvbiBhIG5vbi1leGlzdGFudCBo
 ZWFkZXIgZ2l2ZXM6CisrICAgICAqIEpvaW5pbmcgdGhlIGFjY2VwdCBlbmNvZGluZyBoZWFkZXIg
 Z2l2ZXM6IGd6aXAsaWRlbnRpdHksbXlfc3BlY2lhbF9mb3JtYXQKKysgICAgICogSm9pbmluZyB0
 aGUgYWNjZXB0IGVuY29kaW5nIGhlYWRlciB3aXRoIHNwYWNlIGdpdmVzOiBnemlwIGlkZW50aXR5
 IG15X3NwZWNpYWxfZm9ybWF0CisrICAgICAqLworKyAgICBjb3V0IDw8ICJKb2luaW5nIG9uIGEg
 bm9uLWV4aXN0YW50IGhlYWRlciBnaXZlczogIiA8PCBjbGllbnRfcmVxdWVzdF9oZWFkZXJzLmdl
 dEpvaW5lZFZhbHVlcygiaV9kb250X2V4aXN0IikgPDwgZW5kbDsKKysgICAgY291dCA8PCAiSm9p
 bmluZyB0aGUgYWNjZXB0IGVuY29kaW5nIGhlYWRlciBnaXZlczogIiA8PCBjbGllbnRfcmVxdWVz
 dF9oZWFkZXJzLmdldEpvaW5lZFZhbHVlcygiYWNjZXB0LWVuY29kaW5nIikgPDwgZW5kbDsKKysg
 ICAgY291dCA8PCAiSm9pbmluZyB0aGUgYWNjZXB0IGVuY29kaW5nIGhlYWRlciB3aXRoIHNwYWNl
 IGdpdmVzOiAiIDw8IGNsaWVudF9yZXF1ZXN0X2hlYWRlcnMuZ2V0Sm9pbmVkVmFsdWVzKCJhY2Nl
 cHQtZW5jb2RpbmciLCAnICcpIDw8IGVuZGw7CisrCisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgp
 OworKyAgfQorKworKyAgdm9pZCBoYW5kbGVTZW5kUmVxdWVzdEhlYWRlcnMoVHJhbnNhY3Rpb24g
 JnRyYW5zYWN0aW9uKSB7CisrICAgIGNvdXQgPDwgIkhlbGxvIGZyb20gaGFuZGxlU2VuZFJlcXVl
 c3RIZWFkZXJzISIgPDwgZW5kbDsKKysgICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 SVAgSU5GT1JNQVRJT04tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKKysgICAgY291dCA8PCAi
 U2VydmVyIEFkZHJlc3M6ICIgPDwgdXRpbHM6OmdldElwUG9ydFN0cmluZyh0cmFuc2FjdGlvbi5n
 ZXRTZXJ2ZXJBZGRyZXNzKCkpIDw8IGVuZGw7CisrICAgIGNvdXQgPDwgIkluY29taW5nIEFkZHJl
 c3M6ICIgPDwgdXRpbHM6OmdldElwUG9ydFN0cmluZyh0cmFuc2FjdGlvbi5nZXRJbmNvbWluZ0Fk
 ZHJlc3MoKSkgPDwgZW5kbDsKKysgICAgY291dCA8PCAiQ2xpZW50IEFkZHJlc3M6ICIgPDwgdXRp
 bHM6OmdldElwUG9ydFN0cmluZyh0cmFuc2FjdGlvbi5nZXRDbGllbnRBZGRyZXNzKCkpIDw8IGVu
 ZGw7CisrICAgIGNvdXQgPDwgIk5leHQgSG9wIEFkZHJlc3M6ICIgPDwgdXRpbHM6OmdldElwUG9y
 dFN0cmluZyh0cmFuc2FjdGlvbi5nZXROZXh0SG9wQWRkcmVzcygpKSA8PCBlbmRsOworKyAgICB0
 cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0
 KGludCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElf
 VU5VU0VEKSB7CisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IEdsb2JhbEhvb2tQbHVn
 aW4oKTsKKyt9CitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9jbGllbnRyZXF1ZXN0
 L01ha2VmaWxlLmFtIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY2xpZW50cmVxdWVzdC9NYWtlZmls
 ZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY2xpZW50cmVxdWVzdC9NYWtlZmlsZS5h
 bQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkv
 ZXhhbXBsZXMvY2xpZW50cmVxdWVzdC9NYWtlZmlsZS5hbQkyMDEzLTExLTExIDE0OjAzOjEyLjY5
 NDUzMjU5MCArMDgwMAorQEAgLTAsMCArMSwzMCBAQAorKyMKKysjICBMaWNlbnNlZCB0byB0aGUg
 QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrIyAgb3IgbW9yZSBj
 b250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrIyAg
 ZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysj
 ICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBm
 aWxlCisrIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
 ZQorKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
 bXBsaWFuY2UKKysjICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
 IHRoZSBMaWNlbnNlIGF0CisrIworKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
 ZXMvTElDRU5TRS0yLjAKKysjCisrIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyMgIGRpc3RyaWJ1dGVkIHVuZGVy
 IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrIyAgV0lU
 SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
 IG9yIGltcGxpZWQuCisrIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
 Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
 aWNlbnNlLgorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkv
 c3JjL2luY2x1ZGUgLVduby11bnVzZWQtdmFyaWFibGUKKysKKyt0YXJnZXQ9Q2xpZW50UmVxdWVz
 dC5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJSQVJJRVMg
 PSBDbGllbnRSZXF1ZXN0LmxhCisrQ2xpZW50UmVxdWVzdF9sYV9TT1VSQ0VTID0gQ2xpZW50UmVx
 dWVzdC5jYworK0NsaWVudFJlcXVlc3RfbGFfTERGTEFHUyA9ICAtbW9kdWxlIC1hdm9pZC12ZXJz
 aW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjLyAtbGF0c2NwcGFw
 aQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFyZ2V0KQorKworK2NsZWFuLWxvY2FsOgor
 KwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2N1c3Rv
 bXJlc3BvbnNlL0N1c3RvbVJlc3BvbnNlLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY3VzdG9t
 cmVzcG9uc2UvQ3VzdG9tUmVzcG9uc2UuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2N1
 c3RvbXJlc3BvbnNlL0N1c3RvbVJlc3BvbnNlLmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAw
 MDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9jdXN0b21yZXNwb25zZS9DdXN0
 b21SZXNwb25zZS5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjY5NTUzNjE5NSArMDgwMAorQEAgLTAs
 MCArMSw4MiBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFn
 cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMg
 d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNz
 IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
 d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
 IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNl
 IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrI2luY2x1ZGUgPGlvc3Ry
 ZWFtPgorKyNpbmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9HbG9iYWxQbHVn
 aW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1RyYW5zYWN0aW9uUGx1Z2luLmg+CisrI2luY2x1
 ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+CisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFw
 aTsKKysKKyt1c2luZyBzdGQ6OmNvdXQ7CisrdXNpbmcgc3RkOjplbmRsOworK3VzaW5nIHN0ZDo6
 c3RyaW5nOworKworKy8qCisrICoKKysgKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB5
 b3UgY2FuIGV4cGxvaXQgLmVycm9yKCkgdG8gc2VuZAorKyAqIGFueSByZXNwb25zZSBmcm9tIGFu
 eSBzdGF0ZSBieSBmb3JjaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHRvCisrICoganVtcCB0byB0aGUg
 ZXJyb3Igc3RhdGUuIFlvdSB3aWxsIHRoZW4gc2VuZCB5b3VyIGN1c3RvbQorKyAqIHJlc3BvbnNl
 IGluIHNlbmRSZXNwb25zZUhlYWRlcnMoKSByYXRoZXIgdGhhbiB0aGUgZXJyb3IgcGFnZS4KKysg
 KgorKyAqLworKworK2NsYXNzIEN1c3RvbVJlc3BvbnNlVHJhbnNhY3Rpb25QbHVnaW4gOiBwdWJs
 aWMgYXRzY3BwYXBpOjpUcmFuc2FjdGlvblBsdWdpbiB7CisrcHVibGljOgorKyAgQ3VzdG9tUmVz
 cG9uc2VUcmFuc2FjdGlvblBsdWdpbihUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24sIEh0dHBTdGF0
 dXMgc3RhdHVzLCBjb25zdCBzdHJpbmcgJnJlYXNvbiwgY29uc3Qgc3RyaW5nICZib2R5KQorKyAg
 ICAgOiBUcmFuc2FjdGlvblBsdWdpbih0cmFuc2FjdGlvbiksIHN0YXR1c18oc3RhdHVzKSwgcmVh
 c29uXyhyZWFzb24pLCBib2R5Xyhib2R5KSB7CisrICAgIFRyYW5zYWN0aW9uUGx1Z2luOjpyZWdp
 c3Rlckhvb2soSE9PS19TRU5EX1JFU1BPTlNFX0hFQURFUlMpOworKyAgICB0cmFuc2FjdGlvbi5l
 cnJvcihib2R5Xyk7IC8vIFNldCB0aGUgZXJyb3IgYm9keSBub3csIGFuZCBjaGFuZ2UgdGhlIHN0
 YXR1cyBhbmQgcmVhc29uIGxhdGVyLgorKyAgfQorKworKyAgdm9pZCBoYW5kbGVTZW5kUmVzcG9u
 c2VIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICB0cmFuc2FjdGlvbi5n
 ZXRDbGllbnRSZXNwb25zZSgpLnNldFN0YXR1c0NvZGUoc3RhdHVzXyk7CisrICAgIHRyYW5zYWN0
 aW9uLmdldENsaWVudFJlc3BvbnNlKCkuc2V0UmVhc29uUGhyYXNlKHJlYXNvbl8pOworKyAgICB0
 cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgfkN1c3RvbVJlc3BvbnNl
 VHJhbnNhY3Rpb25QbHVnaW4oKSB7IH0KKytwcml2YXRlOgorKyAgSHR0cFN0YXR1cyBzdGF0dXNf
 OworKyAgc3RyaW5nIHJlYXNvbl87CisrICBzdHJpbmcgYm9keV87CisrfTsKKysKKysKKytjbGFz
 cyBDbGllbnRSZWRpcmVjdEdsb2JhbFBsdWdpbiA6IHB1YmxpYyBHbG9iYWxQbHVnaW4geworK3B1
 YmxpYzoKKysgIENsaWVudFJlZGlyZWN0R2xvYmFsUGx1Z2luKCkgeworKyAgICByZWdpc3Rlckhv
 b2soSE9PS19TRU5EX1JFUVVFU1RfSEVBREVSUyk7CisrICB9CisrCisrICB2b2lkIGhhbmRsZVNl
 bmRSZXF1ZXN0SGVhZGVycyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgaWYodHJh
 bnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdldFVybCgpLmdldFF1ZXJ5KCkuZmluZCgiY3Vz
 dG9tPTEiKSAhPSBzdHJpbmc6Om5wb3MpIHsKKysgICAgICB0cmFuc2FjdGlvbi5hZGRQbHVnaW4o
 bmV3IEN1c3RvbVJlc3BvbnNlVHJhbnNhY3Rpb25QbHVnaW4odHJhbnNhY3Rpb24sIEhUVFBfU1RB
 VFVTX09LLCAiT2siLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG8hIFRoaXMgaXMgYSBjdXN0b20gcmVzcG9uc2Ug
 d2l0aG91dCBtYWtpbmcgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gb3JpZ2luIHJlcXVlc3QgYW5kIG5vIHNlcnZl
 ciBpbnRlcmNlcHQuIikpOworKyAgICAgIHJldHVybjsgLy8gZG9udCBmb3JnZXQgdG8gcmV0dXJu
 IHNpbmNlIHRoZSBDdXN0b21SZXNwb25zZSBjYWxsIHdpbGwgY2FsbCAuZXJyb3IoKS4KKysgICAg
 fQorKyAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKyt9OworKworK3ZvaWQgVFNQ
 bHVnaW5Jbml0KGludCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBB
 VFNDUFBBUElfVU5VU0VEKSB7CisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IENsaWVu
 dFJlZGlyZWN0R2xvYmFsUGx1Z2luKCk7CisrfQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhh
 bXBsZXMvY3VzdG9tcmVzcG9uc2UvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9j
 dXN0b21yZXNwb25zZS9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvY3Vz
 dG9tcmVzcG9uc2UvTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4
 MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2N1c3RvbXJlc3BvbnNlL01ha2VmaWxlLmFt
 CTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk1NTM2MTk1ICswODAwCitAQCAtMCwwICsxLDI5IEBACisr
 IworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1
 bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNl
 ZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRk
 aXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAg
 VGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBM
 aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
 IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZ
 b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAgICAgIGh0dHA6
 Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBVbmxlc3MgcmVx
 dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
 CisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
 IkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
 TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhlIExpY2Vuc2Ug
 Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrIyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3Ny
 Y2RpcikvbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZSAtV25vLXVudXNlZC12YXJpYWJsZQorKwor
 K3RhcmdldD1DdXN0b21SZXNwb25zZS5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0K
 Kytwa2dsaWJfTFRMSUJSQVJJRVMgPSBDdXN0b21SZXNwb25zZS5sYQorK0N1c3RvbVJlc3BvbnNl
 X2xhX1NPVVJDRVMgPSBDdXN0b21SZXNwb25zZS5jYworK0N1c3RvbVJlc3BvbnNlX2xhX0xERkxB
 R1MgPSAgLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtc2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIv
 YXRzY3BwYXBpL3NyYy8gLWxhdHNjcHBhcGkKKysKKythbGw6CisrCWxuIC1zZiAubGlicy8kKHRh
 cmdldCkKKysKKytjbGVhbi1sb2NhbDoKKysJcm0gLWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGli
 L2F0c2NwcGFwaS9leGFtcGxlcy9kYXRhX2NhY2hpbmcvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy9kYXRhX2NhY2hpbmcvTWFrZWZpbGUuYW0KKy0tLSBsaWIvYXRzY3BwYXBpL2V4
 YW1wbGVzL2RhdGFfY2FjaGluZy9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAw
 MDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvZGF0YV9jYWNoaW5nL01ha2Vm
 aWxlLmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk1NTM2MTk1ICswODAwCitAQCAtMCwwICsxLDM0
 IEBACisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAo
 QVNGKSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50
 cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBm
 b3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJz
 aGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhlIEFw
 YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBu
 b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExpY2Vu
 c2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBVbmxl
 c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
 ZnR3YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
 b24gYW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
 UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhlIExp
 Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
 CisrIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrQU1fQ1BQRkxBR1MgPSAgIC1J
 JCh0b3BfYnVpbGRkaXIpL3Byb3h5L2FwaSBcCisrICAtSSQodG9wX3NyY2RpcikvcHJveHkvYXBp
 IFwKKysgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYi90cyBcCisrICAtSSQodG9wX3NyY2RpcikvbGli
 L3RzIFwKKysgIC1JJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlIFwKKysg
 IC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrICAKKyt0YXJnZXQ9ZGF0YV9jYWNoaW5nLnNvCisrcGtn
 bGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xpYl9MVExJQlJBUklFUyA9IGRhdGFfY2Fj
 aGluZy5sYQorK2RhdGFfY2FjaGluZ19sYV9TT1VSQ0VTID0gZGF0YV9jYWNoaW5nLmNjCisrZGF0
 YV9jYWNoaW5nX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwk
 KHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjLyAtbGF0c2NwcGFwaQorKworK2FsbDoKKysJ
 bG4gLXNmIC5saWJzLyQodGFyZ2V0KQorKworK2NsZWFuLWxvY2FsOgorKwlybSAtZiAkKHRhcmdl
 dCkKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2RhdGFfY2FjaGluZy9kYXRhX2Nh
 Y2hpbmcuY2MgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9kYXRhX2NhY2hpbmcvZGF0YV9jYWNoaW5n
 LmNjCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9kYXRhX2NhY2hpbmcvZGF0YV9jYWNoaW5n
 LmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy9kYXRhX2NhY2hpbmcvZGF0YV9jYWNoaW5nLmNjCTIwMTMtMTEtMTEgMTQ6MDM6
 MTIuNjk1NTM2MTk1ICswODAwCitAQCAtMCwwICsxLDk4IEBACisrLyoqCisrICBMaWNlbnNlZCB0
 byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBt
 b3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUK
 KysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9u
 CisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhp
 cyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
 dGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
 b21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
 IHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
 L0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
 YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUg
 TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBX
 QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
 cGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
 cm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
 KysgKi8KKysKKysjaW5jbHVkZSA8aW9zdHJlYW0+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2lu
 Y2x1ZGUgPGF0c2NwcGFwaS9HbG9iYWxQbHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0Ns
 aWVudFJlcXVlc3QuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL3V0aWxzLmg+CisrCisrI2luY2x1
 ZGUgPHRzL3RzLmg+CisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFwaTsKKyt1c2luZyBuYW1l
 c3BhY2Ugc3RkOworKworK25hbWVzcGFjZSB7CisrCisrY29uc3Qgc3RyaW5nIFNQRUNJQUxfSEVB
 REVSKCJTcGVjaWFsLUhlYWRlciIpOworKworK30KKysKKytjbGFzcyBHbG9iYWxIb29rUGx1Z2lu
 IDogcHVibGljIEdsb2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgR2xvYmFsSG9va1BsdWdpbigp
 IHsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfUkVBRF9SRVFVRVNUX0hFQURFUlNfUFJFX1JFTUFQ
 KTsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTKTsKKysgIH0K
 KysKKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQcmVSZW1hcChUcmFu
 c2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgY291dCA8PCAiSGVsbG8gZnJvbSBoYW5kbGVS
 ZWFkUmVxdWVzSGVhZGVyc1ByZVJlbWFwISIgPDwgZW5kbDsKKysgICAgY2hlY2tGb3JTcGVjaWFs
 SGVhZGVyKHRyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRIZWFkZXJzKCkpOworKyAg
 ICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVT
 ZW5kUmVzcG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBjb3V0
 IDw8ICJIZWxsbyBmcm9tIGhhbmRsZVNlbmRSZXNwb25zZUhlYWRlcnMhIiA8PCBlbmRsOworKyAg
 ICBjaGVja0ZvclNwZWNpYWxIZWFkZXIodHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdl
 dEhlYWRlcnMoKSk7CisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAgfQorKworK3ByaXZh
 dGU6CisrICB2b2lkIGNoZWNrRm9yU3BlY2lhbEhlYWRlcihjb25zdCBIZWFkZXJzICZoZWFkZXJz
 KSB7CisrICAgIEhlYWRlcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBoZWFkZXJzLmZpbmQoU1BF
 Q0lBTF9IRUFERVIpOworKyAgICBpZiAoaXRlciA9PSBoZWFkZXJzLmVuZCgpKSB7CisrICAgICAg
 Y291dCA8PCAiU3BlY2lhbCBoZWFkZXIgaXMgYWJzZW50IiA8PCBlbmRsOworKyAgICB9IGVsc2Ug
 eworKyAgICAgIGNvdXQgPDwgIlNwZWNpYWwgaGVhZGVyIGlzIHByZXNlbnQgd2l0aCB2YWx1ZSAi
 IDw8IGl0ZXItPnNlY29uZC5mcm9udCgpIDw8IGVuZGw7CisrICAgIH0KKysgIH0KKyt9OworKwor
 K25hbWVzcGFjZSB7CisrCisraW50IGhhbmRsZVBvc3RSZW1hcChUU0NvbnQgY29udCBBVFNDUFBB
 UElfVU5VU0VELCBUU0V2ZW50IGV2ZW50IEFUU0NQUEFQSV9VTlVTRUQsIHZvaWQgKmVkYXRhKSB7
 CisrICBUU0h0dHBUeG4gdHhuID0gc3RhdGljX2Nhc3Q8VFNIdHRwVHhuPihlZGF0YSk7CisrICBU
 U01CdWZmZXIgaGRyX2J1ZjsKKysgIFRTTUxvYyBoZHJfbG9jLCBmaWVsZF9sb2M7CisrICBUU0h0
 dHBUeG5DbGllbnRSZXFHZXQodHhuLCAmaGRyX2J1ZiwgJmhkcl9sb2MpOworKyAgaW50IG51bGxU
 ZXJtaW5hdGVkU3RyaW5nTGVuZ3RoID0gLTE7CisrICBUU01pbWVIZHJGaWVsZENyZWF0ZU5hbWVk
 KGhkcl9idWYsIGhkcl9sb2MsIFNQRUNJQUxfSEVBREVSLmNfc3RyKCksIG51bGxUZXJtaW5hdGVk
 U3RyaW5nTGVuZ3RoLCAmZmllbGRfbG9jKTsKKysgIGNvbnN0IGNoYXIgKnZhbHVlID0gImZvbyI7
 CisrICBpbnQgaW5zZXJ0QXRCZWdpbm5pbmdJbmRleCA9IDA7CisrICBUU01pbWVIZHJGaWVsZFZh
 bHVlU3RyaW5nSW5zZXJ0KGhkcl9idWYsIGhkcl9sb2MsIGZpZWxkX2xvYywgaW5zZXJ0QXRCZWdp
 bm5pbmdJbmRleCwgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
 bGxUZXJtaW5hdGVkU3RyaW5nTGVuZ3RoKTsKKysgIFRTTWltZUhkckZpZWxkQXBwZW5kKGhkcl9i
 dWYsIGhkcl9sb2MsIGZpZWxkX2xvYyk7CisrICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGhkcl9idWYs
 IGhkcl9sb2MsIGZpZWxkX2xvYyk7CisrICBUU01Mb2MgaGRyX2xvY19udWxsX3BhcmVudCA9IE5V
 TEw7CisrICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGhkcl9idWYsIGhkcl9sb2NfbnVsbF9wYXJlbnQs
 IGhkcl9sb2MpOworKyAgVFNIdHRwVHhuUmVlbmFibGUodHhuLCBUU19FVkVOVF9IVFRQX0NPTlRJ
 TlVFKTsKKysgIHJldHVybiAwOworK30KKysKKyt9CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50
 IGFyZ2MgQVRTQ1BQQVBJX1VOVVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVT
 RUQpIHsKKysgIGludCBkb19vdmVyd3JpdGUgPSAxOworKyAgc2V0ZW52KHV0aWxzOjpESVNBQkxF
 X0RBVEFfQ0FDSElOR19FTlZfRkxBRy5jX3N0cigpLCAidHJ1ZSIsIGRvX292ZXJ3cml0ZSk7Cisr
 CisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IEdsb2JhbEhvb2tQbHVnaW4oKTsKKysK
 KysgIFRTTXV0ZXggbnVsbE11dGV4ID0gTlVMTDsKKysgIFRTQ29udCBnbG9iYWxDb250ID0gVFND
 b250Q3JlYXRlKGhhbmRsZVBvc3RSZW1hcCwgbnVsbE11dGV4KTsKKysgIFRTSHR0cEhvb2tBZGQo
 VFNfSFRUUF9QT1NUX1JFTUFQX0hPT0ssIGdsb2JhbENvbnQpOworK30KK2RpZmYgLXJ1TiBsaWIv
 YXRzY3BwYXBpL2V4YW1wbGVzL2RldGFjaGVkcmVxdWVzdC9EZXRhY2hlZFJlcXVlc3QuY2MgbGli
 L2F0c2NwcGFwaS9leGFtcGxlcy9kZXRhY2hlZHJlcXVlc3QvRGV0YWNoZWRSZXF1ZXN0LmNjCist
 LS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9kZXRhY2hlZHJlcXVlc3QvRGV0YWNoZWRSZXF1ZXN0
 LmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy9kZXRhY2hlZHJlcXVlc3QvRGV0YWNoZWRSZXF1ZXN0LmNjCTIwMTMtMTEtMTEg
 MTQ6MDM6MTIuNjk1NTM2MTk1ICswODAwCitAQCAtMCwwICsxLDY5IEBACisrLyoqCisrICBMaWNl
 bnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisr
 ICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNF
 IGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9y
 bWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5z
 ZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
 IDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
 dCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBj
 b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
 Y2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
 YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRl
 ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lU
 SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
 IG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
 ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
 ZW5zZS4KKysgKi8KKysKKysjaW5jbHVkZSA8YXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oPgorKyNp
 bmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvTG9n
 Z2VyLmg+CisrCisrdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyt1c2luZyBuYW1lc3BhY2UgYXRzY3Bw
 YXBpOworKworKyNkZWZpbmUgTE9HX1RBRyAiZGV0YWNoZWRyZXF1ZXN0IgorKworK2NsYXNzIEds
 b2JhbEhvb2tQbHVnaW4gOiBwdWJsaWMgR2xvYmFsUGx1Z2luIHsKKytwdWJsaWM6CisrICBHbG9i
 YWxIb29rUGx1Z2luKCkgeworKyAgICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFUVVFU1RfSEVB
 REVSU19QUkVfUkVNQVApOworKyAgfQorKyAgdm9pZCBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQ
 cmVSZW1hcChUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgc3RyaW5nIHVybF9zdHIo
 Imh0dHA6Ly93d3cubGlua2VkaW4uY29tLyIpOworKyAgICBSZXF1ZXN0IGRldGFjaGVkX3JlcXVl
 c3QodXJsX3N0cik7CisrICAgIFVybCAmdXJsID0gZGV0YWNoZWRfcmVxdWVzdC5nZXRVcmwoKTsK
 KysgICAgVFNfREVCVUcoTE9HX1RBRywgIk1ldGhvZCBpcyBbJXNdLCB1cmwgaXMgWyVzXSwgdmVy
 c2lvbiBpcyBbJXNdIiwKKysgICAgICAgICAgICAgSFRUUF9NRVRIT0RfU1RSSU5HU1tkZXRhY2hl
 ZF9yZXF1ZXN0LmdldE1ldGhvZCgpXS5jX3N0cigpLAorKyAgICAgICAgICAgICBkZXRhY2hlZF9y
 ZXF1ZXN0LmdldFVybCgpLmdldFVybFN0cmluZygpLmNfc3RyKCksCisrICAgICAgICAgICAgIEhU
 VFBfVkVSU0lPTl9TVFJJTkdTW2RldGFjaGVkX3JlcXVlc3QuZ2V0VmVyc2lvbigpXS5jX3N0cigp
 KTsKKysKKysgICAgSGVhZGVycyAmZGV0YWNoZWRfcmVxdWVzdF9oZWFkZXJzID0gZGV0YWNoZWRf
 cmVxdWVzdC5nZXRIZWFkZXJzKCk7CisrICAgIFRTX0RFQlVHKExPR19UQUcsICJIZWFkZXJzIGJl
 Zm9yZSBhZGRzIik7CisrICAgIHByaW50SGVhZGVycyhkZXRhY2hlZF9yZXF1ZXN0X2hlYWRlcnMp
 OworKworKyAgICBkZXRhY2hlZF9yZXF1ZXN0X2hlYWRlcnMuc2V0KCJIZWFkZXIxIiwgInZhbHVl
 MSIpOworKyAgICBkZXRhY2hlZF9yZXF1ZXN0X2hlYWRlcnMuYXBwZW5kKCJIZWFkZXIxIiwgInZh
 bHVlMiIpOworKyAgICBkZXRhY2hlZF9yZXF1ZXN0X2hlYWRlcnMuc2V0KCJIZWFkZXIyIiwgInZh
 bHVlMSIpOworKyAgICBUU19ERUJVRyhMT0dfVEFHLCAiSGVhZGVycyBhZnRlciBhZGRzIik7Cisr
 ICAgIHByaW50SGVhZGVycyhkZXRhY2hlZF9yZXF1ZXN0X2hlYWRlcnMpOworKworKyAgICBkZXRh
 Y2hlZF9yZXF1ZXN0X2hlYWRlcnMuZXJhc2UoIkhlYWRlcjEiKTsKKysgICAgVFNfREVCVUcoTE9H
 X1RBRywgIkhlYWRlcnMgYWZ0ZXIgZXJhc2UiKTsKKysgICAgcHJpbnRIZWFkZXJzKGRldGFjaGVk
 X3JlcXVlc3RfaGVhZGVycyk7CisrCisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAgfQor
 K3ByaXZhdGU6CisrICB2b2lkIHByaW50SGVhZGVycyhjb25zdCBIZWFkZXJzICZoZWFkZXJzKSB7
 CisrICAgIGZvciAoSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGhlYWRlcnMuYmVnaW4o
 KSwgZW5kID0gaGVhZGVycy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworKyAgICAgIFRT
 X0RFQlVHKExPR19UQUcsICJIZWFkZXIgWyVzXSBoYXMgdmFsdWVzIFslc10iLCBpdGVyLT5maXJz
 dC5jX3N0cigpLAorKyAgICAgICAgICAgICAgIEhlYWRlcnM6OmdldEpvaW5lZFZhbHVlcyhpdGVy
 LT5zZWNvbmQpLmNfc3RyKCkpOworKyAgICB9CisrICB9CisrfTsKKysKKyt2b2lkIFRTUGx1Z2lu
 SW5pdChpbnQgYXJnYyBBVFNDUFBBUElfVU5VU0VELCBjb25zdCBjaGFyICphcmd2W10gQVRTQ1BQ
 QVBJX1VOVVNFRCkgeworKyAgR2xvYmFsUGx1Z2luICppbnN0YW5jZSA9IG5ldyBHbG9iYWxIb29r
 UGx1Z2luKCk7CisrfQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvZGV0YWNoZWRy
 ZXF1ZXN0L01ha2VmaWxlLmFtIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvZGV0YWNoZWRyZXF1ZXN0
 L01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9kZXRhY2hlZHJlcXVlc3Qv
 TWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIv
 YXRzY3BwYXBpL2V4YW1wbGVzL2RldGFjaGVkcmVxdWVzdC9NYWtlZmlsZS5hbQkyMDEzLTExLTEx
 IDE0OjAzOjEyLjY5NTUzNjE5NSArMDgwMAorQEAgLTAsMCArMSwzMCBAQAorKyMKKysjICBMaWNl
 bnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisr
 IyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElD
 RSBmaWxlCisrIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5m
 b3JtYXRpb24KKysjICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGlj
 ZW5zZXMgdGhpcyBmaWxlCisrIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
 c2lvbiAyLjAgKHRoZQorKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
 ZXhjZXB0IGluIGNvbXBsaWFuY2UKKysjICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRh
 aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrIworKyMgICAgICBodHRwOi8vd3d3LmFwYWNo
 ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysjCisrIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
 cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyMgIGRpc3Ry
 aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
 SVMsCisrIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
 dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
 Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyMgIGxpbWl0YXRpb25z
 IHVuZGVyIHRoZSBMaWNlbnNlLgorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2xp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUgLVduby11bnVzZWQtdmFyaWFibGUKKysKKyt0YXJnZXQ9
 RGV0YWNoZWRSZXF1ZXN0LnNvCisrcGtnbGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xp
 Yl9MVExJQlJBUklFUyA9IERldGFjaGVkUmVxdWVzdC5sYQorK0RldGFjaGVkUmVxdWVzdF9sYV9T
 T1VSQ0VTID0gRGV0YWNoZWRSZXF1ZXN0LmNjCisrRGV0YWNoZWRSZXF1ZXN0X2xhX0xERkxBR1Mg
 PSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9hdHNj
 cHBhcGkvc3JjLyAtbGF0c2NwcGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFyZ2V0
 KQorKworK2NsZWFuLWxvY2FsOgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIvYXRz
 Y3BwYXBpL2V4YW1wbGVzL2dsb2JhbGhvb2svR2xvYmFsSG9va1BsdWdpbi5jYyBsaWIvYXRzY3Bw
 YXBpL2V4YW1wbGVzL2dsb2JhbGhvb2svR2xvYmFsSG9va1BsdWdpbi5jYworLS0tIGxpYi9hdHNj
 cHBhcGkvZXhhbXBsZXMvZ2xvYmFsaG9vay9HbG9iYWxIb29rUGx1Z2luLmNjCTE5NzAtMDEtMDEg
 MDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9nbG9i
 YWxob29rL0dsb2JhbEhvb2tQbHVnaW4uY2MJMjAxMy0xMS0xMSAxNDowMzoxMi42OTU1MzYxOTUg
 KzA4MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUg
 U29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0
 b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0
 ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGlu
 ZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRv
 IHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNl
 bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysg
 IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
 YXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
 KysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
 d3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
 c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
 Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNl
 ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
 aW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKworKyNp
 bmNsdWRlIDxpb3N0cmVhbT4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oPgor
 KyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKworK3VzaW5nIG5hbWVzcGFjZSBh
 dHNjcHBhcGk7CisrCisrY2xhc3MgR2xvYmFsSG9va1BsdWdpbiA6IHB1YmxpYyBHbG9iYWxQbHVn
 aW4geworK3B1YmxpYzoKKysgIEdsb2JhbEhvb2tQbHVnaW4oKSB7CisrICAgIHJlZ2lzdGVySG9v
 ayhIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCk7CisrICB9CisrCisrICB2aXJ0
 dWFsIHZvaWQgaGFuZGxlUmVhZFJlcXVlc3RIZWFkZXJzUHJlUmVtYXAoVHJhbnNhY3Rpb24gJnRy
 YW5zYWN0aW9uKSB7CisrICAgIHN0ZDo6Y291dCA8PCAiSGVsbG8gZnJvbSBoYW5kbGVSZWFkUmVx
 dWVzSGVhZGVyc1ByZVJlbWFwISIgPDwgc3RkOjplbmRsOworKyAgICB0cmFuc2FjdGlvbi5yZXN1
 bWUoKTsKKysgIH0KKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0KGludCBhcmdjIEFUU0NQUEFQ
 SV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElfVU5VU0VEKSB7CisrICBHbG9i
 YWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IEdsb2JhbEhvb2tQbHVnaW4oKTsKKyt9CisrCisrCitk
 aWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9nbG9iYWxob29rL01ha2VmaWxlLmFtIGxp
 Yi9hdHNjcHBhcGkvZXhhbXBsZXMvZ2xvYmFsaG9vay9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNj
 cHBhcGkvZXhhbXBsZXMvZ2xvYmFsaG9vay9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAw
 LjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvZ2xvYmFsaG9vay9N
 YWtlZmlsZS5hbQkyMDEzLTExLTExIDE0OjAzOjEyLjY5NTUzNjE5NSArMDgwMAorQEAgLTAsMCAr
 MSwyOSBAQAorKyMKKysjICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRp
 b24gKEFTRikgdW5kZXIgb25lCisrIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVl
 bWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdv
 cmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysjICByZWdhcmRpbmcgY29weXJpZ2h0IG93
 bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrIyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyMgICJMaWNlbnNlIik7IHlvdSBt
 YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysjICB3aXRoIHRoZSBM
 aWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrIworKyMg
 ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysjCisrIyAg
 VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
 LCBzb2Z0d2FyZQorKyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
 dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
 VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrIyAgU2VlIHRo
 ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
 IGFuZAorKyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorK0FNX0NQUEZMQUdTID0g
 LUkkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUgLVduby11bnVzZWQtdmFy
 aWFibGUKKysKKyt0YXJnZXQ9R2xvYmFsSG9va1BsdWdpbi5zbworK3BrZ2xpYmRpciA9ICR7cGtn
 bGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJSQVJJRVMgPSBHbG9iYWxIb29rUGx1Z2luLmxhCisr
 R2xvYmFsSG9va1BsdWdpbl9sYV9TT1VSQ0VTID0gR2xvYmFsSG9va1BsdWdpbi5jYworK0dsb2Jh
 bEhvb2tQbHVnaW5fbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLXNoYXJlZCAt
 TCQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRzY3BwYXBpCisrCisrYWxsOgor
 KwlsbiAtc2YgLmxpYnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9jYWw6CisrCXJtIC1mICQodGFy
 Z2V0KQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvZ3ppcF90cmFuc2Zvcm1hdGlv
 bi9HemlwVHJhbnNmb3JtYXRpb25QbHVnaW4uY2MgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9nemlw
 X3RyYW5zZm9ybWF0aW9uL0d6aXBUcmFuc2Zvcm1hdGlvblBsdWdpbi5jYworLS0tIGxpYi9hdHNj
 cHBhcGkvZXhhbXBsZXMvZ3ppcF90cmFuc2Zvcm1hdGlvbi9HemlwVHJhbnNmb3JtYXRpb25QbHVn
 aW4uY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3Bw
 YXBpL2V4YW1wbGVzL2d6aXBfdHJhbnNmb3JtYXRpb24vR3ppcFRyYW5zZm9ybWF0aW9uUGx1Z2lu
 LmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk2NTMyNjUyICswODAwCitAQCAtMCwwICsxLDE3MCBA
 QAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChB
 U0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMu
 ICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3Ig
 YWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAu
 ICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUg
 TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
 IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlv
 dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93
 d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVk
 IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAg
 ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
 IiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
 LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
 c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlv
 bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNp
 bmNsdWRlIDxhdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9U
 cmFuc2FjdGlvblBsdWdpbi5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25Q
 bHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0d6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24u
 aD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0d6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24uaD4KKysj
 aW5jbHVkZSA8YXRzY3BwYXBpL1BsdWdpbkluaXQuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0xv
 Z2dlci5oPgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgbmFtZXNwYWNl
 IGF0c2NwcGFwaTo6dHJhbnNmb3JtYXRpb25zOworK3VzaW5nIHN0ZDo6c3RyaW5nOworKworKyNk
 ZWZpbmUgVEFHICJnemlwX3RyYW5zZm9ybWF0aW9uIgorKworKy8qCisrICogTm90ZSwgdGhlIEd6
 aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24gYW5kIEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24gZG8g
 bm90CisrICogY2hlY2sgaGVhZGVycyB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRlbnQgd2FzIGd6
 aXBlZCBhbmQgaXQgZG9lc24ndCBjaGVjaworKyAqIGhlYWRlcnMgdG8gbWFrZSBzdXJlIHRoZSBj
 bGllbnQgc3VwcG9ydHMgZ3ppcCwgdGhpcyBpcyBlbnRpcmVseSB1cCB0byB0aGUgcGx1Z2luCisr
 ICogdG8gdmVyaWZ5IHRoYXQgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaXMgZ3ppcHBlZCwgaXQncyBh
 bHNvIHVwIHRvIHRoZSBjbGllbnQKKysgKiB0byBtYWtlIHN1cmUgdGhlIHVzZXIncyBhY2NlcHQt
 ZW5jb2Rpbmcgc3VwcG9ydHMgZ3ppcC4KKysgKgorKyAqIFJlYWQgdGhpcyBleGFtcGxlIHZlcnkg
 Y2FyZWZ1bGx5LCBpbiB0aGlzIGV4YW1wbGUgd2UgbW9kaWZ5IHRoZSBBY2NlcHQtRW5jb2RpbmcK
 KysgKiBoZWFkZXIgdG8gdGhlIG9yaWdpbiB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIGJlIHJldHVy
 bmVkIGd6aXBwZWQgb3IgaWRlbnRpdHkgZW5jb2RpbmcKKysgKiBjb250ZW50LiBJZiB3ZSByZWNl
 aXZlIGd6aXBwZWQgY29udGVudCB3ZSB3aWxsIGluZmxhdGUgaXQsIHdlIHdpbGwgYXBwbHkgb3Vy
 IHRyYW5zZm9ybWF0aW9uCisrICogYW5kIGlmIHRoZSBjbGllbnQgc3VwcG9ydHMgZ3ppcCB3ZSB3
 aWxsIGRlZmxhdGUgdGhlIGNvbnRlbnQgdGhhdCB3ZSB0cmFuc2Zvcm1lZC4gRmluYWxseSwKKysg
 KiBpZiB0aGUgdXNlciBzdXBwb3J0ZWQgZ3ppcCAodGhlbiB0aGV5IGdvdCBnemlwKSBhbmQgd2Ug
 bXVzdCBtYWtlIHN1cmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcKKysgKiBoZWFkZXIgaXMgY29ycmVj
 dGx5IHNldCBvbiB0aGUgd2F5IG91dC4KKysgKi8KKysKKytjbGFzcyBIZWxwZXJzIHsKKytwdWJs
 aWM6CisrICBzdGF0aWMgYm9vbCBjbGllbnRBY2NlcHRzR3ppcChUcmFuc2FjdGlvbiAmdHJhbnNh
 Y3Rpb24pIHsKKysgICAgcmV0dXJuIHRyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRI
 ZWFkZXJzKCkuZ2V0Sm9pbmVkVmFsdWVzKCJBY2NlcHQtRW5jb2RpbmciKS5maW5kKCJnemlwIikg
 IT0gc3RyaW5nOjpucG9zOworKyAgfQorKworKyAgc3RhdGljIGJvb2wgc2VydmVyUmV0dXJuZWRH
 emlwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICByZXR1cm4gdHJhbnNhY3Rpb24u
 Z2V0U2VydmVyUmVzcG9uc2UoKS5nZXRIZWFkZXJzKCkuZ2V0Sm9pbmVkVmFsdWVzKCJDb250ZW50
 LUVuY29kaW5nIikuZmluZCgiZ3ppcCIpICE9IHN0cmluZzo6bnBvczsKKysgIH0KKysKKysgIGVu
 dW0gQ29udGVudFR5cGUgeyBVTktOT1dOID0gMCwgVEVYVF9IVE1MICA9IDEsIFRFWFRfUExBSU4g
 PSAyIH07CisrCisrICBzdGF0aWMgQ29udGVudFR5cGUgZ2V0Q29udGVudFR5cGUoVHJhbnNhY3Rp
 b24gJnRyYW5zYWN0aW9uKSB7CisrICAgIGlmICh0cmFuc2FjdGlvbi5nZXRTZXJ2ZXJSZXNwb25z
 ZSgpLmdldEhlYWRlcnMoKS5nZXRKb2luZWRWYWx1ZXMoIkNvbnRlbnQtVHlwZSIpLmZpbmQoInRl
 eHQvaHRtbCIpICE9IHN0cmluZzo6bnBvcykgeworKyAgICAgIHJldHVybiBURVhUX0hUTUw7Cisr
 ICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24uZ2V0U2VydmVyUmVzcG9uc2UoKS5nZXRIZWFkZXJz
 KCkuZ2V0Sm9pbmVkVmFsdWVzKCJDb250ZW50LVR5cGUiKS5maW5kKCJ0ZXh0L3BsYWluIikgIT0g
 c3RyaW5nOjpucG9zKSB7CisrICAgICAgcmV0dXJuIFRFWFRfUExBSU47CisrICAgIH0gZWxzZSB7
 CisrICAgICAgcmV0dXJuIFVOS05PV047CisrICAgIH0KKysgIH0KKyt9OworKworK2NsYXNzIFNv
 bWVUcmFuc2Zvcm1hdGlvblBsdWdpbiA6IHB1YmxpYyBUcmFuc2Zvcm1hdGlvblBsdWdpbiB7Cisr
 cHVibGljOgorKyAgU29tZVRyYW5zZm9ybWF0aW9uUGx1Z2luKFRyYW5zYWN0aW9uICZ0cmFuc2Fj
 dGlvbikKKysgICAgOiBUcmFuc2Zvcm1hdGlvblBsdWdpbih0cmFuc2FjdGlvbiwgUkVTUE9OU0Vf
 VFJBTlNGT1JNQVRJT04pLCB0cmFuc2FjdGlvbl8odHJhbnNhY3Rpb24pIHsKKysgICAgcmVnaXN0
 ZXJIb29rKEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTKTsKKysgIH0KKysKKysgIHZvaWQgaGFu
 ZGxlU2VuZFJlc3BvbnNlSGVhZGVycyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAg
 VFNfREVCVUcoVEFHLCAiQWRkZWQgWC1Db250ZW50LVRyYW5zZm9ybWVkIGhlYWRlciIpOworKyAg
 ICB0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXNwb25zZSgpLmdldEhlYWRlcnMoKS5zZXQoIlgtQ29u
 dGVudC1UcmFuc2Zvcm1lZCIsICIxIik7CisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAg
 fQorKworKyAgdm9pZCBjb25zdW1lKGNvbnN0IHN0cmluZyAmZGF0YSkgeworKyAgICBwcm9kdWNl
 KGRhdGEpOworKyAgfQorKworKyAgdm9pZCBoYW5kbGVJbnB1dENvbXBsZXRlKCkgeworKyAgICBI
 ZWxwZXJzOjpDb250ZW50VHlwZSBjb250ZW50X3R5cGUgPSBIZWxwZXJzOjpnZXRDb250ZW50VHlw
 ZSh0cmFuc2FjdGlvbl8pOworKyAgICBpZiAoY29udGVudF90eXBlID09IEhlbHBlcnM6OlRFWFRf
 SFRNTCkgeworKyAgICAgIFRTX0RFQlVHKFRBRywgIkFkZGluZyBhbiBIVE1MIGNvbW1lbnQgYXQg
 dGhlIGVuZCBvZiB0aGUgcGFnZSIpOworKyAgICAgIHByb2R1Y2UoIlxuPGJyIC8+PCEtLSBHemlw
 IFRyYW5zZm9ybWF0aW9uIFBsdWdpbiBXYXMgSGVyZSAtLT4iKTsKKysgICAgfSBlbHNlIGlmIChj
 b250ZW50X3R5cGUgPT0gSGVscGVyczo6VEVYVF9QTEFJTikgeworKyAgICAgIFRTX0RFQlVHKFRB
 RywgIkFkZGluZyBhIHRleHQgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlIik7CisrICAg
 ICAgcHJvZHVjZSgiXG5HemlwIFRyYW5zZm9ybWF0aW9uIFBsdWdpbiBXYXMgSGVyZSIpOworKyAg
 ICB9IGVsc2UgeworKyAgICAgIFRTX0RFQlVHKFRBRywgIlVuYWJsZSB0byBhZGQgVEVYVCBvciBI
 VE1MIGNvbW1lbnQgYmVjYXVzZSBjb250ZW50IHR5cGUgd2FzIG5vdCB0ZXh0L2h0bWwgb3IgdGV4
 dC9wbGFpbi4iKTsKKysgICAgfQorKyAgICBzZXRPdXRwdXRDb21wbGV0ZSgpOworKyAgfQorKwor
 KyAgdmlydHVhbCB+U29tZVRyYW5zZm9ybWF0aW9uUGx1Z2luKCkgeyB9CisrcHJpdmF0ZToKKysg
 IFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbl87CisrfTsKKysKKytjbGFzcyBHbG9iYWxIb29rUGx1
 Z2luIDogcHVibGljIEdsb2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgR2xvYmFsSG9va1BsdWdp
 bigpIHsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVFVRVNUX0hFQURFUlMpOworKyAg
 ICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFU1BPTlNFX0hFQURFUlMpOworKyAgICByZWdpc3Rl
 ckhvb2soSE9PS19TRU5EX1JFU1BPTlNFX0hFQURFUlMpOworKyAgfQorKworKyAgdmlydHVhbCB2
 b2lkIGhhbmRsZVNlbmRSZXF1ZXN0SGVhZGVycyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsK
 KysgICAgLy8gU2luY2Ugd2UgY2FuIG9ubHkgZGVjb21wcmVzcyBnemlwIHdlIHdpbGwgY2hhbmdl
 IHRoZSBhY2NlcHQgZW5jb2RpbmcgaGVhZGVyCisrICAgIC8vIHRvIGd6aXAsIGV2ZW4gaWYgdGhl
 IHVzZXIgY2Fubm90IGFjY2VwdCBnemlwZWQgY29udGVudCB3ZSB3aWxsIHJldHVybiB0byB0aGVt
 CisrICAgIC8vIHVuY29tcHJlc3NlZCBjb250ZW50IGluIHRoYXQgY2FzZSBzaW5jZSB3ZSBoYXZl
 IHRvIGJlIGFibGUgdG8gdHJhbnNmb3JtIHRoZSBjb250ZW50LgorKyAgICBzdHJpbmcgb3JpZ2lu
 YWxfYWNjZXB0X2VuY29kaW5nID0gdHJhbnNhY3Rpb24uZ2V0U2VydmVyUmVxdWVzdCgpLmdldEhl
 YWRlcnMoKS5nZXRKb2luZWRWYWx1ZXMoIkFjY2VwdC1FbmNvZGluZyIpOworKworKyAgICAvLyBN
 YWtlIHN1cmUgaXQncyBkb25lIG9uIHRoZSBzZXJ2ZXIgcmVxdWVzdCB0byBhdm9pZCBjbG9iYmVy
 aW5nIHRoZSBjbGllbnRzIG9yaWdpbmFsIGFjY2VwdCBlbmNvZGluZyBoZWFkZXIuCisrICAgIHRy
 YW5zYWN0aW9uLmdldFNlcnZlclJlcXVlc3QoKS5nZXRIZWFkZXJzKCkuc2V0KCJBY2NlcHQtRW5j
 b2RpbmciLCAiZ3ppcCIpOworKyAgICBUU19ERUJVRyhUQUcsICJDaGFuZ2VkIHRoZSBzZXJ2ZXJz
 IHJlcXVlc3QgYWNjZXB0IGVuY29kaW5nIGhlYWRlciBmcm9tIFwiJXNcIiB0byBnemlwIiwgb3Jp
 Z2luYWxfYWNjZXB0X2VuY29kaW5nLmNfc3RyKCkpOworKworKyAgICB0cmFuc2FjdGlvbi5yZXN1
 bWUoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFkUmVzcG9uc2VIZWFkZXJz
 KFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBUU19ERUJVRyhUQUcsICJEZXRlcm1p
 bmluZyBpZiB3ZSBuZWVkIHRvIGFkZCBhbiBpbmZsYXRlIHRyYW5zZm9ybWF0aW9uIG9yIGEgZGVm
 bGF0ZSB0cmFuc2Zvcm1hdGlvbi4uIik7CisrICAgIC8vIFdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2
 ZSBiZWVuIHJldHVybmVkIGVpdGhlciBnemlwcGVkIGNvbnRlbnQgb3IgSWRlbnRpdHkuCisrCisr
 ICAgIGlmIChIZWxwZXJzOjpzZXJ2ZXJSZXR1cm5lZEd6aXAodHJhbnNhY3Rpb24pKSB7CisrICAg
 ICAgLy8gSWYgdGhlIHJldHVybmVkIGNvbnRlbnQgd2FzIGd6aXBlZCB3ZSB3aWxsIGluZmxhdGUg
 aXQgc28gd2UgY2FuIHRyYW5zZm9ybSBpdC4KKysgICAgICBUU19ERUJVRyhUQUcsIkNyZWF0aW5n
 IEluZmxhdGUgVHJhbnNmb3JtYXRpb24gYmVjYXVzZSB0aGUgc2VydmVyIHJldHVybmVkIGd6aXBl
 ZCBjb250ZW50Iik7CisrICAgICAgdHJhbnNhY3Rpb24uYWRkUGx1Z2luKG5ldyBHemlwSW5mbGF0
 ZVRyYW5zZm9ybWF0aW9uKHRyYW5zYWN0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvblBsdWdpbjo6UkVT
 UE9OU0VfVFJBTlNGT1JNQVRJT04pKTsKKysgICAgfQorKworKyAgICB0cmFuc2FjdGlvbi5hZGRQ
 bHVnaW4obmV3IFNvbWVUcmFuc2Zvcm1hdGlvblBsdWdpbih0cmFuc2FjdGlvbikpOworKworKyAg
 ICAvLyBFdmVuIGlmIHRoZSBzZXJ2ZXIgZGlkbid0IHJldHVybiBnemlwZWQgY29udGVudCwgaWYg
 dGhlIHVzZXIgc3VwcG9ydHMgaXQgd2Ugd2lsbCBnemlwIGl0LgorKyAgICBpZiAoSGVscGVyczo6
 Y2xpZW50QWNjZXB0c0d6aXAodHJhbnNhY3Rpb24pKSB7CisrICAgICAgVFNfREVCVUcoVEFHLCJU
 aGUgY2xpZW50IHN1cHBvcnRzIGd6aXAgc28gd2Ugd2lsbCBkZWZsYXRlIHRoZSBjb250ZW50IG9u
 IHRoZSB3YXkgb3V0LiIpOworKyAgICAgIHRyYW5zYWN0aW9uLmFkZFBsdWdpbihuZXcgR3ppcERl
 ZmxhdGVUcmFuc2Zvcm1hdGlvbih0cmFuc2FjdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25QbHVnaW46
 OlJFU1BPTlNFX1RSQU5TRk9STUFUSU9OKSk7CisrICAgIH0KKysgICAgdHJhbnNhY3Rpb24ucmVz
 dW1lKCk7CisrICB9CisrCisrICB2aXJ0dWFsIHZvaWQgaGFuZGxlU2VuZFJlc3BvbnNlSGVhZGVy
 cyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgLy8gSWYgdGhlIGNsaWVudCBzdXBw
 b3J0ZWQgZ3ppcCB0aGVuIHdlIGNhbiBndWFyYW50ZWUgdGhleSBhcmUgcmVjZWl2aW5nIGd6aXAg
 c2luY2UgcmVnYXJkbGVzcyBvZiB0aGUKKysgICAgLy8gb3JpZ2lucyBjb250ZW50LWVuY29kaW5n
 IHdlIHJldHVybmVkIGd6aXAsIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGUgY29udGVudC1lbmNvZGlu
 ZyBoZWFkZXIgaXMgY29ycmVjdGx5CisrICAgIC8vIHNldCB0byBnemlwIG9yIGlkZW50aXR5Lgor
 KyAgICBpZiAoSGVscGVyczo6Y2xpZW50QWNjZXB0c0d6aXAodHJhbnNhY3Rpb24pKSB7CisrICAg
 ICAgVFNfREVCVUcoVEFHLCJTZXR0aW5nIHRoZSBjbGllbnQgcmVzcG9uc2UgY29udGVudC1lbmNv
 ZGluZyB0byBnemlwIHNpbmNlIHRoZSB1c2VyIHN1cHBvcnRlZCBpdCwgdGhhdCdzIHdoYXQgdGhl
 eSBnb3QuIik7CisrICAgICAgdHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVzcG9uc2UoKS5nZXRIZWFk
 ZXJzKCkuc2V0KCJDb250ZW50LUVuY29kaW5nIiwgImd6aXAiKTsKKysgICAgfSBlbHNlIHsKKysg
 ICAgICBUU19ERUJVRyhUQUcsIlNldHRpbmcgdGhlIGNsaWVudCByZXNwb25zZSBjb250ZW50LWVu
 Y29kaW5nIHRvIGlkZW50aXR5IHNpbmNlIHRoZSB1c2VyIGRpZG4ndCBzdXBwb3J0IGd6aXAiKTsK
 KysgICAgICB0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXNwb25zZSgpLmdldEhlYWRlcnMoKS5zZXQo
 IkNvbnRlbnQtRW5jb2RpbmciLCAiaWRlbnRpdHkiKTsKKysgICAgfQorKyAgICB0cmFuc2FjdGlv
 bi5yZXN1bWUoKTsKKysgIH0KKysKKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0KGludCBhcmdj
 IEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElfVU5VU0VEKSB7
 CisrICBUU19ERUJVRyhUQUcsICJUU1BsdWdpbkluaXQiKTsKKysgIEdsb2JhbFBsdWdpbiAqaW5z
 dGFuY2UgPSBuZXcgR2xvYmFsSG9va1BsdWdpbigpOworK30KK2RpZmYgLXJ1TiBsaWIvYXRzY3Bw
 YXBpL2V4YW1wbGVzL2d6aXBfdHJhbnNmb3JtYXRpb24vTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy9nemlwX3RyYW5zZm9ybWF0aW9uL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2Nw
 cGFwaS9leGFtcGxlcy9nemlwX3RyYW5zZm9ybWF0aW9uL01ha2VmaWxlLmFtCTE5NzAtMDEtMDEg
 MDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9nemlw
 X3RyYW5zZm9ybWF0aW9uL01ha2VmaWxlLmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk2NTMyNjUy
 ICswODAwCitAQCAtMCwwICsxLDMwIEBACisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUg
 U29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1
 dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmli
 dXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2Fy
 ZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysj
 ICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAg
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
 Y2Vuc2UgYXQKKysjCisrIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
 TlNFLTIuMAorKyMKKysjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
 ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
 Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdB
 UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
 bGllZC4KKysjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
 cm5pbmcgcGVybWlzc2lvbnMgYW5kCisrIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
 CisrCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvaW5j
 bHVkZSAtV25vLXVudXNlZC12YXJpYWJsZQorKworK3RhcmdldD1HemlwVHJhbnNmb3JtYXRpb25Q
 bHVnaW4uc28KKytwa2dsaWJkaXIgPSAke3BrZ2xpYmV4ZWNkaXJ9CisrcGtnbGliX0xUTElCUkFS
 SUVTID0gR3ppcFRyYW5zZm9ybWF0aW9uUGx1Z2luLmxhCisrR3ppcFRyYW5zZm9ybWF0aW9uUGx1
 Z2luX2xhX1NPVVJDRVMgPSBHemlwVHJhbnNmb3JtYXRpb25QbHVnaW4uY2MKKytHemlwVHJhbnNm
 b3JtYXRpb25QbHVnaW5fbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLXNoYXJl
 ZCAtTCQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRzY3BwYXBpCisrCisrYWxs
 OgorKwlsbiAtc2YgLmxpYnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9jYWw6CisrCXJtIC1mICQo
 dGFyZ2V0KQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvaGVsbG93b3JsZC9IZWxs
 b1dvcmxkUGx1Z2luLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvaGVsbG93b3JsZC9IZWxsb1dv
 cmxkUGx1Z2luLmNjCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9oZWxsb3dvcmxkL0hlbGxv
 V29ybGRQbHVnaW4uY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBs
 aWIvYXRzY3BwYXBpL2V4YW1wbGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFBsdWdpbi5jYwkyMDEz
 LTExLTExIDE0OjAzOjEyLjY5NjUzMjY1MiArMDgwMAorQEAgLTAsMCArMSwzNiBAQAorKy8qKgor
 KyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVy
 IG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhl
 IE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25h
 bCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNG
 IGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
 VmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
 ZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0
 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hl
 Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
 Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0
 ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
 KysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
 ZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
 bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIg
 dGhlIExpY2Vuc2UuCisrICovCisrCisrCisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRl
 IDxhdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW5J
 bml0Lmg+CisrCisrY2xhc3MgSGVsbG9Xb3JsZFBsdWdpbiA6IHB1YmxpYyBhdHNjcHBhcGk6Okds
 b2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgSGVsbG9Xb3JsZFBsdWdpbigpIHsKKysgICAgc3Rk
 Ojpjb3V0IDw8ICJIZWxsbyBXb3JsZCEiIDw8IHN0ZDo6ZW5kbDsKKysgIH0KKyt9OworKworK3Zv
 aWQgVFNQbHVnaW5Jbml0KGludCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFy
 Z3ZbXSBBVFNDUFBBUElfVU5VU0VEKSB7CisrICBzdGQ6OmNvdXQgPDwgIkhlbGxvIGZyb20gIiA8
 PCBhcmd2WzBdIDw8IHN0ZDo6ZW5kbDsKKysgIGF0c2NwcGFwaTo6R2xvYmFsUGx1Z2luICppbnN0
 YW5jZSA9IG5ldyBIZWxsb1dvcmxkUGx1Z2luKCk7CisrfQorKworKworZGlmZiAtcnVOIGxpYi9h
 dHNjcHBhcGkvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4
 YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW0KKy0tLSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVz
 L2hlbGxvd29ybGQvTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4
 MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW0JMjAx
 My0xMS0xMSAxNDowMzoxMi42OTY1MzI2NTIgKzA4MDAKK0BAIC0wLDAgKzEsMjkgQEAKKysjCisr
 IyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVy
 IG9uZQorKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRo
 ZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlv
 bmFsIGluZm9ybWF0aW9uCisrIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUg
 QVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
 c2UsIFZlcnNpb24gMi4wICh0aGUKKysjICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
 cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBt
 YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3
 dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJl
 ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysj
 ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
 SVMiIEJBU0lTLAorKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
 SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3Ig
 dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1p
 dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGly
 KS9saWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrCisrdGFy
 Z2V0PUhlbGxvV29ybGRQbHVnaW4uc28KKytwa2dsaWJkaXIgPSAke3BrZ2xpYmV4ZWNkaXJ9Cisr
 cGtnbGliX0xUTElCUkFSSUVTID0gSGVsbG9Xb3JsZFBsdWdpbi5sYQorK0hlbGxvV29ybGRQbHVn
 aW5fbGFfU09VUkNFUyA9IEhlbGxvV29ybGRQbHVnaW4uY2MKKytIZWxsb1dvcmxkUGx1Z2luX2xh
 X0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIp
 L2xpYi9hdHNjcHBhcGkvc3JjLyAtbGF0c2NwcGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJz
 LyQodGFyZ2V0KQorKworK2NsZWFuLWxvY2FsOgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1
 TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2ludGVybmFsX3RyYW5zYWN0aW9uX2hhbmRsaW5nL0lu
 dGVybmFsVHJhbnNhY3Rpb25IYW5kbGluZy5jYyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2ludGVy
 bmFsX3RyYW5zYWN0aW9uX2hhbmRsaW5nL0ludGVybmFsVHJhbnNhY3Rpb25IYW5kbGluZy5jYwor
 LS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvaW50ZXJuYWxfdHJhbnNhY3Rpb25faGFuZGxpbmcv
 SW50ZXJuYWxUcmFuc2FjdGlvbkhhbmRsaW5nLmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAw
 MDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9pbnRlcm5hbF90cmFuc2FjdGlv
 bl9oYW5kbGluZy9JbnRlcm5hbFRyYW5zYWN0aW9uSGFuZGxpbmcuY2MJMjAxMy0xMS0xMSAxNDow
 MzoxMi42OTY1MzI2NTIgKzA4MDAKK0BAIC0wLDAgKzEsNjUgQEAKKysvKioKKysgIExpY2Vuc2Vk
 IHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9y
 IG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmls
 ZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp
 b24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0
 aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
 ICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
 IGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
 b2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
 ZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
 ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
 ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VU
 IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
 aW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
 LgorKyAqLworKworKworKyNpbmNsdWRlIDxhdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmg+CisrI2lu
 Y2x1ZGUgPGF0c2NwcGFwaS9Mb2dnZXIuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1BsdWdpbklu
 aXQuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0FzeW5jSHR0cEZldGNoLmg+CisrCisrdXNpbmcg
 bmFtZXNwYWNlIGF0c2NwcGFwaTsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKysKKysjZGVmaW5lIFRB
 RyAiaW50ZXJuYWxfdHJhbnNhY3Rpb25faGFuZGxpbmciCisrCisrY2xhc3MgQWxsVHJhbnNhY3Rp
 b25zR2xvYmFsUGx1Z2luIDogcHVibGljIEdsb2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgQWxs
 VHJhbnNhY3Rpb25zR2xvYmFsUGx1Z2luKCkgOiBHbG9iYWxQbHVnaW4oKSB7CisrICAgIFRTX0RF
 QlVHKFRBRywgIlJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGhvb2sgSE9PS19SRUFEX1JFUVVFU1RfSEVB
 REVSU19QT1NUX1JFTUFQIik7CisrICAgIHJlZ2lzdGVySG9vayhIT09LX1JFQURfUkVRVUVTVF9I
 RUFERVJTX1BPU1RfUkVNQVApOworKyAgfQorKworKyAgdmlydHVhbCB2b2lkIGhhbmRsZVJlYWRS
 ZXF1ZXN0SGVhZGVyc1Bvc3RSZW1hcChUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAg
 VFNfREVCVUcoVEFHLCAiUmVjZWl2ZWQgYSByZXF1ZXN0IGluIGhhbmRsZVJlYWRSZXF1ZXN0SGVh
 ZGVyc1Bvc3RSZW1hcC4iKTsKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7CisrICB9CisrfTsK
 KysKKytjbGFzcyBOb0ludGVybmFsVHJhbnNhY3Rpb25zR2xvYmFsUGx1Z2luIDogcHVibGljIEds
 b2JhbFBsdWdpbiwgcHVibGljIEFzeW5jUmVjZWl2ZXI8QXN5bmNIdHRwRmV0Y2g+IHsKKytwdWJs
 aWM6CisrICBOb0ludGVybmFsVHJhbnNhY3Rpb25zR2xvYmFsUGx1Z2luKCkgOiBHbG9iYWxQbHVn
 aW4odHJ1ZSkgeworKyAgICBUU19ERUJVRyhUQUcsICJSZWdpc3RlcmluZyBhIGdsb2JhbCBob29r
 IEhPT0tfUkVBRF9SRVFVRVNUX0hFQURFUlNfUE9TVF9SRU1BUCIpOworKyAgICByZWdpc3Rlckhv
 b2soSE9PS19SRUFEX1JFUVVFU1RfSEVBREVSU19QT1NUX1JFTUFQKTsKKysgIH0KKysKKysgIHZp
 cnR1YWwgdm9pZCBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQb3N0UmVtYXAoVHJhbnNhY3Rpb24g
 JnRyYW5zYWN0aW9uKSB7CisrICAgIFRTX0RFQlVHKFRBRywgIlJlY2VpdmVkIGEgcmVxdWVzdCBp
 biBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQb3N0UmVtYXAuIik7CisrICAgIHNoYXJlZF9wdHI8
 TXV0ZXg+IG11dGV4KG5ldyBNdXRleCgpKTsgLy8gcmVxdWlyZWQgZm9yIGFzeW5jIG9wZXJhdGlv
 bgorKyAgICBBc3luYzo6ZXhlY3V0ZTxBc3luY0h0dHBGZXRjaD4odGhpcywgbmV3IEFzeW5jSHR0
 cEZldGNoKCJodHRwOi8vMTI3LjAuMC4xLyIpLCBtdXRleCk7IC8vIGludGVybmFsIHRyYW5zYWN0
 aW9uCisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAgfQorKworKyAgdm9pZCBoYW5kbGVB
 c3luY0NvbXBsZXRlKEFzeW5jSHR0cEZldGNoICZwcm92aWRlciBBVFNDUFBBUElfVU5VU0VEKSB7
 CisrICB9CisrfTsKKysKKyt2b2lkIFRTUGx1Z2luSW5pdChpbnQgYXJnYyBBVFNDUFBBUElfVU5V
 U0VELCBjb25zdCBjaGFyICphcmd2W10gQVRTQ1BQQVBJX1VOVVNFRCkgeworKyAgVFNfREVCVUco
 VEFHLCAiTG9hZGVkIGFzeW5jX2h0dHBfZmV0Y2hfZXhhbXBsZSBwbHVnaW4iKTsKKysgIEFsbFRy
 YW5zYWN0aW9uc0dsb2JhbFBsdWdpbiAqaW5zdGFuY2UxID0gbmV3IEFsbFRyYW5zYWN0aW9uc0ds
 b2JhbFBsdWdpbigpOworKyAgTm9JbnRlcm5hbFRyYW5zYWN0aW9uc0dsb2JhbFBsdWdpbiAqaW5z
 dGFuY2UyID0gbmV3IE5vSW50ZXJuYWxUcmFuc2FjdGlvbnNHbG9iYWxQbHVnaW4oKTsKKyt9Citk
 aWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9pbnRlcm5hbF90cmFuc2FjdGlvbl9oYW5k
 bGluZy9NYWtlZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL2ludGVybmFsX3RyYW5zYWN0
 aW9uX2hhbmRsaW5nL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9pbnRl
 cm5hbF90cmFuc2FjdGlvbl9oYW5kbGluZy9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAw
 LjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvaW50ZXJuYWxfdHJh
 bnNhY3Rpb25faGFuZGxpbmcvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTY1MzI2
 NTIgKzA4MDAKK0BAIC0wLDAgKzEsMjkgQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNo
 ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJp
 YnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3Ry
 aWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVn
 YXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQor
 KyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysj
 ICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
 bmNlCisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
 TGljZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
 Q0VOU0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
 Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUg
 TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQg
 V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
 bXBsaWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
 ZS4KKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNs
 dWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrCisrdGFyZ2V0PUludGVybmFsVHJhbnNhY3Rpb25I
 YW5kbGluZy5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJS
 QVJJRVMgPSBJbnRlcm5hbFRyYW5zYWN0aW9uSGFuZGxpbmcubGEKKytJbnRlcm5hbFRyYW5zYWN0
 aW9uSGFuZGxpbmdfbGFfU09VUkNFUyA9IEludGVybmFsVHJhbnNhY3Rpb25IYW5kbGluZy5jYwor
 K0ludGVybmFsVHJhbnNhY3Rpb25IYW5kbGluZ19sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQt
 dmVyc2lvbiAtc2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy8gLWxhdHNj
 cHBhcGkKKysKKythbGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysKKytjbGVhbi1sb2Nh
 bDoKKysJcm0gLWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9s
 b2dnZXJfZXhhbXBsZS9Mb2dnZXJFeGFtcGxlLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbG9n
 Z2VyX2V4YW1wbGUvTG9nZ2VyRXhhbXBsZS5jYworLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMv
 bG9nZ2VyX2V4YW1wbGUvTG9nZ2VyRXhhbXBsZS5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAw
 MDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbG9nZ2VyX2V4YW1wbGUvTG9n
 Z2VyRXhhbXBsZS5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjY5NjUzMjY1MiArMDgwMAorQEAgLTAs
 MCArMSwxMzIgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91
 bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBh
 Z3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlz
 IHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQg
 b3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0
 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBt
 YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExp
 Y2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAg
 ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVz
 cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
 dHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
 IGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
 RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5z
 ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysg
 IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKworKworKy8qKgorKyAqIEB3
 YXJuaW5nIGxvZyByb2xsaW5nIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgaW4gMy4yLngsIHNlZToK
 KysgKiAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVFMtMTgxMywgQXBw
 bHkgdGhlIHBhdGNoIGluCisrICogICBUUy0xODEzIHRvIGNvcnJlY3QgbG9nIHJvbGxpbmcgaW4g
 My4yLngKKysgKi8KKysKKysjaW5jbHVkZSA8YXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oPgorKyNp
 bmNsdWRlIDxhdHNjcHBhcGkvVHJhbnNhY3Rpb25QbHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3Bw
 YXBpL0xvZ2dlci5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKyNpbmNs
 dWRlIDxjc3RyaW5nPgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgc3Rk
 OjpzdHJpbmc7CisrCisrbmFtZXNwYWNlIHsKKytMb2dnZXIgbG9nOworK30KKysKKysvKgorKyAq
 IFlvdSBzaG91bGQgYWx3YXlzIHRha2UgYWR2YW50YWdlIG9mIHRoZSBMT0dfREVCVUcsIExPR19J
 TkZPLCBhbmQgTE9HX0VSUk9SCisrICogbWFjcm9zIGF2YWlsYWJsZSBpbiBMb2dnZXIuaCwgdGhl
 eSBhcmUgZWFzeSB0byB1c2UgYXMgeW91IGNhbiBzZWUgYmVsb3cKKysgKiBhbmQgd2lsbCBwcm92
 aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2dnaW5nIHNpdGUgc3VjaCBhcwor
 KyAqIGZpbGVuYW1lLCBmdW5jdGlvbiBuYW1lLCBhbmQgbGluZSBudW1iZXIgb2YgdGhlIG1lc3Nh
 Z2UKKysgKi8KKysKKytjbGFzcyBHbG9iYWxIb29rUGx1Z2luIDogcHVibGljIEdsb2JhbFBsdWdp
 biB7CisrcHVibGljOgorKyAgR2xvYmFsSG9va1BsdWdpbigpIHsKKysgICAgbWVtc2V0KGJpZ19i
 dWZmZXJfNmtiXywnYScsIHNpemVvZihiaWdfYnVmZmVyXzZrYl8pKTsKKysgICAgYmlnX2J1ZmZl
 cl82a2JfW3NpemVvZihiaWdfYnVmZmVyXzZrYl8pIC0gMV0gPSAnXDAnOworKworKyAgICBtZW1z
 ZXQoYmlnX2J1ZmZlcl8xNGtiXywnYScsIHNpemVvZihiaWdfYnVmZmVyXzE0a2JfKSk7CisrICAg
 IGJpZ19idWZmZXJfMTRrYl9bc2l6ZW9mKGJpZ19idWZmZXJfMTRrYl8pIC0gMV0gPSAnXDAnOwor
 KworKyAgICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFUVVFU1RfSEVBREVSU19QT1NUX1JFTUFQ
 KTsKKysgIH0KKysKKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQb3N0
 UmVtYXAoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIExPR19ERUJVRyhsb2csICJo
 YW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQb3N0UmVtYXAuXG4iCisrICAgICAgICAiXHRSZXF1ZXN0
 IFVSTDogJXNcbiIKKysgICAgICAgICJcdFJlcXVlc3QgUGF0aDogJXNcbiIKKysgICAgICAgICJc
 dFJlcXVlc3QgUXVlcnk6ICVzXG4iCisrICAgICAgICAiXHRSZXF1ZXN0IE1ldGhvZDogJXMiLCB0
 cmFuc2FjdGlvbi5nZXRDbGllbnRSZXF1ZXN0KCkuZ2V0VXJsKCkuZ2V0VXJsU3RyaW5nKCkuY19z
 dHIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmdldENs
 aWVudFJlcXVlc3QoKS5nZXRVcmwoKS5nZXRQYXRoKCkuY19zdHIoKSwKKysgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRVcmwo
 KS5nZXRRdWVyeSgpLmNfc3RyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
 VFRQX01FVEhPRF9TVFJJTkdTW3RyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRNZXRo
 b2QoKV0uY19zdHIoKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworKworKyAg
 ICAvLyBOZXh0LCB0byBkZW1vbnN0cmF0ZSBob3cgeW91IGNhbiBjaGFuZ2UgbG9nZ2luZyBsZXZl
 bHM6CisrICAgIGlmICh0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXF1ZXN0KCkuZ2V0VXJsKCkuZ2V0
 UGF0aCgpID09ICJjaGFuZ2VfbG9nX2xldmVsIikgeworKyAgICAgIGlmICh0cmFuc2FjdGlvbi5n
 ZXRDbGllbnRSZXF1ZXN0KCkuZ2V0VXJsKCkuZ2V0UXVlcnkoKS5maW5kKCJsZXZlbD1kZWJ1ZyIp
 ICE9IHN0cmluZzo6bnBvcykgeworKyAgICAgICAgbG9nLnNldExvZ0xldmVsKExvZ2dlcjo6TE9H
 X0xFVkVMX0RFQlVHKTsKKysgICAgICAgIExPR19ERUJVRyhsb2csICJDaGFuZ2VkIGxvZyBsZXZl
 bCB0byBERUJVRyIpOworKyAgICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVx
 dWVzdCgpLmdldFVybCgpLmdldFF1ZXJ5KCkuZmluZCgibGV2ZWw9aW5mbyIpICE9IHN0cmluZzo6
 bnBvcykgeworKyAgICAgICAgbG9nLnNldExvZ0xldmVsKExvZ2dlcjo6TE9HX0xFVkVMX0lORk8p
 OworKyAgICAgICAgTE9HX0lORk8obG9nLCAiQ2hhbmdlZCBsb2cgbGV2ZWwgdG8gSU5GTyIpOwor
 KyAgICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdldFVybCgp
 LmdldFF1ZXJ5KCkuZmluZCgibGV2ZWw9ZXJyb3IiKSAhPSBzdHJpbmc6Om5wb3MpIHsKKysgICAg
 ICAgIGxvZy5zZXRMb2dMZXZlbChMb2dnZXI6OkxPR19MRVZFTF9FUlJPUik7CisrICAgICAgICBM
 T0dfRVJST1IobG9nLCAiQ2hhbmdlZCBsb2cgbGV2ZWwgdG8gRVJST1IiKTsKKysgICAgICB9Cisr
 ICAgIH0KKysKKysgICAgLy8gT25lIGRyYXdiYWNrIHRvIHVzaWduIHRoZSBUcmFmZmljIFNlcnZl
 ciBUZXh0IExvZ2dlcnMgaXMgdGhhdCB5b3UncmUgbGltaXRlZCBpbiB0aGUgc2l6ZSBvZiB0aGUg
 bG9nCisrICAgIC8vIGxpbmVzLCB0aGlzIGxpbWl0IGlzIG5vdyBzZXQgYXQgOGtiIGZvciBhdHNj
 cHBhcGksIGJ1dCB0aGlzIGxpbWl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKysg
 ICAgTE9HX0lORk8obG9nLCAiVGhpcyBtZXNzYWdlIHdpbGwgYmUgZHJvcHBlZCAoc2VlIGVycm9y
 LmxvZykgYmVjYXVzZSBpdCdzIGp1c3QgdG9vIGJpZzogJXMiLCBiaWdfYnVmZmVyXzE0a2JfKTsK
 KysKKysgICAgLy8gVGhpcyBzaG91bGQgd29yayB0aG91Z2g6CisrICAgIExPR19JTkZPKGxvZywg
 IiVzIiwgYmlnX2J1ZmZlcl82a2JfKTsKKysKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7Cisr
 ICB9CisrcHJpdmF0ZToKKysgIGNoYXIgYmlnX2J1ZmZlcl82a2JfWzYqMTAyNF07CisrICBjaGFy
 IGJpZ19idWZmZXJfMTRrYl9bMTQqMTAyNF07CisrfTsKKysKKyt2b2lkIFRTUGx1Z2luSW5pdChp
 bnQgYXJnYyBBVFNDUFBBUElfVU5VU0VELCBjb25zdCBjaGFyICphcmd2W10gQVRTQ1BQQVBJX1VO
 VVNFRCkgeworKyAgLy8gQ3JlYXRlIGEgbmV3IGxvZ2dlcgorKyAgLy8gVGhpcyB3aWxsIGNyZWF0
 ZSBhIGxvZyBmaWxlIHdpdGggdGhlIG5hbWUgbG9nZ2VyX2V4YW1wbGUubG9nIChzaW5jZSB3ZSBs
 ZWZ0IG9mZgorKyAgLy8gICAgdGhlIGV4dGVuc2lvbiBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRk
 IC5sb2cpCisrICAvLworKyAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aW1lc3RhbXAsIHdo
 aWNoIHdpbGwgZm9yY2UgYSB0aW1lc3RhbXAgb24gZXZlcnkgbG9nIG1lc3NhZ2UKKysgIC8vICB0
 aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKysgIC8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBy
 ZW5hbWluZyBlbmFibGVkLCB3aGljaCBtZWFucyBpZiBhIGxvZyBhbHJlYWR5IGV4aXN0cyB3aXRo
 IHRoYXQKKysgIC8vICBuYW1lIGl0IHdpbGwgdHJ5IGxvZ2dlcl9leGFtcGxlLjEgYW5kIHNvIG9u
 LCB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKysgIC8vIFRoZSBmb3VydGggYXJndW1lbnQg
 aXMgdGhlIGluaXRpYWwgbG9nZ2luZyBsZXZlbCB0aGlzIGNhbiBhbHdheXMgYmUgY2hhbmdlZCB3
 aXRoIGxvZy5zZXRMb2dMZXZlbCgpLgorKyAgLy8gIHRoZSBkZWZhdWx0IGxvZyBsZXZlbCBpcyBM
 T0dfTEVWRUxfSU5GTy4KKysgIC8vIFRoZSBmaWZ0aCBhcmd1bWVudCBpcyB0byBlbmFibGUgbG9n
 IHJvbGxpbmcsIHRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorKyAgLy8gVGhlIHNpeHRoIGFy
 Z3VtZW50IGlzIHRoZSBmcmV1cWVuY3kgaW4gd2hpY2ggd2Ugd2lsbCByb2xsIHRoZSBsb2dzLCAz
 MDAgc2Vjb25kcyBpcyB2ZXJ5IGxvdywKKysgIC8vICB0aGUgZGVmYXVsdCBmb3IgdGhpcyBhcmd1
 bWVudCBpcyAzNjAwLgorKyAgbG9nLmluaXQoImxvZ2dlcl9leGFtcGxlIiwgdHJ1ZSwgdHJ1ZSwg
 TG9nZ2VyOjpMT0dfTEVWRUxfREVCVUcsIHRydWUsIDMwMCk7CisrCisrICAvLyBOb3cgdGhhdCB3
 ZSd2ZSBpbml0aWFsaXplZCBhIGxvZ2dlciB3ZSBjYW4gZG8gYWxsIGtpbmRzIG9mIGZ1biB0aGlu
 Z3Mgb24gaXQ6CisrICBsb2cuc2V0Um9sbGluZ0VuYWJsZWQodHJ1ZSk7IC8vIGFscmVhZHkgZG9u
 ZSB2aWEgbG9nLmluaXQsIGp1c3QgYW4gZXhhbXBsZS4KKysgIGxvZy5zZXRSb2xsaW5nSW50ZXJ2
 YWxTZWNvbmRzKDMwMCk7IC8vIGFscmVhZHkgZG9uZSB2aWEgbG9nLmluaXQKKysKKysgIC8vIFlv
 dSBoYXZlIHR3byB3YXlzIHRvIGxvZyB0byBhIGxvZ2dlciwgeW91IGNhbiBsb2cgZGlyZWN0bHkg
 b24gdGhlIG9iamVjdCBpdHNlbGY6CisrICBsb2cubG9nSW5mbygiSGVsbG8gV29ybGQgZnJvbTog
 JXMiLCBhcmd2WzBdKTsKKysKKysgIC8vIEFsdGVybmF0aXZlbHkgeW91IGNhbiB0YWtlIGFkdmFu
 dGFnZSBvZiB0aGUgc3VwZXIgaGVscGVyIG1hY3JvcyBmb3IgbG9nZ2luZworKyAgLy8gdGhhdCB3
 aWxsIGluY2x1ZGUgdGhlIGZpbGUsIGZ1bmN0aW9uLCBhbmQgbGluZSBudW1iZXIgYXV0b21hdGlj
 YWxseSBhcyBwYXJ0CisrICAvLyBvZiB0aGUgbG9nIG1lc3NhZ2U6CisrICBMT0dfSU5GTyhsb2cs
 ICJIZWxsbyBXb3JsZCB3aXRoIG1vcmUgaW5mbyBmcm9tOiAlcyIsIGFyZ3ZbMF0pOworKworKyAg
 Ly8gVGhpcyB3aWxsIGh1cnQgcGVyZm9ybWFuY2UsIGJ1dCBpdCdzIGFuIG9wdGlvbiB0aGF0J3Mg
 YWx3YXlzIGF2YWlsYWJsZSB0byB5b3UKKysgIC8vIHRvIGZvcmNlIGZsdXNoIHRoZSBsb2dzLiBP
 dGhlcndpc2UgVHJhZmZpY1NlcnZlciB3aWxsIGZsdXNoIHRoZSBsb2dzIGFyb3VuZAorKyAgLy8g
 b25jZSBldmVyeSBzZWNvbmQuIFlvdSBzaG91bGQgcmVhbGx5IGF2b2lkIGZsdXNoaW5nIHRoZSBs
 b2cgdW5sZXNzIGl0J3MgcmVhbGx5IG5lY2Vzc2FyeS4KKysgIGxvZy5mbHVzaCgpOworKworKyAg
 R2xvYmFsUGx1Z2luICppbnN0YW5jZSA9IG5ldyBHbG9iYWxIb29rUGx1Z2luKCk7CisrfQorKwor
 ZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbG9nZ2VyX2V4YW1wbGUvTWFrZWZpbGUu
 YW0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9sb2dnZXJfZXhhbXBsZS9NYWtlZmlsZS5hbQorLS0t
 IGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbG9nZ2VyX2V4YW1wbGUvTWFrZWZpbGUuYW0JMTk3MC0w
 MS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVz
 L2xvZ2dlcl9leGFtcGxlL01ha2VmaWxlLmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk3NTMyNzM3
 ICswODAwCitAQCAtMCwwICsxLDMwIEBACisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUg
 U29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1
 dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmli
 dXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2Fy
 ZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysj
 ICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAg
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
 Y2Vuc2UgYXQKKysjCisrIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
 TlNFLTIuMAorKyMKKysjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
 ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
 Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdB
 UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
 bGllZC4KKysjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
 cm5pbmcgcGVybWlzc2lvbnMgYW5kCisrIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
 CisrCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvaW5j
 bHVkZSAtV25vLXVudXNlZC12YXJpYWJsZQorKworK3RhcmdldD1Mb2dnZXJFeGFtcGxlLnNvCisr
 cGtnbGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xpYl9MVExJQlJBUklFUyA9IExvZ2dl
 ckV4YW1wbGUubGEKKytMb2dnZXJFeGFtcGxlX2xhX1NPVVJDRVMgPSBMb2dnZXJFeGFtcGxlLmNj
 CisrTG9nZ2VyRXhhbXBsZV9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtc2hh
 cmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy8gLWxhdHNjcHBhcGkKKysKKyth
 bGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysKKytjbGVhbi1sb2NhbDoKKysJcm0gLWYg
 JCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9tdWx0aXBsZV90cmFu
 c2FjdGlvbl9ob29rcy9NYWtlZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL211bHRpcGxl
 X3RyYW5zYWN0aW9uX2hvb2tzL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxl
 cy9tdWx0aXBsZV90cmFuc2FjdGlvbl9ob29rcy9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAw
 OjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbXVsdGlwbGVf
 dHJhbnNhY3Rpb25faG9va3MvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTc1MzI3
 MzcgKzA4MDAKK0BAIC0wLDAgKzEsMjggQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNo
 ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJp
 YnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3Ry
 aWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVn
 YXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQor
 KyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysj
 ICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
 bmNlCisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
 TGljZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
 Q0VOU0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
 Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUg
 TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQg
 V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
 bXBsaWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
 ZS4KKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNs
 dWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrdGFyZ2V0PU11bHRpcGxlVHJhbnNhY3Rpb25Ib29r
 UGx1Z2lucy5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJS
 QVJJRVMgPSBNdWx0aXBsZVRyYW5zYWN0aW9uSG9va1BsdWdpbnMubGEKKytNdWx0aXBsZVRyYW5z
 YWN0aW9uSG9va1BsdWdpbnNfbGFfU09VUkNFUyA9IE11bHRpcGxlVHJhbnNhY3Rpb25Ib29rUGx1
 Z2lucy5jYworK011bHRpcGxlVHJhbnNhY3Rpb25Ib29rUGx1Z2luc19sYV9MREZMQUdTID0gLW1v
 ZHVsZSAtYXZvaWQtdmVyc2lvbiAtc2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBp
 L3NyYy8gLWxhdHNjcHBhcGkKKysKKythbGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysK
 KytjbGVhbi1sb2NhbDoKKysJcm0gLWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy9tdWx0aXBsZV90cmFuc2FjdGlvbl9ob29rcy9NdWx0aXBsZVRyYW5zYWN0aW9u
 SG9va1BsdWdpbnMuY2MgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9tdWx0aXBsZV90cmFuc2FjdGlv
 bl9ob29rcy9NdWx0aXBsZVRyYW5zYWN0aW9uSG9va1BsdWdpbnMuY2MKKy0tLSBsaWIvYXRzY3Bw
 YXBpL2V4YW1wbGVzL211bHRpcGxlX3RyYW5zYWN0aW9uX2hvb2tzL011bHRpcGxlVHJhbnNhY3Rp
 b25Ib29rUGx1Z2lucy5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysr
 IGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbXVsdGlwbGVfdHJhbnNhY3Rpb25faG9va3MvTXVsdGlw
 bGVUcmFuc2FjdGlvbkhvb2tQbHVnaW5zLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk3NTMyNzM3
 ICswODAwCitAQCAtMCwwICsxLDEwMCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNo
 ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmli
 dXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmli
 dXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJk
 aW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAg
 dG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxp
 Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQor
 KyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
 ZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
 MAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
 biB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
 ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBP
 UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAg
 U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
 c3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisr
 CisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrI2luY2x1ZGUgPGF0
 c2NwcGFwaS9HbG9iYWxQbHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1RyYW5zYWN0aW9u
 UGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+CisrCisrdXNpbmcg
 bmFtZXNwYWNlIGF0c2NwcGFwaTsKKysKKytjbGFzcyBNdWx0aXBsZVRyYW5zYWN0aW9uSG9va1Bs
 dWdpbnNPbmUgOiBwdWJsaWMgYXRzY3BwYXBpOjpUcmFuc2FjdGlvblBsdWdpbiB7CisrcHVibGlj
 OgorKyAgTXVsdGlwbGVUcmFuc2FjdGlvbkhvb2tQbHVnaW5zT25lKFRyYW5zYWN0aW9uICZ0cmFu
 c2FjdGlvbikgOiBUcmFuc2FjdGlvblBsdWdpbih0cmFuc2FjdGlvbikgeworKyAgICBUcmFuc2Fj
 dGlvblBsdWdpbjo6cmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTKTsKKysg
 ICAgc3RkOjpjb3V0IDw8ICJDb25zdHJ1Y3RlZCBNdWx0aXBsZVRyYW5zYWN0aW9uSG9va1BsdWdp
 bnNPbmUhIiA8PCBzdGQ6OmVuZGw7CisrICB9CisrCisrICB2aXJ0dWFsIH5NdWx0aXBsZVRyYW5z
 YWN0aW9uSG9va1BsdWdpbnNPbmUoKSB7CisrICAgIHN0ZDo6Y291dCA8PCAiRGVzdHJveWVkIE11
 bHRpcGxlVHJhbnNhY3Rpb25Ib29rUGx1Z2luc09uZSEiIDw8IHN0ZDo6ZW5kbDsKKysgIH0KKysK
 KysgIHZvaWQgaGFuZGxlU2VuZFJlc3BvbnNlSGVhZGVycyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rp
 b24pIHsKKysgICAgc3RkOjpjZXJyIDw8ICJNdWx0aXBsZVRyYW5zYWN0aW9uSG9va1BsdWdpbnNP
 bmUgLS0gU2VuZCByZXNwb25zZSBoZWFkZXJzISIgPDwgc3RkOjplbmRsOworKyAgICB0cmFuc2Fj
 dGlvbi5yZXN1bWUoKTsKKysgIH0KKyt9OworKworK2NsYXNzIE11bHRpcGxlVHJhbnNhY3Rpb25I
 b29rUGx1Z2luc1R3byA6IHB1YmxpYyBhdHNjcHBhcGk6OlRyYW5zYWN0aW9uUGx1Z2luIHsKKytw
 dWJsaWM6CisrICBNdWx0aXBsZVRyYW5zYWN0aW9uSG9va1BsdWdpbnNUd28oVHJhbnNhY3Rpb24g
 JnRyYW5zYWN0aW9uKSA6IFRyYW5zYWN0aW9uUGx1Z2luKHRyYW5zYWN0aW9uKSB7CisrICAgIFRy
 YW5zYWN0aW9uUGx1Z2luOjpyZWdpc3Rlckhvb2soSE9PS19TRU5EX1JFUVVFU1RfSEVBREVSUyk7
 CisrICAgIFRyYW5zYWN0aW9uUGx1Z2luOjpyZWdpc3Rlckhvb2soSE9PS19TRU5EX1JFU1BPTlNF
 X0hFQURFUlMpOworKyAgICBzdGQ6OmNvdXQgPDwgIkNvbnN0cnVjdGVkIE11bHRpcGxlVHJhbnNh
 Y3Rpb25Ib29rUGx1Z2luc1R3byEiIDw8IHN0ZDo6ZW5kbDsKKysgIH0KKysKKysgIHZpcnR1YWwg
 fk11bHRpcGxlVHJhbnNhY3Rpb25Ib29rUGx1Z2luc1R3bygpIHsKKysgICAgc3RkOjpjb3V0IDw8
 ICJEZXN0cm95ZWQgTXVsdGlwbGVUcmFuc2FjdGlvbkhvb2tQbHVnaW5zVHdvISIgPDwgc3RkOjpl
 bmRsOworKyAgfQorKworKyAgdm9pZCBoYW5kbGVTZW5kUmVxdWVzdEhlYWRlcnMoVHJhbnNhY3Rp
 b24gJnRyYW5zYWN0aW9uKSB7CisrICAgIHN0ZDo6Y291dCA8PCAiTXVsdGlwbGVUcmFuc2FjdGlv
 bkhvb2tQbHVnaW5zVHdvIC0tIFNlbmQgcmVxdWVzdCBoZWFkZXJzISIgPDwgc3RkOjplbmRsOwor
 KyAgICBzb21lX2NvbnRhaW5lcl8ucHVzaF9iYWNrKCJXZSBoYXZlIHRyYW5zYWN0aW9uIHNjb3Bl
 ZCBzdG9yYWdlIGluIFRyYW5zYWN0aW9uIEhvb2tzISIpOworKyAgICB0cmFuc2FjdGlvbi5yZXN1
 bWUoKTsKKysgIH0KKysKKysgIHZvaWQgaGFuZGxlU2VuZFJlc3BvbnNlSGVhZGVycyhUcmFuc2Fj
 dGlvbiAmdHJhbnNhY3Rpb24pIHsKKysgICAgIHN0ZDo6Y291dCA8PCAiTXVsdGlwbGVUcmFuc2Fj
 dGlvbkhvb2tQbHVnaW5zVHdvIC0tIFNlbmQgcmVzcG9uc2UgaGVhZGVycyEiIDw8IHN0ZDo6ZW5k
 bDsKKysKKysgICAgIC8vIERlbW9uc3RyYXRlIHRoZSBjb25jZXB0IG9mIHRyYW5zYWN0aW9uIHNj
 b3BlZCBzdG9yYWdlLgorKyAgICAgaWYoc29tZV9jb250YWluZXJfLnNpemUoKSkgeworKyAgICAg
 ICBzdGQ6OmNvdXQgPDwgc29tZV9jb250YWluZXJfLmJhY2soKSA8PCBzdGQ6OmVuZGw7CisrICAg
 ICB9CisrCisrICAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgICB9CisrCisrcHJpdmF0ZToK
 KysgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb21lX2NvbnRhaW5lcl87CisrfTsKKysKKytj
 bGFzcyBHbG9iYWxIb29rUGx1Z2luIDogcHVibGljIGF0c2NwcGFwaTo6R2xvYmFsUGx1Z2luIHsK
 KytwdWJsaWM6CisrICBHbG9iYWxIb29rUGx1Z2luKCkgeworKyAgICBHbG9iYWxQbHVnaW46OnJl
 Z2lzdGVySG9vayhIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCk7CisrICB9Cisr
 CisrICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVhZFJlcXVlc3RIZWFkZXJzUHJlUmVtYXAoVHJhbnNh
 Y3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIHN0ZDo6Y291dCA8PCAiSGVsbG8gZnJvbSBoYW5k
 bGVSZWFkUmVxdWVzSGVhZGVyc1ByZVJlbWFwISIgPDwgc3RkOjplbmRsOworKworKyAgICAvLyBX
 ZSBuZWVkIG5vdCBzdG9yZSB0aGUgYWRkcmVzc2VzIG9mIHRoZSB0cmFuc2FjdGlvbiBwbHVnaW5z
 CisrICAgIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSB3
 aGVuIHRoZSB0cmFuc2FjdGlvbgorKyAgICAvLyBjbG9zZXMuCisrCisrICAgIHRyYW5zYWN0aW9u
 LmFkZFBsdWdpbihuZXcgTXVsdGlwbGVUcmFuc2FjdGlvbkhvb2tQbHVnaW5zT25lKHRyYW5zYWN0
 aW9uKSk7CisrICAgIHRyYW5zYWN0aW9uLmFkZFBsdWdpbihuZXcgTXVsdGlwbGVUcmFuc2FjdGlv
 bkhvb2tQbHVnaW5zVHdvKHRyYW5zYWN0aW9uKSk7CisrCisrICAgIHRyYW5zYWN0aW9uLnJlc3Vt
 ZSgpOworKyAgfQorK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFyZ2MgQVRTQ1BQQVBJ
 X1VOVVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQpIHsKKysgIGF0c2Nw
 cGFwaTo6R2xvYmFsUGx1Z2luICppbnN0YW5jZSA9IG5ldyBHbG9iYWxIb29rUGx1Z2luKCk7Cisr
 fQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbnVsbF90cmFuc2Zvcm1hdGlvbl9w
 bHVnaW4vTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9udWxsX3RyYW5zZm9ybWF0
 aW9uX3BsdWdpbi9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbnVsbF90
 cmFuc2Zvcm1hdGlvbl9wbHVnaW4vTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAw
 MDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL251bGxfdHJhbnNmb3JtYXRp
 b25fcGx1Z2luL01ha2VmaWxlLmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk3NTMyNzM3ICswODAw
 CitAQCAtMCwwICsxLDMwIEBACisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdh
 cmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxp
 Y2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3
 aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBj
 b3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5
 b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vu
 c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMg
 IHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
 YXQKKysjCisrIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
 MAorKyMKKysjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
 IGluIHdyaXRpbmcsIHNvZnR3YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
 aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJ
 RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
 KysjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
 cGVybWlzc2lvbnMgYW5kCisrIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrCisr
 QU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZSAt
 V25vLXVudXNlZC12YXJpYWJsZQorKworK3RhcmdldD1OdWxsVHJhbnNmb3JtYXRpb25QbHVnaW4u
 c28KKytwa2dsaWJkaXIgPSAke3BrZ2xpYmV4ZWNkaXJ9CisrcGtnbGliX0xUTElCUkFSSUVTID0g
 TnVsbFRyYW5zZm9ybWF0aW9uUGx1Z2luLmxhCisrTnVsbFRyYW5zZm9ybWF0aW9uUGx1Z2luX2xh
 X1NPVVJDRVMgPSBOdWxsVHJhbnNmb3JtYXRpb25QbHVnaW4uY2MKKytOdWxsVHJhbnNmb3JtYXRp
 b25QbHVnaW5fbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLXNoYXJlZCAtTCQo
 dG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRzY3BwYXBpCisrCisrYWxsOgorKwls
 biAtc2YgLmxpYnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9jYWw6CisrCXJtIC1mICQodGFyZ2V0
 KQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvbnVsbF90cmFuc2Zvcm1hdGlvbl9w
 bHVnaW4vTnVsbFRyYW5zZm9ybWF0aW9uUGx1Z2luLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMv
 bnVsbF90cmFuc2Zvcm1hdGlvbl9wbHVnaW4vTnVsbFRyYW5zZm9ybWF0aW9uUGx1Z2luLmNjCist
 LS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9udWxsX3RyYW5zZm9ybWF0aW9uX3BsdWdpbi9OdWxs
 VHJhbnNmb3JtYXRpb25QbHVnaW4uY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4
 MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL251bGxfdHJhbnNmb3JtYXRpb25fcGx1Z2lu
 L051bGxUcmFuc2Zvcm1hdGlvblBsdWdpbi5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjY5NzUzMjcz
 NyArMDgwMAorQEAgLTAsMCArMSw3NyBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNo
 ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmli
 dXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmli
 dXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJk
 aW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAg
 dG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxp
 Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQor
 KyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
 ZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
 MAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
 biB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
 ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBP
 UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAg
 U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
 c3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisr
 I2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmg+
 CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9UcmFuc2FjdGlvblBsdWdpbi5oPgorKyNpbmNsdWRlIDxh
 dHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1Bs
 dWdpbkluaXQuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0xvZ2dlci5oPgorKworK3VzaW5nIG5h
 bWVzcGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrbmFtZXNwYWNlIHsK
 KythdHNjcHBhcGk6OkxvZ2dlciAqbG9nOworKyNkZWZpbmUgVEFHICJudWxsX3RyYW5zZm9ybWF0
 aW9uIgorK30KKysKKytjbGFzcyBOdWxsVHJhbnNmb3JtYXRpb25QbHVnaW4gOiBwdWJsaWMgVHJh
 bnNmb3JtYXRpb25QbHVnaW4geworK3B1YmxpYzoKKysgIE51bGxUcmFuc2Zvcm1hdGlvblBsdWdp
 bihUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pCisrICAgIDogVHJhbnNmb3JtYXRpb25QbHVnaW4o
 dHJhbnNhY3Rpb24sIFJFU1BPTlNFX1RSQU5TRk9STUFUSU9OKSB7CisrICAgIHJlZ2lzdGVySG9v
 ayhIT09LX1NFTkRfUkVTUE9OU0VfSEVBREVSUyk7CisrICB9CisrCisrICB2b2lkIGhhbmRsZVNl
 bmRSZXNwb25zZUhlYWRlcnMoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIHRyYW5z
 YWN0aW9uLmdldENsaWVudFJlc3BvbnNlKCkuZ2V0SGVhZGVycygpLnNldCgiWC1Db250ZW50LVRy
 YW5zZm9ybWVkIiwgIjEiKTsKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7CisrICB9CisrCisr
 ICB2b2lkIGNvbnN1bWUoY29uc3Qgc3RyaW5nICZkYXRhKSB7CisrICAgIHByb2R1Y2UoZGF0YSk7
 CisrICB9CisrCisrICB2b2lkIGhhbmRsZUlucHV0Q29tcGxldGUoKSB7CisrICAgIHNldE91dHB1
 dENvbXBsZXRlKCk7CisrICB9CisrCisrICB2aXJ0dWFsIH5OdWxsVHJhbnNmb3JtYXRpb25QbHVn
 aW4oKSB7CisrCisrICB9CisrCisrcHJpdmF0ZToKKyt9OworKworK2NsYXNzIEdsb2JhbEhvb2tQ
 bHVnaW4gOiBwdWJsaWMgR2xvYmFsUGx1Z2luIHsKKytwdWJsaWM6CisrICBHbG9iYWxIb29rUGx1
 Z2luKCkgeworKyAgICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFU1BPTlNFX0hFQURFUlMpOwor
 KyAgfQorKworKyAgdmlydHVhbCB2b2lkIGhhbmRsZVJlYWRSZXNwb25zZUhlYWRlcnMoVHJhbnNh
 Y3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIHRyYW5zYWN0aW9uLmFkZFBsdWdpbihuZXcgTnVs
 bFRyYW5zZm9ybWF0aW9uUGx1Z2luKHRyYW5zYWN0aW9uKSk7CisrICAgIHRyYW5zYWN0aW9uLnJl
 c3VtZSgpOworKyAgfQorKworK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFyZ2MgQVRT
 Q1BQQVBJX1VOVVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQpIHsKKysg
 IFRTX0RFQlVHKFRBRywgIlRTUGx1Z2luSW5pdCIpOworKyAgR2xvYmFsUGx1Z2luICppbnN0YW5j
 ZSA9IG5ldyBHbG9iYWxIb29rUGx1Z2luKCk7CisrfQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkv
 ZXhhbXBsZXMvcG9zdF9idWZmZXIvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9w
 b3N0X2J1ZmZlci9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcG9zdF9i
 dWZmZXIvTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysr
 KyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3Bvc3RfYnVmZmVyL01ha2VmaWxlLmFtCTIwMTMtMTEt
 MTEgMTQ6MDM6MTIuNjk3NTMyNzM3ICswODAwCitAQCAtMCwwICsxLDI5IEBACisrIworKyMgIExp
 Y2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUK
 KysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9U
 SUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBp
 bmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBs
 aWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
 ZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
 ZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9i
 dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAgICAgIGh0dHA6Ly93d3cuYXBh
 Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBVbmxlc3MgcmVxdWlyZWQgYnkg
 YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrIyAgZGlz
 dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
 QVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
 ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
 cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrIyAgbGltaXRhdGlv
 bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZSAtV25vLXVudXNlZC12YXJpYWJsZQorKworK3RhcmdldD1Q
 b3N0QnVmZmVyLnNvCisrcGtnbGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xpYl9MVExJ
 QlJBUklFUyA9IFBvc3RCdWZmZXIubGEKKytQb3N0QnVmZmVyX2xhX1NPVVJDRVMgPSBQb3N0QnVm
 ZmVyLmNjCisrUG9zdEJ1ZmZlcl9sYV9MREZMQUdTID0gLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAt
 c2hhcmVkIC1MJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy8gLWxhdHNjcHBhcGkKKysK
 KythbGw6CisrCWxuIC1zZiAubGlicy8kKHRhcmdldCkKKysKKytjbGVhbi1sb2NhbDoKKysJcm0g
 LWYgJCh0YXJnZXQpCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9wb3N0X2J1ZmZl
 ci9Qb3N0QnVmZmVyLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcG9zdF9idWZmZXIvUG9zdEJ1
 ZmZlci5jYworLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcG9zdF9idWZmZXIvUG9zdEJ1ZmZl
 ci5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBh
 cGkvZXhhbXBsZXMvcG9zdF9idWZmZXIvUG9zdEJ1ZmZlci5jYwkyMDEzLTExLTExIDE0OjAzOjEy
 LjY5NzUzMjczNyArMDgwMAorQEAgLTAsMCArMSw3NSBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8g
 dGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9y
 ZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisr
 ICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgor
 KyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMg
 ZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
 ZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
 cGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
 aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
 SUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
 cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
 Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FS
 UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
 aWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
 aW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisr
 ICovCisrCisrCisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvR2xv
 YmFsUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9UcmFuc2FjdGlvblBsdWdpbi5oPgor
 KyNpbmNsdWRlIDxhdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4uaD4KKysjaW5jbHVkZSA8
 YXRzY3BwYXBpL1BsdWdpbkluaXQuaD4KKysKKyt1c2luZyBuYW1lc3BhY2UgYXRzY3BwYXBpOwor
 K3VzaW5nIHN0ZDo6Y2VycjsKKyt1c2luZyBzdGQ6OmVuZGw7CisrdXNpbmcgc3RkOjpzdHJpbmc7
 CisrCisrY2xhc3MgUG9zdEJ1ZmZlclRyYW5zZm9ybWF0aW9uUGx1Z2luIDogcHVibGljIFRyYW5z
 Zm9ybWF0aW9uUGx1Z2luIHsKKytwdWJsaWM6CisrICBQb3N0QnVmZmVyVHJhbnNmb3JtYXRpb25Q
 bHVnaW4oVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKQorKyAgICA6IFRyYW5zZm9ybWF0aW9uUGx1
 Z2luKHRyYW5zYWN0aW9uLCBSRVFVRVNUX1RSQU5TRk9STUFUSU9OKSwgdHJhbnNhY3Rpb25fKHRy
 YW5zYWN0aW9uKSB7CisrICAgIGJ1ZmZlcl8ucmVzZXJ2ZSgxMDI0KTsgLy8gbm90IHJlcXVpcmVk
 LCB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiB0byBzdGFydCB0aGUgYnVmZmVyIGF0IGEgc2xpZ2h0
 bHkgaGlnaGVyIHZhbHVlLgorKyAgfQorKworKyAgdm9pZCBjb25zdW1lKGNvbnN0IHN0cmluZyAm
 ZGF0YSkgeworKyAgICBidWZmZXJfLmFwcGVuZChkYXRhKTsKKysgIH0KKysKKysgIHZvaWQgaGFu
 ZGxlSW5wdXRDb21wbGV0ZSgpIHsKKysgICAgcHJvZHVjZShidWZmZXJfKTsKKysgICAgc2V0T3V0
 cHV0Q29tcGxldGUoKTsKKysgIH0KKysKKysgIHZpcnR1YWwgflBvc3RCdWZmZXJUcmFuc2Zvcm1h
 dGlvblBsdWdpbigpIHsgfQorKworK3ByaXZhdGU6CisrICBUcmFuc2FjdGlvbiAmdHJhbnNhY3Rp
 b25fOworKyAgc3RyaW5nIGJ1ZmZlcl87CisrfTsKKysKKytjbGFzcyBHbG9iYWxIb29rUGx1Z2lu
 IDogcHVibGljIEdsb2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgR2xvYmFsSG9va1BsdWdpbigp
 IHsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfUkVBRF9SRVFVRVNUX0hFQURFUlNfUE9TVF9SRU1B
 UCk7CisrICB9CisrCisrICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVhZFJlcXVlc3RIZWFkZXJzUG9z
 dFJlbWFwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBjZXJyIDw8ICJSZWFkIFJl
 cXVlc3QgSGVhZGVycyBQb3N0IFJlbWFwIiA8PCBlbmRsOworKyAgICBjZXJyIDw8ICJQYXRoOiAi
 IDw8IHRyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRVcmwoKS5nZXRQYXRoKCkgPDwg
 ZW5kbDsKKysgICAgY2VyciA8PCAiTWV0aG9kOiAiIDw8IEhUVFBfTUVUSE9EX1NUUklOR1NbdHJh
 bnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdldE1ldGhvZCgpXSA8PCBlbmRsOworKyAgICBp
 ZiAodHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdldE1ldGhvZCgpID09IEhUVFBfTUVU
 SE9EX1BPU1QpIHsKKysgICAgICB0cmFuc2FjdGlvbi5hZGRQbHVnaW4obmV3IFBvc3RCdWZmZXJU
 cmFuc2Zvcm1hdGlvblBsdWdpbih0cmFuc2FjdGlvbikpOworKyAgICB9CisrCisrICAgIHRyYW5z
 YWN0aW9uLnJlc3VtZSgpOworKyAgfQorK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFy
 Z2MgQVRTQ1BQQVBJX1VOVVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQp
 IHsKKysgIEdsb2JhbFBsdWdpbiAqaW5zdGFuY2UgPSBuZXcgR2xvYmFsSG9va1BsdWdpbigpOwor
 K30KKysKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3JlbWFwX3BsdWdpbi9NYWtl
 ZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3JlbWFwX3BsdWdpbi9NYWtlZmlsZS5hbQor
 LS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcmVtYXBfcGx1Z2luL01ha2VmaWxlLmFtCTE5NzAt
 MDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxl
 cy9yZW1hcF9wbHVnaW4vTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTc1MzI3Mzcg
 KzA4MDAKK0BAIC0wLDAgKzEsMzAgQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT
 b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJpYnV0
 b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1
 dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVnYXJk
 aW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMg
 IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysjICAi
 TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
 CisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
 ZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
 U0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
 ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
 ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQgV0FS
 UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
 aWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
 bmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
 KysKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNs
 dWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrCisrdGFyZ2V0PVJlbWFwUGx1Z2luLnNvCisrcGtn
 bGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xpYl9MVExJQlJBUklFUyA9IFJlbWFwUGx1
 Z2luLmxhCisrUmVtYXBQbHVnaW5fbGFfU09VUkNFUyA9IFJlbWFwUGx1Z2luLmNjCisrUmVtYXBQ
 bHVnaW5fbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLXNoYXJlZCAtTCQodG9w
 X3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRzY3BwYXBpCisrCisrYWxsOgorKwlsbiAt
 c2YgLmxpYnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9jYWw6CisrCXJtIC1mICQodGFyZ2V0KQor
 ZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcmVtYXBfcGx1Z2luL1JlbWFwUGx1Z2lu
 LmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvcmVtYXBfcGx1Z2luL1JlbWFwUGx1Z2luLmNjCist
 LS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9yZW1hcF9wbHVnaW4vUmVtYXBQbHVnaW4uY2MJMTk3
 MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL2V4YW1w
 bGVzL3JlbWFwX3BsdWdpbi9SZW1hcFBsdWdpbi5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjY5ODUz
 MjUwMSArMDgwMAorQEAgLTAsMCArMSw4NiBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFw
 YWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250
 cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0
 cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVn
 YXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQor
 KyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAg
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
 ZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
 LTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
 aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElF
 UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
 KyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
 cm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisr
 CisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9SZW1hcFBsdWdpbi5oPgorKyNpbmNsdWRlIDxhdHNj
 cHBhcGkvUGx1Z2luSW5pdC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvTG9nZ2VyLmg+CisrI2lu
 Y2x1ZGUgPHZlY3Rvcj4KKysjaW5jbHVkZSA8c3N0cmVhbT4KKysKKyt1c2luZyBuYW1lc3BhY2Ug
 c3RkOworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrCisrI2RlZmluZSBMT0dfVEFHICJy
 ZW1hcHBsdWdpbiIKKysKKytjbGFzcyBNeVJlbWFwUGx1Z2luIDogcHVibGljIFJlbWFwUGx1Z2lu
 IHsKKytwdWJsaWM6CisrICBNeVJlbWFwUGx1Z2luKHZvaWQgKippbnN0YW5jZV9oYW5kbGUpIDog
 UmVtYXBQbHVnaW4oaW5zdGFuY2VfaGFuZGxlKSB7IH0KKysKKysgIFJlc3VsdCBkb1JlbWFwKGNv
 bnN0IFVybCAmbWFwX2Zyb21fdXJsLCBjb25zdCBVcmwgJm1hcF90b191cmwsIFRyYW5zYWN0aW9u
 ICZ0cmFuc2FjdGlvbiwgYm9vbCAmcmVkaXJlY3QpIHsKKysgICAgVXJsICZyZXF1ZXN0X3VybCA9
 IHRyYW5zYWN0aW9uLmdldENsaWVudFJlcXVlc3QoKS5nZXRVcmwoKTsKKysgICAgVFNfREVCVUco
 TE9HX1RBRywgImZyb20gVVJMIGlzIFslc10sIHRvIFVSTCBpcyBbJXNdLCByZXF1ZXN0IFVSTCBp
 cyBbJXNdIiwgbWFwX2Zyb21fdXJsLmdldFVybFN0cmluZygpLmNfc3RyKCksCisrICAgICAgICAg
 ICAgIG1hcF90b191cmwuZ2V0VXJsU3RyaW5nKCkuY19zdHIoKSwgcmVxdWVzdF91cmwuZ2V0VXJs
 U3RyaW5nKCkuY19zdHIoKSk7CisrICAgIGNvbnN0IHN0cmluZyAmcXVlcnkgPSByZXF1ZXN0X3Vy
 bC5nZXRRdWVyeSgpOworKyAgICBzdHJpbmcgcXVlcnlfcGFyYW1fcmF3OworKyAgICBtYXA8c3Ry
 aW5nLCBzdHJpbmc+IHF1ZXJ5X3BhcmFtczsKKysgICAgc3RkOjppc3RyaW5nc3RyZWFtIGlzcyhx
 dWVyeSk7CisrICAgIHdoaWxlIChzdGQ6OmdldGxpbmUoaXNzLCBxdWVyeV9wYXJhbV9yYXcsICcm
 JykpIHsKKysgICAgICBzaXplX3QgZXF1YWxzX3BvcyA9IHF1ZXJ5X3BhcmFtX3Jhdy5maW5kKCc9
 Jyk7CisrICAgICAgaWYgKGVxdWFsc19wb3MgJiYgKGVxdWFsc19wb3MgPCAocXVlcnlfcGFyYW1f
 cmF3LnNpemUoKSAtIDEpKSkgeworKyAgICAgICAgcXVlcnlfcGFyYW1zW3N0cmluZyhxdWVyeV9w
 YXJhbV9yYXcsIDAsIGVxdWFsc19wb3MpXSA9IAorKyAgICAgICAgICBzdHJpbmcocXVlcnlfcGFy
 YW1fcmF3LCBlcXVhbHNfcG9zICsgMSwgcXVlcnlfcGFyYW1fcmF3LnNpemUoKSAtIGVxdWFsc19w
 b3MgLSAxKTsKKysgICAgICB9CisrICAgIH0KKysgICAgaWYgKHF1ZXJ5X3BhcmFtcy5jb3VudCgi
 ZXJyb3IiKSkgeworKyAgICAgIHJldHVybiBSRVNVTFRfRVJST1I7CisrICAgIH0KKysgICAgY29u
 c3Qgc3RyaW5nICZyZW1hcCA9IHF1ZXJ5X3BhcmFtc1sicmVtYXAiXTsKKysgICAgYm9vbCBzdG9w
 ID0gKHF1ZXJ5X3BhcmFtc1sic3RvcCJdID09ICJ0cnVlIik7CisrICAgIFJlc3VsdCByZXN1bHQg
 PSBzdG9wID8gUkVTVUxUX05PX1JFTUFQX1NUT1AgOiBSRVNVTFRfTk9fUkVNQVA7CisrICAgIGlm
 IChyZW1hcCA9PSAidHJ1ZSIpIHsKKysgICAgICBjb25zdCBzdHJpbmcgJnBhdGggPSBxdWVyeV9w
 YXJhbXNbInBhdGgiXTsKKysgICAgICBpZiAocGF0aC5zaXplKCkpIHsKKysgICAgICAgIHJlcXVl
 c3RfdXJsLnNldFBhdGgocGF0aCk7CisrICAgICAgfQorKyAgICAgIGNvbnN0IHN0cmluZyAmaG9z
 dCA9IHF1ZXJ5X3BhcmFtc1siaG9zdCJdOworKyAgICAgIGlmIChob3N0LnNpemUoKSkgeworKyAg
 ICAgICAgcmVxdWVzdF91cmwuc2V0SG9zdChob3N0KTsKKysgICAgICB9CisrICAgICAgY29uc3Qg
 c3RyaW5nICZwb3J0X3N0ciA9IHF1ZXJ5X3BhcmFtc1sicG9ydCJdOworKyAgICAgIGlmIChwb3J0
 X3N0ci5zaXplKCkpIHsKKysgICAgICAgIHVpbnQxNl90IHBvcnQ7CisrICAgICAgICBpc3Muc3Ry
 KHBvcnRfc3RyKTsKKysgICAgICAgIGlzcyA+PiBwb3J0OworKyAgICAgICAgcmVxdWVzdF91cmwu
 c2V0UG9ydChwb3J0KTsKKysgICAgICB9CisrICAgICAgaWYgKHF1ZXJ5X3BhcmFtcy5jb3VudCgi
 cmVkaXJlY3QiKSkgeworKyAgICAgICAgcmVkaXJlY3QgPSB0cnVlOworKyAgICAgIH0KKysgICAg
 ICByZXN1bHQgPSBzdG9wID8gUkVTVUxUX0RJRF9SRU1BUF9TVE9QIDogUkVTVUxUX0RJRF9SRU1B
 UDsKKysgICAgfQorKyAgICByZXF1ZXN0X3VybC5zZXRRdWVyeSgiIik7CisrICAgIFRTX0RFQlVH
 KExPR19UQUcsICJSZXF1ZXN0IFVSTCBpcyBub3cgWyVzXSIsIHJlcXVlc3RfdXJsLmdldFVybFN0
 cmluZygpLmNfc3RyKCkpOworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorK307CisrCisrVHNS
 ZXR1cm5Db2RlIFRTUmVtYXBOZXdJbnN0YW5jZShpbnQgYXJnYyBBVFNDUFBBUElfVU5VU0VELCBj
 aGFyICphcmd2W10gQVRTQ1BQQVBJX1VOVVNFRCwgdm9pZCAqKmluc3RhbmNlX2hhbmRsZSwgY2hh
 ciAqZXJyYnVmIEFUU0NQUEFQSV9VTlVTRUQsIGludCBlcnJidWZfc2l6ZSBBVFNDUFBBUElfVU5V
 U0VEKSB7CisrICBNeVJlbWFwUGx1Z2luICpuZXdfcmVtYXBfcGx1Z2luID0gbmV3IE15UmVtYXBQ
 bHVnaW4oaW5zdGFuY2VfaGFuZGxlKTsKKysgIHJldHVybiBUU19TVUNDRVNTOworK30KK2RpZmYg
 LXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3JlcXVlc3RfY29va2llcy9NYWtlZmlsZS5hbSBs
 aWIvYXRzY3BwYXBpL2V4YW1wbGVzL3JlcXVlc3RfY29va2llcy9NYWtlZmlsZS5hbQorLS0tIGxp
 Yi9hdHNjcHBhcGkvZXhhbXBsZXMvcmVxdWVzdF9jb29raWVzL01ha2VmaWxlLmFtCTE5NzAtMDEt
 MDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9y
 ZXF1ZXN0X2Nvb2tpZXMvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTg1MzI1MDEg
 KzA4MDAKK0BAIC0wLDAgKzEsMjkgQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT
 b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJpYnV0
 b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1
 dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVnYXJk
 aW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMg
 IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysjICAi
 TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
 CisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
 ZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
 U0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
 ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
 ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQgV0FS
 UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
 aWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
 bmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
 KysKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNs
 dWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorK3RhcmdldD1S
 ZXF1ZXN0Q29va2llcy5zbworK3BrZ2xpYmRpciA9ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJf
 TFRMSUJSQVJJRVMgPSBSZXF1ZXN0Q29va2llcy5sYQorK1JlcXVlc3RDb29raWVzX2xhX1NPVVJD
 RVMgPSBSZXF1ZXN0Q29va2llcy5jYworK1JlcXVlc3RDb29raWVzX2xhX0xERkxBR1MgPSAtbW9k
 dWxlIC1hdm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkv
 c3JjLyAtbGF0c2NwcGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFyZ2V0KQorKwor
 K2NsZWFuLWxvY2FsOgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBp
 L2V4YW1wbGVzL3JlcXVlc3RfY29va2llcy9SZXF1ZXN0Q29va2llcy5jYyBsaWIvYXRzY3BwYXBp
 L2V4YW1wbGVzL3JlcXVlc3RfY29va2llcy9SZXF1ZXN0Q29va2llcy5jYworLS0tIGxpYi9hdHNj
 cHBhcGkvZXhhbXBsZXMvcmVxdWVzdF9jb29raWVzL1JlcXVlc3RDb29raWVzLmNjCTE5NzAtMDEt
 MDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9y
 ZXF1ZXN0X2Nvb2tpZXMvUmVxdWVzdENvb2tpZXMuY2MJMjAxMy0xMS0xMSAxNDowMzoxMi42OTg1
 MzI1MDEgKzA4MDAKK0BAIC0wLDAgKzEsNjcgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBB
 cGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29u
 dHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlz
 dHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJl
 Z2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUK
 KysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysg
 ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
 Y2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
 Y2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
 RS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
 dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
 IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJ
 RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
 KysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
 ZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLwor
 KworKyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKyNpbmNsdWRlIDxhdHNjcHBh
 cGkvR2xvYmFsUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9Mb2dnZXIuaD4KKysKKyt1
 c2luZyBuYW1lc3BhY2UgYXRzY3BwYXBpOworK3VzaW5nIHN0ZDo6c3RyaW5nOworKworKyNkZWZp
 bmUgTE9HX1RBRyAicmVxdWVzdF9jb29raWVzIgorKworK2NsYXNzIE15R2xvYmFsUGx1Z2luIDog
 R2xvYmFsUGx1Z2luIHsKKytwdWJsaWM6CisrICBNeUdsb2JhbFBsdWdpbigpIHsKKysgICAgR2xv
 YmFsUGx1Z2luOjpyZWdpc3Rlckhvb2soUGx1Z2luOjpIT09LX1JFQURfUkVRVUVTVF9IRUFERVJT
 X1BSRV9SRU1BUCk7CisrICB9CisrcHJpdmF0ZToKKysgIHZvaWQgaGFuZGxlUmVhZFJlcXVlc3RI
 ZWFkZXJzUHJlUmVtYXAoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIEhlYWRlcnMg
 JmhlYWRlcnMgPSB0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXF1ZXN0KCkuZ2V0SGVhZGVycygpOwor
 KyAgICBUU19ERUJVRyhMT0dfVEFHLCAiUmVhZCByZXF1ZXN0Iik7CisrICAgIGxvZ1JlcXVlc3RD
 b29raWVzKGhlYWRlcnMpOworKyAgICBoZWFkZXJzLmFkZENvb2tpZSgiZ2VuLWMxIiwgImdlbi12
 MiIpOworKyAgICBUU19ERUJVRyhMT0dfVEFHLCAiQWRkZWQgY29va2llIik7CisrICAgIGxvZ1Jl
 cXVlc3RDb29raWVzKGhlYWRlcnMpOworKyAgICBoZWFkZXJzLnNldENvb2tpZSgiYzEiLCAiY29y
 cmVjdHYiKTsKKysgICAgVFNfREVCVUcoTE9HX1RBRywgIlNldCBjb29raWUiKTsKKysgICAgbG9n
 UmVxdWVzdENvb2tpZXMoaGVhZGVycyk7CisrICAgIGhlYWRlcnMuZGVsZXRlQ29va2llKCJnZW4t
 YzEiKTsKKysgICAgVFNfREVCVUcoTE9HX1RBRywgIkRlbGV0ZWQgY29va2llIik7CisrICAgIGxv
 Z1JlcXVlc3RDb29raWVzKGhlYWRlcnMpOworKyAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysg
 IH0KKysKKysgIHZvaWQgbG9nUmVxdWVzdENvb2tpZXMoSGVhZGVycyAmaGVhZGVycykgeworKyAg
 ICBUU19ERUJVRyhMT0dfVEFHLCAiQ29va2llIGhlYWRlciBpcyBbJXNdIiwgaGVhZGVycy5nZXRK
 b2luZWRWYWx1ZXMoIkNvb2tpZSIpLmNfc3RyKCkpOworKyAgICBzdHJpbmcgbWFwX3N0cjsKKysg
 ICAgY29uc3QgSGVhZGVyczo6UmVxdWVzdENvb2tpZU1hcCAmY29va2llX21hcCA9IGhlYWRlcnMu
 Z2V0UmVxdWVzdENvb2tpZXMoKTsKKysgICAgZm9yIChIZWFkZXJzOjpSZXF1ZXN0Q29va2llTWFw
 Ojpjb25zdF9pdGVyYXRvciBjb29raWVfaXRlciA9IGNvb2tpZV9tYXAuYmVnaW4oKSwgY29va2ll
 X2VuZCA9IGNvb2tpZV9tYXAuZW5kKCk7CisrICAgICAgICAgY29va2llX2l0ZXIgIT0gY29va2ll
 X2VuZDsgKytjb29raWVfaXRlcikgeworKyAgICAgIG1hcF9zdHIgKz0gY29va2llX2l0ZXItPmZp
 cnN0OworKyAgICAgIG1hcF9zdHIgKz0gIjogIjsKKysgICAgICBtYXBfc3RyICs9IEhlYWRlcnM6
 OmdldEpvaW5lZFZhbHVlcyhjb29raWVfaXRlci0+c2Vjb25kKTsKKysgICAgICBtYXBfc3RyICs9
 ICJcbiI7CisrICAgIH0KKysgICAgVFNfREVCVUcoTE9HX1RBRywgIkNvb2tpZSBtYXAgaXNcbiVz
 IiwgbWFwX3N0ci5jX3N0cigpKTsKKysgIH0KKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0KGlu
 dCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElfVU5V
 U0VEKSB7CisrICBuZXcgTXlHbG9iYWxQbHVnaW4oKTsKKyt9CitkaWZmIC1ydU4gbGliL2F0c2Nw
 cGFwaS9leGFtcGxlcy9zZXJ2ZXJyZXNwb25zZS9NYWtlZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4
 YW1wbGVzL3NlcnZlcnJlc3BvbnNlL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy9zZXJ2ZXJyZXNwb25zZS9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAw
 MDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc2VydmVycmVzcG9uc2UvTWFr
 ZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMzoxMi42OTg1MzI1MDEgKzA4MDAKK0BAIC0wLDAgKzEs
 MjkgQEAKKysjCisrIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
 IChBU0YpIHVuZGVyIG9uZQorKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1l
 bnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3Jr
 IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25l
 cnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMgIHRvIHlvdSB1bmRlciB0aGUg
 QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysjICAiTGljZW5zZSIpOyB5b3UgbWF5
 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrIyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKyMKKysjICAg
 ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrIworKyMgIFVu
 bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
 c29mdHdhcmUKKysjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
 ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
 T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyMgIFNlZSB0aGUg
 TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
 bmQKKysjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKytBTV9DUFBGTEFHUyA9IC1J
 JCh0b3Bfc3JjZGlyKS9saWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlIC1Xbm8tdW51c2VkLXZhcmlh
 YmxlCisrCisrdGFyZ2V0PVNlcnZlclJlc3BvbnNlLnNvCisrcGtnbGliZGlyID0gJHtwa2dsaWJl
 eGVjZGlyfQorK3BrZ2xpYl9MVExJQlJBUklFUyA9IFNlcnZlclJlc3BvbnNlLmxhCisrU2VydmVy
 UmVzcG9uc2VfbGFfU09VUkNFUyA9IFNlcnZlclJlc3BvbnNlLmNjCisrU2VydmVyUmVzcG9uc2Vf
 bGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLXNoYXJlZCAtTCQodG9wX3NyY2Rp
 cikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRzY3BwYXBpCisrCisrYWxsOgorKwlsbiAtc2YgLmxp
 YnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9jYWw6CisrCXJtIC1mICQodGFyZ2V0KQorZGlmZiAt
 cnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc2VydmVycmVzcG9uc2UvU2VydmVyUmVzcG9uc2Uu
 Y2MgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9zZXJ2ZXJyZXNwb25zZS9TZXJ2ZXJSZXNwb25zZS5j
 YworLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc2VydmVycmVzcG9uc2UvU2VydmVyUmVzcG9u
 c2UuY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3Bw
 YXBpL2V4YW1wbGVzL3NlcnZlcnJlc3BvbnNlL1NlcnZlclJlc3BvbnNlLmNjCTIwMTMtMTEtMTEg
 MTQ6MDM6MTIuNjk4NTMyNTAxICswODAwCitAQCAtMCwwICsxLDEwNSBAQAorKy8qKgorKyAgTGlj
 ZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQor
 KyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElD
 RSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZv
 cm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vu
 c2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
 biAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
 cHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEg
 Y29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
 aWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
 bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5k
 ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJ
 VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
 cyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
 Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
 Y2Vuc2UuCisrICovCisrCisrI2luY2x1ZGUgPGlvc3RyZWFtPgorKyNpbmNsdWRlIDxhdHNjcHBh
 cGkvR2xvYmFsUGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+Cisr
 I2luY2x1ZGUgPGF0c2NwcGFwaS91dGlscy5oPgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBh
 cGk7CisrCisrdXNpbmcgc3RkOjpjb3V0OworK3VzaW5nIHN0ZDo6ZW5kbDsKKyt1c2luZyBzdGQ6
 Omxpc3Q7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrY2xhc3MgU2VydmVyUmVzcG9uc2VQbHVn
 aW4gOiBwdWJsaWMgR2xvYmFsUGx1Z2luIHsKKytwdWJsaWM6CisrICBTZXJ2ZXJSZXNwb25zZVBs
 dWdpbigpIHsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVFVRVNUX0hFQURFUlMpOwor
 KyAgICByZWdpc3Rlckhvb2soSE9PS19SRUFEX1JFU1BPTlNFX0hFQURFUlMpOworKyAgICByZWdp
 c3Rlckhvb2soSE9PS19TRU5EX1JFU1BPTlNFX0hFQURFUlMpOworKyAgfQorKworKyAgdm9pZCBo
 YW5kbGVTZW5kUmVxdWVzdEhlYWRlcnMoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAg
 IC8vIEhlcmUgd2UgY2FuIGRlY2lkZSB0byBhYm9ydCB0aGUgcmVxdWVzdCB0byB0aGUgb3JpZ2lu
 ICh3ZSBjYW4gZG8gdGhpcyBlYXJsaWVyIHRvbykKKysgICAgLy8gYW5kIGp1c3Qgc2VuZCB0aGUg
 dXNlciBhbiBlcnJvciBwYWdlLgorKyAgICBpZih0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXF1ZXN0
 KCkuZ2V0VXJsKCkuZ2V0UXVlcnkoKS5maW5kKCJlcnJvcj0xIikgIT0gc3RyaW5nOjpucG9zKSB7
 CisrICAgICAgLy8gR2l2ZSB0aGlzIHVzZXIgYW4gZXJyb3IgcGFnZSBhbmQgZG9uJ3QgbWFrZSBh
 IHJlcXVlc3QgdG8gYW4gb3JpZ2luLgorKyAgICAgIGNvdXQgPDwgIlNlbmRpbmcgdGhpcyByZXF1
 ZXN0IGFuIGVycm9yIHBhZ2UiIDw8IGVuZGw7CisrICAgICAgdHJhbnNhY3Rpb24uZXJyb3IoIlRo
 aXMgaXMgdGhlIGVycm9yIHJlc3BvbnNlLCBidXQgdGhlIHJlc3BvbnNlIGNvZGUgaXMgNTAwLiIK
 KysgICAgICAgICAgICAgICAgICAgICAgICAiSW4gdGhpcyBleGFtcGxlIG5vIHJlcXVlc3Qgd2Fz
 IG1hZGUgdG8gdGhlIG9yZ2luLiIpOworKyAgICAgIC8vIEhUVFAvMS4xIDUwMCBJTktBcGkgRXJy
 b3IKKysgICAgfSBlbHNlIHsKKysgICAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgICAgfQor
 KyAgICBjb3V0IDw8ICJTZXJ2ZXIgcmVxdWVzdCBoZWFkZXJzIGFyZSIgPDwgZW5kbDsKKysgICAg
 cHJpbnRIZWFkZXJzKHRyYW5zYWN0aW9uLmdldFNlcnZlclJlcXVlc3QoKS5nZXRIZWFkZXJzKCkp
 OworKyAgfQorKworKyAgdm9pZCBoYW5kbGVSZWFkUmVzcG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9u
 ICZ0cmFuc2FjdGlvbikgeworKyAgICBjb3V0IDw8ICJIZWxsbyBmcm9tIGhhbmRsZVJlYWRSZXNw
 b25zZUhlYWRlcnMhIiA8PCBlbmRsOworKyAgICBjb3V0IDw8ICJTZXJ2ZXIgcmVzcG9uc2UgaGVh
 ZGVycyBhcmUiIDw8IGVuZGw7CisrICAgIFJlc3BvbnNlICZzZXJ2ZXJfcmVzcG9uc2UgPSB0cmFu
 c2FjdGlvbi5nZXRTZXJ2ZXJSZXNwb25zZSgpOworKyAgICBjb3V0IDw8ICJSZWFzb24gcGhyYXNl
 IGlzICIgPDwgc2VydmVyX3Jlc3BvbnNlLmdldFJlYXNvblBocmFzZSgpIDw8IGVuZGw7CisrICAg
 IHByaW50SGVhZGVycyhzZXJ2ZXJfcmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKKysgICAgdHJhbnNh
 Y3Rpb24ucmVzdW1lKCk7CisrICB9CisrCisrICB2b2lkIGhhbmRsZVNlbmRSZXNwb25zZUhlYWRl
 cnMoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIGNvdXQgPDwgIkhlbGxvIGZyb20g
 aGFuZGxlU2VuZFJlc3BvbnNlSGVhZGVycyEiIDw8IGVuZGw7CisrICAgIGNvdXQgPDwgIkNsaWVu
 dCByZXNwb25zZSBoZWFkZXJzIGFyZSIgPDwgZW5kbDsKKysgICAgcHJpbnRIZWFkZXJzKHRyYW5z
 YWN0aW9uLmdldENsaWVudFJlc3BvbnNlKCkuZ2V0SGVhZGVycygpKTsKKysKKysgICAgLy8KKysg
 ICAgLy8gSWYgdGhlIHVybCBjb250YWlucyBhIHF1ZXJ5IHBhcmFtZXRlciByZWRpcmVjdD0xIHdl
 IHdpbGwgc2VuZCB0aGUKKysgICAgLy8gdXNlciB0byB0byBzb21ld2hlcmUgZWxzZS4gT2J2aW91
 c2x5IHRoaXMgaXMgYSBzaWxseSBleGFtcGxlCisrICAgIC8vIHNpbmNlIHdlIHNob3VsZCB0ZWNo
 bmljYWxseSBkZXRlY3QgdGhpcyBsb25nIGJlZm9yZSB0aGUgb3JpZ2luCisrICAgIC8vIHJlcXVl
 c3QgYW5kIHByZXZlbnQgdGhlIG9yaWdpbiByZXF1ZXN0IGluIHRoZSBmaXJzdCBwbGFjZS4KKysg
 ICAgLy8KKysKKysgICAgaWYodHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVxdWVzdCgpLmdldFVybCgp
 LmdldFF1ZXJ5KCkuZmluZCgicmVkaXJlY3Q9MSIpICE9IHN0cmluZzo6bnBvcykgeworKyAgICAg
 IGNvdXQgPDwgIlNlbmRpbmcgdGhpcyBndXkgdG8gZ29vZ2xlLiIgPDwgZW5kbDsKKysgICAgICB0
 cmFuc2FjdGlvbi5nZXRDbGllbnRSZXNwb25zZSgpLmdldEhlYWRlcnMoKS5zZXQoIkxvY2F0aW9u
 IiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIpOworKyAgICAgIHRyYW5zYWN0aW9uLmdldENsaWVu
 dFJlc3BvbnNlKCkuc2V0U3RhdHVzQ29kZShIVFRQX1NUQVRVU19NT1ZFRF9URU1QT1JBUklMWSk7
 CisrICAgICAgdHJhbnNhY3Rpb24uZ2V0Q2xpZW50UmVzcG9uc2UoKS5zZXRSZWFzb25QaHJhc2Uo
 IkNvbWUgQmFjayBMYXRlciIpOworKyAgICAgIC8vIEhUVFAvMS4xIDMwMiBDb21lIEJhY2sgTGF0
 ZXIKKysgICAgfQorKworKyAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKysKKytwcml2
 YXRlOgorKyAgdm9pZCBwcmludEhlYWRlcnMoY29uc3QgSGVhZGVycyAmaGVhZGVycykgeworKyAg
 ICBmb3IgKEhlYWRlcnM6OmNvbnN0X2l0ZXJhdG9yIGhlYWRlcl9pdGVyID0gaGVhZGVycy5iZWdp
 bigpLCBoZWFkZXJfZW5kID0gaGVhZGVycy5lbmQoKTsKKysgICAgICAgICBoZWFkZXJfaXRlciAh
 PSBoZWFkZXJfZW5kOyArK2hlYWRlcl9pdGVyKSB7CisrICAgICAgY29uc3Qgc3RyaW5nICZuYW1l
 ID0gaGVhZGVyX2l0ZXItPmZpcnN0OworKyAgICAgIGNvbnN0IGxpc3Q8c3RyaW5nPiAmdmFsdWVf
 bGlzdCA9IGhlYWRlcl9pdGVyLT5zZWNvbmQ7CisrICAgICAgY291dCA8PCAiSGVhZGVyLiAiIDw8
 IG5hbWUgPDwgICI6ICIgPDwgZW5kbDsKKysgICAgICBmb3IgKGxpc3Q8c3RyaW5nPjo6Y29uc3Rf
 aXRlcmF0b3IgdmFsdWVfaXRlciA9IHZhbHVlX2xpc3QuYmVnaW4oKSwgdmFsdWVfZW5kID0gdmFs
 dWVfbGlzdC5lbmQoKTsKKysgICAgICAgICAgIHZhbHVlX2l0ZXIgIT0gdmFsdWVfZW5kOyArK3Zh
 bHVlX2l0ZXIpIHsKKysgICAgICAgIGNvdXQgPDwgIlx0IiA8PCAqdmFsdWVfaXRlciA8PCBlbmRs
 OworKyAgICAgIH0KKysgICAgfQorKyAgICBjb3V0IDw8IGVuZGw7CisrICB9CisrfTsKKysKKyt2
 b2lkIFRTUGx1Z2luSW5pdChpbnQgYXJnYyBBVFNDUFBBUElfVU5VU0VELCBjb25zdCBjaGFyICph
 cmd2W10gQVRTQ1BQQVBJX1VOVVNFRCkgeworKyAgR2xvYmFsUGx1Z2luICppbnN0YW5jZSA9IG5l
 dyBTZXJ2ZXJSZXNwb25zZVBsdWdpbigpOworK30KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4
 YW1wbGVzL3N0YXRfZXhhbXBsZS9NYWtlZmlsZS5hbSBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3N0
 YXRfZXhhbXBsZS9NYWtlZmlsZS5hbQorLS0tIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc3RhdF9l
 eGFtcGxlL01ha2VmaWxlLmFtCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisr
 KysgbGliL2F0c2NwcGFwaS9leGFtcGxlcy9zdGF0X2V4YW1wbGUvTWFrZWZpbGUuYW0JMjAxMy0x
 MS0xMSAxNDowMzoxMi42OTg1MzI1MDEgKzA4MDAKK0BAIC0wLDAgKzEsMzAgQEAKKysjCisrIyAg
 TGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9u
 ZQorKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBO
 T1RJQ0UgZmlsZQorKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFs
 IGluZm9ybWF0aW9uCisrIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNG
 IGxpY2Vuc2VzIHRoaXMgZmlsZQorKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
 IFZlcnNpb24gMi4wICh0aGUKKysjICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
 aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkg
 b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKyMKKysjICAgICAgaHR0cDovL3d3dy5h
 cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrIworKyMgIFVubGVzcyByZXF1aXJlZCBi
 eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysjICBk
 aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
 IEJBU0lTLAorKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
 LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
 IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysjICBsaW1pdGF0
 aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGly
 KS9saWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlIC1Xbm8tdW51c2VkLXZhcmlhYmxlCisrCisrdGFy
 Z2V0PVN0YXRFeGFtcGxlLnNvCisrcGtnbGliZGlyID0gJHtwa2dsaWJleGVjZGlyfQorK3BrZ2xp
 Yl9MVExJQlJBUklFUyA9IFN0YXRFeGFtcGxlLmxhCisrU3RhdEV4YW1wbGVfbGFfU09VUkNFUyA9
 IFN0YXRFeGFtcGxlLmNjCisrU3RhdEV4YW1wbGVfbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lk
 LXZlcnNpb24gLXNoYXJlZCAtTCQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvIC1sYXRz
 Y3BwYXBpCisrCisrYWxsOgorKwlsbiAtc2YgLmxpYnMvJCh0YXJnZXQpCisrCisrY2xlYW4tbG9j
 YWw6CisrCXJtIC1mICQodGFyZ2V0KQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMv
 c3RhdF9leGFtcGxlL1N0YXRFeGFtcGxlLmNjIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvc3RhdF9l
 eGFtcGxlL1N0YXRFeGFtcGxlLmNjCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy9zdGF0X2V4
 YW1wbGUvU3RhdEV4YW1wbGUuY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAK
 KysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3N0YXRfZXhhbXBsZS9TdGF0RXhhbXBsZS5jYwky
 MDEzLTExLTExIDE0OjAzOjEyLjY5ODUzMjUwMSArMDgwMAorQEAgLTAsMCArMSw3MSBAQAorKy8q
 KgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVu
 ZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUg
 dGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRp
 b25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUg
 QVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
 ZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
 ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkg
 b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBh
 Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
 cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJp
 YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
 UywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
 ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
 aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5k
 ZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9HbG9iYWxQ
 bHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0xvZ2dlci5oPgorKyNpbmNsdWRlIDxhdHNj
 cHBhcGkvU3RhdC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luSW5pdC5oPgorKyNpbmNs
 dWRlIDxjc3RyaW5nPgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrdXNpbmcgc3Rk
 OjpzdHJpbmc7CisrCisrbmFtZXNwYWNlIHsKKysvLyBUaGlzIGlzIGZvciB0aGUgLVQgdGFnIGRl
 YnVnZ2luZworKy8vIFRvIHZpZXcgdGhlIGRlYnVnIG1lc3NhZ2VzIC4vdHJhZmZpY19zZXJ2ZXIg
 LVQgInN0YXRfZXhhbXBsZS4qIgorKyNkZWZpbmUgVEFHICJzdGF0X2V4YW1wbGUiCisrCisrLy8g
 VGhpcyB3aWxsIGJlIHRoZSBhY3R1YWwgc3RhdCBuYW1lCisrLy8gWW91IGNhbiB2aWV3IGl0IHVz
 aW5nIHRyYWZmaWNfbGluZSAtciBzdGF0X2V4YW1wbGUKKytjb25zdCBzdHJpbmcgU1RBVF9OQU1F
 ID0gInN0YXRfZXhhbXBsZSI7CisrCisrLy8gVGhpcyBpcyB0aGUgc3RhdCB3ZSdsbCBiZSB1c2lu
 ZywgeW91IGNhbiB2aWV3IGl0J3MgdmFsdWUKKysvLyB1c2luZyB0cmFmZmljX2xpbmUgLXIgc3Rh
 dF9leGFtcGxlCisrU3RhdCBzdGF0OworK30KKysKKysvKgorKyAqIFRoaXMgaXMgYSBzaW1wbGUg
 cGx1Z2luIHRoYXQgd2lsbCBpbmNyZW1lbnQgYSBjb3VudGVyCisrICogZXZlcnl0aW1lIGEgcmVx
 dWVzdCBjb21lcyBpbi4KKysgKi8KKytjbGFzcyBHbG9iYWxIb29rUGx1Z2luIDogcHVibGljIEds
 b2JhbFBsdWdpbiB7CisrcHVibGljOgorKyAgR2xvYmFsSG9va1BsdWdpbigpIHsKKysgICAgVFNf
 REVCVUcoVEFHLCAiUmVnaXN0ZXJpbmcgYSBnbG9iYWwgaG9vayBIT09LX1JFQURfUkVRVUVTVF9I
 RUFERVJTX1BPU1RfUkVNQVAiKTsKKysgICAgcmVnaXN0ZXJIb29rKEhPT0tfUkVBRF9SRVFVRVNU
 X0hFQURFUlNfUE9TVF9SRU1BUCk7CisrICB9CisrCisrICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVh
 ZFJlcXVlc3RIZWFkZXJzUG9zdFJlbWFwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAg
 ICBUU19ERUJVRyhUQUcsICJSZWNlaXZlZCBhIHJlcXVlc3QsIGluY3JlbWVudGluZyB0aGUgY291
 bnRlci4iKTsKKysgICAgc3RhdC5pbmNyZW1lbnQoKTsKKysgICAgVFNfREVCVUcoVEFHLCAiU3Rh
 dCAnJXMnIHZhbHVlID0gJWxkIiwgU1RBVF9OQU1FLmNfc3RyKCksIHN0YXQuZ2V0KCkpOworKyAg
 ICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgIH0KKyt9OworKworK3ZvaWQgVFNQbHVnaW5Jbml0
 KGludCBhcmdjIEFUU0NQUEFQSV9VTlVTRUQsIGNvbnN0IGNoYXIgKmFyZ3ZbXSBBVFNDUFBBUElf
 VU5VU0VEKSB7CisrICBUU19ERUJVRyhUQUcsICJMb2FkZWQgc3RhdF9leGFtcGxlIHBsdWdpbiIp
 OworKworKyAgLy8gU2luY2UgdGhpcyBzdGF0IGlzIG5vdCBwZXJzaXN0ZW50IGl0IHdpbGwgYmUg
 aW5pdGlhbGl6ZWQgdG8gMC4KKysgIHN0YXQuaW5pdChTVEFUX05BTUUsIFN0YXQ6OlNZTkNfQ09V
 TlQsIHRydWUpOworKyAgc3RhdC5zZXQoMCk7CisrCisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNl
 ID0gbmV3IEdsb2JhbEhvb2tQbHVnaW4oKTsKKyt9CisrCitkaWZmIC1ydU4gbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy90aW1lb3V0X2V4YW1wbGUvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy90aW1lb3V0X2V4YW1wbGUvTWFrZWZpbGUuYW0KKy0tLSBsaWIvYXRzY3BwYXBpL2V4YW1w
 bGVzL3RpbWVvdXRfZXhhbXBsZS9NYWtlZmlsZS5hbQkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAw
 MDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvdGltZW91dF9leGFtcGxlL01h
 a2VmaWxlLmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk4NTMyNTAxICswODAwCitAQCAtMCwwICsx
 LDMwIEBACisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlv
 biAoQVNGKSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVt
 ZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29y
 ayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3du
 ZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhl
 IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExp
 Y2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAg
 ICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBV
 bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
 IHNvZnR3YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
 ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
 SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhl
 IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
 YW5kCisrIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrCisrQU1fQ1BQRkxBR1Mg
 PSAtSSQodG9wX3NyY2RpcikvbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZSAtV25vLXVudXNlZC12
 YXJpYWJsZQorKworK3RhcmdldD1UaW1lb3V0RXhhbXBsZVBsdWdpbi5zbworK3BrZ2xpYmRpciA9
 ICR7cGtnbGliZXhlY2Rpcn0KKytwa2dsaWJfTFRMSUJSQVJJRVMgPSBUaW1lb3V0RXhhbXBsZVBs
 dWdpbi5sYQorK1RpbWVvdXRFeGFtcGxlUGx1Z2luX2xhX1NPVVJDRVMgPSBUaW1lb3V0RXhhbXBs
 ZVBsdWdpbi5jYworK1RpbWVvdXRFeGFtcGxlUGx1Z2luX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1h
 dm9pZC12ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjLyAt
 bGF0c2NwcGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFyZ2V0KQorKworK2NsZWFu
 LWxvY2FsOgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1w
 bGVzL3RpbWVvdXRfZXhhbXBsZS9UaW1lb3V0RXhhbXBsZVBsdWdpbi5jYyBsaWIvYXRzY3BwYXBp
 L2V4YW1wbGVzL3RpbWVvdXRfZXhhbXBsZS9UaW1lb3V0RXhhbXBsZVBsdWdpbi5jYworLS0tIGxp
 Yi9hdHNjcHBhcGkvZXhhbXBsZXMvdGltZW91dF9leGFtcGxlL1RpbWVvdXRFeGFtcGxlUGx1Z2lu
 LmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFw
 aS9leGFtcGxlcy90aW1lb3V0X2V4YW1wbGUvVGltZW91dEV4YW1wbGVQbHVnaW4uY2MJMjAxMy0x
 MS0xMSAxNDowMzoxMi42OTk1MzI0NzkgKzA4MDAKK0BAIC0wLDAgKzEsNTYgQEAKKysvKioKKysg
 IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBv
 bmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBO
 T1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwg
 aW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBs
 aWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
 cnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
 ZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFp
 biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5v
 cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
 YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVk
 IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisr
 ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
 cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
 bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRo
 ZSBMaWNlbnNlLgorKyAqLworKworKworKyNpbmNsdWRlIDxpb3N0cmVhbT4KKysjaW5jbHVkZSA8
 YXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvTG9nZ2VyLmg+
 CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+CisrCisrdXNpbmcgbmFtZXNwYWNl
 IGF0c2NwcGFwaTsKKysKKysjZGVmaW5lIFRBRyAidGltZW91dF9leGFtcGxlX3BsdWdpbiIKKysK
 KytjbGFzcyBUaW1lb3V0RXhhbXBsZVBsdWdpbiA6IHB1YmxpYyBHbG9iYWxQbHVnaW4geworK3B1
 YmxpYzoKKysgIFRpbWVvdXRFeGFtcGxlUGx1Z2luKCkgeworKyAgICByZWdpc3Rlckhvb2soSE9P
 S19SRUFEX1JFUVVFU1RfSEVBREVSU19QUkVfUkVNQVApOworKyAgICByZWdpc3Rlckhvb2soSE9P
 S19TRU5EX1JFU1BPTlNFX0hFQURFUlMpOworKyAgfQorKworKyAgdmlydHVhbCB2b2lkIGhhbmRs
 ZVNlbmRSZXNwb25zZUhlYWRlcnMoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIFRT
 X0RFQlVHKFRBRywgIlNlbmRpbmcgcmVzcG9uc2UgaGVhZGVycyB0byB0aGUgY2xpZW50LCBzdGF0
 dXM9JWQiLCB0cmFuc2FjdGlvbi5nZXRDbGllbnRSZXNwb25zZSgpLmdldFN0YXR1c0NvZGUoKSk7
 CisrICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAgfQorKworKyAgdmlydHVhbCB2b2lkIGhh
 bmRsZVJlYWRSZXF1ZXN0SGVhZGVyc1ByZVJlbWFwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikg
 eworKyAgICBUU19ERUJVRyhUQUcsICJTZXR0aW5nIGFsbCB0aW1lb3V0cyB0byAxbXMsIHRoaXMg
 d2lsbCBsaWtlbHkgY2F1c2UgdGhlIHRyYW5zYWN0aW9uIHRvIHJlY2VpdmUgYSA1MDQuIik7Cisr
 ICAgIHRyYW5zYWN0aW9uLnNldFRpbWVvdXQoVHJhbnNhY3Rpb246OlRJTUVPVVRfQ09OTkVDVCwg
 MSk7CisrICAgIHRyYW5zYWN0aW9uLnNldFRpbWVvdXQoVHJhbnNhY3Rpb246OlRJTUVPVVRfQUNU
 SVZFLCAxKTsKKysgICAgdHJhbnNhY3Rpb24uc2V0VGltZW91dChUcmFuc2FjdGlvbjo6VElNRU9V
 VF9ETlMsIDEpOworKyAgICB0cmFuc2FjdGlvbi5zZXRUaW1lb3V0KFRyYW5zYWN0aW9uOjpUSU1F
 T1VUX05PX0FDVElWSVRZLCAxKTsKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7CisrICB9Cisr
 fTsKKysKKyt2b2lkIFRTUGx1Z2luSW5pdChpbnQgYXJnYyBBVFNDUFBBUElfVU5VU0VELCBjb25z
 dCBjaGFyICphcmd2W10gQVRTQ1BQQVBJX1VOVVNFRCkgeworKyAgVFNfREVCVUcoVEFHLCAiVFNQ
 bHVnaW5Jbml0Iik7CisrICBHbG9iYWxQbHVnaW4gKmluc3RhbmNlID0gbmV3IFRpbWVvdXRFeGFt
 cGxlUGx1Z2luKCk7CisrfQorKworKworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMv
 dHJhbnNhY3Rpb25ob29rL01ha2VmaWxlLmFtIGxpYi9hdHNjcHBhcGkvZXhhbXBsZXMvdHJhbnNh
 Y3Rpb25ob29rL01ha2VmaWxlLmFtCistLS0gbGliL2F0c2NwcGFwaS9leGFtcGxlcy90cmFuc2Fj
 dGlvbmhvb2svTWFrZWZpbGUuYW0JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAK
 KysrKyBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3RyYW5zYWN0aW9uaG9vay9NYWtlZmlsZS5hbQky
 MDEzLTExLTExIDE0OjAzOjEyLjY5MzUzMjI5MiArMDgwMAorQEAgLTAsMCArMSwzMCBAQAorKyMK
 KysjICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5k
 ZXIgb25lCisrIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUg
 dGhlIE5PVElDRSBmaWxlCisrIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0
 aW9uYWwgaW5mb3JtYXRpb24KKysjICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRo
 ZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGlj
 ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0
 aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysjICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91
 IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrIworKyMgICAgICBodHRwOi8v
 d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysjCisrIyAgVW5sZXNzIHJlcXVp
 cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQor
 KyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
 UyBJUyIgQkFTSVMsCisrIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
 IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrIyAgU2VlIHRoZSBMaWNlbnNlIGZv
 ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyMgIGxp
 bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9z
 cmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUgLVduby11bnVzZWQtdmFyaWFibGUKKysK
 Kyt0YXJnZXQ9VHJhbnNhY3Rpb25Ib29rUGx1Z2luLnNvCisrcGtnbGliZGlyID0gJHtwa2dsaWJl
 eGVjZGlyfQorK3BrZ2xpYl9MVExJQlJBUklFUyA9IFRyYW5zYWN0aW9uSG9va1BsdWdpbi5sYQor
 K1RyYW5zYWN0aW9uSG9va1BsdWdpbl9sYV9TT1VSQ0VTID0gVHJhbnNhY3Rpb25Ib29rUGx1Z2lu
 LmNjCisrVHJhbnNhY3Rpb25Ib29rUGx1Z2luX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12
 ZXJzaW9uIC1zaGFyZWQgLUwkKHRvcF9zcmNkaXIpL2xpYi9hdHNjcHBhcGkvc3JjLyAtbGF0c2Nw
 cGFwaQorKworK2FsbDoKKysJbG4gLXNmIC5saWJzLyQodGFyZ2V0KQorKworK2NsZWFuLWxvY2Fs
 OgorKwlybSAtZiAkKHRhcmdldCkKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL2V4YW1wbGVzL3Ry
 YW5zYWN0aW9uaG9vay9UcmFuc2FjdGlvbkhvb2tQbHVnaW4uY2MgbGliL2F0c2NwcGFwaS9leGFt
 cGxlcy90cmFuc2FjdGlvbmhvb2svVHJhbnNhY3Rpb25Ib29rUGx1Z2luLmNjCistLS0gbGliL2F0
 c2NwcGFwaS9leGFtcGxlcy90cmFuc2FjdGlvbmhvb2svVHJhbnNhY3Rpb25Ib29rUGx1Z2luLmNj
 CTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9l
 eGFtcGxlcy90cmFuc2FjdGlvbmhvb2svVHJhbnNhY3Rpb25Ib29rUGx1Z2luLmNjCTIwMTMtMTEt
 MTEgMTQ6MDM6MTIuNjkzNTMyMjkyICswODAwCitAQCAtMCwwICsxLDYwIEBACisrLyoqCisrICBM
 aWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25l
 CisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9U
 SUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGlu
 Zm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGlj
 ZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
 aW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
 Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4g
 YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3Jn
 L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
 ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1
 bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAg
 V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
 ZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
 dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
 TGljZW5zZS4KKysgKi8KKysKKysKKysjaW5jbHVkZSA8aW9zdHJlYW0+CisrI2luY2x1ZGUgPGF0
 c2NwcGFwaS9HbG9iYWxQbHVnaW4uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1RyYW5zYWN0aW9u
 UGx1Z2luLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW5Jbml0Lmg+CisrCisrdXNpbmcg
 bmFtZXNwYWNlIGF0c2NwcGFwaTsKKysKKytjbGFzcyBUcmFuc2FjdGlvbkhvb2tQbHVnaW4gOiBw
 dWJsaWMgYXRzY3BwYXBpOjpUcmFuc2FjdGlvblBsdWdpbiB7CisrcHVibGljOgorKyAgVHJhbnNh
 Y3Rpb25Ib29rUGx1Z2luKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgOiBUcmFuc2FjdGlvblBs
 dWdpbih0cmFuc2FjdGlvbikgeworKyAgICBjaGFyX3B0cl8gPSBuZXcgY2hhclsxMDBdOworKyAg
 ICBUcmFuc2FjdGlvblBsdWdpbjo6cmVnaXN0ZXJIb29rKEhPT0tfU0VORF9SRVNQT05TRV9IRUFE
 RVJTKTsKKysgICAgc3RkOjpjb3V0IDw8ICJDb25zdHJ1Y3RlZCEiIDw8IHN0ZDo6ZW5kbDsKKysg
 IH0KKysgIHZpcnR1YWwgflRyYW5zYWN0aW9uSG9va1BsdWdpbigpIHsKKysgICAgZGVsZXRlW10g
 Y2hhcl9wdHJfOyAvLyBjbGVhbnVwCisrICAgIHN0ZDo6Y291dCA8PCAiRGVzdHJveWVkISIgPDwg
 c3RkOjplbmRsOworKyAgfQorKyAgdm9pZCBoYW5kbGVTZW5kUmVzcG9uc2VIZWFkZXJzKFRyYW5z
 YWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAgICBzdGQ6OmNvdXQgPDwgIlNlbmQgcmVzcG9uc2Ug
 aGVhZGVycyEiIDw8IHN0ZDo6ZW5kbDsKKysgICAgdHJhbnNhY3Rpb24ucmVzdW1lKCk7CisrICB9
 CisrcHJpdmF0ZToKKysgIGNoYXIgKmNoYXJfcHRyXzsKKyt9OworKworK2NsYXNzIEdsb2JhbEhv
 b2tQbHVnaW4gOiBwdWJsaWMgYXRzY3BwYXBpOjpHbG9iYWxQbHVnaW4geworK3B1YmxpYzoKKysg
 IEdsb2JhbEhvb2tQbHVnaW4oKSB7CisrICAgIEdsb2JhbFBsdWdpbjo6cmVnaXN0ZXJIb29rKEhP
 T0tfUkVBRF9SRVFVRVNUX0hFQURFUlNfUFJFX1JFTUFQKTsKKysgIH0KKysgIHZpcnR1YWwgdm9p
 ZCBoYW5kbGVSZWFkUmVxdWVzdEhlYWRlcnNQcmVSZW1hcChUcmFuc2FjdGlvbiAmdHJhbnNhY3Rp
 b24pIHsKKysgICAgc3RkOjpjb3V0IDw8ICJIZWxsbyBmcm9tIGhhbmRsZVJlYWRSZXF1ZXNIZWFk
 ZXJzUHJlUmVtYXAhIiA8PCBzdGQ6OmVuZGw7CisrICAgIHRyYW5zYWN0aW9uLmFkZFBsdWdpbihu
 ZXcgVHJhbnNhY3Rpb25Ib29rUGx1Z2luKHRyYW5zYWN0aW9uKSk7CisrICAgIHRyYW5zYWN0aW9u
 LnJlc3VtZSgpOworKyAgfQorK307CisrCisrdm9pZCBUU1BsdWdpbkluaXQoaW50IGFyZ2MgQVRT
 Q1BQQVBJX1VOVVNFRCwgY29uc3QgY2hhciAqYXJndltdIEFUU0NQUEFQSV9VTlVTRUQpIHsKKysg
 IGF0c2NwcGFwaTo6R2xvYmFsUGx1Z2luICppbnN0YW5jZSA9IG5ldyBHbG9iYWxIb29rUGx1Z2lu
 KCk7CisrfQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL0FzeW5jSHR0cEZldGNoLmNjIGxp
 Yi9hdHNjcHBhcGkvc3JjL0FzeW5jSHR0cEZldGNoLmNjCistLS0gbGliL2F0c2NwcGFwaS9zcmMv
 QXN5bmNIdHRwRmV0Y2guY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysr
 KyBsaWIvYXRzY3BwYXBpL3NyYy9Bc3luY0h0dHBGZXRjaC5jYwkyMDEzLTExLTExIDE0OjAzOjEy
 LjcwNDUzMjU4MiArMDgwMAorQEAgLTAsMCArMSwxNzAgQEAKKysvKioKKysgIExpY2Vuc2VkIHRv
 IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1v
 cmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQor
 KyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24K
 KysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlz
 IGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
 aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
 bXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
 dGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
 TElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
 Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
 aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdB
 UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
 bGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
 bmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
 KyAqLworKworKy8qKgorKyAqIEBmaWxlIEFzeW5jSHR0cEZldGNoLmNjCisrICovCisrCisrI2lu
 Y2x1ZGUgImF0c2NwcGFwaS9Bc3luY0h0dHBGZXRjaC5oIgorKyNpbmNsdWRlIDx0cy90cy5oPgor
 KyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKysjaW5jbHVkZSAibG9nZ2luZ19pbnRlcm5hbC5oIgor
 KyNpbmNsdWRlICJ1dGlsc19pbnRlcm5hbC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBh
 cGk7CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrLyoqCisrICogQHByaXZhdGUKKysgKi8KKytz
 dHJ1Y3QgYXRzY3BwYXBpOjpBc3luY0h0dHBGZXRjaFN0YXRlIDogbm9uY29weWFibGUgeworKyAg
 UmVxdWVzdCByZXF1ZXN0XzsKKysgIFJlc3BvbnNlIHJlc3BvbnNlXzsKKysgIEFzeW5jSHR0cEZl
 dGNoOjpSZXN1bHQgcmVzdWx0XzsKKysgIGNvbnN0IHZvaWQgKmJvZHlfOworKyAgc2l6ZV90IGJv
 ZHlfc2l6ZV87CisrICBUU01CdWZmZXIgaGRyX2J1Zl87CisrICBUU01Mb2MgaGRyX2xvY187Cisr
 ICBzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hDb250cm9sbGVyQmFzZT4gZGlzcGF0Y2hfY29udHJv
 bGxlcl87CisrCisrICBBc3luY0h0dHBGZXRjaFN0YXRlKGNvbnN0IHN0cmluZyAmdXJsX3N0ciwg
 SHR0cE1ldGhvZCBodHRwX21ldGhvZCkKKysgICAgOiByZXF1ZXN0Xyh1cmxfc3RyLCBodHRwX21l
 dGhvZCwgSFRUUF9WRVJTSU9OXzFfMCksIHJlc3VsdF8oQXN5bmNIdHRwRmV0Y2g6OlJFU1VMVF9G
 QUlMVVJFKSwgYm9keV8oTlVMTCksCisrICAgICAgYm9keV9zaXplXygwKSwgaGRyX2J1Zl8oTlVM
 TCksIGhkcl9sb2NfKE5VTEwpIHsgfQorKyAgCisrICB+QXN5bmNIdHRwRmV0Y2hTdGF0ZSgpIHsK
 KysgICAgaWYgKGhkcl9sb2NfKSB7CisrICAgICAgVFNNTG9jIG51bGxfcGFyZW50X2xvYyA9IE5V
 TEw7CisrICAgICAgVFNIYW5kbGVNTG9jUmVsZWFzZShoZHJfYnVmXywgbnVsbF9wYXJlbnRfbG9j
 LCBoZHJfbG9jXyk7CisrICAgIH0KKysgICAgaWYgKGhkcl9idWZfKSB7CisrICAgICAgVFNNQnVm
 ZmVyRGVzdHJveShoZHJfYnVmXyk7CisrICAgIH0KKysgIH0KKyt9OworKworK25hbWVzcGFjZSB7
 CisrCisrY29uc3QgdW5zaWduZWQgaW50IExPQ0FMX0lQX0FERFJFU1MgPSAweDAxMDAwMDdmOwor
 K2NvbnN0IGludCBMT0NBTF9QT1JUID0gODA4MDsKKysKKytzdGF0aWMgaW50IGhhbmRsZUZldGNo
 RXZlbnRzKFRTQ29udCBjb250LCBUU0V2ZW50IGV2ZW50LCB2b2lkICplZGF0YSkgeworKyAgTE9H
 X0RFQlVHKCJGZXRjaCByZXN1bHQgcmV0dXJuZWQgZXZlbnQgPSAlZCwgZWRhdGEgPSAlcCIsIGV2
 ZW50LCBlZGF0YSk7CisrICBBc3luY0h0dHBGZXRjaCAqZmV0Y2hfcHJvdmlkZXIgPSBzdGF0aWNf
 Y2FzdDxBc3luY0h0dHBGZXRjaCAqPihUU0NvbnREYXRhR2V0KGNvbnQpKTsKKysgIEFzeW5jSHR0
 cEZldGNoU3RhdGUgKnN0YXRlID0gdXRpbHM6OmludGVybmFsOjpnZXRBc3luY0h0dHBGZXRjaFN0
 YXRlKCpmZXRjaF9wcm92aWRlcik7CisrICAKKysgIGlmIChldmVudCA9PSBzdGF0aWNfY2FzdDxp
 bnQ+KEFzeW5jSHR0cEZldGNoOjpSRVNVTFRfU1VDQ0VTUykpIHsKKysgICAgVFNIdHRwVHhuIHR4
 biA9IHN0YXRpY19jYXN0PFRTSHR0cFR4bj4oZWRhdGEpOworKyAgICBpbnQgZGF0YV9sZW47Cisr
 ICAgIGNvbnN0IGNoYXIgKmRhdGFfc3RhcnQgPSBUU0ZldGNoUmVzcEdldCh0eG4sICZkYXRhX2xl
 bik7CisrICAgIGNvbnN0IGNoYXIgKmRhdGFfZW5kID0gZGF0YV9zdGFydCArIGRhdGFfbGVuOwor
 KyAgICAKKysgICAgVFNIdHRwUGFyc2VyIHBhcnNlciA9IFRTSHR0cFBhcnNlckNyZWF0ZSgpOwor
 KyAgICBzdGF0ZS0+aGRyX2J1Zl8gPSBUU01CdWZmZXJDcmVhdGUoKTsKKysgICAgc3RhdGUtPmhk
 cl9sb2NfID0gVFNIdHRwSGRyQ3JlYXRlKHN0YXRlLT5oZHJfYnVmXyk7CisrICAgIFRTSHR0cEhk
 clR5cGVTZXQoc3RhdGUtPmhkcl9idWZfLCBzdGF0ZS0+aGRyX2xvY18sIFRTX0hUVFBfVFlQRV9S
 RVNQT05TRSk7CisrICAgIGlmIChUU0h0dHBIZHJQYXJzZVJlc3AocGFyc2VyLCBzdGF0ZS0+aGRy
 X2J1Zl8sIHN0YXRlLT5oZHJfbG9jXywgJmRhdGFfc3RhcnQsIGRhdGFfZW5kKSA9PSBUU19QQVJT
 RV9ET05FKSB7CisrICAgICAgVFNIdHRwU3RhdHVzIHN0YXR1cyA9IFRTSHR0cEhkclN0YXR1c0dl
 dChzdGF0ZS0+aGRyX2J1Zl8sIHN0YXRlLT5oZHJfbG9jXyk7CisrICAgICAgc3RhdGUtPmJvZHlf
 ID0gZGF0YV9zdGFydDsgLy8gZGF0YV9zdGFydCB3aWxsIG5vdyBiZSBwb2ludGluZyB0byBib2R5
 CisrICAgICAgc3RhdGUtPmJvZHlfc2l6ZV8gPSBkYXRhX2VuZCAtIGRhdGFfc3RhcnQ7CisrICAg
 ICAgdXRpbHM6OmludGVybmFsOjppbml0UmVzcG9uc2Uoc3RhdGUtPnJlc3BvbnNlXywgc3RhdGUt
 Pmhkcl9idWZfLCBzdGF0ZS0+aGRyX2xvY18pOworKyAgICAgIExPR19ERUJVRygiRmV0Y2ggcmVz
 dWx0IGhhZCBhIHN0YXR1cyBjb2RlIG9mICVkIHdpdGggYSBib2R5IGxlbmd0aCBvZiAlbGQiLCBz
 dGF0dXMsIHN0YXRlLT5ib2R5X3NpemVfKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBMT0dfRVJS
 T1IoIlVuYWJsZSB0byBwYXJzZSByZXNwb25zZTsgUmVxdWVzdCBVUkwgWyVzXTsgdHJhbnNhY3Rp
 b24gJXAiLAorKyAgICAgICAgICAgICAgICBzdGF0ZS0+cmVxdWVzdF8uZ2V0VXJsKCkuZ2V0VXJs
 U3RyaW5nKCkuY19zdHIoKSwgdHhuKTsKKysgICAgICBldmVudCA9IHN0YXRpY19jYXN0PFRTRXZl
 bnQ+KEFzeW5jSHR0cEZldGNoOjpSRVNVTFRfRkFJTFVSRSk7CisrICAgIH0KKysgICAgVFNIdHRw
 UGFyc2VyRGVzdHJveShwYXJzZXIpOworKyAgfQorKyAgc3RhdGUtPnJlc3VsdF8gPSBzdGF0aWNf
 Y2FzdDxBc3luY0h0dHBGZXRjaDo6UmVzdWx0PihldmVudCk7CisrICBpZiAoIXN0YXRlLT5kaXNw
 YXRjaF9jb250cm9sbGVyXy0+ZGlzcGF0Y2goKSkgeworKyAgICBMT0dfREVCVUcoIlVuYWJsZSB0
 byBkaXNwYXRjaCByZXN1bHQgZnJvbSBBc3luY0ZldGNoIGJlY2F1c2UgcHJvbWlzZSBoYXMgZGll
 ZC4iKTsKKysgIH0KKysKKysgIGRlbGV0ZSBmZXRjaF9wcm92aWRlcjsgLy8gd2UgbXVzdCBhbHdh
 eXMgYmUgc3VyZSB0byBjbGVhbiB1cCB0aGUgcHJvdmlkZXIgd2hlbiB3ZSdyZSBkb25lIHdpdGgg
 aXQuCisrICBUU0NvbnREZXN0cm95KGNvbnQpOworKyAgcmV0dXJuIDA7CisrfQorKworK30KKysK
 KytBc3luY0h0dHBGZXRjaDo6QXN5bmNIdHRwRmV0Y2goY29uc3Qgc3RkOjpzdHJpbmcgJnVybF9z
 dHIsIEh0dHBNZXRob2QgaHR0cF9tZXRob2QpIHsKKysgIExPR19ERUJVRygiQ3JlYXRlZCBuZXcg
 QXN5bmNIdHRwRmV0Y2ggb2JqZWN0ICVwIiwgdGhpcyk7CisrICBzdGF0ZV8gPSBuZXcgQXN5bmNI
 dHRwRmV0Y2hTdGF0ZSh1cmxfc3RyLCBodHRwX21ldGhvZCk7CisrfQorKworK3ZvaWQgQXN5bmNI
 dHRwRmV0Y2g6OnJ1bihzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hDb250cm9sbGVyQmFzZT4gc2Vu
 ZGVyKSB7CisrICBzdGF0ZV8tPmRpc3BhdGNoX2NvbnRyb2xsZXJfID0gc2VuZGVyOworKworKyAg
 VFNDb250IGZldGNoQ29udCA9IFRTQ29udENyZWF0ZShoYW5kbGVGZXRjaEV2ZW50cywgVFNNdXRl
 eENyZWF0ZSgpKTsKKysgIFRTQ29udERhdGFTZXQoZmV0Y2hDb250LCBzdGF0aWNfY2FzdDx2b2lk
 ICo+KHRoaXMpKTsgLy8gUHJvdmlkZXJzIGhhdmUgdG8gY2xlYW4gdGhlbXNlbHZlcyB1cCB3aGVu
 IHRoZXkgYXJlIGRvbmUuCisrCisrICBUU0ZldGNoRXZlbnQgZXZlbnRfaWRzOworKyAgZXZlbnRf
 aWRzLnN1Y2Nlc3NfZXZlbnRfaWQgPSBSRVNVTFRfU1VDQ0VTUzsKKysgIGV2ZW50X2lkcy5mYWls
 dXJlX2V2ZW50X2lkID0gUkVTVUxUX0ZBSUxVUkU7CisrICBldmVudF9pZHMudGltZW91dF9ldmVu
 dF9pZCA9IFJFU1VMVF9USU1FT1VUOworKworKyAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7Cisr
 ICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKyAgYWRkci5zaW5fYWRkci5zX2FkZHIgPSBM
 T0NBTF9JUF9BRERSRVNTOworKyAgYWRkci5zaW5fcG9ydCA9IExPQ0FMX1BPUlQ7CisrCisrICBz
 dHJpbmcgcmVxdWVzdF9zdHIoSFRUUF9NRVRIT0RfU1RSSU5HU1tzdGF0ZV8tPnJlcXVlc3RfLmdl
 dE1ldGhvZCgpXSk7CisrICByZXF1ZXN0X3N0ciArPSAnICc7CisrICByZXF1ZXN0X3N0ciArPSBz
 dGF0ZV8tPnJlcXVlc3RfLmdldFVybCgpLmdldFVybFN0cmluZygpOworKyAgcmVxdWVzdF9zdHIg
 Kz0gJyAnOworKyAgcmVxdWVzdF9zdHIgKz0gSFRUUF9WRVJTSU9OX1NUUklOR1Nbc3RhdGVfLT5y
 ZXF1ZXN0Xy5nZXRWZXJzaW9uKCldOworKyAgcmVxdWVzdF9zdHIgKz0gIlxyXG4iOworKworKyAg
 Zm9yIChIZWFkZXJzOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RhdGVfLT5yZXF1ZXN0Xy5nZXRI
 ZWFkZXJzKCkuYmVnaW4oKSwKKysgICAgICAgICBlbmQgPSBzdGF0ZV8tPnJlcXVlc3RfLmdldEhl
 YWRlcnMoKS5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworKyAgICByZXF1ZXN0X3N0ciAr
 PSBpdGVyLT5maXJzdDsKKysgICAgcmVxdWVzdF9zdHIgKz0gIjogIjsKKysgICAgcmVxdWVzdF9z
 dHIgKz0gSGVhZGVyczo6Z2V0Sm9pbmVkVmFsdWVzKGl0ZXItPnNlY29uZCk7CisrICAgIHJlcXVl
 c3Rfc3RyICs9ICJcclxuIjsKKysgIH0KKysgIHJlcXVlc3Rfc3RyICs9ICJcclxuIjsKKysKKysg
 IExPR19ERUJVRygiSXNzaW5nIFRTRmV0Y2hVcmwgd2l0aCByZXF1ZXN0XG5bJXNdIiwgcmVxdWVz
 dF9zdHIuY19zdHIoKSk7CisrICBUU0ZldGNoVXJsKHJlcXVlc3Rfc3RyLmNfc3RyKCksIHJlcXVl
 c3Rfc3RyLnNpemUoKSwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIgY29uc3QgKj4o
 JmFkZHIpLCBmZXRjaENvbnQsCisrICAgICAgICAgICAgIEFGVEVSX0JPRFksIGV2ZW50X2lkcyk7
 CisrfQorKworK0hlYWRlcnMgJkFzeW5jSHR0cEZldGNoOjpnZXRSZXF1ZXN0SGVhZGVycygpIHsK
 KysgIHJldHVybiBzdGF0ZV8tPnJlcXVlc3RfLmdldEhlYWRlcnMoKTsKKyt9CisrCisrQXN5bmNI
 dHRwRmV0Y2g6OlJlc3VsdCBBc3luY0h0dHBGZXRjaDo6Z2V0UmVzdWx0KCkgY29uc3QgeworKyAg
 cmV0dXJuIHN0YXRlXy0+cmVzdWx0XzsKKyt9CisrCisrY29uc3QgVXJsICZBc3luY0h0dHBGZXRj
 aDo6Z2V0UmVxdWVzdFVybCgpIGNvbnN0IHsKKysgIHJldHVybiBzdGF0ZV8tPnJlcXVlc3RfLmdl
 dFVybCgpOworK30KKysKKytjb25zdCBSZXNwb25zZSAmQXN5bmNIdHRwRmV0Y2g6OmdldFJlc3Bv
 bnNlKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRlXy0+cmVzcG9uc2VfOworK30KKysKKyt2b2lk
 IEFzeW5jSHR0cEZldGNoOjpnZXRSZXNwb25zZUJvZHkoY29uc3Qgdm9pZCAqJmJvZHksIHNpemVf
 dCAmYm9keV9zaXplKSBjb25zdCB7CisrICBib2R5ID0gc3RhdGVfLT5ib2R5XzsKKysgIGJvZHlf
 c2l6ZSA9IHN0YXRlXy0+Ym9keV9zaXplXzsKKyt9CisrCisrQXN5bmNIdHRwRmV0Y2g6On5Bc3lu
 Y0h0dHBGZXRjaCgpIHsKKysgIGRlbGV0ZSBzdGF0ZV87CisrfQorZGlmZiAtcnVOIGxpYi9hdHNj
 cHBhcGkvc3JjL0FzeW5jVGltZXIuY2MgbGliL2F0c2NwcGFwaS9zcmMvQXN5bmNUaW1lci5jYwor
 LS0tIGxpYi9hdHNjcHBhcGkvc3JjL0FzeW5jVGltZXIuY2MJMTk3MC0wMS0wMSAwODowMDowMC4w
 MDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9Bc3luY1RpbWVyLmNjCTIwMTMt
 MTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICswODAwCitAQCAtMCwwICsxLDEwNiBAQAorKy8qKgor
 KyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVy
 IG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhl
 IE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25h
 bCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNG
 IGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
 VmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
 ZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0
 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hl
 Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
 Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0
 ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
 KysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
 ZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
 bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIg
 dGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUgQXN5bmNUaW1lci5jYworKyAq
 LworKyNpbmNsdWRlICJhdHNjcHBhcGkvQXN5bmNUaW1lci5oIgorKyNpbmNsdWRlIDx0cy90cy5o
 PgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGF0
 c2NwcGFwaTsKKysKKytzdHJ1Y3QgYXRzY3BwYXBpOjpBc3luY1RpbWVyU3RhdGUgeworKyAgVFND
 b250IGNvbnRfOworKyAgQXN5bmNUaW1lcjo6VHlwZSB0eXBlXzsKKysgIGludCBwZXJpb2RfaW5f
 bXNfOworKyAgaW50IGluaXRpYWxfcGVyaW9kX2luX21zXzsKKysgIFRTQWN0aW9uIGluaXRpYWxf
 dGltZXJfYWN0aW9uXzsKKysgIFRTQWN0aW9uIHBlcmlvZGljX3RpbWVyX2FjdGlvbl87CisrICBB
 c3luY1RpbWVyICp0aW1lcl87CisrICBzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hDb250cm9sbGVy
 QmFzZT4gZGlzcGF0Y2hfY29udHJvbGxlcl87CisrICBBc3luY1RpbWVyU3RhdGUoQXN5bmNUaW1l
 cjo6VHlwZSB0eXBlLCBpbnQgcGVyaW9kX2luX21zLCBpbnQgaW5pdGlhbF9wZXJpb2RfaW5fbXMs
 IEFzeW5jVGltZXIgKnRpbWVyKQorKyAgICA6IHR5cGVfKHR5cGUpLCBwZXJpb2RfaW5fbXNfKHBl
 cmlvZF9pbl9tcyksIGluaXRpYWxfcGVyaW9kX2luX21zXyhpbml0aWFsX3BlcmlvZF9pbl9tcyks
 CisrICAgICAgaW5pdGlhbF90aW1lcl9hY3Rpb25fKE5VTEwpLCBwZXJpb2RpY190aW1lcl9hY3Rp
 b25fKE5VTEwpLCB0aW1lcl8odGltZXIpIHsgfQorK307CisrCisrbmFtZXNwYWNlIHsKKysKKytp
 bnQgaGFuZGxlVGltZXJFdmVudChUU0NvbnQgY29udCwgVFNFdmVudCBldmVudCwgdm9pZCAqZWRh
 dGEpIHsKKysgIEFzeW5jVGltZXJTdGF0ZSAqc3RhdGUgPSBzdGF0aWNfY2FzdDxBc3luY1RpbWVy
 U3RhdGUgKj4oVFNDb250RGF0YUdldChjb250KSk7CisrICBpZiAoc3RhdGUtPmluaXRpYWxfdGlt
 ZXJfYWN0aW9uXykgeworKyAgICBMT0dfREVCVUcoIlJlY2VpdmVkIGluaXRpYWwgdGltZXIgZXZl
 bnQuIik7CisrICAgIHN0YXRlLT5pbml0aWFsX3RpbWVyX2FjdGlvbl8gPSBOVUxMOyAvLyBtYXJr
 IGl0IHNvIHRoYXQgaXQgd29uJ3QgYmUgY2FuY2VsZWQgaW4gdGhlIGRlc3RydWN0b3IKKysgICAg
 aWYgKHN0YXRlLT50eXBlXyA9PSBBc3luY1RpbWVyOjpUWVBFX1BFUklPRElDKSB7CisrICAgICAg
 TE9HX0RFQlVHKCJTY2hlZHVsaW5nIHBlcmlvZGljIGV2ZW50IG5vdyIpOworKyAgICAgIHN0YXRl
 LT5wZXJpb2RpY190aW1lcl9hY3Rpb25fID0gVFNDb250U2NoZWR1bGVFdmVyeShzdGF0ZS0+Y29u
 dF8sIHN0YXRlLT5wZXJpb2RfaW5fbXNfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU19USFJFQURfUE9PTF9ERUZBVUxUKTsKKysg
 ICAgfQorKyAgfQorKyAgaWYgKCFzdGF0ZS0+ZGlzcGF0Y2hfY29udHJvbGxlcl8tPmRpc3BhdGNo
 KCkpIHsKKysgICAgTE9HX0RFQlVHKCJSZWNlaXZlciBoYXMgZGllZC4gRGVzdHJveWluZyB0aW1l
 ciIpOworKyAgICBkZWxldGUgc3RhdGUtPnRpbWVyXzsgLy8gYXV0by1kZXN0cnVjdCBvbmx5IGlu
 IHRoaXMgY2FzZQorKyAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK30KKysKKytBc3luY1RpbWVy
 OjpBc3luY1RpbWVyKFR5cGUgdHlwZSwgaW50IHBlcmlvZF9pbl9tcywgaW50IGluaXRpYWxfcGVy
 aW9kX2luX21zKSB7CisrICBzdGF0ZV8gPSBuZXcgQXN5bmNUaW1lclN0YXRlKHR5cGUsIHBlcmlv
 ZF9pbl9tcywgaW5pdGlhbF9wZXJpb2RfaW5fbXMsIHRoaXMpOworKyAgVFNNdXRleCBudWxsX211
 dGV4ID0gTlVMTDsKKysgIHN0YXRlXy0+Y29udF8gPSBUU0NvbnRDcmVhdGUoaGFuZGxlVGltZXJF
 dmVudCwgbnVsbF9tdXRleCk7CisrICBUU0NvbnREYXRhU2V0KHN0YXRlXy0+Y29udF8sIHN0YXRp
 Y19jYXN0PHZvaWQgKj4oc3RhdGVfKSk7CisrfQorKworK3ZvaWQgQXN5bmNUaW1lcjo6cnVuKHNo
 YXJlZF9wdHI8QXN5bmNEaXNwYXRjaENvbnRyb2xsZXJCYXNlPiBkaXNwYXRjaF9jb250cm9sbGVy
 KSB7CisrICBpbnQgb25lX29mZl90aW1lb3V0X2luX21zID0gMDsKKysgIGludCByZWd1bGFyX3Rp
 bWVvdXRfaW5fbXMgPSAwOworKyAgaWYgKHN0YXRlXy0+dHlwZV8gPT0gQXN5bmNUaW1lcjo6VFlQ
 RV9PTkVfT0ZGKSB7CisrICAgIG9uZV9vZmZfdGltZW91dF9pbl9tcyA9IHN0YXRlXy0+cGVyaW9k
 X2luX21zXzsKKysgIH0KKysgIGVsc2UgeworKyAgICBvbmVfb2ZmX3RpbWVvdXRfaW5fbXMgPSBz
 dGF0ZV8tPmluaXRpYWxfcGVyaW9kX2luX21zXzsKKysgICAgcmVndWxhcl90aW1lb3V0X2luX21z
 ID0gc3RhdGVfLT5wZXJpb2RfaW5fbXNfOworKyAgfQorKyAgaWYgKG9uZV9vZmZfdGltZW91dF9p
 bl9tcykgeworKyAgICBMT0dfREVCVUcoIlNjaGVkdWxpbmcgaW5pdGlhbC9vbmUtb2ZmIGV2ZW50
 Iik7CisrICAgIHN0YXRlXy0+aW5pdGlhbF90aW1lcl9hY3Rpb25fID0gVFNDb250U2NoZWR1bGUo
 c3RhdGVfLT5jb250Xywgb25lX29mZl90aW1lb3V0X2luX21zLAorKyAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTX1RIUkVBRF9QT09MX0RFRkFVTFQp
 OworKyAgfQorKyAgZWxzZSBpZiAocmVndWxhcl90aW1lb3V0X2luX21zKSB7CisrICAgIExPR19E
 RUJVRygiU2NoZWR1bGluZyByZWd1bGFyIHRpbWVyIGV2ZW50cyIpOworKyAgICBzdGF0ZV8tPnBl
 cmlvZGljX3RpbWVyX2FjdGlvbl8gPSBUU0NvbnRTY2hlZHVsZUV2ZXJ5KHN0YXRlXy0+Y29udF8s
 IHJlZ3VsYXJfdGltZW91dF9pbl9tcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBUU19USFJFQURfUE9PTF9ERUZBVUxUKTsKKysgIH0K
 KysgIHN0YXRlXy0+ZGlzcGF0Y2hfY29udHJvbGxlcl8gPSBkaXNwYXRjaF9jb250cm9sbGVyOwor
 K30KKysKKytBc3luY1RpbWVyOjp+QXN5bmNUaW1lcigpIHsKKysgIGlmIChzdGF0ZV8tPmluaXRp
 YWxfdGltZXJfYWN0aW9uXykgeworKyAgICBMT0dfREVCVUcoIkNhbmNlbGluZyBpbml0aWFsIHRp
 bWVyIGFjdGlvbiIpOworKyAgICBUU0FjdGlvbkNhbmNlbChzdGF0ZV8tPmluaXRpYWxfdGltZXJf
 YWN0aW9uXyk7CisrICB9CisrICBpZiAoc3RhdGVfLT5wZXJpb2RpY190aW1lcl9hY3Rpb25fKSB7
 CisrICAgIExPR19ERUJVRygiQ2FuY2VsaW5nIHBlcmlvZGljIHRpbWVyIGFjdGlvbiIpOworKyAg
 ICBUU0FjdGlvbkNhbmNlbChzdGF0ZV8tPnBlcmlvZGljX3RpbWVyX2FjdGlvbl8pOworKyAgfQor
 KyAgTE9HX0RFQlVHKCJEZXN0cm95aW5nIGNvbnQiKTsKKysgIFRTQ29udERlc3Ryb3koc3RhdGVf
 LT5jb250Xyk7CisrICBkZWxldGUgc3RhdGVfOworK30KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBp
 L3NyYy9DYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yLmNjIGxpYi9hdHNjcHBhcGkvc3Jj
 L0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3IuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3Ny
 Yy9DYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yLmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAu
 MDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvQ2FzZUluc2Vuc2l0aXZlU3Ry
 aW5nQ29tcGFyYXRvci5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjcwMjUzMjA5MyArMDgwMAorQEAg
 LTAsMCArMSw3MCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBG
 b3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNl
 IGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRo
 aXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdo
 dCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVy
 IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91
 IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUg
 TGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAg
 ICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5s
 ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
 b2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
 b24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
 IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNl
 bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
 KyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZp
 bGUgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvci5jYworKyAqLworKworKyNpbmNsdWRl
 ICJhdHNjcHBhcGkvQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvci5oIgorKworK25hbWVz
 cGFjZSB7CisrICBzdGF0aWMgY2hhciBOT1JNQUxJWkVEX0NIQVJBQ1RFUlNbMjU2XTsKKysgIHN0
 YXRpYyB2b2xhdGlsZSBib29sIG5vcm1hbGl6ZXJfaW5pdGlhbGl6ZWQoZmFsc2UpOworK30KKysK
 Kyt1c2luZyBhdHNjcHBhcGk6OkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3I7CisrdXNp
 bmcgc3RkOjpzdHJpbmc7CisrCisrYm9vbCBDYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9y
 OjpvcGVyYXRvcigpKGNvbnN0IHN0cmluZyAmbGhzLCBjb25zdCBzdHJpbmcgJnJocykgY29uc3Qg
 eworKyAgcmV0dXJuIChjb21wYXJlKGxocywgcmhzKSA8IDApOworK30KKysKKytpbnQgQ2FzZUlu
 c2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvcjo6Y29tcGFyZShjb25zdCBzdHJpbmcgJmxocywgY29u
 c3Qgc3RyaW5nICZyaHMpIGNvbnN0IHsKKysgIGlmICghbm9ybWFsaXplcl9pbml0aWFsaXplZCkg
 eworKyAgICAvLyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHNhZmUgdG8gZXhlY3V0ZSBpbiBjb25j
 dXJyZW50IHRocmVhZHMgLSBoZW5jZSBubyBsb2NraW5nCisrICAgIGZvciAoaW50IGkgPSAwOyBp
 IDwgMjU2OyArK2kpIHsKKysgICAgICBOT1JNQUxJWkVEX0NIQVJBQ1RFUlNbaV0gPSBzdGF0aWNf
 Y2FzdDx1bnNpZ25lZCBjaGFyPihpKTsKKysgICAgfQorKyAgICBmb3IgKHVuc2lnbmVkIGNoYXIg
 aSA9ICdBJzsgaSA8ICdaJzsgKytpKSB7CisrICAgICAgTk9STUFMSVpFRF9DSEFSQUNURVJTW2ld
 ID0gJ2EnICsgKGkgLSAnQScpOworKyAgICB9CisrICAgIG5vcm1hbGl6ZXJfaW5pdGlhbGl6ZWQg
 PSB0cnVlOworKyAgfQorKyAgc2l6ZV90IGxoc19zaXplID0gbGhzLnNpemUoKTsKKysgIHNpemVf
 dCByaHNfc2l6ZSA9IHJocy5zaXplKCk7CisrICBpZiAoKGxoc19zaXplID4gMCkgJiYgKHJoc19z
 aXplID4gMCkpIHsgCisrICAgIHNpemVfdCBudW1fY2hhcnNfdG9fY29tcGFyZSA9IChsaHNfc2l6
 ZSA8IHJoc19zaXplKSA/IGxoc19zaXplIDogcmhzX3NpemU7CisrICAgIGZvciAoc2l6ZV90IGkg
 PSAwOyBpIDwgbnVtX2NoYXJzX3RvX2NvbXBhcmU7ICsraSkgeworKyAgICAgIHVuc2lnbmVkIGNo
 YXIgbm9ybWFsaXplZF9saHNfY2hhciA9IE5PUk1BTElaRURfQ0hBUkFDVEVSU1tzdGF0aWNfY2Fz
 dDxjb25zdCB1bnNpZ25lZCBjaGFyPihsaHNbaV0pXTsgCisrICAgICAgdW5zaWduZWQgY2hhciBu
 b3JtYWxpemVkX3Joc19jaGFyID0gTk9STUFMSVpFRF9DSEFSQUNURVJTW3N0YXRpY19jYXN0PGNv
 bnN0IHVuc2lnbmVkIGNoYXI+KHJoc1tpXSldOyAKKysgICAgICBpZiAobm9ybWFsaXplZF9saHNf
 Y2hhciA8IG5vcm1hbGl6ZWRfcmhzX2NoYXIpIHsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAg
 ICB9CisrICAgICAgaWYgKG5vcm1hbGl6ZWRfbGhzX2NoYXIgPiBub3JtYWxpemVkX3Joc19jaGFy
 KSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgICB9CisrICAgIH0KKysgIH0KKysgIGlmIChs
 aHNfc2l6ZSA8IHJoc19zaXplKSB7CisrICAgIHJldHVybiAtMTsKKysgIH0KKysgIGlmIChsaHNf
 c2l6ZSA+IHJoc19zaXplKSB7CisrICAgIHJldHVybiAxOworKyAgfQorKyAgcmV0dXJuIDA7IC8v
 IGJvdGggc3RyaW5ncyBhcmUgZXF1YWwKKyt9CitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMv
 Q2xpZW50UmVxdWVzdC5jYyBsaWIvYXRzY3BwYXBpL3NyYy9DbGllbnRSZXF1ZXN0LmNjCistLS0g
 bGliL2F0c2NwcGFwaS9zcmMvQ2xpZW50UmVxdWVzdC5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAw
 MDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL0NsaWVudFJlcXVlc3QuY2MJMjAx
 My0xMS0xMSAxNDowMzoxMi43MDI1MzIwOTMgKzA4MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKioK
 KysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRl
 ciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRo
 ZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9u
 YWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFT
 RiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
 IFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
 bGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9i
 dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNo
 ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
 aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1
 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
 CisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
 IGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
 IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVy
 IHRoZSBMaWNlbnNlLgorKyAqLworKworKy8qKgorKyAqIEBmaWxlIENsaWVudFJlcXVlc3QuY2MK
 KysgKi8KKysKKysjaW5jbHVkZSAiYXRzY3BwYXBpL0NsaWVudFJlcXVlc3QuaCIKKysjaW5jbHVk
 ZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8dHMvdHMuaD4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL25v
 bmNvcHlhYmxlLmgiCisrI2luY2x1ZGUgIkluaXRpYWxpemFibGVWYWx1ZS5oIgorKyNpbmNsdWRl
 ICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFwaTsKKysK
 KysvKioKKysgKiBAcHJpdmF0ZQorKyAqLworK3N0cnVjdCBhdHNjcHBhcGk6OkNsaWVudFJlcXVl
 c3RTdGF0ZTogbm9uY29weWFibGUgeworKyAgVFNIdHRwVHhuIHR4bl87CisrICBUU01CdWZmZXIg
 cHJpc3RpbmVfaGRyX2J1Zl87CisrICBUU01Mb2MgcHJpc3RpbmVfdXJsX2xvY187CisrICBVcmwg
 cHJpc3RpbmVfdXJsXzsKKysgIENsaWVudFJlcXVlc3RTdGF0ZShUU0h0dHBUeG4gdHhuKSA6IHR4
 bl8odHhuKSwgcHJpc3RpbmVfaGRyX2J1Zl8oTlVMTCksIHByaXN0aW5lX3VybF9sb2NfKE5VTEwp
 IHsgfQorK307CisrCisrYXRzY3BwYXBpOjpDbGllbnRSZXF1ZXN0OjpDbGllbnRSZXF1ZXN0KHZv
 aWQgKmF0c190eG5faGFuZGxlLCB2b2lkICpoZHJfYnVmLCB2b2lkICpoZHJfbG9jKSA6CisrICAg
 IFJlcXVlc3QoaGRyX2J1ZiwgaGRyX2xvYykgeworKyAgc3RhdGVfID0gbmV3IENsaWVudFJlcXVl
 c3RTdGF0ZShzdGF0aWNfY2FzdDxUU0h0dHBUeG4+KGF0c190eG5faGFuZGxlKSk7CisrfQorKwor
 K2F0c2NwcGFwaTo6Q2xpZW50UmVxdWVzdDo6fkNsaWVudFJlcXVlc3QoKSB7CisrICBpZiAoc3Rh
 dGVfLT5wcmlzdGluZV91cmxfbG9jXyAmJiBzdGF0ZV8tPnByaXN0aW5lX2hkcl9idWZfKSB7Cisr
 ICAgIFRTTUxvYyBudWxsX3BhcmVudF9sb2MgPSBOVUxMOworKyAgICBMT0dfREVCVUcoIlJlbGVh
 c2luZyBwcmlzdGluZSB1cmwgbG9jIGZvciB0cmFuc2FjdGlvbiAlcDsgaGRyX2J1ZiAlcCwgdXJs
 X2xvYyAlcCIsIHN0YXRlXy0+dHhuXywKKysgICAgICAgICAgICAgIHN0YXRlXy0+cHJpc3RpbmVf
 aGRyX2J1Zl8sIHN0YXRlXy0+cHJpc3RpbmVfdXJsX2xvY18pOworKyAgICBUU0hhbmRsZU1Mb2NS
 ZWxlYXNlKHN0YXRlXy0+cHJpc3RpbmVfaGRyX2J1Zl8sIG51bGxfcGFyZW50X2xvYywgc3RhdGVf
 LT5wcmlzdGluZV91cmxfbG9jXyk7CisrICB9CisrCisrICBkZWxldGUgc3RhdGVfOworK30KKysK
 Kytjb25zdCBVcmwgJmF0c2NwcGFwaTo6Q2xpZW50UmVxdWVzdDo6Z2V0UHJpc3RpbmVVcmwoKSBj
 b25zdCB7CisrICBpZiAoIXN0YXRlXy0+cHJpc3RpbmVfdXJsX2xvY18pIHsKKysgICAgVFNIdHRw
 VHhuUHJpc3RpbmVVcmxHZXQoc3RhdGVfLT50eG5fLCAmc3RhdGVfLT5wcmlzdGluZV9oZHJfYnVm
 XywgJnN0YXRlXy0+cHJpc3RpbmVfdXJsX2xvY18pOworKworKyAgICBpZiAoKHN0YXRlXy0+cHJp
 c3RpbmVfaGRyX2J1Zl8gIT0gTlVMTCkgJiYgKHN0YXRlXy0+cHJpc3RpbmVfdXJsX2xvY18gIT0g
 TlVMTCkpIHsKKysgICAgICBzdGF0ZV8tPnByaXN0aW5lX3VybF8uaW5pdChzdGF0ZV8tPnByaXN0
 aW5lX2hkcl9idWZfLCBzdGF0ZV8tPnByaXN0aW5lX3VybF9sb2NfKTsKKysgICAgICBMT0dfREVC
 VUcoIlByaXN0aW5lIFVSTCBpbml0aWFsaXplZCIpOworKyAgICB9IGVsc2UgeworKyAgICAgIExP
 R19FUlJPUigiRmFpbGVkIHRvIGdldCBwcmlzdGluZSBVUkwgZm9yIHRyYW5zYWN0aW9uICVwOyBo
 ZHJfYnVmICVwLCB1cmxfbG9jICVwIiwgc3RhdGVfLT50eG5fLAorKyAgICAgICAgICAgICAgICBz
 dGF0ZV8tPnByaXN0aW5lX2hkcl9idWZfLCBzdGF0ZV8tPnByaXN0aW5lX3VybF9sb2NfKTsKKysg
 ICAgfQorKyAgfSBlbHNlIHsKKysgICAgTE9HX0RFQlVHKCJQcmlzdGluZSBVUkwgYWxyZWFkeSBp
 bml0aWFsaXplZCIpOworKyAgfQorKworKyAgcmV0dXJuIHN0YXRlXy0+cHJpc3RpbmVfdXJsXzsK
 Kyt9CitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvR2xvYmFsUGx1Z2luLmNjIGxpYi9hdHNj
 cHBhcGkvc3JjL0dsb2JhbFBsdWdpbi5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3JjL0dsb2JhbFBs
 dWdpbi5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNj
 cHBhcGkvc3JjL0dsb2JhbFBsdWdpbi5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjcwMjUzMjA5MyAr
 MDgwMAorQEAgLTAsMCArMSw3OSBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT
 b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRv
 ciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRl
 ZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5n
 IGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8g
 eW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vu
 c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAg
 d2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
 dAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
 KworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
 cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
 dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
 T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2Vl
 IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
 b25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoq
 CisrICogQGZpbGUgR2xvYmFsUGx1Z2luLmNjCisrICovCisrI2luY2x1ZGUgImF0c2NwcGFwaS9H
 bG9iYWxQbHVnaW4uaCIKKysjaW5jbHVkZSA8dHMvdHMuaD4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4K
 KysjaW5jbHVkZSA8Y2Fzc2VydD4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL25vbmNvcHlhYmxlLmgi
 CisrI2luY2x1ZGUgInV0aWxzX2ludGVybmFsLmgiCisrI2luY2x1ZGUgImxvZ2dpbmdfaW50ZXJu
 YWwuaCIKKysKKyt1c2luZyBuYW1lc3BhY2UgYXRzY3BwYXBpOworKworKy8qKgorKyAqIEBwcml2
 YXRlCisrICovCisrc3RydWN0IGF0c2NwcGFwaTo6R2xvYmFsUGx1Z2luU3RhdGUgOiBub25jb3B5
 YWJsZSB7CisrICBUU0NvbnQgY29udF87CisrICBHbG9iYWxQbHVnaW4gKmdsb2JhbF9wbHVnaW5f
 OworKyAgYm9vbCBpZ25vcmVfaW50ZXJuYWxfdHJhbnNhY3Rpb25zXzsKKysKKysgIEdsb2JhbFBs
 dWdpblN0YXRlKEdsb2JhbFBsdWdpbiAqZ2xvYmFsX3BsdWdpbiwgYm9vbCBpZ25vcmVfaW50ZXJu
 YWxfdHJhbnNhY3Rpb25zKQorKyAgICA6IGdsb2JhbF9wbHVnaW5fKGdsb2JhbF9wbHVnaW4pLCBp
 Z25vcmVfaW50ZXJuYWxfdHJhbnNhY3Rpb25zXyhpZ25vcmVfaW50ZXJuYWxfdHJhbnNhY3Rpb25z
 KSB7IH0KKyt9OworKworK25hbWVzcGFjZSB7CisrCisrc3RhdGljIGludCBoYW5kbGVHbG9iYWxQ
 bHVnaW5FdmVudHMoVFNDb250IGNvbnQsIFRTRXZlbnQgZXZlbnQsIHZvaWQgKmVkYXRhKSB7Cisr
 ICBUU0h0dHBUeG4gdHhuID0gc3RhdGljX2Nhc3Q8VFNIdHRwVHhuPihlZGF0YSk7CisrICBHbG9i
 YWxQbHVnaW5TdGF0ZSAqc3RhdGUgPSBzdGF0aWNfY2FzdDxHbG9iYWxQbHVnaW5TdGF0ZSAqPihU
 U0NvbnREYXRhR2V0KGNvbnQpKTsKKysgIGlmIChzdGF0ZS0+aWdub3JlX2ludGVybmFsX3RyYW5z
 YWN0aW9uc18gJiYgKFRTSHR0cElzSW50ZXJuYWxSZXF1ZXN0KHR4bikgPT0gVFNfU1VDQ0VTUykp
 IHsKKysgICAgTE9HX0RFQlVHKCJJZ25vcmluZyBldmVudCAlZCBvbiBpbnRlcm5hbCB0cmFuc2Fj
 dGlvbiAlcCBmb3IgZ2xvYmFsIHBsdWdpbiAlcCIsIGV2ZW50LCB0eG4sCisrICAgICAgICAgICAg
 ICBzdGF0ZS0+Z2xvYmFsX3BsdWdpbl8pOworKyAgICBUU0h0dHBUeG5SZWVuYWJsZSh0eG4sIFRT
 X0VWRU5UX0hUVFBfQ09OVElOVUUpOworKyAgfSBlbHNlIHsKKysgICAgTE9HX0RFQlVHKCJJbnZv
 a2luZyBnbG9iYWwgcGx1Z2luICVwIGZvciBldmVudCAlZCBvbiB0cmFuc2FjdGlvbiAlcCIsIHN0
 YXRlLT5nbG9iYWxfcGx1Z2luXywgZXZlbnQsIHR4bik7CisrICAgIHV0aWxzOjppbnRlcm5hbDo6
 aW52b2tlUGx1Z2luRm9yRXZlbnQoc3RhdGUtPmdsb2JhbF9wbHVnaW5fLCB0eG4sIGV2ZW50KTsK
 KysgIH0KKysgIHJldHVybiAwOworK30KKysKKyt9IC8qIGFub255bW91cyBuYW1lc3BhY2UgKi8K
 KysKKytHbG9iYWxQbHVnaW46Okdsb2JhbFBsdWdpbihib29sIGlnbm9yZV9pbnRlcm5hbF90cmFu
 c2FjdGlvbnMpIHsKKysgIHV0aWxzOjppbnRlcm5hbDo6aW5pdFRyYW5zYWN0aW9uTWFuYWdlbWVu
 dCgpOworKyAgc3RhdGVfID0gbmV3IEdsb2JhbFBsdWdpblN0YXRlKHRoaXMsIGlnbm9yZV9pbnRl
 cm5hbF90cmFuc2FjdGlvbnMpOworKyAgVFNNdXRleCBtdXRleCA9IE5VTEw7CisrICBzdGF0ZV8t
 PmNvbnRfID0gVFNDb250Q3JlYXRlKGhhbmRsZUdsb2JhbFBsdWdpbkV2ZW50cywgbXV0ZXgpOwor
 KyAgVFNDb250RGF0YVNldChzdGF0ZV8tPmNvbnRfLCBzdGF0aWNfY2FzdDx2b2lkICo+KHN0YXRl
 XykpOworK30KKysKKytHbG9iYWxQbHVnaW46On5HbG9iYWxQbHVnaW4oKSB7CisrICBUU0NvbnRE
 ZXN0cm95KHN0YXRlXy0+Y29udF8pOworKyAgZGVsZXRlIHN0YXRlXzsKKyt9CisrCisrdm9pZCBH
 bG9iYWxQbHVnaW46OnJlZ2lzdGVySG9vayhQbHVnaW46Okhvb2tUeXBlIGhvb2tfdHlwZSkgewor
 KyAgVFNIdHRwSG9va0lEIGhvb2tfaWQgPSB1dGlsczo6aW50ZXJuYWw6OmNvbnZlcnRJbnRlcm5h
 bEhvb2tUb1RzSG9vayhob29rX3R5cGUpOworKyAgVFNIdHRwSG9va0FkZChob29rX2lkLCBzdGF0
 ZV8tPmNvbnRfKTsKKysgIExPR19ERUJVRygiUmVnaXN0ZXJlZCBnbG9iYWwgcGx1Z2luICVwIGZv
 ciBob29rICVzIiwgdGhpcywgSE9PS19UWVBFX1NUUklOR1NbaG9va190eXBlXS5jX3N0cigpKTsK
 Kyt9CitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlv
 bi5jYyBsaWIvYXRzY3BwYXBpL3NyYy9HemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uLmNjCistLS0g
 bGliL2F0c2NwcGFwaS9zcmMvR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbi5jYwkxOTcwLTAxLTAx
 IDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL0d6aXBEZWZs
 YXRlVHJhbnNmb3JtYXRpb24uY2MJMjAxMy0xMS0xMSAxNDowMzoxMi43MDI1MzIwOTMgKzA4MDAK
 K0BAIC0wLDAgKzEsMTU2IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3
 YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxp
 Y2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdp
 dGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29w
 eXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3Ug
 dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIp
 OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRo
 IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisr
 CisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisr
 ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
 bmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
 dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
 VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhl
 IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
 YW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysvKioKKysgKiBA
 ZmlsZSBHemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uLmNjCisrICovCisrCisrI2luY2x1ZGUgPHN0
 cmluZz4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8dmVjdG9yPgorKyNpbmNsdWRl
 IDx6bGliLmg+CisrI2luY2x1ZGUgImF0c2NwcGFwaS9UcmFuc2Zvcm1hdGlvblBsdWdpbi5oIgor
 KyNpbmNsdWRlICJhdHNjcHBhcGkvR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbi5oIgorKyNpbmNs
 dWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFwaTo6
 dHJhbnNmb3JtYXRpb25zOworK3VzaW5nIHN0ZDo6c3RyaW5nOworK3VzaW5nIHN0ZDo6dmVjdG9y
 OworKworK25hbWVzcGFjZSB7CisrY29uc3QgaW50IEdaSVBfTUVNX0xFVkVMID0gODsKKytjb25z
 dCBpbnQgV0lORE9XX0JJVFMgPSAzMTsgLy8gQWx3YXlzIHVzZSAzMSBmb3IgZ3ppcC4KKytjb25z
 dCBpbnQgT05FX0tCID0gMTAyNDsKKyt9CisrCisrLyoqCisrICogQHByaXZhdGUKKysgKi8KKytz
 dHJ1Y3QgYXRzY3BwYXBpOjp0cmFuc2Zvcm1hdGlvbnM6Okd6aXBEZWZsYXRlVHJhbnNmb3JtYXRp
 b25TdGF0ZTogbm9uY29weWFibGUgeworKyAgel9zdHJlYW0gel9zdHJlYW1fOworKyAgYm9vbCB6
 X3N0cmVhbV9pbml0aWFsaXplZF87CisrICBUcmFuc2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0cmFu
 c2Zvcm1hdGlvbl90eXBlXzsKKysgIGludDY0X3QgYnl0ZXNfcHJvZHVjZWRfOworKworKyAgR3pp
 cERlZmxhdGVUcmFuc2Zvcm1hdGlvblN0YXRlKFRyYW5zZm9ybWF0aW9uUGx1Z2luOjpUeXBlIHR5
 cGUpIDoKKysgICAgICAgIHpfc3RyZWFtX2luaXRpYWxpemVkXyhmYWxzZSksIHRyYW5zZm9ybWF0
 aW9uX3R5cGVfKHR5cGUpLCBieXRlc19wcm9kdWNlZF8oMCkgeworKworKyAgICBtZW1zZXQoJnpf
 c3RyZWFtXywgMCwgc2l6ZW9mKHpfc3RyZWFtXykpOworKyAgICBpbnQgZXJyID0KKysgICAgICAg
 IGRlZmxhdGVJbml0Migmel9zdHJlYW1fLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIFpfREVGTEFU
 RUQsIFdJTkRPV19CSVRTICwgR1pJUF9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSk7Cisr
 CisrICAgIGlmIChaX09LICE9IGVycikgeworKyAgICAgIExPR19FUlJPUigiZGVmbGF0ZUluaXQy
 IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJyVkJy4iLCBlcnIpOworKyAgICB9IGVsc2UgeworKyAg
 ICAgIHpfc3RyZWFtX2luaXRpYWxpemVkXyA9IHRydWU7CisrICAgIH0KKysgIH07CisrCisrICB+
 R3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvblN0YXRlKCkgeworKyAgICBpZiAoel9zdHJlYW1faW5p
 dGlhbGl6ZWRfKSB7CisrICAgICAgZGVmbGF0ZUVuZCgmel9zdHJlYW1fKTsKKysgICAgfQorKyAg
 fTsKKyt9OworKworKworK0d6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb246Okd6aXBEZWZsYXRlVHJh
 bnNmb3JtYXRpb24oVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uLCBUcmFuc2Zvcm1hdGlvblBsdWdp
 bjo6VHlwZSB0eXBlKSA6IFRyYW5zZm9ybWF0aW9uUGx1Z2luKHRyYW5zYWN0aW9uLCB0eXBlKSB7
 CisrICBzdGF0ZV8gPSBuZXcgR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvblN0YXRlKHR5cGUpOwor
 K30KKysKKytHemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uOjp+R3ppcERlZmxhdGVUcmFuc2Zvcm1h
 dGlvbigpIHsKKysgIGRlbGV0ZSBzdGF0ZV87CisrfQorKworK3ZvaWQgR3ppcERlZmxhdGVUcmFu
 c2Zvcm1hdGlvbjo6Y29uc3VtZShjb25zdCBzdHJpbmcgJmRhdGEpIHsKKysgIGlmIChkYXRhLnNp
 emUoKSA9PSAwKSB7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGlmICghc3RhdGVfLT56X3N0
 cmVhbV9pbml0aWFsaXplZF8pIHsKKysgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZGVmbGF0ZSBv
 dXRwdXQgYmVjYXVzZSB0aGUgel9zdHJlYW0gd2FzIG5vdCBpbml0aWFsaXplZC4iKTsKKysgICAg
 cmV0dXJuOworKyAgfQorKworKyAgaW50IGl0ZXJhdGlvbiA9IDA7CisrICBzdGF0ZV8tPnpfc3Ry
 ZWFtXy5kYXRhX3R5cGUgPSBaX0FTQ0lJOworKyAgc3RhdGVfLT56X3N0cmVhbV8ubmV4dF9pbiA9
 IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihjb25zdF9jYXN0PGNoYXIgKj4oZGF0
 YS5jX3N0cigpKSk7CisrICBzdGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9pbiA9IGRhdGEubGVuZ3Ro
 KCk7CisrCisrICAvLyBGb3Igc21hbGwgcGF5bG9hZHMgdGhlIHNpemUgY2FuIGFjdHVhbGx5IGJl
 IGdyZWF0ZXIgdGhhbiB0aGUgb3JpZ2luYWwgaW5wdXQKKysgIC8vIHNvIHdlJ2xsIHVzZSB0d2lj
 ZSB0aGUgb3JpZ2luYWwgc2l6ZSB0byBhdm9pZCBuZWVkbGVzcyByZXBlYXRlZCBjYWxscyB0byBk
 ZWZsYXRlLgorKyAgdW5zaWduZWQgbG9uZyBidWZmZXJfc2l6ZSA9IGRhdGEubGVuZ3RoKCkgPCBz
 dGF0aWNfY2FzdDxzdHJpbmc6OnNpemVfdHlwZT4oT05FX0tCID8gMiAqIE9ORV9LQiA6IGRhdGEu
 bGVuZ3RoKCkpOworKyAgdmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihidWZmZXJfc2l6ZSk7
 CisrCisrICBkbyB7CisrICAgIExPR19ERUJVRygiSXRlcmF0aW9uICVkOiBEZWZsYXRlIHdpbGwg
 Y29tcHJlc3MgJWxkIGJ5dGVzIiwgKytpdGVyYXRpb24sIGRhdGEuc2l6ZSgpKTsKKysgICAgc3Rh
 dGVfLT56X3N0cmVhbV8uYXZhaWxfb3V0ID0gYnVmZmVyX3NpemU7CisrICAgIHN0YXRlXy0+el9z
 dHJlYW1fLm5leHRfb3V0ID0gJmJ1ZmZlclswXTsKKysKKysgICAgaW50IGVyciA9IGRlZmxhdGUo
 JnN0YXRlXy0+el9zdHJlYW1fLCBaX1NZTkNfRkxVU0gpOworKyAgICBpZiAoWl9PSyAhPSBlcnIp
 IHsKKysgICAgICBMT0dfRVJST1IoIkl0ZXJhdGlvbiAlZDogRGVmbGF0ZSBmYWlsZWQgdG8gY29t
 cHJlc3MgJWxkIGJ5dGVzIHdpdGggZXJyb3IgY29kZSAnJWQnIiwgaXRlcmF0aW9uLCBkYXRhLnNp
 emUoKSwgZXJyKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgaW50IGJ5dGVzX3Rv
 X3dyaXRlID0gYnVmZmVyX3NpemUgLSBzdGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9vdXQ7CisrICAg
 IHN0YXRlXy0+Ynl0ZXNfcHJvZHVjZWRfICs9IGJ5dGVzX3RvX3dyaXRlOworKworKyAgICBMT0df
 REVCVUcoIkl0ZXJhdGlvbiAlZDogRGVmbGF0ZSBjb21wcmVzc2VkICVsZCBieXRlcyB0byAlZCBi
 eXRlcywgcHJvZHVjaW5nIG91dHB1dC4uLiIsIGl0ZXJhdGlvbiwgZGF0YS5zaXplKCksIGJ5dGVz
 X3RvX3dyaXRlKTsKKysgICAgcHJvZHVjZShzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjaGFyICo+
 KCZidWZmZXJbMF0pLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzX3RvX3dyaXRlKSkpOworKyAg
 fSB3aGlsZSAoc3RhdGVfLT56X3N0cmVhbV8uYXZhaWxfb3V0ID09IDApOworKworKyAgaWYgKHN0
 YXRlXy0+el9zdHJlYW1fLmF2YWlsX2luICE9IDApIHsKKysgICAgTE9HX0VSUk9SKCJJbmZsYXRl
 IGZpbmlzaGVkIHdpdGggZGF0YSBzdGlsbCByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciBvZiBzaXpl
 ICcldSciLCBzdGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9pbik7CisrICB9CisrfQorKworK3ZvaWQg
 R3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbjo6aGFuZGxlSW5wdXRDb21wbGV0ZSgpIHsKKysgIC8v
 IFdlIHdpbGwgZmx1c2ggb3V0IGFueXRoaW5nIHRoYXQncyByZW1haW5pbmcgaW4gdGhlIGd6aXAg
 YnVmZmVyCisrICBpbnQgc3RhdHVzID0gWl9PSzsKKysgIGludCBpdGVyYXRpb24gPSAwOworKyAg
 Y29uc3QgaW50IGJ1ZmZlcl9zaXplID0gMTAyNDsgLy8gMTAyNCBieXRlcyBpcyB1c3VhbGx5IG1v
 cmUgdGhhbiBlbm91Z2ggZm9yIHRoZSBlcGlsb3VnZQorKyAgdW5zaWduZWQgY2hhciBidWZmZXJb
 YnVmZmVyX3NpemVdOworKworKyAgLyogRGVmbGF0ZSByZW1haW5pbmcgZGF0YSAqLworKyAgZG8g
 eworKyAgICBMT0dfREVCVUcoIkl0ZXJhdGlvbiAlZDogR3ppcCBkZWZsYXRlIGZpbmFsaXppbmcu
 IiwgKytpdGVyYXRpb24pOworKyAgICBzdGF0ZV8tPnpfc3RyZWFtXy5kYXRhX3R5cGUgPSBaX0FT
 Q0lJOworKyAgICBzdGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9vdXQgPSBidWZmZXJfc2l6ZTsKKysg
 ICAgc3RhdGVfLT56X3N0cmVhbV8ubmV4dF9vdXQgPSBidWZmZXI7CisrCisrICAgIHN0YXR1cyA9
 IGRlZmxhdGUoJnN0YXRlXy0+el9zdHJlYW1fLCBaX0ZJTklTSCk7CisrCisrICAgIGludCBieXRl
 c190b193cml0ZSA9IGJ1ZmZlcl9zaXplIC0gc3RhdGVfLT56X3N0cmVhbV8uYXZhaWxfb3V0Owor
 KyAgICBzdGF0ZV8tPmJ5dGVzX3Byb2R1Y2VkXyArPSBieXRlc190b193cml0ZTsKKysKKysgICAg
 aWYgKHN0YXR1cyA9PSBaX09LIHx8IHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQpIHsKKysgICAgICBM
 T0dfREVCVUcoIkl0ZXJhdGlvbiAlZDogR3ppcCBkZWZsYXRlIGZpbmFsaXplIGhhZCBhbiBleHRy
 YSAlZCBieXRlcyB0byBwcm9jZXNzLCBzdGF0dXMgJyVkJy4gUHJvZHVjaW5nIG91dHB1dC4uLiIs
 IGl0ZXJhdGlvbiwgYnl0ZXNfdG9fd3JpdGUsIHN0YXR1cyk7CisrICAgICAgcHJvZHVjZShzdHJp
 bmcocmVpbnRlcnByZXRfY2FzdDxjaGFyICo+KGJ1ZmZlciksIHN0YXRpY19jYXN0PHNpemVfdD4o
 Ynl0ZXNfdG9fd3JpdGUpKSk7CisrICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IFpfU1RSRUFNX0VO
 RCkgeworKyAgICAgIExPR19FUlJPUigiSXRlcmF0aW9uICVkOiBHemlwIGRlZmxpbmF0ZSBmaW5h
 bGl6ZSBwcm9kdWNlZCBhbiBlcnJvciAnJWQnIiwgaXRlcmF0aW9uLCBzdGF0dXMpOworKyAgICB9
 CisrICB9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyk7CisrCisrICBpbnQ2NF90IGJ5dGVzX3dyaXR0
 ZW4gPSBzZXRPdXRwdXRDb21wbGV0ZSgpOworKyAgaWYgKHN0YXRlXy0+Ynl0ZXNfcHJvZHVjZWRf
 ICE9IGJ5dGVzX3dyaXR0ZW4pIHsKKysgICAgTE9HX0VSUk9SKCJHemlwIGJ5dGVzIHByb2R1Y2Vk
 IHNhbml0eSBjaGVjayBmYWlsZWQsIGRlZmxhdGVkIGJ5dGVzID0gJWxkICE9IHdyaXR0ZW4gYnl0
 ZXMgPSAlbGQiLCBzdGF0ZV8tPmJ5dGVzX3Byb2R1Y2VkXywgYnl0ZXNfd3JpdHRlbik7CisrICB9
 CisrfQorKworKworKworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL0d6aXBJbmZsYXRlVHJh
 bnNmb3JtYXRpb24uY2MgbGliL2F0c2NwcGFwaS9zcmMvR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlv
 bi5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3JjL0d6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24uY2MJ
 MTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3Ny
 Yy9HemlwSW5mbGF0ZVRyYW5zZm9ybWF0aW9uLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMy
 MDkzICswODAwCitAQCAtMCwwICsxLDEzMCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFw
 YWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250
 cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0
 cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVn
 YXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQor
 KyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAg
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
 ZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
 LTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
 aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElF
 UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
 KyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
 cm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisr
 CisrLyoqCisrICogQGZpbGUgR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbi5jYworKyAqLworKwor
 KyNpbmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPHZlY3Rv
 cj4KKysjaW5jbHVkZSA8emxpYi5oPgorKyNpbmNsdWRlICJhdHNjcHBhcGkvVHJhbnNmb3JtYXRp
 b25QbHVnaW4uaCIKKysjaW5jbHVkZSAiYXRzY3BwYXBpL0d6aXBJbmZsYXRlVHJhbnNmb3JtYXRp
 b24uaCIKKysjaW5jbHVkZSAibG9nZ2luZ19pbnRlcm5hbC5oIgorKworK3VzaW5nIG5hbWVzcGFj
 ZSBhdHNjcHBhcGk6OnRyYW5zZm9ybWF0aW9uczsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKyt1c2lu
 ZyBzdGQ6OnZlY3RvcjsKKysKKytuYW1lc3BhY2UgeworK2NvbnN0IGludCBXSU5ET1dfQklUUyA9
 IDMxOyAvLyBBbHdheXMgdXNlIDMxIGZvciBnemlwLgorK3Vuc2lnbmVkIGludCBJTkZMQVRFX1ND
 QUxFX0ZBQ1RPUiA9IDY7CisrfQorKworKy8qKgorKyAqIEBwcml2YXRlCisrICovCisrc3RydWN0
 IGF0c2NwcGFwaTo6dHJhbnNmb3JtYXRpb25zOjpHemlwSW5mbGF0ZVRyYW5zZm9ybWF0aW9uU3Rh
 dGU6IG5vbmNvcHlhYmxlIHsKKysgIHpfc3RyZWFtIHpfc3RyZWFtXzsKKysgIGJvb2wgel9zdHJl
 YW1faW5pdGlhbGl6ZWRfOworKyAgaW50NjRfdCBieXRlc19wcm9kdWNlZF87CisrICBUcmFuc2Zv
 cm1hdGlvblBsdWdpbjo6VHlwZSB0cmFuc2Zvcm1hdGlvbl90eXBlXzsKKysKKysgIEd6aXBJbmZs
 YXRlVHJhbnNmb3JtYXRpb25TdGF0ZShUcmFuc2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0eXBlKSA6
 CisrICAgICAgICB6X3N0cmVhbV9pbml0aWFsaXplZF8oZmFsc2UpLCBieXRlc19wcm9kdWNlZF8o
 MCksIHRyYW5zZm9ybWF0aW9uX3R5cGVfKHR5cGUpIHsKKysKKysgICAgbWVtc2V0KCZ6X3N0cmVh
 bV8sIDAsIHNpemVvZih6X3N0cmVhbV8pKTsKKysKKysgICAgaW50IGVyciA9IGluZmxhdGVJbml0
 Migmel9zdHJlYW1fLCBXSU5ET1dfQklUUyk7CisrICAgIGlmIChaX09LICE9IGVycikgeworKyAg
 ICAgIExPR19FUlJPUigiaW5mbGF0ZUluaXQyIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJyVkJy4i
 LCBlcnIpOworKyAgICB9IGVsc2UgeworKyAgICAgIHpfc3RyZWFtX2luaXRpYWxpemVkXyA9IHRy
 dWU7CisrICAgIH0KKysgIH07CisrCisrICB+R3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvblN0YXRl
 KCkgeworKyAgICBpZiAoel9zdHJlYW1faW5pdGlhbGl6ZWRfKSB7CisrICAgICAgaW50IGVyciA9
 IGluZmxhdGVFbmQoJnpfc3RyZWFtXyk7CisrICAgICAgaWYgKFpfT0sgIT0gZXJyICYmIFpfU1RS
 RUFNX0VORCAhPSBlcnIpIHsKKysgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGluZmxhdGVF
 bmQoKSwgcmV0dXJuZWQgZXJyb3IgY29kZSAnJWQnIiwgZXJyKTsKKysgICAgICB9CisrICAgIH0K
 KysgIH07CisrfTsKKysKKysKKytHemlwSW5mbGF0ZVRyYW5zZm9ybWF0aW9uOjpHemlwSW5mbGF0
 ZVRyYW5zZm9ybWF0aW9uKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbiwgVHJhbnNmb3JtYXRpb25Q
 bHVnaW46OlR5cGUgdHlwZSkgOiBUcmFuc2Zvcm1hdGlvblBsdWdpbih0cmFuc2FjdGlvbiwgdHlw
 ZSkgeworKyAgc3RhdGVfID0gbmV3IEd6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb25TdGF0ZSh0eXBl
 KTsKKyt9CisrCisrR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbjo6fkd6aXBJbmZsYXRlVHJhbnNm
 b3JtYXRpb24oKSB7CisrICBkZWxldGUgc3RhdGVfOworK30KKysKKyt2b2lkIEd6aXBJbmZsYXRl
 VHJhbnNmb3JtYXRpb246OmNvbnN1bWUoY29uc3Qgc3RyaW5nICZkYXRhKSB7CisrICBpZiAoZGF0
 YS5zaXplKCkgPT0gMCkgeworKyAgICByZXR1cm47CisrICB9CisrCisrICBpZiAoIXN0YXRlXy0+
 el9zdHJlYW1faW5pdGlhbGl6ZWRfKSB7CisrICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGluZmxh
 dGUgb3V0cHV0IGJlY2F1c2UgdGhlIHpfc3RyZWFtIHdhcyBub3QgaW5pdGlhbGl6ZWQuIik7Cisr
 ICAgIHJldHVybjsKKysgIH0KKysKKysgIGludCBlcnIgPSBaX09LOworKyAgaW50IGl0ZXJhdGlv
 biA9IDA7CisrICBpbnQgaW5mbGF0ZV9ibG9ja19zaXplID0gSU5GTEFURV9TQ0FMRV9GQUNUT1Ig
 KiBkYXRhLnNpemUoKTsKKysgIHZlY3RvcjxjaGFyPiBidWZmZXIoaW5mbGF0ZV9ibG9ja19zaXpl
 KTsKKysKKysgIC8vIFNldHVwIHRoZSBjb21wcmVzc2VkIGlucHV0CisrICBzdGF0ZV8tPnpfc3Ry
 ZWFtXy5uZXh0X2luID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGNvbnN0X2Nh
 c3Q8Y2hhciAqPihkYXRhLmNfc3RyKCkpKTsKKysgIHN0YXRlXy0+el9zdHJlYW1fLmF2YWlsX2lu
 ID0gZGF0YS5sZW5ndGgoKTsKKysKKysgIC8vIExvb3Agd2hpbGUgd2UgaGF2ZSBtb3JlIGRhdGEg
 dG8gaW5mbGF0ZQorKyAgd2hpbGUgKHN0YXRlXy0+el9zdHJlYW1fLmF2YWlsX2luID4gMCAmJiBl
 cnIgIT0gWl9TVFJFQU1fRU5EKSB7CisrICAgIExPR19ERUJVRygiSXRlcmF0aW9uICVkOiBHemlw
 IGhhcyAlZCBieXRlcyB0byBpbmZsYXRlIiwgKytpdGVyYXRpb24sIHN0YXRlXy0+el9zdHJlYW1f
 LmF2YWlsX2luKTsKKysKKysgICAgLy8gU2V0dXAgd2hlcmUgdGhlIGRlY29tcHJlc3NlZCBvdXRw
 dXQgd2lsbCBnby4KKysgICAgc3RhdGVfLT56X3N0cmVhbV8ubmV4dF9vdXQgPSByZWludGVycHJl
 dF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4oJmJ1ZmZlclswXSk7CisrICAgIHN0YXRlXy0+el9zdHJl
 YW1fLmF2YWlsX291dCA9IGluZmxhdGVfYmxvY2tfc2l6ZTsKKysKKysgICAgLyogVW5jb21wcmVz
 cyAqLworKyAgICBlcnIgPSBpbmZsYXRlKCZzdGF0ZV8tPnpfc3RyZWFtXywgWl9TWU5DX0ZMVVNI
 KTsKKysKKysgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKKysg
 ICAgIExPR19FUlJPUigiSXRlcmF0aW9uICVkOiBJbmZsYXRlIGZhaWxlZCB3aXRoIGVycm9yICcl
 ZCciLCBpdGVyYXRpb24sIGVycik7CisrICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgTE9H
 X0RFQlVHKCJJdGVyYXRpb24gJWQ6IEd6aXAgaW5mbGF0ZWQgYSB0b3RhbCBvZiAlZCBieXRlcywg
 cHJvZHVjaW5nT3V0cHV0Li4uIiwgaXRlcmF0aW9uLCAoaW5mbGF0ZV9ibG9ja19zaXplIC0gc3Rh
 dGVfLT56X3N0cmVhbV8uYXZhaWxfb3V0KSk7CisrICAgIHByb2R1Y2Uoc3RyaW5nKCZidWZmZXJb
 MF0sIChpbmZsYXRlX2Jsb2NrX3NpemUgLSBzdGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9vdXQpKSk7
 CisrICAgIHN0YXRlXy0+Ynl0ZXNfcHJvZHVjZWRfICs9IChpbmZsYXRlX2Jsb2NrX3NpemUgLSBz
 dGF0ZV8tPnpfc3RyZWFtXy5hdmFpbF9vdXQpOworKyAgfQorK30KKysKKyt2b2lkIEd6aXBJbmZs
 YXRlVHJhbnNmb3JtYXRpb246OmhhbmRsZUlucHV0Q29tcGxldGUoKSB7CisrICBpbnQ2NF90IGJ5
 dGVzX3dyaXR0ZW4gPSBzZXRPdXRwdXRDb21wbGV0ZSgpOworKyAgaWYgKHN0YXRlXy0+Ynl0ZXNf
 cHJvZHVjZWRfICE9IGJ5dGVzX3dyaXR0ZW4pIHsKKysgICAgTE9HX0VSUk9SKCJHemlwIGJ5dGVz
 IHByb2R1Y2VkIHNhbml0eSBjaGVjayBmYWlsZWQsIGluZmxhdGVkIGJ5dGVzID0gJWxkICE9IHdy
 aXR0ZW4gYnl0ZXMgPSAlbGQiLCBzdGF0ZV8tPmJ5dGVzX3Byb2R1Y2VkXywgYnl0ZXNfd3JpdHRl
 bik7CisrICB9CisrfQorKworKworKworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL0hlYWRl
 cnMuY2MgbGliL2F0c2NwcGFwaS9zcmMvSGVhZGVycy5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3Jj
 L0hlYWRlcnMuY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIv
 YXRzY3BwYXBpL3NyYy9IZWFkZXJzLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICsw
 ODAwCitAQCAtMCwwICsxLDUzMyBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT
 b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRv
 ciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRl
 ZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5n
 IGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8g
 eW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vu
 c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAg
 d2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
 dAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
 KworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
 cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
 dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
 T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2Vl
 IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
 b25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoq
 CisrICogQGZpbGUgSGVhZGVycy5jYworKyAqLworKyNpbmNsdWRlICJhdHNjcHBhcGkvSGVhZGVy
 cy5oIgorKyNpbmNsdWRlICJJbml0aWFsaXphYmxlVmFsdWUuaCIKKysjaW5jbHVkZSAibG9nZ2lu
 Z19pbnRlcm5hbC5oIgorKyNpbmNsdWRlIDx0cy90cy5oPgorKyNpbmNsdWRlICJhdHNjcHBhcGkv
 bm9uY29weWFibGUuaCIKKysjaW5jbHVkZSA8Y2N0eXBlPgorKworK3VzaW5nIGF0c2NwcGFwaTo6
 SGVhZGVyczsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKyt1c2luZyBzdGQ6Omxpc3Q7CisrdXNpbmcg
 c3RkOjpwYWlyOworK3VzaW5nIHN0ZDo6bWFrZV9wYWlyOworK3VzaW5nIHN0ZDo6b3N0cmluZ3N0
 cmVhbTsKKyt1c2luZyBzdGQ6Om1hcDsKKysKKytuYW1lc3BhY2UgYXRzY3BwYXBpIHsKKysKKytu
 YW1lc3BhY2UgeworKyAgY29uc3QgaW50IEFQUEVORF9JTkRFWCA9IC0xOworKyAgY29uc3QgbGlz
 dDxzdHJpbmc+IEVNUFRZX1ZBTFVFX0xJU1Q7CisrICBjb25zdCBpbnQgRklSU1RfSU5ERVggPSAw
 OworK30KKysKKysvKioKKysgKiBAcHJpdmF0ZQorKyAqLworK3N0cnVjdCBIZWFkZXJzU3RhdGU6
 IG5vbmNvcHlhYmxlIHsKKysgIEhlYWRlcnM6OlR5cGUgdHlwZV87CisrICBUU01CdWZmZXIgaGRy
 X2J1Zl87CisrICBUU01Mb2MgaGRyX2xvY187CisrICBJbml0aWFsaXphYmxlVmFsdWU8SGVhZGVy
 czo6TmFtZVZhbHVlc01hcD4gbmFtZV92YWx1ZXNfbWFwXzsKKysgIGJvb2wgZGV0YWNoZWRfOwor
 KyAgSW5pdGlhbGl6YWJsZVZhbHVlPEhlYWRlcnM6OlJlcXVlc3RDb29raWVNYXA+IHJlcXVlc3Rf
 Y29va2llc187CisrICBJbml0aWFsaXphYmxlVmFsdWU8bGlzdDxIZWFkZXJzOjpSZXNwb25zZUNv
 b2tpZT4gPiByZXNwb25zZV9jb29raWVzXzsKKysgIEhlYWRlcnNTdGF0ZShIZWFkZXJzOjpUeXBl
 IHR5cGUpIDogdHlwZV8odHlwZSksIGhkcl9idWZfKE5VTEwpLCBoZHJfbG9jXyhOVUxMKSwgZGV0
 YWNoZWRfKGZhbHNlKSB7IH0KKyt9OworKworK30KKysKKytIZWFkZXJzOjpIZWFkZXJzKFR5cGUg
 dHlwZSkgeworKyAgc3RhdGVfID0gbmV3IEhlYWRlcnNTdGF0ZSh0eXBlKTsKKyt9CisrCisrSGVh
 ZGVyczo6VHlwZSBIZWFkZXJzOjpnZXRUeXBlKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRlXy0+
 dHlwZV87CisrfQorKworK3ZvaWQgSGVhZGVyczo6c2V0VHlwZShUeXBlIHR5cGUpIHsKKysgIHN0
 YXRlXy0+dHlwZV8gPSB0eXBlOworK30KKysKKyt2b2lkIEhlYWRlcnM6OmluaXQodm9pZCAqaGRy
 X2J1Ziwgdm9pZCAqaGRyX2xvYykgeworKyAgaWYgKHN0YXRlXy0+aGRyX2J1Zl8gfHwgc3RhdGVf
 LT5oZHJfbG9jXyB8fCBzdGF0ZV8tPmRldGFjaGVkXykgeworKyAgICBMT0dfRVJST1IoIkNhbm5v
 dCByZWluaXRpYWxpemU7IGhkcl9idWYgJXAsIGhkcl9sb2MgJXAsIGRldGFjaGVkICVzIiwgc3Rh
 dGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywKKysgICAgICAgICAgICAgIChzdGF0ZV8t
 PmRldGFjaGVkXyA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAg
 c3RhdGVfLT5oZHJfYnVmXyA9IHN0YXRpY19jYXN0PFRTTUJ1ZmZlcj4oaGRyX2J1Zik7CisrICBz
 dGF0ZV8tPmhkcl9sb2NfID0gc3RhdGljX2Nhc3Q8VFNNTG9jPihoZHJfbG9jKTsKKyt9CisrCisr
 dm9pZCBIZWFkZXJzOjppbml0RGV0YWNoZWQoKSB7CisrICBpZiAoc3RhdGVfLT5oZHJfYnVmXyB8
 fCBzdGF0ZV8tPmhkcl9sb2NfIHx8IHN0YXRlXy0+ZGV0YWNoZWRfKSB7CisrICAgIExPR19FUlJP
 UigiQ2Fubm90IHJlaW5pdGlhbGl6ZTsgaGRyX2J1ZiAlcCwgaGRyX2xvYyAlcCwgZGV0YWNoZWQg
 JXMiLCBzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfLAorKyAgICAgICAgICAgICAg
 KHN0YXRlXy0+ZGV0YWNoZWRfID8gInRydWUiIDogImZhbHNlIikpOworKyAgICByZXR1cm47Cisr
 ICB9CisrICBzdGF0ZV8tPmRldGFjaGVkXyA9IHRydWU7CisrICBzdGF0ZV8tPm5hbWVfdmFsdWVz
 X21hcF8uc2V0SW5pdGlhbGl6ZWQoKTsKKyt9CisrCisrbmFtZXNwYWNlIHsKKysKKyt2b2lkIGV4
 dHJhY3RIZWFkZXJGaWVsZFZhbHVlcyhUU01CdWZmZXIgaGRyX2J1ZiwgVFNNTG9jIGhkcl9sb2Ms
 IFRTTUxvYyBmaWVsZF9sb2MsIGNvbnN0IHN0cmluZyAmaGVhZGVyX25hbWUsCisrICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgbGlzdDxzdHJpbmc+ICZ2YWx1ZV9saXN0KSB7CisrICBpbnQg
 bnVtX3ZhbHVlcyA9IFRTTWltZUhkckZpZWxkVmFsdWVzQ291bnQoaGRyX2J1ZiwgaGRyX2xvYywg
 ZmllbGRfbG9jKTsKKysgIExPR19ERUJVRygiR290ICVkIHZhbHVlcyBmb3IgaGVhZGVyIFslc10i
 LCBudW1fdmFsdWVzLCBoZWFkZXJfbmFtZS5jX3N0cigpKTsKKysgIGlmICghbnVtX3ZhbHVlcykg
 eworKyAgICBMT0dfREVCVUcoIkhlYWRlciBbJXNdIGhhcyBubyB2YWx1ZXM7IEFkZGluZyBlbXB0
 eSBzdHJpbmciLCBoZWFkZXJfbmFtZS5jX3N0cigpKTsKKysgICAgdmFsdWVfbGlzdC5wdXNoX2Jh
 Y2soc3RyaW5nKCkpOworKyAgICByZXR1cm47CisrICB9CisrICBjb25zdCBjaGFyICp2YWx1ZTsK
 KysgIGludCB2YWx1ZV9sZW47CisrICBmb3IgKGludCBpID0gMDsgaSA8IG51bV92YWx1ZXM7ICsr
 aSkgeworKyAgICB2YWx1ZSA9IFRTTWltZUhkckZpZWxkVmFsdWVTdHJpbmdHZXQoaGRyX2J1Ziwg
 aGRyX2xvYywgZmllbGRfbG9jLCBpLCAmdmFsdWVfbGVuKTsKKysgICAgdmFsdWVfbGlzdC5wdXNo
 X2JhY2soKHZhbHVlICYmIHZhbHVlX2xlbikgPyBzdHJpbmcodmFsdWUsIHZhbHVlX2xlbikgOiBz
 dHJpbmcoKSk7CisrICAgIExPR19ERUJVRygiQWRkZWQgdmFsdWUgWyUuKnNdIHRvIGhlYWRlciBb
 JXNdIiwgdmFsdWVfbGVuLCB2YWx1ZSwgaGVhZGVyX25hbWUuY19zdHIoKSk7CisrICB9CisrfQor
 KworK30KKysKKytib29sIEhlYWRlcnM6OmNoZWNrQW5kSW5pdEhlYWRlcnMoKSBjb25zdCB7Cisr
 ICBpZiAoc3RhdGVfLT5uYW1lX3ZhbHVlc19tYXBfLmlzSW5pdGlhbGl6ZWQoKSkgeworKyAgICBy
 ZXR1cm4gdHJ1ZTsKKysgIH0gZWxzZSBpZiAoKHN0YXRlXy0+aGRyX2J1Zl8gPT0gTlVMTCkgfHwg
 KHN0YXRlXy0+aGRyX2xvY18gPT0gTlVMTCkpIHsKKysgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
 aW5pdGlhbGl6ZSEgVFMgaGVhZGVyIGhhbmRsZXMgbm90IHNldDsgaGRyX2J1ZiAlcCwgaGRyX2xv
 YyAlcCIsIHN0YXRlXy0+aGRyX2J1Zl8sIAorKyAgICAgICAgICAgICAgc3RhdGVfLT5oZHJfbG9j
 Xyk7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgIHN0YXRlXy0+bmFtZV92YWx1ZXNf
 bWFwXy5nZXRWYWx1ZVJlZigpLmNsZWFyKCk7CisrICBzdHJpbmcga2V5OworKyAgY29uc3QgY2hh
 ciAqbmFtZTsKKysgIGludCBuYW1lX2xlbjsKKysgIHBhaXI8TmFtZVZhbHVlc01hcDo6aXRlcmF0
 b3IsIGJvb2w+IGluc2VydF9yZXN1bHQ7CisrICBUU01Mb2MgZmllbGRfbG9jID0gVFNNaW1lSGRy
 RmllbGRHZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgRklSU1RfSU5ERVgp
 OworKyAgd2hpbGUgKGZpZWxkX2xvYykgeworKyAgICBuYW1lID0gVFNNaW1lSGRyRmllbGROYW1l
 R2V0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sIGZpZWxkX2xvYywgJm5hbWVf
 bGVuKTsKKysgICAgaWYgKG5hbWUgJiYgKG5hbWVfbGVuID4gMCkpIHsKKysgICAgICBrZXkuYXNz
 aWduKG5hbWUsIG5hbWVfbGVuKTsKKysgICAgICBpbnNlcnRfcmVzdWx0ID0gc3RhdGVfLT5uYW1l
 X3ZhbHVlc19tYXBfLmdldFZhbHVlUmVmKCkuaW5zZXJ0KAorKyAgICAgICAgTmFtZVZhbHVlc01h
 cDo6dmFsdWVfdHlwZShrZXksIEVNUFRZX1ZBTFVFX0xJU1QpKTsKKysgICAgICBOYW1lVmFsdWVz
 TWFwOjppdGVyYXRvciAmaW5zZXJ0ZWRfZWxlbWVudCA9IGluc2VydF9yZXN1bHQuZmlyc3Q7Cisr
 ICAgICAgbGlzdDxzdHJpbmc+ICZ2YWx1ZV9saXN0ID0gaW5zZXJ0ZWRfZWxlbWVudC0+c2Vjb25k
 OworKyAgICAgIGV4dHJhY3RIZWFkZXJGaWVsZFZhbHVlcyhzdGF0ZV8tPmhkcl9idWZfLCBzdGF0
 ZV8tPmhkcl9sb2NfLCBmaWVsZF9sb2MsIGtleSwgdmFsdWVfbGlzdCk7CisrICAgIH0gZWxzZSB7
 CisrICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IG5hbWUgb2YgaGVhZGVyOyBoZHJfYnVm
 ICVwLCBoZHJfbG9jICVwIiwgc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXyk7Cisr
 ICAgIH0KKysgICAgVFNNTG9jIG5leHRfZmllbGRfbG9jID0gVFNNaW1lSGRyRmllbGROZXh0KHN0
 YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sIGZpZWxkX2xvYyk7CisrICAgIFRTSGFu
 ZGxlTUxvY1JlbGVhc2Uoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgZmllbGRf
 bG9jKTsKKysgICAgZmllbGRfbG9jID0gbmV4dF9maWVsZF9sb2M7CisrICB9CisrICBzdGF0ZV8t
 Pm5hbWVfdmFsdWVzX21hcF8uc2V0SW5pdGlhbGl6ZWQoKTsKKysgIExPR19ERUJVRygiSW5pdGlh
 bGl6ZWQgaGVhZGVycyBtYXAiKTsKKysgIHJldHVybiB0cnVlOworK30KKysKKytIZWFkZXJzOjp+
 SGVhZGVycygpIHsKKysgIGRlbGV0ZSBzdGF0ZV87CisrfQorKworK0hlYWRlcnM6OnNpemVfdHlw
 ZSBIZWFkZXJzOjplcmFzZShjb25zdCBzdHJpbmcgJmspIHsKKysgIGlmICghY2hlY2tBbmRJbml0
 SGVhZGVycygpKSB7CisrICAgIHJldHVybiAwOworKyAgfQorKyAgaWYgKChzdGF0ZV8tPnR5cGVf
 ID09IFRZUEVfUkVRVUVTVCkgJiYgKENhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3IoKShr
 LCAiQ29va2llIikgPT0gMCkpIHsKKysgICAgc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfLmdldFZh
 bHVlUmVmKCkuY2xlYXIoKTsKKysgICAgc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfLnNldEluaXRp
 YWxpemVkKGZhbHNlKTsKKysgIH0gZWxzZSBpZiAoKHN0YXRlXy0+dHlwZV8gPT0gVFlQRV9SRVNQ
 T05TRSkgJiYgKENhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3IoKShrLCAiU2V0LUNvb2tp
 ZSIpID09IDApKSB7CisrICAgIHN0YXRlXy0+cmVzcG9uc2VfY29va2llc18uZ2V0VmFsdWVSZWYo
 KS5jbGVhcigpOworKyAgICBzdGF0ZV8tPnJlc3BvbnNlX2Nvb2tpZXNfLnNldEluaXRpYWxpemVk
 KGZhbHNlKTsKKysgIH0KKysgIExPR19ERUJVRygiRXJhc2luZyBoZWFkZXIgWyVzXSIsIGsuY19z
 dHIoKSk7CisrICByZXR1cm4gZG9CYXNpY0VyYXNlKGspOworK30KKysKKytIZWFkZXJzOjpzaXpl
 X3R5cGUgSGVhZGVyczo6ZG9CYXNpY0VyYXNlKGNvbnN0IHN0cmluZyAmaykgeworKyAgaWYgKCFz
 dGF0ZV8tPmRldGFjaGVkXykgeworKyAgICBUU01Mb2MgZmllbGRfbG9jID0gVFNNaW1lSGRyRmll
 bGRGaW5kKHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sIGsuY19zdHIoKSwgay5s
 ZW5ndGgoKSk7CisrICAgIHdoaWxlIChmaWVsZF9sb2MpIHsKKysgICAgICBUU01Mb2MgbmV4dF9m
 aWVsZF9sb2MgPSBUU01pbWVIZHJGaWVsZE5leHREdXAoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVf
 LT5oZHJfbG9jXywgZmllbGRfbG9jKTsKKysgICAgICBUU01pbWVIZHJGaWVsZERlc3Ryb3koc3Rh
 dGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgZmllbGRfbG9jKTsKKysgICAgICBUU0hh
 bmRsZU1Mb2NSZWxlYXNlKHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sIGZpZWxk
 X2xvYyk7CisrICAgICAgZmllbGRfbG9jID0gbmV4dF9maWVsZF9sb2M7CisrICAgIH0KKysgIH0K
 KysgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0VmFsdWVSZWYoKS5lcmFzZShr
 KTsKKyt9CisrCisrSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgSGVhZGVyczo6c2V0KGNvbnN0IHBh
 aXI8c3RyaW5nLCBsaXN0PHN0cmluZz4gPiAmcGFpcikgeworKyAgZXJhc2UocGFpci5maXJzdCk7
 CisrICByZXR1cm4gYXBwZW5kKHBhaXIpOworK30KKysKKysKKytIZWFkZXJzOjpjb25zdF9pdGVy
 YXRvciBIZWFkZXJzOjpzZXQoY29uc3Qgc3RyaW5nICZrZXksIGNvbnN0IGxpc3Q8c3RyaW5nPiAm
 dmFsKSB7CisrICByZXR1cm4gc2V0KG1ha2VfcGFpcihrZXksdmFsKSk7CisrfQorKworK0hlYWRl
 cnM6OmNvbnN0X2l0ZXJhdG9yIEhlYWRlcnM6OnNldChjb25zdCBzdHJpbmcgJmtleSwgY29uc3Qg
 c3RyaW5nICZ2YWwpIHsKKysgIGxpc3Q8c3RyaW5nPiB2YWx1ZXM7CisrICB2YWx1ZXMucHVzaF9i
 YWNrKHZhbCk7CisrICByZXR1cm4gc2V0KG1ha2VfcGFpcihrZXksdmFsdWVzKSk7CisrfQorKwor
 K0hlYWRlcnM6OmNvbnN0X2l0ZXJhdG9yIEhlYWRlcnM6OmFwcGVuZChjb25zdCBwYWlyPHN0cmlu
 ZywgbGlzdDxzdHJpbmc+ID4gJnBhaXIpIHsKKysgIGlmICghY2hlY2tBbmRJbml0SGVhZGVycygp
 KSB7CisrICAgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0VmFsdWVSZWYoKS5l
 bmQoKTsKKysgIH0KKysgIGlmICgoc3RhdGVfLT50eXBlXyA9PSBUWVBFX1JFUVVFU1QpICYmIChD
 YXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yKCkocGFpci5maXJzdCwgIkNvb2tpZSIpID09
 IDApKSB7CisrICAgIHN0YXRlXy0+cmVxdWVzdF9jb29raWVzXy5nZXRWYWx1ZVJlZigpLmNsZWFy
 KCk7CisrICAgIHN0YXRlXy0+cmVxdWVzdF9jb29raWVzXy5zZXRJbml0aWFsaXplZChmYWxzZSk7
 CisrICB9IGVsc2UgaWYgKChzdGF0ZV8tPnR5cGVfID09IFRZUEVfUkVTUE9OU0UpICYmCisrICAg
 ICAgICAgICAgIChDYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yKCkocGFpci5maXJzdCwg
 IlNldC1Db29raWUiKSA9PSAwKSkgeworKyAgICBzdGF0ZV8tPnJlc3BvbnNlX2Nvb2tpZXNfLmdl
 dFZhbHVlUmVmKCkuY2xlYXIoKTsKKysgICAgc3RhdGVfLT5yZXNwb25zZV9jb29raWVzXy5zZXRJ
 bml0aWFsaXplZChmYWxzZSk7CisrICB9CisrICByZXR1cm4gZG9CYXNpY0FwcGVuZChwYWlyKTsK
 Kyt9CisrCisrSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgSGVhZGVyczo6ZG9CYXNpY0FwcGVuZChj
 b25zdCBwYWlyPHN0cmluZywgbGlzdDxzdHJpbmc+ID4gJnBhaXIpIHsKKysgIGNvbnN0IHN0cmlu
 ZyAmaGVhZGVyX25hbWUgPSBwYWlyLmZpcnN0OyAvLyBoYW5keSByZWZlcmVuY2VzCisrICBjb25z
 dCBsaXN0PHN0cmluZz4gJm5ld192YWx1ZXMgPSBwYWlyLnNlY29uZDsKKysKKysgIHN0ZDo6cGFp
 cjxOYW1lVmFsdWVzTWFwOjppdGVyYXRvciwgYm9vbD4gaW5zZXJ0X3Jlc3VsdDsKKysgIGlmIChz
 dGF0ZV8tPmRldGFjaGVkXykgeworKyAgICBpbnNlcnRfcmVzdWx0ID0gc3RhdGVfLT5uYW1lX3Zh
 bHVlc19tYXBfLmdldFZhbHVlUmVmKCkuaW5zZXJ0KG1ha2VfcGFpcihoZWFkZXJfbmFtZSwgRU1Q
 VFlfVkFMVUVfTElTVCkpOworKyAgICBsaXN0PHN0cmluZz4gJnZhbHVlX2xpc3QgPSBpbnNlcnRf
 cmVzdWx0LmZpcnN0LT5zZWNvbmQ7IC8vIGV4aXN0aW5nIG9yIG5ld2x5IGluc2VydGVkCisrICAg
 IGZvciAobGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbmV3X3ZhbHVlcy5iZWdp
 bigpLCBlbmQgPSBuZXdfdmFsdWVzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisrICAg
 ICAgdmFsdWVfbGlzdC5wdXNoX2JhY2soKml0ZXIpOworKyAgICAgIExPR19ERUJVRygiQXBwZW5k
 ZWQgdmFsdWUgWyVzXSB0byBoZWFkZXIgWyVzXSIsIGl0ZXItPmNfc3RyKCksIGhlYWRlcl9uYW1l
 LmNfc3RyKCkpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBUU01Mb2MgZmllbGRfbG9jID0K
 KysgICAgICBUU01pbWVIZHJGaWVsZEZpbmQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJf
 bG9jXywgaGVhZGVyX25hbWUuY19zdHIoKSwgaGVhZGVyX25hbWUubGVuZ3RoKCkpOworKyAgICAK
 KysgICAgaWYgKCFmaWVsZF9sb2MpIHsKKysgICAgICBUU01pbWVIZHJGaWVsZENyZWF0ZShzdGF0
 ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfLCAmZmllbGRfbG9jKTsKKysgICAgICBUU01p
 bWVIZHJGaWVsZE5hbWVTZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgZmll
 bGRfbG9jLCBoZWFkZXJfbmFtZS5jX3N0cigpLCBoZWFkZXJfbmFtZS5sZW5ndGgoKSk7CisrICAg
 ICAgVFNNaW1lSGRyRmllbGRBcHBlbmQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9j
 XywgZmllbGRfbG9jKTsKKysgICAgICBMT0dfREVCVUcoIkNyZWF0ZWQgbmV3IHN0cnVjdHVyZSBm
 b3IgaGVhZGVyIFslc10iLCBoZWFkZXJfbmFtZS5jX3N0cigpKTsKKysgICAgfQorKyAgICBmb3Io
 bGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpaSA9IG5ld192YWx1ZXMuYmVnaW4oKTsgaWkg
 IT0gbmV3X3ZhbHVlcy5lbmQoKTsgKytpaSkgeworKyAgICAgIFRTTWltZUhkckZpZWxkVmFsdWVT
 dHJpbmdJbnNlcnQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgZmllbGRfbG9j
 LCBBUFBFTkRfSU5ERVgsICgqaWkpLmNfc3RyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAoKmlpKS5sZW5ndGgoKSk7CisrICAgIH0KKysKKysgICAgaW5zZXJ0X3Jl
 c3VsdCA9IHN0YXRlXy0+bmFtZV92YWx1ZXNfbWFwXy5nZXRWYWx1ZVJlZigpLmluc2VydChtYWtl
 X3BhaXIoaGVhZGVyX25hbWUsIEVNUFRZX1ZBTFVFX0xJU1QpKTsKKysgICAgbGlzdDxzdHJpbmc+
 ICZ2YWx1ZV9saXN0ID0gaW5zZXJ0X3Jlc3VsdC5maXJzdC0+c2Vjb25kOyAvLyBleGlzdGluZyBv
 ciBuZXdseSBpbnNlcnRlZAorKworKyAgICAvLworKyAgICAvLyBOb3cgYmVjYXVzZSBUU01pbWVI
 ZHJGaWVsZFZhbHVlU3RyaW5nSW5zZXJ0IHdpbGwgKHBvc3NpYmx5KSBwYXJzZSBlYWNoIHZhbHVl
 IGZvciBjb21tYXMsIHRoYXQgaXMsCisrICAgIC8vIGlmIHlvdSBpbnNlcnQgYSBsaXN0IG9mIHRo
 cmVlIGVsZW1lbnRzICJGb28iLCAiQmFyLEJheiIsICJCbGFoIiwgdGhpcyB3b3VsZCBiZWNvbWUK
 KysgICAgLy8gZm91ciBlbGVtZW50cyBpbiB0aGUgbWFyc2hhbCBidWZmZXIgYW5kIHdlIG5lZWQg
 dG8gdXBkYXRlIG91ciBvd24gbWFwIHRvIHJlZmxlY3QgdGhhdC4KKysgICAgLy8KKysgICAgLy8g
 UmF0aGVyIHRoYW4gaW5zZXJ0aW5nIHRoZSBsaXN0PHN0cmluZ3M+IGRpcmVjdGx5IGludG8gb3Vy
 IG1hcCwgd2Ugd2lsbCBhY3R1YWxseSByZWJ1aWxkIGl0IHVzaW5nIHRoZQorKyAgICAvLyBUcmFm
 ZmljIFNlcnZlciBIRFIgTWFyc2hhbCBCdWZmZXIgc28gd2UncmUgMTAwJSBjb25zaXN0ZW50IHdp
 dGggdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uLgorKyAgICAvLworKyAgICBpZiAoIWluc2Vy
 dF9yZXN1bHQuc2Vjb25kKSB7CisrICAgICAgdmFsdWVfbGlzdC5jbGVhcigpOworKyAgICB9Cisr
 ICAgIGV4dHJhY3RIZWFkZXJGaWVsZFZhbHVlcyhzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhk
 cl9sb2NfLCBmaWVsZF9sb2MsIGhlYWRlcl9uYW1lLCB2YWx1ZV9saXN0KTsKKysgICAgVFNIYW5k
 bGVNTG9jUmVsZWFzZShzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfLCBmaWVsZF9s
 b2MpOworKyAgICBMT0dfREVCVUcoIkhlYWRlciBbJXNdIGhhcyB2YWx1ZShzKSBbJXNdIiwgaGVh
 ZGVyX25hbWUuY19zdHIoKSwgZ2V0Sm9pbmVkVmFsdWVzKHZhbHVlX2xpc3QpLmNfc3RyKCkpOwor
 KyAgfQorKyAgcmV0dXJuIGluc2VydF9yZXN1bHQuZmlyc3Q7CisrfQorKworK3N0cmluZyBIZWFk
 ZXJzOjpnZXRKb2luZWRWYWx1ZXMoY29uc3Qgc3RyaW5nICZrZXksIGNoYXIgdmFsdWVfZGVsaW1p
 dGVyKSB7CisrICBjaGVja0FuZEluaXRIZWFkZXJzKCk7CisrCisrICBzdHJpbmcgcmV0OworKyAg
 SGVhZGVyczo6TmFtZVZhbHVlc01hcDo6aXRlcmF0b3Iga2V5X2l0ZXIgPSBzdGF0ZV8tPm5hbWVf
 dmFsdWVzX21hcF8uZ2V0VmFsdWVSZWYoKS5maW5kKGtleSk7CisrICBpZiAoa2V5X2l0ZXIgPT0g
 c3RhdGVfLT5uYW1lX3ZhbHVlc19tYXBfLmdldFZhbHVlUmVmKCkuZW5kKCkpIHsKKysgICAgTE9H
 X0RFQlVHKCJIZWFkZXIgWyVzXSBub3QgcHJlc2VudCIsIGtleS5jX3N0cigpKTsKKysgICAgcmV0
 dXJuIHJldDsKKysgIH0KKysgIHJldHVybiBnZXRKb2luZWRWYWx1ZXMoa2V5X2l0ZXItPnNlY29u
 ZCk7CisrfQorKworK3N0cmluZyBIZWFkZXJzOjpnZXRKb2luZWRWYWx1ZXMoY29uc3QgbGlzdDxz
 dHJpbmc+ICZ2YWx1ZXMsIGNoYXIgZGVsaW1pdGVyKSB7CisrICBzdHJpbmcgcmV0OworKyAgcmV0
 LnJlc2VydmUoMTI4KTsKKysgIGZvciAobGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB2YWxz
 X2l0ZXIgPSB2YWx1ZXMuYmVnaW4oKSwgdmFsc19lbmQgPSB2YWx1ZXMuZW5kKCk7IHZhbHNfaXRl
 ciAhPSB2YWxzX2VuZDsKKysgICAgICAgKyt2YWxzX2l0ZXIpIHsKKysgICAgaWYgKCFyZXQuZW1w
 dHkoKSkgeworKyAgICAgIHJldCArPSBkZWxpbWl0ZXI7CisrICAgIH0KKysgICAgcmV0LmFwcGVu
 ZCgqdmFsc19pdGVyKTsKKysgIH0KKysgIHJldHVybiByZXQ7CisrfQorKworK0hlYWRlcnM6OmNv
 bnN0X2l0ZXJhdG9yIEhlYWRlcnM6OmFwcGVuZChjb25zdCBzdHJpbmcgJmtleSwgY29uc3QgbGlz
 dDxzdHJpbmc+ICZ2YWwpIHsKKysgIHJldHVybiBhcHBlbmQobWFrZV9wYWlyKGtleSx2YWwpKTsK
 Kyt9CisrCisrSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgSGVhZGVyczo6YXBwZW5kKGNvbnN0IHN0
 cmluZyAma2V5LCBjb25zdCBzdHJpbmcgJnZhbCkgeworKyAgbGlzdDxzdHJpbmc+IHZhbHVlczsK
 KysgIHZhbHVlcy5wdXNoX2JhY2sodmFsKTsKKysgIHJldHVybiBhcHBlbmQobWFrZV9wYWlyKGtl
 eSx2YWx1ZXMpKTsKKyt9CisrCisrSGVhZGVyczo6Y29uc3RfaXRlcmF0b3IgSGVhZGVyczo6YmVn
 aW4oKSBjb25zdCB7CisrICBjaGVja0FuZEluaXRIZWFkZXJzKCk7CisrICByZXR1cm4gc3RhdGVf
 LT5uYW1lX3ZhbHVlc19tYXBfLmdldFZhbHVlUmVmKCkuYmVnaW4oKTsKKyt9CisrCisrSGVhZGVy
 czo6Y29uc3RfaXRlcmF0b3IgSGVhZGVyczo6ZW5kKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRl
 Xy0+bmFtZV92YWx1ZXNfbWFwXy5nZXRWYWx1ZVJlZigpLmVuZCgpOworK30KKysKKytIZWFkZXJz
 Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIEhlYWRlcnM6OnJiZWdpbigpIGNvbnN0IHsKKysgIGNo
 ZWNrQW5kSW5pdEhlYWRlcnMoKTsKKysgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8u
 Z2V0VmFsdWVSZWYoKS5yYmVnaW4oKTsKKyt9CisrCisrSGVhZGVyczo6Y29uc3RfcmV2ZXJzZV9p
 dGVyYXRvciBIZWFkZXJzOjpyZW5kKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRlXy0+bmFtZV92
 YWx1ZXNfbWFwXy5nZXRWYWx1ZVJlZigpLnJlbmQoKTsKKyt9CisrCisrSGVhZGVyczo6Y29uc3Rf
 aXRlcmF0b3IgSGVhZGVyczo6ZmluZChjb25zdCBzdHJpbmcgJmspIGNvbnN0IHsKKysgIGNoZWNr
 QW5kSW5pdEhlYWRlcnMoKTsKKysgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0
 VmFsdWVSZWYoKS5maW5kKGspOworK30KKysKKytIZWFkZXJzOjpzaXplX3R5cGUgSGVhZGVyczo6
 Y291bnQoY29uc3Qgc3RyaW5nICZrZXkpIGNvbnN0IHsKKysgIGNoZWNrQW5kSW5pdEhlYWRlcnMo
 KTsKKysgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0VmFsdWVSZWYoKS5jb3Vu
 dChrZXkpOworK30KKysKKytib29sIEhlYWRlcnM6OmVtcHR5KCkgY29uc3QgeworKyAgY2hlY2tB
 bmRJbml0SGVhZGVycygpOworKyAgcmV0dXJuIHN0YXRlXy0+bmFtZV92YWx1ZXNfbWFwXy5nZXRW
 YWx1ZVJlZigpLmVtcHR5KCk7CisrfQorKworK0hlYWRlcnM6OnNpemVfdHlwZSBIZWFkZXJzOjpt
 YXhfc2l6ZSgpIGNvbnN0IHsKKysgIHJldHVybiBzdGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0
 VmFsdWVSZWYoKS5tYXhfc2l6ZSgpOworK30KKysKKytIZWFkZXJzOjpzaXplX3R5cGUgSGVhZGVy
 czo6c2l6ZSgpIGNvbnN0IHsKKysgIGNoZWNrQW5kSW5pdEhlYWRlcnMoKTsKKysgIHJldHVybiBz
 dGF0ZV8tPm5hbWVfdmFsdWVzX21hcF8uZ2V0VmFsdWVSZWYoKS5zaXplKCk7CisrfQorKworK25h
 bWVzcGFjZSB7CisrCisrY29uc3QgbGlzdDxzdHJpbmc+IEVNUFRZX1JFUVVFU1RfQ09PS0lFX1ZB
 TFVFX0xJU1Q7CisrCisrdm9pZCBzdHJpcEVuY2xvc2luZ1doaXRlc3BhY2Uoc3RyaW5nICZ0b2tl
 bikgeworKyAgc2l6ZV90IHRva2VuX3NpemUgPSB0b2tlbi5zaXplKCksIGk7CisrICBmb3IgKGkg
 PSAwOyAoaSA8IHRva2VuX3NpemUpICYmIHN0ZDo6aXNzcGFjZSh0b2tlbltpXSk7ICsraSk7Cisr
 ICBpZiAoaSkgeworKyAgICB0b2tlbi5lcmFzZSgwLCBpKTsKKysgICAgdG9rZW5fc2l6ZSAtPSBp
 OworKyAgfQorKyAgLy8gY2FuJ3QgdXNlID49IDAgaGVyZSBhcyB3ZSBzaXplX3Qgd2lsbCBuZXZl
 ciBnbyBuZWdhdGl2ZQorKyAgZm9yIChpID0gdG9rZW5fc2l6ZTsgKGkgPiAwKSAmJiBzdGQ6Omlz
 c3BhY2UodG9rZW5baSAtIDFdKTsgLS1pKTsKKysgIGlmICh0b2tlbl9zaXplIC0gaSkgeworKyAg
 ICB0b2tlbi5yZXNpemUoaSk7CisrICB9CisrfQorKworK3ZvaWQgYWRkQ29va2llVG9NYXAoSGVh
 ZGVyczo6UmVxdWVzdENvb2tpZU1hcCAmY29va2llX21hcCwgY29uc3Qgc3RyaW5nICZuYW1lLCBj
 b25zdCBzdHJpbmcgJnZhbHVlKSB7CisrICBIZWFkZXJzOjpSZXF1ZXN0Q29va2llTWFwOjp2YWx1
 ZV90eXBlIGVsZW1lbnRfdG9faW5zZXJ0KG5hbWUsIEVNUFRZX1JFUVVFU1RfQ09PS0lFX1ZBTFVF
 X0xJU1QpOworKyAgbGlzdDxzdHJpbmc+ICZ2YWx1ZV9saXN0ID0gKGNvb2tpZV9tYXAuaW5zZXJ0
 KGVsZW1lbnRfdG9faW5zZXJ0KSkuZmlyc3QtPnNlY29uZDsKKysgIGlmICghdmFsdWVfbGlzdC5l
 bXB0eSgpKSB7IC8vIGxvZyBkdXBsaWNhdGVzCisrICAgIExPR19ERUJVRygiQ29va2llIFslc10g
 aGFzIG11bHRpcGxlIGluc3RhbmNlcyIsIG5hbWUuY19zdHIoKSk7CisrICB9CisrICB2YWx1ZV9s
 aXN0LnB1c2hfYmFjayh2YWx1ZSk7CisrICBMT0dfREVCVUcoIkFkZGVkIGNvb2tpZSBbJXNdIHdp
 dGggdmFsdWUgWyVzXSIsIG5hbWUuY19zdHIoKSwgdmFsdWUuY19zdHIoKSk7CisrfQorKworK30K
 KysKKytjb25zdCBIZWFkZXJzOjpSZXF1ZXN0Q29va2llTWFwICZIZWFkZXJzOjpnZXRSZXF1ZXN0
 Q29va2llcygpIGNvbnN0IHsKKysgIGlmIChzdGF0ZV8tPnR5cGVfICE9IEhlYWRlcnM6OlRZUEVf
 UkVRVUVTVCkgeworKyAgICBMT0dfRVJST1IoIk9iamVjdCBpcyBub3Qgb2YgdHlwZSByZXF1ZXN0
 LiBSZXR1cm5pbmcgZW1wdHkgbWFwIik7CisrICAgIHJldHVybiBzdGF0ZV8tPnJlcXVlc3RfY29v
 a2llc187CisrICB9CisrICBpZiAoc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfLmlzSW5pdGlhbGl6
 ZWQoKSB8fCAhY2hlY2tBbmRJbml0SGVhZGVycygpKSB7CisrICAgIHJldHVybiBzdGF0ZV8tPnJl
 cXVlc3RfY29va2llc187CisrICB9CisrICBzdGF0ZV8tPnJlcXVlc3RfY29va2llc18uc2V0SW5p
 dGlhbGl6ZWQoKTsKKysgIGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKCJDb29raWUiKTsKKysg
 IGlmIChpdGVyICE9IGVuZCgpKSB7CisrICAgIGNvbnN0IGxpc3Q8c3RyaW5nPiAmY29va2llX2t2
 cyA9IGl0ZXItPnNlY29uZDsgLy8gY29va2llIGtleS12YWx1ZSBwYWlycworKyAgICBzdHJpbmcg
 bmFtZSwgdmFsdWU7CisrICAgIGZvciAobGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjb29r
 aWVfa3ZfaXRlciA9IGNvb2tpZV9rdnMuYmVnaW4oKSwgY29va2llX2t2X2VuZCA9IGNvb2tpZV9r
 dnMuZW5kKCk7CisrICAgICAgICAgY29va2llX2t2X2l0ZXIgIT0gY29va2llX2t2X2VuZDsgKytj
 b29raWVfa3ZfaXRlcikgeworKyAgICAgIGNvbnN0IHN0cmluZyAmY29va2llX2t2ID0gKmNvb2tp
 ZV9rdl9pdGVyOworKyAgICAgIHNpemVfdCBjb29raWVfa3Zfc2l6ZSA9IGNvb2tpZV9rdi5zaXpl
 KCk7CisrICAgICAgc2l6ZV90IHN0YXJ0X3BvcywgZW5kX3BvcywgbGVuZ3RoOworKyAgICAgICAg
 CisrICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29raWVfa3Zfc2l6ZTsgKSB7CisrICAg
 ICAgICBzdGFydF9wb3MgPSBpOworKyAgICAgICAgZm9yIChlbmRfcG9zID0gc3RhcnRfcG9zOwor
 KyAgICAgICAgICAgICAoZW5kX3BvcyA8IGNvb2tpZV9rdl9zaXplKSAmJiAoY29va2llX2t2W2Vu
 ZF9wb3NdICE9ICc9JykgJiYgKGNvb2tpZV9rdltlbmRfcG9zXSAhPSAnOycpOyArK2VuZF9wb3Mp
 OworKyAgICAgICAgaWYgKChlbmRfcG9zID09IGNvb2tpZV9rdl9zaXplKSB8fCAoY29va2llX2t2
 W2VuZF9wb3NdID09ICc7JykpIHsKKysgICAgICAgICAgTE9HX0RFQlVHKCJVbmV4cGVjdGVkIGVu
 ZCBpbiBjb29raWUga2V5IHZhbHVlIHN0cmluZyBbJXNdIiwgY29va2llX2t2LmNfc3RyKCkpOwor
 KyAgICAgICAgICByZXR1cm4gc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfOworKyAgICAgICAgfQor
 KyAgICAgICAgbGVuZ3RoID0gZW5kX3BvcyAtIHN0YXJ0X3BvczsKKysgICAgICAgIG5hbWUuYXNz
 aWduKGNvb2tpZV9rdiwgc3RhcnRfcG9zLCBsZW5ndGgpOworKyAgICAgICAgc3RyaXBFbmNsb3Np
 bmdXaGl0ZXNwYWNlKG5hbWUpOworKyAgICAgICAgaWYgKG5hbWUuZW1wdHkoKSkgeworKyAgICAg
 ICAgICBMT0dfREVCVUcoIkVtcHR5IGNvb2tpZSBuYW1lIGluIGtleSB2YWx1ZSBzdHJpbmcgWyVz
 XSIsIGNvb2tpZV9rdi5jX3N0cigpKTsKKysgICAgICAgICAgcmV0dXJuIHN0YXRlXy0+cmVxdWVz
 dF9jb29raWVzXzsKKysgICAgICAgIH0KKysgICAgICAgIHN0YXJ0X3BvcyA9ICsrZW5kX3Bvczsg
 Ly8gdmFsdWUgc2hvdWxkIHN0YXJ0IGhlcmUKKysgICAgICAgIGlmIChzdGFydF9wb3MgPT0gY29v
 a2llX2t2X3NpemUpICB7CisrICAgICAgICAgIExPR19ERUJVRygiQ29va2llIFslc10gaGFzIG5v
 IHZhbHVlIGluIGtleSB2YWx1ZSBzdHJpbmcgWyVzXSIsIG5hbWUuY19zdHIoKSwgY29va2llX2t2
 LmNfc3RyKCkpOworKyAgICAgICAgICByZXR1cm4gc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfOwor
 KyAgICAgICAgfQorKyAgICAgICAgYm9vbCB3aXRoaW5fcXVvdGVzID0gZmFsc2U7CisrICAgICAg
 ICBmb3IgKGVuZF9wb3MgPSBzdGFydF9wb3M7IGVuZF9wb3MgPCBjb29raWVfa3Zfc2l6ZTsgKytl
 bmRfcG9zKSB7CisrICAgICAgICAgIGlmIChjb29raWVfa3ZbZW5kX3Bvc10gPT0gJyInKSB7Cisr
 ICAgICAgICAgICAgd2l0aGluX3F1b3RlcyA9ICF3aXRoaW5fcXVvdGVzOworKyAgICAgICAgICB9
 IGVsc2UgaWYgKChjb29raWVfa3ZbZW5kX3Bvc10gPT0gJzsnKSAmJiAhd2l0aGluX3F1b3Rlcykg
 eworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg
 ICBsZW5ndGggPSBlbmRfcG9zIC0gc3RhcnRfcG9zOworKyAgICAgICAgdmFsdWUuYXNzaWduKGNv
 b2tpZV9rdiwgc3RhcnRfcG9zLCBsZW5ndGgpOworKyAgICAgICAgc3RyaXBFbmNsb3NpbmdXaGl0
 ZXNwYWNlKHZhbHVlKTsKKysgICAgICAgIGFkZENvb2tpZVRvTWFwKHN0YXRlXy0+cmVxdWVzdF9j
 b29raWVzXywgbmFtZSAsdmFsdWUpOworKyAgICAgICAgaSA9ICsrZW5kX3BvczsgLy8gbmV4dCBu
 YW1lIHNob3VsZCBzdGFydCBoZXJlCisrICAgICAgfQorKyAgICB9CisrICB9CisrICByZXR1cm4g
 c3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfOworK30KKysKKytjb25zdCBsaXN0PEhlYWRlcnM6OlJl
 c3BvbnNlQ29va2llPiAmSGVhZGVyczo6Z2V0UmVzcG9uc2VDb29raWVzKCkgY29uc3QgeworKyAg
 aWYgKHN0YXRlXy0+dHlwZV8gIT0gSGVhZGVyczo6VFlQRV9SRVNQT05TRSkgeworKyAgICBMT0df
 RVJST1IoIk9iamVjdCBpcyBub3Qgb2YgdHlwZSByZXNwb25zZS4gUmV0dXJuaW5nIGVtcHR5IGxp
 c3QiKTsKKysgICAgcmV0dXJuIHN0YXRlXy0+cmVzcG9uc2VfY29va2llc187CisrICB9CisrICBp
 ZiAoc3RhdGVfLT5yZXNwb25zZV9jb29raWVzXy5pc0luaXRpYWxpemVkKCkgfHwgIWNoZWNrQW5k
 SW5pdEhlYWRlcnMoKSkgeworKyAgICByZXR1cm4gc3RhdGVfLT5yZXNwb25zZV9jb29raWVzXzsK
 KysgIH0KKysgIHN0YXRlXy0+cmVzcG9uc2VfY29va2llc18uc2V0SW5pdGlhbGl6ZWQoKTsKKysg
 IC8vIEBUT0RPIFBhcnNlIFNldC1Db29raWUgaGVhZGVycyBoZXJlCisrICByZXR1cm4gc3RhdGVf
 LT5yZXNwb25zZV9jb29raWVzXzsKKyt9CisrCisrYm9vbCBIZWFkZXJzOjphZGRDb29raWUoY29u
 c3Qgc3RyaW5nICZuYW1lLCBjb25zdCBzdHJpbmcgJnZhbHVlKSB7CisrICBpZiAoc3RhdGVfLT50
 eXBlXyAhPSBIZWFkZXJzOjpUWVBFX1JFUVVFU1QpIHsKKysgICAgTE9HX0VSUk9SKCJDYW5ub3Qg
 YWRkIHJlcXVlc3QgY29va2llIHRvIHJlc3BvbnNlIGhlYWRlcnMiKTsKKysgICAgcmV0dXJuIGZh
 bHNlOworKyAgfQorKyAgaWYgKCFjaGVja0FuZEluaXRIZWFkZXJzKCkpIHsKKysgICAgcmV0dXJu
 IGZhbHNlOworKyAgfQorKyAgYWRkQ29va2llVG9NYXAoc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNf
 LCBuYW1lLCB2YWx1ZSk7CisrICB1cGRhdGVSZXF1ZXN0Q29va2llSGVhZGVyRnJvbU1hcCgpOwor
 KyAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgSGVhZGVyczo6YWRkQ29va2llKGNvbnN0IFJl
 c3BvbnNlQ29va2llICZyZXNwb25zZV9jb29raWUpIHsKKysgIGlmIChzdGF0ZV8tPnR5cGVfICE9
 IEhlYWRlcnM6OlRZUEVfUkVTUE9OU0UpIHsKKysgICAgTE9HX0VSUk9SKCJDYW5ub3QgYWRkIHJl
 c3BvbnNlIGNvb2tpZSB0byBvYmplY3Qgbm90IG9mIHR5cGUgcmVzcG9uc2UiKTsKKysgICAgcmV0
 dXJuIGZhbHNlOworKyAgfQorKyAgaWYgKCFjaGVja0FuZEluaXRIZWFkZXJzKCkpIHsKKysgICAg
 cmV0dXJuIGZhbHNlOworKyAgfQorKyAgLy8gQFRPRE8gRG8gbG9naWMgaGVyZQorKyAgcmV0dXJu
 IHRydWU7CisrfQorKyAgCisrYm9vbCBIZWFkZXJzOjpzZXRDb29raWUoY29uc3Qgc3RyaW5nICZu
 YW1lLCBjb25zdCBzdHJpbmcgJnZhbHVlKSB7CisrICBpZiAoc3RhdGVfLT50eXBlXyAhPSBIZWFk
 ZXJzOjpUWVBFX1JFUVVFU1QpIHsKKysgICAgTE9HX0VSUk9SKCJDYW5ub3Qgc2V0IHJlcXVlc3Qg
 Y29va2llIHRvIHJlc3BvbnNlIGhlYWRlcnMiKTsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQor
 KyAgaWYgKCFjaGVja0FuZEluaXRIZWFkZXJzKCkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAg
 fQorKyAgZ2V0UmVxdWVzdENvb2tpZXMoKTsKKysgIHN0YXRlXy0+cmVxdWVzdF9jb29raWVzXy5n
 ZXRWYWx1ZVJlZigpLmVyYXNlKG5hbWUpOworKyAgcmV0dXJuIGFkZENvb2tpZShuYW1lLCB2YWx1
 ZSk7CisrfQorKworK2Jvb2wgSGVhZGVyczo6c2V0Q29va2llKGNvbnN0IFJlc3BvbnNlQ29va2ll
 ICZyZXNwb25zZV9jb29raWUpIHsKKysgIGlmIChzdGF0ZV8tPnR5cGVfICE9IEhlYWRlcnM6OlRZ
 UEVfUkVTUE9OU0UpIHsKKysgICAgTE9HX0VSUk9SKCJDYW5ub3Qgc2V0IHJlc3BvbnNlIGNvb2tp
 ZSB0byByZXF1ZXN0IGhlYWRlcnMiKTsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAgaWYg
 KCFjaGVja0FuZEluaXRIZWFkZXJzKCkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAg
 Ly8gQFRPRE8gRG8gbG9naWMgaGVyZQorKyAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgSGVh
 ZGVyczo6ZGVsZXRlQ29va2llKGNvbnN0IHN0cmluZyAmbmFtZSkgeworKyAgaWYgKCFjaGVja0Fu
 ZEluaXRIZWFkZXJzKCkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAgaWYgKHN0YXRl
 Xy0+dHlwZV8gPT0gVFlQRV9SRVFVRVNUKSB7CisrICAgIGdldFJlcXVlc3RDb29raWVzKCk7Cisr
 ICAgIFJlcXVlc3RDb29raWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzdGF0ZV8tPnJlcXVlc3RfY29v
 a2llc18uZ2V0VmFsdWVSZWYoKS5maW5kKG5hbWUpOworKyAgICBpZiAoaXRlciA9PSBzdGF0ZV8t
 PnJlcXVlc3RfY29va2llc18uZ2V0VmFsdWVSZWYoKS5lbmQoKSkgeworKyAgICAgIExPR19ERUJV
 RygiQ29va2llIFslc10gZG9lc24ndCBleGlzdCIsIG5hbWUuY19zdHIoKSk7CisrICAgICAgcmV0
 dXJuIHRydWU7CisrICAgIH0KKysgICAgc3RhdGVfLT5yZXF1ZXN0X2Nvb2tpZXNfLmdldFZhbHVl
 UmVmKCkuZXJhc2UoaXRlcik7CisrICAgIHVwZGF0ZVJlcXVlc3RDb29raWVIZWFkZXJGcm9tTWFw
 KCk7CisrICAgIHJldHVybiB0cnVlOworKyAgfQorKyAgZ2V0UmVzcG9uc2VDb29raWVzKCk7Cisr
 ICAvLyBAVE9ETyBEbyBsb2dpYyBoZXJlCisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrdm9pZCBI
 ZWFkZXJzOjp1cGRhdGVSZXF1ZXN0Q29va2llSGVhZGVyRnJvbU1hcCgpIHsKKysgIHN0cmluZyBj
 b29raWVfaGVhZGVyOworKyAgZm9yIChSZXF1ZXN0Q29va2llTWFwOjppdGVyYXRvciBjb29raWVf
 aXRlciA9IHN0YXRlXy0+cmVxdWVzdF9jb29raWVzXy5nZXRWYWx1ZVJlZigpLmJlZ2luKCksIAor
 KyAgICAgICAgIGNvb2tpZV9lbmQgPSBzdGF0ZV8tPnJlcXVlc3RfY29va2llc18uZ2V0VmFsdWVS
 ZWYoKS5lbmQoKTsgY29va2llX2l0ZXIgIT0gY29va2llX2VuZDsgKytjb29raWVfaXRlcikgewor
 KyAgICBmb3IgKGxpc3Q8c3RyaW5nPjo6aXRlcmF0b3IgdmFsdWVfaXRlciA9IGNvb2tpZV9pdGVy
 LT5zZWNvbmQuYmVnaW4oKSwgdmFsdWVfZW5kID0gY29va2llX2l0ZXItPnNlY29uZC5lbmQoKTsK
 KysgICAgICAgICB2YWx1ZV9pdGVyICE9IHZhbHVlX2VuZDsgKyt2YWx1ZV9pdGVyKSB7CisrICAg
 ICAgY29va2llX2hlYWRlciArPSBjb29raWVfaXRlci0+Zmlyc3Q7CisrICAgICAgY29va2llX2hl
 YWRlciArPSAnPSc7CisrICAgICAgY29va2llX2hlYWRlciArPSAqdmFsdWVfaXRlcjsKKysgICAg
 ICBjb29raWVfaGVhZGVyICs9ICI7ICI7CisrICAgIH0KKysgIH0KKysgIGlmICghY29va2llX2hl
 YWRlci5lbXB0eSgpKSB7CisrICAgIGNvb2tpZV9oZWFkZXIuZXJhc2UoY29va2llX2hlYWRlci5z
 aXplKCkgLSAyLCAyKTsgLy8gZXJhc2UgdHJhaWxpbmcgJzsgJworKyAgfQorKworKyAgLy8gd2Ug
 Y291bGQgaGF2ZSBjYWxsZWQgc2V0KCksIGJ1dCBzZXQoKSBpbnZhbGlkYXRlcyB0aGUgY29va2ll
 IG1hcAorKyAgLy8gaW5kaXJlY3RseSBieSBjYWxsaW5nIGFwcGVuZCgpLiBCdXQgb3VyIG1hcCBp
 cyB1cCB0byBkYXRlLiBTbyB3ZQorKyAgLy8gZG8gcHV0IHRoZSBzZXQoKSBsb2dpYyBoZXJlIGV4
 cGxpY2l0bHkuCisrICBkb0Jhc2ljRXJhc2UoIkNvb2tpZSIpOworKyAgbGlzdDxzdHJpbmc+IHZh
 bHVlczsKKysgIHZhbHVlcy5wdXNoX2JhY2soY29va2llX2hlYWRlcik7CisrICBkb0Jhc2ljQXBw
 ZW5kKHBhaXI8c3RyaW5nLCBsaXN0PHN0cmluZz4gPigiQ29va2llIiwgdmFsdWVzKSk7CisrfQor
 ZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL0h0dHBNZXRob2QuY2MgbGliL2F0c2NwcGFwaS9z
 cmMvSHR0cE1ldGhvZC5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3JjL0h0dHBNZXRob2QuY2MJMTk3
 MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9I
 dHRwTWV0aG9kLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICswODAwCitAQCAtMCww
 ICsxLDM2IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5k
 YXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdy
 ZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3
 b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93
 bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhl
 IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5
 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNl
 bnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAg
 aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3Mg
 cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
 YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
 biAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
 QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2Ug
 Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBs
 aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBI
 dHRwTWV0aG9kLmNjCisrICovCisrCisrI2luY2x1ZGUgImF0c2NwcGFwaS9IdHRwTWV0aG9kLmgi
 CisrCisrY29uc3Qgc3RkOjpzdHJpbmcgYXRzY3BwYXBpOjpIVFRQX01FVEhPRF9TVFJJTkdTW10g
 PSB7IHN0ZDo6c3RyaW5nKCJVTktOT1dOIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCJHRVQiKSwKKysgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
 bmcoIlBPU1QiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgc3RkOjpzdHJpbmcoIkhFQUQiKSwKKysgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoIkNPTk5FQ1QiKSwK
 KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 c3RkOjpzdHJpbmcoIkRFTEVURSIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZygiSUNQX1FVRVJZIiksCisrICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
 aW5nKCJPUFRJT05TIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCJQVVJHRSIpLAorKyAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZygiUFVUIiks
 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IHN0ZDo6c3RyaW5nKCJUUkFDRSIpIH07CisrCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMv
 SHR0cFZlcnNpb24uY2MgbGliL2F0c2NwcGFwaS9zcmMvSHR0cFZlcnNpb24uY2MKKy0tLSBsaWIv
 YXRzY3BwYXBpL3NyYy9IdHRwVmVyc2lvbi5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAw
 MCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL0h0dHBWZXJzaW9uLmNjCTIwMTMtMTEtMTEg
 MTQ6MDM6MTIuNzAyNTMyMDkzICswODAwCitAQCAtMCwwICsxLDI5IEBACisrLyoqCisrICBMaWNl
 bnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisr
 ICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNF
 IGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9y
 bWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5z
 ZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
 IDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
 dCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBj
 b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
 Y2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
 YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRl
 ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lU
 SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
 IG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
 ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
 ZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBIdHRwVmVyc2lvbi5jYworKyAqLworKwor
 KyNpbmNsdWRlICJhdHNjcHBhcGkvSHR0cFZlcnNpb24uaCIKKysKKytjb25zdCBzdGQ6OnN0cmlu
 ZyBhdHNjcHBhcGk6OkhUVFBfVkVSU0lPTl9TVFJJTkdTW10gPSB7IHN0ZDo6c3RyaW5nKCJVTktO
 T1dOIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBzdGQ6OnN0cmluZygiSFRUUC8wLjkiKSwKKysgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCJIVFRQLzEuMCIp
 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgc3RkOjpzdHJpbmcoIkhUVFAvMS4xIikgfTsKKysKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBp
 L3NyYy9Jbml0aWFsaXphYmxlVmFsdWUuY2MgbGliL2F0c2NwcGFwaS9zcmMvSW5pdGlhbGl6YWJs
 ZVZhbHVlLmNjCistLS0gbGliL2F0c2NwcGFwaS9zcmMvSW5pdGlhbGl6YWJsZVZhbHVlLmNjCTE5
 NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMv
 SW5pdGlhbGl6YWJsZVZhbHVlLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICswODAw
 CitAQCAtMCwwICsxLDI5IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3
 YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxp
 Y2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdp
 dGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29w
 eXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3Ug
 dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIp
 OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRo
 IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisr
 CisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisr
 ICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
 bmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
 dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
 VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhl
 IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
 YW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysg
 KiBAZmlsZSBJbml0aWFsaXphYmxlVmFsdWUuY2MKKysgKi8KKysKKysjaW5jbHVkZSAiSW5pdGlh
 bGl6YWJsZVZhbHVlLmgiCisrCisrI2lmZGVmIERJU0FCTEVfVFJBTlNBQ1RJT05fREFUQV9DQUNI
 SU5HCisrYm9vbCBhdHNjcHBhcGk6OnRyYW5zYWN0aW9uX2RhdGFfY2FjaGluZ19lbmFibGVkID0g
 ZmFsc2U7CisrI2Vsc2UKKytib29sIGF0c2NwcGFwaTo6dHJhbnNhY3Rpb25fZGF0YV9jYWNoaW5n
 X2VuYWJsZWQgPSB0cnVlOworKyNlbmRpZgorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL0xv
 Z2dlci5jYyBsaWIvYXRzY3BwYXBpL3NyYy9Mb2dnZXIuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3Ny
 Yy9Mb2dnZXIuY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIv
 YXRzY3BwYXBpL3NyYy9Mb2dnZXIuY2MJMjAxMy0xMS0xMSAxNDowMzoxMi43MDM1MzIyODQgKzA4
 MDAKK0BAIC0wLDAgKzEsMjE1IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNv
 ZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9y
 IGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVk
 IHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcg
 Y29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5
 b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5z
 ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3
 aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
 CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisr
 CisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
 aXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
 TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUg
 dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
 bnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysvKioKKysg
 KiBAZmlsZSBMb2dnZXIuY2MKKysgKiBAd2FybmluZyBsb2cgcm9sbGluZyBkb2Vzbid0IHdvcmsg
 Y29ycmVjdGx5IGluIDMuMi54IHNlZToKKysgKiAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcv
 amlyYS9icm93c2UvVFMtMTgxMworKyAqICAgQXBwbHkgdGhlIHBhdGNoIGluIFRTLTE4MTMgdG8g
 Y29ycmVjdCBsb2cgcm9sbGluZyBpbiAzLjIueAorKyAqLworKworKyNpbmNsdWRlICJhdHNjcHBh
 cGkvTG9nZ2VyLmgiCisrI2luY2x1ZGUgPGNzdGRhcmc+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysj
 aW5jbHVkZSA8Y3N0ZGlvPgorKyNpbmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPGNzdHJpbmc+
 CisrI2luY2x1ZGUgPHRzL3RzLmg+CisrI2luY2x1ZGUgImF0c2NwcGFwaS9ub25jb3B5YWJsZS5o
 IgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgc3RkOjp2ZWN0b3I7
 CisrdXNpbmcgc3RkOjpzdHJpbmc7CisrCisrdXNpbmcgYXRzY3BwYXBpOjpMb2dnZXI7CisrCisr
 LyoqCisrICogQHByaXZhdGUKKysgKi8KKytzdHJ1Y3QgYXRzY3BwYXBpOjpMb2dnZXJTdGF0ZTog
 bm9uY29weWFibGUgIHsKKysgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKKysgIGJvb2wgYWRkX3Rp
 bWVzdGFtcF87CisrICBib29sIHJlbmFtZV9maWxlXzsKKysgIHZvbGF0aWxlIExvZ2dlcjo6TG9n
 TGV2ZWwgbGV2ZWxfOworKyAgYm9vbCByb2xsaW5nX2VuYWJsZWRfOworKyAgaW50IHJvbGxpbmdf
 aW50ZXJ2YWxfc2Vjb25kc187CisrICBUU1RleHRMb2dPYmplY3QgdGV4dF9sb2dfb2JqXzsKKysg
 IGJvb2wgaW5pdGlhbGl6ZWRfOworKworKyAgTG9nZ2VyU3RhdGUoKSA6IGFkZF90aW1lc3RhbXBf
 KGZhbHNlKSwgcmVuYW1lX2ZpbGVfKGZhbHNlKSwgbGV2ZWxfKExvZ2dlcjo6TE9HX0xFVkVMX05P
 X0xPRyksIHJvbGxpbmdfZW5hYmxlZF8oZmFsc2UpLAorKyAgICAgICAgICAgICAgICAgIHJvbGxp
 bmdfaW50ZXJ2YWxfc2Vjb25kc18oLTEpLCB0ZXh0X2xvZ19vYmpfKE5VTEwpLCBpbml0aWFsaXpl
 ZF8oZmFsc2UpIHsgfTsKKysgIH5Mb2dnZXJTdGF0ZSgpIHsgfTsKKyt9OworKworK25hbWVzcGFj
 ZSB7CisrLy8gU2luY2UgdGhlIFRTVGV4dExvZyBBUEkgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRl
 IHRoZSBsb2cgZmlsZSBzaXplcyAoSSB3aWxsIGFkZCB0aGlzIHRvIFRTIGFwaSBhdCBzb21lIHBv
 aW50KQorKy8vIHdlIHdpbGwgdXNlIHRoZSByb2xsIHNpemUgc3BlY2lmaWVkIGJ5IGRlZmF1bHQg
 aW4gcmVjb3Jkcy5jb25maWcuCisrY29uc3QgaW50IFJPTExfT05fVElNRSA9IDE7IC8vIFNlZSBS
 b2xsaW5nRW5hYmxlZFZhbHVlcyBpbiBMb2dDb25maWcuaAorK30KKysKKysKKysvKgorKyAqIFRo
 ZXNlIGhhdmUgZGVmYXVsdCB2YWx1ZXMgc3BlY2lmaWVkIGZvciBhZGRfdGltZXN0YW1wIGFuZCBy
 ZW5hbWVfZmlsZSBpbiBMb2dnZXIuaAorKyAqLworK0xvZ2dlcjo6TG9nZ2VyKCkgeworKyAgc3Rh
 dGVfID0gbmV3IExvZ2dlclN0YXRlKCk7CisrfQorKworK0xvZ2dlcjo6fkxvZ2dlcigpIHsKKysg
 IGlmIChzdGF0ZV8tPmluaXRpYWxpemVkXyAmJiBzdGF0ZV8tPnRleHRfbG9nX29ial8pIHsKKysg
 ICAgVFNUZXh0TG9nT2JqZWN0RGVzdHJveShzdGF0ZV8tPnRleHRfbG9nX29ial8pOworKyAgfQor
 KworKyAgZGVsZXRlIHN0YXRlXzsKKyt9CisrCisrLyoKKysgKiBUaGVzZSBoYXZlIGRlZmF1bHQg
 dmFsdWVzIHNwZWNpZmllZCBmb3Igcm9sbGluZ19lbmFibGVkIGFuZCByb2xsaW5nX2ludGVydmFs
 X3NlY29uZHMgaW4gTG9nZ2VyLmgKKysgKi8KKytib29sIExvZ2dlcjo6aW5pdChjb25zdCBzdHJp
 bmcgJmZpbGUsIGJvb2wgYWRkX3RpbWVzdGFtcCwgYm9vbCByZW5hbWVfZmlsZSwgTG9nTGV2ZWwg
 bGV2ZWwsIGJvb2wgcm9sbGluZ19lbmFibGVkLCBpbnQgcm9sbGluZ19pbnRlcnZhbF9zZWNvbmRz
 KSB7CisrICBpZiAoc3RhdGVfLT5pbml0aWFsaXplZF8pIHsKKysgICAgTE9HX0VSUk9SKCJBdHRl
 bXB0IHRvIHJlaW5pdGlhbGl6ZSBhIGxvZ2dlciBuYW1lZCAnJXMnIHRoYXQncyBhbHJlYWR5IGJl
 ZW4gaW5pdGlhbGl6ZWQgdG8gJyVzJy4iLCBmaWxlLmNfc3RyKCksIHN0YXRlXy0+ZmlsZW5hbWVf
 LmNfc3RyKCkpOworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrICBzdGF0ZV8tPmZpbGVuYW1l
 XyA9IGZpbGU7CisrICBzdGF0ZV8tPmFkZF90aW1lc3RhbXBfID0gYWRkX3RpbWVzdGFtcDsKKysg
 IHN0YXRlXy0+cmVuYW1lX2ZpbGVfID0gcmVuYW1lX2ZpbGU7CisrICBzdGF0ZV8tPmxldmVsXyA9
 IGxldmVsOworKyAgc3RhdGVfLT5yb2xsaW5nX2VuYWJsZWRfID0gcm9sbGluZ19lbmFibGVkOwor
 KyAgc3RhdGVfLT5yb2xsaW5nX2ludGVydmFsX3NlY29uZHNfID0gcm9sbGluZ19pbnRlcnZhbF9z
 ZWNvbmRzOworKyAgc3RhdGVfLT5pbml0aWFsaXplZF8gPSB0cnVlOyAvLyBzZXQgdGhpcyB0byB0
 cnVlIGFsd2F5cyAtIHdlIGFyZSBub3QgcHJvdmlkaW5nIHJlLWluaXQoKSBhZnRlciBhIGZhaWxl
 ZCBpbml0KCkKKysKKysgIGludCBtb2RlID0gMDsKKysgIGlmIChzdGF0ZV8tPmFkZF90aW1lc3Rh
 bXBfKSB7CisrICAgIG1vZGUgfD0gVFNfTE9HX01PREVfQUREX1RJTUVTVEFNUDsKKysgIH0KKysK
 KysgIGlmICghc3RhdGVfLT5yZW5hbWVfZmlsZV8pIHsKKysgICAgbW9kZSB8PSBUU19MT0dfTU9E
 RV9ET19OT1RfUkVOQU1FOworKyAgfQorKworKyAgVFNSZXR1cm5Db2RlIHJlc3VsdCA9IFRTVGV4
 dExvZ09iamVjdENyZWF0ZShzdGF0ZV8tPmZpbGVuYW1lXy5jX3N0cigpLCBtb2RlLCAmc3RhdGVf
 LT50ZXh0X2xvZ19vYmpfKTsKKysKKysgIGlmIChyZXN1bHQgPT0gVFNfU1VDQ0VTUykgeworKyAg
 ICBUU1RleHRMb2dPYmplY3RSb2xsaW5nRW5hYmxlZFNldChzdGF0ZV8tPnRleHRfbG9nX29ial8s
 IHN0YXRlXy0+cm9sbGluZ19lbmFibGVkXyA/IFJPTExfT05fVElNRSA6IDApOworKyAgICBUU1Rl
 eHRMb2dPYmplY3RSb2xsaW5nSW50ZXJ2YWxTZWNTZXQoc3RhdGVfLT50ZXh0X2xvZ19vYmpfLCBz
 dGF0ZV8tPnJvbGxpbmdfaW50ZXJ2YWxfc2Vjb25kc18pOworKyAgICBMT0dfREVCVUcoIkluaXRp
 YWxpemVkIGxvZyBbJXNdIiwgc3RhdGVfLT5maWxlbmFtZV8uY19zdHIoKSk7CisrICB9IGVsc2Ug
 eworKyAgICBzdGF0ZV8tPmxldmVsXyA9IExPR19MRVZFTF9OT19MT0c7CisrICAgIExPR19FUlJP
 UigiRmFpbGVkIHRvIGluaXRpYWxpemUgZm9yIGxvZyBbJXNdIiwgc3RhdGVfLT5maWxlbmFtZV8u
 Y19zdHIoKSk7CisrICB9CisrCisrICByZXR1cm4gcmVzdWx0ID09IFRTX1NVQ0NFU1M7CisrfQor
 KworK3ZvaWQgTG9nZ2VyOjpzZXRMb2dMZXZlbChMb2dnZXI6OkxvZ0xldmVsIGxldmVsKSB7Cisr
 ICBpZiAoc3RhdGVfLT5pbml0aWFsaXplZF8pIHsKKysgICAgc3RhdGVfLT5sZXZlbF8gPSBsZXZl
 bDsKKysgICAgTE9HX0RFQlVHKCJTZXQgbG9nIGxldmVsIHRvICVkIGZvciBsb2cgWyVzXSIsIGxl
 dmVsLCBzdGF0ZV8tPmZpbGVuYW1lXy5jX3N0cigpKTsKKysgIH0KKyt9CisrCisrTG9nZ2VyOjpM
 b2dMZXZlbCBMb2dnZXI6OmdldExvZ0xldmVsKCkgY29uc3QgeworKyAgaWYgKCFzdGF0ZV8tPmlu
 aXRpYWxpemVkXykgeworKyAgICBMT0dfRVJST1IoIk5vdCBpbml0aWFsaXplZCIpOworKyAgfQor
 KyAgcmV0dXJuIHN0YXRlXy0+bGV2ZWxfOworK30KKysKKyt2b2lkIExvZ2dlcjo6c2V0Um9sbGlu
 Z0ludGVydmFsU2Vjb25kcyhpbnQgc2Vjb25kcykgeworKyAgaWYgKHN0YXRlXy0+aW5pdGlhbGl6
 ZWRfKSB7CisrICAgIHN0YXRlXy0+cm9sbGluZ19pbnRlcnZhbF9zZWNvbmRzXyA9IHNlY29uZHM7
 CisrICAgIFRTVGV4dExvZ09iamVjdFJvbGxpbmdJbnRlcnZhbFNlY1NldChzdGF0ZV8tPnRleHRf
 bG9nX29ial8sIHNlY29uZHMpOworKyAgICBMT0dfREVCVUcoIlNldCByb2xsaW5nIGludGVydmFs
 IGZvciBsb2cgWyVzXSB0byAlZCBzZWNvbmRzIiwgc3RhdGVfLT5maWxlbmFtZV8uY19zdHIoKSwg
 c2Vjb25kcyk7CisrICB9IGVsc2UgeworKyAgICBMT0dfRVJST1IoIk5vdCBpbml0aWFsaXplZCEi
 KTsKKysgIH0KKyt9CisrCisraW50IExvZ2dlcjo6Z2V0Um9sbGluZ0ludGVydmFsU2Vjb25kcygp
 IGNvbnN0IHsKKysgIGlmICghc3RhdGVfLT5pbml0aWFsaXplZF8pIHsKKysgICAgTE9HX0VSUk9S
 KCJOb3QgaW5pdGlhbGl6ZWQiKTsKKysgIH0KKysgIHJldHVybiBzdGF0ZV8tPnJvbGxpbmdfaW50
 ZXJ2YWxfc2Vjb25kc187CisrfQorKworK3ZvaWQgTG9nZ2VyOjpzZXRSb2xsaW5nRW5hYmxlZChi
 b29sIGVuYWJsZWQpIHsKKysgIGlmIChzdGF0ZV8tPmluaXRpYWxpemVkXykgeworKyAgICBzdGF0
 ZV8tPnJvbGxpbmdfZW5hYmxlZF8gPSBlbmFibGVkOworKyAgICBUU1RleHRMb2dPYmplY3RSb2xs
 aW5nRW5hYmxlZFNldChzdGF0ZV8tPnRleHRfbG9nX29ial8sIGVuYWJsZWQgPyBST0xMX09OX1RJ
 TUUgOiAwKTsKKysgICAgTE9HX0RFQlVHKCJSb2xsaW5nIGZvciBsb2cgWyVzXSBpcyBub3cgJXMi
 LCBzdGF0ZV8tPmZpbGVuYW1lXy5jX3N0cigpLCAoZW5hYmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIp
 KTsKKysgIH0gZWxzZSB7CisrICAgIExPR19FUlJPUigiTm90IGluaXRpYWxpemVkISIpOworKyAg
 fQorK30KKysKKytib29sIExvZ2dlcjo6aXNSb2xsaW5nRW5hYmxlZCgpIGNvbnN0IHsKKysgIGlm
 ICghc3RhdGVfLT5pbml0aWFsaXplZF8pIHsKKysgICAgTE9HX0VSUk9SKCJOb3QgaW5pdGlhbGl6
 ZWQhIik7CisrICB9CisrICByZXR1cm4gc3RhdGVfLT5yb2xsaW5nX2VuYWJsZWRfOworK30KKysK
 Kyt2b2lkIExvZ2dlcjo6Zmx1c2goKSB7CisrICBpZiAoc3RhdGVfLT5pbml0aWFsaXplZF8pIHsK
 KysgICAgVFNUZXh0TG9nT2JqZWN0Rmx1c2goc3RhdGVfLT50ZXh0X2xvZ19vYmpfKTsKKysgIH0g
 ZWxzZSB7CisrICAgIExPR19FUlJPUigiTm90IGluaXRpYWxpemVkISIpOworKyAgfQorK30KKysK
 KytuYW1lc3BhY2UgeworK2NvbnN0IGludCBERUZBVUxUX0JVRkZFUl9TSVpFX0ZPUl9WQVJBUkdT
 ID0gOCoxMDI0OworKworKy8vIFdlIHVzZSBhIG1hY3JvIGhlcmUgYmVjYXVzZSB2YXJhcmdzIHdv
 dWxkIGJlIGEgcGFpbiB0byBmb3J3YXJkIHZpYSBhIGhlbHBlcgorKy8vIGZ1bmN0aW9uCisrI2Rl
 ZmluZSBUU19URVhUX0xPR19PQkpFQ1RfV1JJVEUobGV2ZWwpIFwKKysgICAgY2hhciBidWZmZXJb
 REVGQVVMVF9CVUZGRVJfU0laRV9GT1JfVkFSQVJHU107IFwKKysgICAgaW50IG47IFwKKysgICAg
 dmFfbGlzdCBhcDsgXAorKyAgICB3aGlsZSAodHJ1ZSkgeyBcCisrICAgICB2YV9zdGFydChhcCwg
 Zm10KTsgXAorKyAgICAgbiA9IHZzbnByaW50ZiAoJmJ1ZmZlclswXSwgc2l6ZW9mKGJ1ZmZlciks
 IGZtdCwgYXApOyBcCisrICAgICB2YV9lbmQoYXApOyBcCisrICAgICBpZiAobiA+IC0xICYmIG4g
 PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihidWZmZXIpKSkgeyBcCisrICAgICAgIExPR19ERUJV
 RygibG9nZ2luZyBhICIgbGV2ZWwgIiB0byAnJXMnIHdpdGggbGVuZ3RoICVkIiwgc3RhdGVfLT5m
 aWxlbmFtZV8uY19zdHIoKSwgbik7IFwKKysgICAgICAgVFNUZXh0TG9nT2JqZWN0V3JpdGUoc3Rh
 dGVfLT50ZXh0X2xvZ19vYmpfLCBjb25zdF9jYXN0PGNoYXIqPigiWyIgbGV2ZWwgIl0gJXMiKSwg
 YnVmZmVyKTsgXAorKyAgICAgfSBlbHNlIHsgXAorKyAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
 byBsb2cgIiBsZXZlbCAiIG1lc3NhZ2UgdG8gJyVzJyBkdWUgdG8gc2l6ZSBleGNlZWRpbmcgJWx1
 ZCBieXRlcy4iLCBzdGF0ZV8tPmZpbGVuYW1lXy5jX3N0cigpLCBzaXplb2YoYnVmZmVyKSk7IFwK
 KysgICAgIH0gXAorKyAgICAgcmV0dXJuOyBcCisrICAgIH0KKysKKyt9IC8qIGVuZCBhbm9ueW1v
 dXMgbmFtZXNwYWNlICovCisrCisrdm9pZCBMb2dnZXI6OmxvZ0RlYnVnKGNvbnN0IGNoYXIgKmZt
 dCwgLi4uKSB7CisrICBpZiAoc3RhdGVfLT5sZXZlbF8gPD0gTE9HX0xFVkVMX0RFQlVHKSB7Cisr
 ICAgIFRTX1RFWFRfTE9HX09CSkVDVF9XUklURSgiREVCVUciKTsKKysgIH0KKyt9CisrCisrdm9p
 ZCBMb2dnZXI6OmxvZ0luZm8oY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKysgIGlmIChzdGF0ZV8t
 PmxldmVsXyA8PSBMT0dfTEVWRUxfSU5GTykgeworKyAgICBUU19URVhUX0xPR19PQkpFQ1RfV1JJ
 VEUoIklORk8iKTsKKysgIH0KKyt9CisrCisrdm9pZCBMb2dnZXI6OmxvZ0Vycm9yKGNvbnN0IGNo
 YXIgKmZtdCwgLi4uKSB7CisrICBpZiAoc3RhdGVfLT5sZXZlbF8gPD0gTE9HX0xFVkVMX0VSUk9S
 KSB7CisrICAgIFRTX1RFWFRfTE9HX09CSkVDVF9XUklURSgiRVJST1IiKTsKKysgIH0KKyt9Citk
 aWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvTWFrZWZpbGUuYW0gbGliL2F0c2NwcGFwaS9zcmMv
 TWFrZWZpbGUuYW0KKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9NYWtlZmlsZS5hbQkxOTcwLTAxLTAx
 IDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL01ha2VmaWxl
 LmFtCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAzNTMyMjg0ICswODAwCitAQCAtMCwwICsxLDg1IEBA
 CisrIworKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNG
 KSB1bmRlciBvbmUKKysjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4g
 IFNlZSB0aGUgTk9USUNFIGZpbGUKKysjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3Ig
 YWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlw
 LiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysjICB0byB5b3UgdW5kZXIgdGhlIEFwYWNo
 ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
 dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyMgIHdpdGggdGhlIExpY2Vuc2Uu
 ICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysjCisrIyAgICAgIGh0
 dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKyMKKysjICBVbmxlc3Mg
 cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
 YXJlCisrIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
 RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysjICBTZWUgdGhlIExpY2Vu
 c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisr
 IyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrCisrVFNfUExVR0lOX0NQUEZMQUdT
 ID0gXAorKyAgLURfX1NURENfTElNSVRfTUFDUk9TPTEgXAorKyAgLURfX1NURENfRk9STUFUX01B
 Q1JPUz0xIFwKKysgIC1JJCh0b3BfYnVpbGRkaXIpL3Byb3h5L2FwaSBcCisrICAtSSQodG9wX3Ny
 Y2RpcikvcHJveHkvYXBpIFwKKysgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYi90cyBcCisrICAtSSQo
 dG9wX3NyY2RpcikvbGliL3RzCisrCisrQU1fQ1hYRkxBR1MgPSAtSWluY2x1ZGUgJChUU19QTFVH
 SU5fQ1BQRkxBR1MpCisrCisrIyBidWlsZCB0aGUgbGlicmFyeQorK2xpYl9MVExJQlJBUklFUyA9
 IGxpYmF0c2NwcGFwaS5sYQorK2xpYmF0c2NwcGFwaV9sYV9MREZMQUdTPS1seiAtbHB0aHJlYWQg
 LXZlcnNpb24taW5mbyBAVFNfTElCVE9PTF9WRVJTSU9OQAorKworK2xpYmF0c2NwcGFwaV9sYV9T
 T1VSQ0VTID0gR2xvYmFsUGx1Z2luLmNjIFwKKysJCQkgIFBsdWdpbi5jYyBcCisrCQkJICB1dGls
 cy5jYyBcCisrCQkJICB1dGlsc19pbnRlcm5hbC5jYyBcCisrCQkJICBUcmFuc2FjdGlvbi5jYyBc
 CisrCQkJICBUcmFuc2FjdGlvblBsdWdpbi5jYyBcCisrCQkJICBIZWFkZXJzLmNjIFwKKysJCQkg
 IFJlcXVlc3QuY2MgXAorKwkJCSAgQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvci5jYyBc
 CisrCQkJICBDbGllbnRSZXF1ZXN0LmNjIFwKKysJCQkgIFVybC5jYyBcCisrCQkJICBIdHRwVmVy
 c2lvbi5jYyBcCisrCQkJICBIdHRwTWV0aG9kLmNjIFwKKysJCQkgIEluaXRpYWxpemFibGVWYWx1
 ZS5jYyBcCisrCQkJICBSZXNwb25zZS5jYyBcCisrCQkJICBUcmFuc2Zvcm1hdGlvblBsdWdpbi5j
 YyBcCisrCQkJICBMb2dnZXIuY2MgXAorKwkJCSAgU3RhdC5jYyBcCisrCQkJICBBc3luY0h0dHBG
 ZXRjaC5jYyBcCisrCQkJICBSZW1hcFBsdWdpbi5jYyBcCisrCQkJICBHemlwRGVmbGF0ZVRyYW5z
 Zm9ybWF0aW9uLmNjIFwKKysJCQkgIEd6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24uY2MgXAorKwkJ
 CSAgQXN5bmNUaW1lci5jYworKworK2xpYnJhcnlfaW5jbHVkZWRpcj0kKGluY2x1ZGVkaXIpL2F0
 c2NwcGFwaQorK2Jhc2VfaW5jbHVkZV9mb2xkZXIgPSBpbmNsdWRlL2F0c2NwcGFwaS8KKysKKyts
 aWJyYXJ5X2luY2x1ZGVfSEVBREVSUyA9ICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvR2xvYmFsUGx1
 Z2luLmggXAorKwkJCSAgJChiYXNlX2luY2x1ZGVfZm9sZGVyKS9QbHVnaW4uaCBcCisrCQkJICAk
 KGJhc2VfaW5jbHVkZV9mb2xkZXIpL1BsdWdpbkluaXQuaCBcCisrCQkJICAkKGJhc2VfaW5jbHVk
 ZV9mb2xkZXIpL1RyYW5zYWN0aW9uLmggXAorKwkJCSAgJChiYXNlX2luY2x1ZGVfZm9sZGVyKS9U
 cmFuc2FjdGlvblBsdWdpbi5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvSHR0cE1l
 dGhvZC5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvSHR0cFN0YXR1cy5oIFwKKysJ
 CQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvSHR0cFZlcnNpb24uaCBcCisrCQkJICAkKGJhc2Vf
 aW5jbHVkZV9mb2xkZXIpL0hlYWRlcnMuaCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIp
 L1JlcXVlc3QuaCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIpL0Nhc2VJbnNlbnNpdGl2
 ZVN0cmluZ0NvbXBhcmF0b3IuaCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIpL0NsaWVu
 dFJlcXVlc3QuaCBcCisrCSAJCSAgJChiYXNlX2luY2x1ZGVfZm9sZGVyKS9VcmwuaCBcCisrCQkg
 CSAgJChiYXNlX2luY2x1ZGVfZm9sZGVyKS9SZXNwb25zZS5oIFwKKysJCQkgICQoYmFzZV9pbmNs
 dWRlX2ZvbGRlcikvdXRpbHMuaCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIpL1RyYW5z
 Zm9ybWF0aW9uUGx1Z2luLmggXAorKwkJCSAgJChiYXNlX2luY2x1ZGVfZm9sZGVyKS9Mb2dnZXIu
 aCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIpL25vbmNvcHlhYmxlLmggXAorKwkJCSAg
 JChiYXNlX2luY2x1ZGVfZm9sZGVyKS9TdGF0LmggXAorKwkJCSAgJChiYXNlX2luY2x1ZGVfZm9s
 ZGVyKS9NdXRleC5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvUmVtYXBQbHVnaW4u
 aCBcCisrCQkJICAkKGJhc2VfaW5jbHVkZV9mb2xkZXIpL3NoYXJlZF9wdHIuaCBcCisrCQkJICAk
 KGJhc2VfaW5jbHVkZV9mb2xkZXIpL0FzeW5jLmggXAorKwkJCSAgJChiYXNlX2luY2x1ZGVfZm9s
 ZGVyKS9Bc3luY0h0dHBGZXRjaC5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikvR3pp
 cERlZmxhdGVUcmFuc2Zvcm1hdGlvbi5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRlcikv
 R3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbi5oIFwKKysJCQkgICQoYmFzZV9pbmNsdWRlX2ZvbGRl
 cikvQXN5bmNUaW1lci5oCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvUGx1Z2luLmNjIGxp
 Yi9hdHNjcHBhcGkvc3JjL1BsdWdpbi5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3JjL1BsdWdpbi5j
 YwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkv
 c3JjL1BsdWdpbi5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjcwMzUzMjI4NCArMDgwMAorQEAgLTAs
 MCArMSwzMSBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFn
 cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMg
 d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNz
 IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
 d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
 IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNl
 IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUg
 UGx1Z2luLmNjCisrICovCisrI2luY2x1ZGUgImF0c2NwcGFwaS9QbHVnaW4uaCIKKysKKytjb25z
 dCBzdGQ6OnN0cmluZyBhdHNjcHBhcGk6OkhPT0tfVFlQRV9TVFJJTkdTW10gPSB7IHN0ZDo6c3Ry
 aW5nKCJIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCIpLAorKyAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoIkhP
 T0tfUkVBRF9SRVFVRVNUX0hFQURFUlNfUE9TVF9SRU1BUCIpLAorKyAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoIkhPT0tfU0VO
 RF9SRVFVRVNUX0hFQURFUlMiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCJIT09LX1JFQURfUkVTUE9OU0VfSEVBREVS
 UyIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgc3RkOjpzdHJpbmcoIkhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTIiksCisrICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZygi
 SE9PS19PU19ETlMiKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIH07CisrCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvUmVtYXBQbHVn
 aW4uY2MgbGliL2F0c2NwcGFwaS9zcmMvUmVtYXBQbHVnaW4uY2MKKy0tLSBsaWIvYXRzY3BwYXBp
 L3NyYy9SZW1hcFBsdWdpbi5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAor
 KysrIGxpYi9hdHNjcHBhcGkvc3JjL1JlbWFwUGx1Z2luLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIu
 NzAzNTMyMjg0ICswODAwCitAQCAtMCwwICsxLDY2IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0
 aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3Jl
 IGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysg
 IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisr
 ICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBm
 aWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
 CisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
 bGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
 ZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
 Q0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
 ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
 ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJS
 QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
 ZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
 bmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysg
 Ki8KKysvKioKKysgKiBAZmlsZSBSZW1hcFBsdWdpbi5jYworKyAqLworKworKyNpbmNsdWRlICJh
 dHNjcHBhcGkvUmVtYXBQbHVnaW4uaCIKKysjaW5jbHVkZSAibG9nZ2luZ19pbnRlcm5hbC5oIgor
 KyNpbmNsdWRlICJ1dGlsc19pbnRlcm5hbC5oIgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5j
 bHVkZSA8dHMvcmVtYXAuaD4KKysKKyt1c2luZyBuYW1lc3BhY2UgYXRzY3BwYXBpOworKworK1RT
 UmVtYXBTdGF0dXMgVFNSZW1hcERvUmVtYXAodm9pZCogaWgsIFRTSHR0cFR4biByaCwgVFNSZW1h
 cFJlcXVlc3RJbmZvKiBycmkpIHsKKysgIFJlbWFwUGx1Z2luICpyZW1hcF9wbHVnaW4gPSBzdGF0
 aWNfY2FzdDxSZW1hcFBsdWdpbiAqPihpaCk7CisrICBVcmwgbWFwX2Zyb21fdXJsKHJyaS0+cmVx
 dWVzdEJ1ZnAsIHJyaS0+bWFwRnJvbVVybCksIG1hcF90b191cmwocnJpLT5yZXF1ZXN0QnVmcCwg
 cnJpLT5tYXBUb1VybCk7CisrICBUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24gPSB1dGlsczo6aW50
 ZXJuYWw6OmdldFRyYW5zYWN0aW9uKHJoKTsKKysgIGJvb2wgcmVkaXJlY3QgPSBmYWxzZTsKKysg
 IFJlbWFwUGx1Z2luOjpSZXN1bHQgcmVzdWx0ID0gcmVtYXBfcGx1Z2luLT5kb1JlbWFwKG1hcF9m
 cm9tX3VybCwgbWFwX3RvX3VybCwgdHJhbnNhY3Rpb24sIHJlZGlyZWN0KTsKKysgIHJyaS0+cmVk
 aXJlY3QgPSByZWRpcmVjdCA/IDEgOiAwOworKyAgc3dpdGNoIChyZXN1bHQpIHsKKysgIGNhc2Ug
 UmVtYXBQbHVnaW46OlJFU1VMVF9FUlJPUjoKKysgICAgcmV0dXJuIFRTUkVNQVBfRVJST1I7Cisr
 ICBjYXNlIFJlbWFwUGx1Z2luOjpSRVNVTFRfTk9fUkVNQVA6CisrICAgIHJldHVybiBUU1JFTUFQ
 X05PX1JFTUFQOworKyAgY2FzZSBSZW1hcFBsdWdpbjo6UkVTVUxUX0RJRF9SRU1BUDoKKysgICAg
 cmV0dXJuIFRTUkVNQVBfRElEX1JFTUFQOworKyAgY2FzZSBSZW1hcFBsdWdpbjo6UkVTVUxUX05P
 X1JFTUFQX1NUT1A6CisrICAgIHJldHVybiBUU1JFTUFQX05PX1JFTUFQX1NUT1A7CisrICBjYXNl
 IFJlbWFwUGx1Z2luOjpSRVNVTFRfRElEX1JFTUFQX1NUT1A6CisrICAgIHJldHVybiBUU1JFTUFQ
 X0RJRF9SRU1BUF9TVE9QOworKyAgZGVmYXVsdDoKKysgICAgYXNzZXJ0KCEiVW5oYW5kbGVkIHJl
 c3VsdCIpOworKyAgICByZXR1cm4gVFNSRU1BUF9FUlJPUjsKKysgIH0KKyt9CisrCisrdm9pZCBU
 U1JlbWFwRGVsZXRlSW5zdGFuY2Uodm9pZCAqaWgpIHsKKysgIFJlbWFwUGx1Z2luICpyZW1hcF9w
 bHVnaW4gPSBzdGF0aWNfY2FzdDxSZW1hcFBsdWdpbiAqPihpaCk7CisrICBkZWxldGUgcmVtYXBf
 cGx1Z2luOworK30KKysKKytUU1JldHVybkNvZGUgVFNSZW1hcEluaXQoVFNSZW1hcEludGVyZmFj
 ZSAqYXBpX2luZm8sIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1Zl9zaXplKSB7CisrICByZXR1cm4g
 VFNfU1VDQ0VTUzsKKyt9CisrCisrUmVtYXBQbHVnaW46OlJlbWFwUGx1Z2luKHZvaWQgKippbnN0
 YW5jZV9oYW5kbGUpIHsKKysgICppbnN0YW5jZV9oYW5kbGUgPSBzdGF0aWNfY2FzdDx2b2lkICo+
 KHRoaXMpOworK30KKysKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9SZXF1ZXN0LmNjIGxp
 Yi9hdHNjcHBhcGkvc3JjL1JlcXVlc3QuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9SZXF1ZXN0
 LmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFw
 aS9zcmMvUmVxdWVzdC5jYwkyMDEzLTExLTExIDE0OjAzOjEyLjcwMzUzMjI4NCArMDgwMAorQEAg
 LTAsMCArMSwxNjcgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUg
 Rm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5z
 ZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0
 aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmln
 aHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRl
 ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlv
 dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhl
 IExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysg
 ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVu
 bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
 c29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
 IG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
 UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGlj
 ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
 KysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKy8qKgorKyAqIEBmaWxl
 IFJlcXVlc3QuY2MKKysgKi8KKysKKysjaW5jbHVkZSAiYXRzY3BwYXBpL1JlcXVlc3QuaCIKKysj
 aW5jbHVkZSA8dHMvdHMuaD4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL25vbmNvcHlhYmxlLmgiCisr
 I2luY2x1ZGUgIkluaXRpYWxpemFibGVWYWx1ZS5oIgorKyNpbmNsdWRlICJ1dGlsc19pbnRlcm5h
 bC5oIgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNl
 IGF0c2NwcGFwaTsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKysKKysvKioKKysgKiBAcHJpdmF0ZQor
 KyAqLworK3N0cnVjdCBhdHNjcHBhcGk6OlJlcXVlc3RTdGF0ZTogbm9uY29weWFibGUgIHsKKysg
 IFRTTUJ1ZmZlciBoZHJfYnVmXzsKKysgIFRTTUxvYyBoZHJfbG9jXzsKKysgIFRTTUxvYyB1cmxf
 bG9jXzsKKysgIFVybCB1cmxfOworKyAgSGVhZGVycyBoZWFkZXJzXzsKKysgIEluaXRpYWxpemFi
 bGVWYWx1ZTxIdHRwTWV0aG9kPiBtZXRob2RfOworKyAgSW5pdGlhbGl6YWJsZVZhbHVlPEh0dHBW
 ZXJzaW9uPiB2ZXJzaW9uXzsKKysgIGJvb2wgZGVzdHJveV9idWZfOworKyAgUmVxdWVzdFN0YXRl
 KCkgOiBoZHJfYnVmXyhOVUxMKSwgaGRyX2xvY18oTlVMTCksIHVybF9sb2NfKE5VTEwpLCBtZXRo
 b2RfKEhUVFBfTUVUSE9EX1VOS05PV04sIGZhbHNlKSwKKysgICAgICAgICAgICAgICAgICAgdmVy
 c2lvbl8oSFRUUF9WRVJTSU9OX1VOS05PV04sIGZhbHNlKSwgZGVzdHJveV9idWZfKGZhbHNlKSB7
 IH0KKyt9OworKworK1JlcXVlc3Q6OlJlcXVlc3QoKSB7CisrICBzdGF0ZV8gPSBuZXcgUmVxdWVz
 dFN0YXRlKCk7CisrfQorKworK1JlcXVlc3Q6OlJlcXVlc3Qodm9pZCAqaGRyX2J1Ziwgdm9pZCAq
 aGRyX2xvYykgeworKyAgc3RhdGVfID0gbmV3IFJlcXVlc3RTdGF0ZSgpOworKyAgaW5pdChoZHJf
 YnVmLCBoZHJfbG9jKTsKKysgIExPR19ERUJVRygiSW5pdGlhbGl6ZWQgcmVxdWVzdCBvYmplY3Qg
 JXAgd2l0aCBoZHJfYnVmPSVwIGFuZCBoZHJfbG9jPSVwIiwgdGhpcywgaGRyX2J1ZiwgaGRyX2xv
 Yyk7CisrfQorKworK1JlcXVlc3Q6OlJlcXVlc3QoY29uc3Qgc3RyaW5nICZ1cmxfc3RyLCBIdHRw
 TWV0aG9kIG1ldGhvZCwgSHR0cFZlcnNpb24gdmVyc2lvbikgeworKyAgc3RhdGVfID0gbmV3IFJl
 cXVlc3RTdGF0ZSgpOworKyAgc3RhdGVfLT5tZXRob2RfLnNldFZhbHVlKG1ldGhvZCk7CisrICBz
 dGF0ZV8tPnZlcnNpb25fLnNldFZhbHVlKHZlcnNpb24pOworKyAgc3RhdGVfLT5kZXN0cm95X2J1
 Zl8gPSB0cnVlOworKyAgc3RhdGVfLT5oZHJfYnVmXyA9IFRTTUJ1ZmZlckNyZWF0ZSgpOworKyAg
 c3RhdGVfLT5oZWFkZXJzXy5pbml0RGV0YWNoZWQoKTsKKysgIGlmIChUU1VybENyZWF0ZShzdGF0
 ZV8tPmhkcl9idWZfLCAmc3RhdGVfLT51cmxfbG9jXykgPT0gVFNfU1VDQ0VTUykgeworKyAgICBj
 b25zdCBjaGFyICp1cmxfc3RyX3N0YXJ0ID0gdXJsX3N0ci5jX3N0cigpOworKyAgICBjb25zdCBj
 aGFyICp1cmxfc3RyX2VuZCA9IHVybF9zdHJfc3RhcnQgKyB1cmxfc3RyLnNpemUoKTsKKysgICAg
 aWYgKFRTVXJsUGFyc2Uoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT51cmxfbG9jXywgJnVybF9z
 dHJfc3RhcnQsIHVybF9zdHJfZW5kKSAhPSBUU19QQVJTRV9ET05FKSB7CisrICAgICAgTE9HX0VS
 Uk9SKCJbJXNdIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIHVybCIsIHVybF9zdHIuY19zdHIo
 KSk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgc3RhdGVfLT51cmxfLmluaXQoc3RhdGVf
 LT5oZHJfYnVmXywgc3RhdGVfLT51cmxfbG9jXyk7CisrICAgIH0KKysgIH0KKysgIGVsc2Ugewor
 KyAgICBzdGF0ZV8tPnVybF9sb2NfID0gTlVMTDsKKysgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
 Y3JlYXRlIFVSTCBmaWVsZDsgaGRyX2J1ZiAlcCIsIHN0YXRlXy0+aGRyX2J1Zl8pOyAKKysgIH0K
 Kyt9CisrCisrdm9pZCBSZXF1ZXN0Ojppbml0KHZvaWQgKmhkcl9idWYsIHZvaWQgKmhkcl9sb2Mp
 IHsKKysgIGlmIChzdGF0ZV8tPmhkcl9idWZfIHx8IHN0YXRlXy0+aGRyX2xvY18pIHsKKysgICAg
 TE9HX0VSUk9SKCJSZWluaXRpYWxpemF0aW9uOyAoaGRyX2J1ZiwgaGRyX2xvYykgY3VycmVudCgl
 cCwgJXApLCBhdHRlbXB0ZWQoJXAsICVwKSIsIHN0YXRlXy0+aGRyX2J1Zl8sCisrICAgICAgICAg
 ICAgICBzdGF0ZV8tPmhkcl9sb2NfLCBoZHJfYnVmLCBoZHJfbG9jKTsKKysgICAgcmV0dXJuOwor
 KyAgfQorKyAgc3RhdGVfLT5oZHJfYnVmXyA9IHN0YXRpY19jYXN0PFRTTUJ1ZmZlcj4oaGRyX2J1
 Zik7CisrICBzdGF0ZV8tPmhkcl9sb2NfID0gc3RhdGljX2Nhc3Q8VFNNTG9jPihoZHJfbG9jKTsK
 KysgIHN0YXRlXy0+aGVhZGVyc18uaW5pdChzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9s
 b2NfKTsKKysgIHN0YXRlXy0+dXJsX2xvY18gPSBOVUxMOworKyAgVFNIdHRwSGRyVXJsR2V0KHN0
 YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sICZzdGF0ZV8tPnVybF9sb2NfKTsKKysg
 IGlmICghc3RhdGVfLT51cmxfbG9jXykgeworKyAgICBMT0dfRVJST1IoIlRTSHR0cEhkclVybEdl
 dCByZXR1cm5lZCBhIG51bGwgdXJsIGxvYywgaGRyX2J1Zj0lcCwgaGRyX2xvYz0lcCIsIHN0YXRl
 Xy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18pOworKyAgfQorKyAgZWxzZSB7CisrICAgIHN0
 YXRlXy0+dXJsXy5pbml0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+dXJsX2xvY18pOworKyAg
 ICBMT0dfREVCVUcoIkluaXRpYWxpemVkIHVybCIpOworKyAgfQorK30KKysKKytIdHRwTWV0aG9k
 IFJlcXVlc3Q6OmdldE1ldGhvZCgpIGNvbnN0IHsKKysgIGlmICghc3RhdGVfLT5tZXRob2RfLmlz
 SW5pdGlhbGl6ZWQoKSAmJiBzdGF0ZV8tPmhkcl9idWZfICYmIHN0YXRlXy0+aGRyX2xvY18pIHsK
 KysgICAgaW50IG1ldGhvZF9sZW47CisrICAgIGNvbnN0IGNoYXIgKm1ldGhvZF9zdHIgPSBUU0h0
 dHBIZHJNZXRob2RHZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXywgJm1ldGhv
 ZF9sZW4pOworKyAgICBpZiAobWV0aG9kX3N0ciAmJiBtZXRob2RfbGVuKSB7CisrICAgICAgaWYg
 KG1ldGhvZF9zdHIgPT0gVFNfSFRUUF9NRVRIT0RfR0VUKSB7CisrICAgICAgICBzdGF0ZV8tPm1l
 dGhvZF8gPSBIVFRQX01FVEhPRF9HRVQ7CisrICAgICAgfSBlbHNlIGlmIChtZXRob2Rfc3RyID09
 IFRTX0hUVFBfTUVUSE9EX1BPU1QpIHsKKysgICAgICAgIHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBf
 TUVUSE9EX1BPU1Q7CisrICAgICAgfSBlbHNlIGlmIChtZXRob2Rfc3RyID09IFRTX0hUVFBfTUVU
 SE9EX0hFQUQpIHsKKysgICAgICAgIHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBfTUVUSE9EX0hFQUQ7
 CisrICAgICAgfSBlbHNlIGlmIChtZXRob2Rfc3RyID09IFRTX0hUVFBfTUVUSE9EX0NPTk5FQ1Qp
 IHsKKysgICAgICAgIHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBfTUVUSE9EX0NPTk5FQ1Q7CisrICAg
 ICAgfSBlbHNlIGlmIChtZXRob2Rfc3RyID09IFRTX0hUVFBfTUVUSE9EX0RFTEVURSkgeworKyAg
 ICAgICAgc3RhdGVfLT5tZXRob2RfID0gSFRUUF9NRVRIT0RfREVMRVRFOworKyAgICAgIH0gZWxz
 ZSBpZiAobWV0aG9kX3N0ciA9PSBUU19IVFRQX01FVEhPRF9JQ1BfUVVFUlkpIHsKKysgICAgICAg
 IHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBfTUVUSE9EX0lDUF9RVUVSWTsKKysgICAgICB9IGVsc2Ug
 aWYgKG1ldGhvZF9zdHIgPT0gVFNfSFRUUF9NRVRIT0RfT1BUSU9OUykgeworKyAgICAgICAgc3Rh
 dGVfLT5tZXRob2RfID0gSFRUUF9NRVRIT0RfT1BUSU9OUzsKKysgICAgICB9IGVsc2UgaWYgKG1l
 dGhvZF9zdHIgPT0gVFNfSFRUUF9NRVRIT0RfUFVSR0UpIHsKKysgICAgICAgIHN0YXRlXy0+bWV0
 aG9kXyA9IEhUVFBfTUVUSE9EX1BVUkdFOworKyAgICAgIH0gZWxzZSBpZiAobWV0aG9kX3N0ciA9
 PSBUU19IVFRQX01FVEhPRF9QVVQpIHsKKysgICAgICAgIHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBf
 TUVUSE9EX1BVVDsKKysgICAgICB9IGVsc2UgaWYgKG1ldGhvZF9zdHIgPT0gVFNfSFRUUF9NRVRI
 T0RfVFJBQ0UpIHsKKysgICAgICAgIHN0YXRlXy0+bWV0aG9kXyA9IEhUVFBfTUVUSE9EX1RSQUNF
 OworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBMT0dfRVJST1IoIlRTSHR0cEhkck1l
 dGhvZEdldCByZXR1cm5lZCBudWxsIHN0cmluZyBvciBpdCB3YXMgemVybyBsZW5ndGgsIGhkcl9i
 dWY9JXAsIGhkcl9sb2M9JXAsIG1ldGhvZCBzdHI9JXAsIG1ldGhvZF9sZW49JWQiLAorKyAgICAg
 ICAgICBzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfLCBtZXRob2Rfc3RyLCBtZXRo
 b2RfbGVuKTsKKysgICAgfQorKyAgfQorKyAgcmV0dXJuIHN0YXRlXy0+bWV0aG9kXzsKKyt9Cisr
 CisrVXJsICZSZXF1ZXN0OjpnZXRVcmwoKSB7CisrICByZXR1cm4gc3RhdGVfLT51cmxfOworK30K
 KysKKythdHNjcHBhcGk6Okh0dHBWZXJzaW9uIFJlcXVlc3Q6OmdldFZlcnNpb24oKSBjb25zdCB7
 CisrICBpZiAoIXN0YXRlXy0+dmVyc2lvbl8uaXNJbml0aWFsaXplZCgpICYmIHN0YXRlXy0+aGRy
 X2J1Zl8gJiYgc3RhdGVfLT5oZHJfbG9jXykgeworKyAgICBzdGF0ZV8tPnZlcnNpb25fID0gdXRp
 bHM6OmludGVybmFsOjpnZXRIdHRwVmVyc2lvbihzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhk
 cl9sb2NfKTsKKysgICAgTE9HX0RFQlVHKCJJbml0aWFsaXppbmcgcmVxdWVzdCB2ZXJzaW9uPSVk
 IFslc10gb24gaGRyX2J1Zj0lcCwgaGRyX2xvYz0lcCIsCisrICAgICAgICBzdGF0ZV8tPnZlcnNp
 b25fLmdldFZhbHVlKCksIEhUVFBfVkVSU0lPTl9TVFJJTkdTW3N0YXRlXy0+dmVyc2lvbl8uZ2V0
 VmFsdWUoKV0uY19zdHIoKSwgc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXyk7Cisr
 ICB9CisrICByZXR1cm4gc3RhdGVfLT52ZXJzaW9uXzsKKyt9CisrCisrYXRzY3BwYXBpOjpIZWFk
 ZXJzICZSZXF1ZXN0OjpnZXRIZWFkZXJzKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRlXy0+aGVh
 ZGVyc187CisrfQorKworK1JlcXVlc3Q6On5SZXF1ZXN0KCkgeworKyAgaWYgKHN0YXRlXy0+dXJs
 X2xvY18pIHsKKysgICAgaWYgKHN0YXRlXy0+ZGVzdHJveV9idWZfKSB7CisrICAgICAgLy8gdXN1
 YWxseSwgaGRyX2xvYyBpcyB0aGUgcGFyZW50IG9mIHVybF9sb2MsIGJ1dCB3ZSBjcmVhdGVkIHRo
 aXMgdXJsX2xvYyAiZGlyZWN0bHkiIGluIGhkcl9idWYsIAorKyAgICAgIC8vIHNvIHdlIHVzZSBu
 dWxsIGFzIHBhcmVudCBsb2MgaW4gdGhpcyBjYXNlCisrICAgICAgVFNNTG9jIG51bGxfcGFyZW50
 X2xvYyA9IE5VTEw7CisrICAgICAgVFNIYW5kbGVNTG9jUmVsZWFzZShzdGF0ZV8tPmhkcl9idWZf
 LCBudWxsX3BhcmVudF9sb2MsIHN0YXRlXy0+dXJsX2xvY18pOworKyAgICAgIFRTTUJ1ZmZlckRl
 c3Ryb3koc3RhdGVfLT5oZHJfYnVmXyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTE9HX0RFQlVH
 KCJEZXN0cm95aW5nIHJlcXVlc3Qgb2JqZWN0IG9uIGhkcl9idWY9JXAsIGhkcl9sb2M9JXAsIHVy
 bF9sb2M9JXAiLCBzdGF0ZV8tPmhkcl9idWZfLAorKyAgICAgICAgICAgICAgICBzdGF0ZV8tPmhk
 cl9sb2NfLCBzdGF0ZV8tPnVybF9sb2NfKTsKKysgICAgICBUU0hhbmRsZU1Mb2NSZWxlYXNlKHN0
 YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18sIHN0YXRlXy0+dXJsX2xvY18pOworKyAg
 ICB9CisrICB9CisrICBkZWxldGUgc3RhdGVfOworK30KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBp
 L3NyYy9SZXNwb25zZS5jYyBsaWIvYXRzY3BwYXBpL3NyYy9SZXNwb25zZS5jYworLS0tIGxpYi9h
 dHNjcHBhcGkvc3JjL1Jlc3BvbnNlLmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICsw
 ODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvUmVzcG9uc2UuY2MJMjAxMy0xMS0xMSAxNDowMzox
 Mi43MDM1MzIyODQgKzA4MDAKK0BAIC0wLDAgKzEsMTI2IEBACisrLyoqCisrICBMaWNlbnNlZCB0
 byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBt
 b3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUK
 KysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9u
 CisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhp
 cyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
 dGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
 b21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
 IHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
 L0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
 YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUg
 TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBX
 QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
 cGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
 cm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
 KysgKi8KKysvKioKKysgKiBAZmlsZSBSZXNwb25zZS5jYworKyAqLworKyNpbmNsdWRlICJhdHNj
 cHBhcGkvUmVzcG9uc2UuaCIKKysjaW5jbHVkZSAiSW5pdGlhbGl6YWJsZVZhbHVlLmgiCisrI2lu
 Y2x1ZGUgImF0c2NwcGFwaS9ub25jb3B5YWJsZS5oIgorKyNpbmNsdWRlICJ1dGlsc19pbnRlcm5h
 bC5oIgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNl
 IGF0c2NwcGFwaTsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKysKKytuYW1lc3BhY2UgYXRzY3BwYXBp
 IHsKKysKKysvKioKKysgKiBAcHJpdmF0ZQorKyAqLworK3N0cnVjdCBSZXNwb25zZVN0YXRlOiBu
 b25jb3B5YWJsZSB7CisrICBUU01CdWZmZXIgaGRyX2J1Zl87CisrICBUU01Mb2MgaGRyX2xvY187
 CisrICBJbml0aWFsaXphYmxlVmFsdWU8SHR0cFZlcnNpb24+IHZlcnNpb25fOworKyAgSW5pdGlh
 bGl6YWJsZVZhbHVlPEh0dHBTdGF0dXM+IHN0YXR1c19jb2RlXzsKKysgIEluaXRpYWxpemFibGVW
 YWx1ZTxzdHJpbmc+IHJlYXNvbl9waHJhc2VfOworKyAgSGVhZGVycyBoZWFkZXJzXzsKKysgIFJl
 c3BvbnNlU3RhdGUoKSA6IGhkcl9idWZfKE5VTEwpLCBoZHJfbG9jXyhOVUxMKSwgdmVyc2lvbl8o
 SFRUUF9WRVJTSU9OX1VOS05PV04sIGZhbHNlKSwgc3RhdHVzX2NvZGVfKEhUVFBfU1RBVFVTX1VO
 S05PV04sIGZhbHNlKSB7IH0KKyt9OworKworK30KKysKKytSZXNwb25zZTo6UmVzcG9uc2UoKSB7
 CisrICBzdGF0ZV8gPSBuZXcgUmVzcG9uc2VTdGF0ZSgpOworKyAgc3RhdGVfLT5oZWFkZXJzXy5z
 ZXRUeXBlKEhlYWRlcnM6OlRZUEVfUkVTUE9OU0UpOworK30KKysKKyt2b2lkIFJlc3BvbnNlOjpp
 bml0KHZvaWQgKmhkcl9idWYsIHZvaWQgKmhkcl9sb2MpIHsKKysgIHN0YXRlXy0+aGRyX2J1Zl8g
 PSBzdGF0aWNfY2FzdDxUU01CdWZmZXI+KGhkcl9idWYpOworKyAgc3RhdGVfLT5oZHJfbG9jXyA9
 IHN0YXRpY19jYXN0PFRTTUxvYz4oaGRyX2xvYyk7CisrICBzdGF0ZV8tPmhlYWRlcnNfLmluaXQo
 c3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXyk7CisrICBMT0dfREVCVUcoIkluaXRp
 YWxpemluZyByZXNwb25zZSAlcCB3aXRoIGhkcl9idWY9JXAgYW5kIGhkcl9sb2M9JXAiLCB0aGlz
 LCBzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfKTsKKyt9CisrCisrSHR0cFZlcnNp
 b24gUmVzcG9uc2U6OmdldFZlcnNpb24oKSBjb25zdCB7CisrICBpZiAoc3RhdGVfLT52ZXJzaW9u
 Xy5pc0luaXRpYWxpemVkKCkpIHsKKysgICAgcmV0dXJuIHN0YXRlXy0+dmVyc2lvbl87CisrICB9
 CisrICBpZiAoc3RhdGVfLT5oZHJfYnVmXyAmJiBzdGF0ZV8tPmhkcl9sb2NfKSB7CisrICAgIHN0
 YXRlXy0+dmVyc2lvbl8gPSB1dGlsczo6aW50ZXJuYWw6OmdldEh0dHBWZXJzaW9uKHN0YXRlXy0+
 aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18pOworKyAgICBMT0dfREVCVUcoIkluaXRpYWxpemlu
 ZyByZXNwb25zZSB2ZXJzaW9uIHRvICVkIFslc10gd2l0aCBoZHJfYnVmPSVwIGFuZCBoZHJfbG9j
 PSVwIiwKKysgICAgICAgIHN0YXRlXy0+dmVyc2lvbl8uZ2V0VmFsdWUoKSwgSFRUUF9WRVJTSU9O
 X1NUUklOR1Nbc3RhdGVfLT52ZXJzaW9uXy5nZXRWYWx1ZSgpXS5jX3N0cigpLCBzdGF0ZV8tPmhk
 cl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfKTsKKysgICAgcmV0dXJuIHN0YXRlXy0+dmVyc2lvbl87
 CisrICB9CisrICByZXR1cm4gSFRUUF9WRVJTSU9OX1VOS05PV047CisrfQorKworK0h0dHBTdGF0
 dXMgUmVzcG9uc2U6OmdldFN0YXR1c0NvZGUoKSBjb25zdCB7CisrICBpZiAoc3RhdGVfLT5zdGF0
 dXNfY29kZV8uaXNJbml0aWFsaXplZCgpKSB7CisrICAgIHJldHVybiBzdGF0ZV8tPnN0YXR1c19j
 b2RlXzsKKysgIH0KKysgIGlmIChzdGF0ZV8tPmhkcl9idWZfICYmIHN0YXRlXy0+aGRyX2xvY18p
 IHsKKysgICAgc3RhdGVfLT5zdGF0dXNfY29kZV8gPSBzdGF0aWNfY2FzdDxIdHRwU3RhdHVzPihU
 U0h0dHBIZHJTdGF0dXNHZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXykpOwor
 KyAgICBMT0dfREVCVUcoIkluaXRpYWxpemluZyByZXNwb25zZSBzdGF0dXMgY29kZSB0byAlZCB3
 aXRoIGhkcl9idWY9JXAgYW5kIGhkcl9sb2M9JXAiLAorKyAgICAgICAgc3RhdGVfLT5zdGF0dXNf
 Y29kZV8uZ2V0VmFsdWUoKSwgc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT5oZHJfbG9jXyk7Cisr
 ICAgIHJldHVybiBzdGF0ZV8tPnN0YXR1c19jb2RlXzsKKysgIH0KKysKKysgIHJldHVybiBIVFRQ
 X1NUQVRVU19VTktOT1dOOworK30KKysKKyt2b2lkIFJlc3BvbnNlOjpzZXRTdGF0dXNDb2RlKEh0
 dHBTdGF0dXMgY29kZSkgeworKyAgaWYgKHN0YXRlXy0+aGRyX2J1Zl8gJiYgc3RhdGVfLT5oZHJf
 bG9jXykgeworKyAgICBUU0h0dHBIZHJTdGF0dXNTZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVf
 LT5oZHJfbG9jXywgc3RhdGljX2Nhc3Q8VFNIdHRwU3RhdHVzPihjb2RlKSk7CisrICAgIHN0YXRl
 Xy0+c3RhdHVzX2NvZGVfID0gY29kZTsKKysgICAgTE9HX0RFQlVHKCJDaGFuZ2luZyByZXNwb25z
 ZSBzdGF0dXMgY29kZSB0byAlZCB3aXRoIGhkcl9idWY9JXAgYW5kIGhkcl9sb2M9JXAiLAorKyAg
 ICAgICAgc3RhdGVfLT5zdGF0dXNfY29kZV8uZ2V0VmFsdWUoKSwgc3RhdGVfLT5oZHJfYnVmXywg
 c3RhdGVfLT5oZHJfbG9jXyk7CisrICB9CisrfQorKworK2NvbnN0IHN0cmluZyAmUmVzcG9uc2U6
 OmdldFJlYXNvblBocmFzZSgpIGNvbnN0IHsKKysgIGlmICghc3RhdGVfLT5yZWFzb25fcGhyYXNl
 Xy5pc0luaXRpYWxpemVkKCkgJiYgc3RhdGVfLT5oZHJfYnVmXyAmJiBzdGF0ZV8tPmhkcl9sb2Nf
 KSB7CisrICAgIGludCBsZW5ndGg7CisrICAgIGNvbnN0IGNoYXIgKnN0ciA9IFRTSHR0cEhkclJl
 YXNvbkdldChzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPmhkcl9sb2NfLCAmbGVuZ3RoKTsKKysg
 ICAgaWYgKHN0ciAmJiBsZW5ndGgpIHsKKysgICAgICBzdGF0ZV8tPnJlYXNvbl9waHJhc2VfLmdl
 dFZhbHVlUmVmKCkuYXNzaWduKHN0ciwgbGVuZ3RoKTsKKysgICAgICBMT0dfREVCVUcoIkluaXRp
 YWxpemluZyByZXNwb25zZSByZWFzb24gcGhyYXNlIHRvICclcycgd2l0aCBoZHJfYnVmPSVwIGFu
 ZCBoZHJfbG9jPSVwIiwKKysgICAgICAgICAgc3RhdGVfLT5yZWFzb25fcGhyYXNlXy5nZXRWYWx1
 ZVJlZigpLmNfc3RyKCksIHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+aGRyX2xvY18pOworKyAg
 ICB9IGVsc2UgeworKyAgICAgIExPR19FUlJPUigiVFNIdHRwSGRyUmVhc29uR2V0IHJldHVybmVk
 IG51bGwgc3RyaW5nIG9yIHplcm8gbGVuZ3RoLiBzdHI9JXAsIGxlbmd0aD0lZCwgaGRyX2J1Zj0l
 cCwgaGRyX2xvYz0lcCIsCisrICAgICAgICAgIHN0ciwgbGVuZ3RoLCBzdGF0ZV8tPmhkcl9idWZf
 LCBzdGF0ZV8tPmhkcl9sb2NfKTsKKysgICAgfQorKyAgfQorKyAgcmV0dXJuIHN0YXRlXy0+cmVh
 c29uX3BocmFzZV87IC8vIGlmIG5vdCBpbml0aWFsaXplZCwgd2Ugd2lsbCBqdXN0IHJldHVybiBh
 biBlbXB0eSBzdHJpbmcKKyt9CisrCisrdm9pZCBSZXNwb25zZTo6c2V0UmVhc29uUGhyYXNlKGNv
 bnN0IHN0cmluZyAmcGhyYXNlKSB7CisrICBpZiAoc3RhdGVfLT5oZHJfYnVmXyAmJiBzdGF0ZV8t
 Pmhkcl9sb2NfKSB7CisrICAgIFRTSHR0cEhkclJlYXNvblNldChzdGF0ZV8tPmhkcl9idWZfLCBz
 dGF0ZV8tPmhkcl9sb2NfLCBwaHJhc2UuY19zdHIoKSwgcGhyYXNlLmxlbmd0aCgpKTsKKysgICAg
 c3RhdGVfLT5yZWFzb25fcGhyYXNlXyA9IHBocmFzZTsKKysgICAgTE9HX0RFQlVHKCJDaGFuZ2lu
 ZyByZXNwb25zZSByZWFzb24gcGhyYXNlIHRvICclcycgd2l0aCBoZHJfYnVmPSVwIGFuZCBoZHJf
 bG9jPSVwIiwKKysgICAgICAgIHBocmFzZS5jX3N0cigpLCBzdGF0ZV8tPmhkcl9idWZfLCBzdGF0
 ZV8tPmhkcl9sb2NfKTsKKysgIH0KKyt9CisrCisrSGVhZGVycyAmUmVzcG9uc2U6OmdldEhlYWRl
 cnMoKSBjb25zdCB7CisrICByZXR1cm4gc3RhdGVfLT5oZWFkZXJzXzsgIC8vIGlmIG5vdCBpbml0
 aWFsaXplZCwgd2Ugd2lsbCBqdXN0IHJldHVybiBhbiBlbXB0eSBvYmplY3QKKyt9CisrCisrUmVz
 cG9uc2U6On5SZXNwb25zZSgpIHsKKysgIGRlbGV0ZSBzdGF0ZV87CisrfQorZGlmZiAtcnVOIGxp
 Yi9hdHNjcHBhcGkvc3JjL1N0YXQuY2MgbGliL2F0c2NwcGFwaS9zcmMvU3RhdC5jYworLS0tIGxp
 Yi9hdHNjcHBhcGkvc3JjL1N0YXQuY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4
 MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9TdGF0LmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAz
 NTMyMjg0ICswODAwCitAQCAtMCwwICsxLDk2IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUg
 QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNv
 bnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRp
 c3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICBy
 ZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxl
 CisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisr
 ICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
 bmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
 aWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
 U0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
 IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
 ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5U
 SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
 CisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
 cGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8K
 KysvKioKKysgKiBAZmlsZSBTdGF0LmNjCisrICovCisrCisrI2luY2x1ZGUgImF0c2NwcGFwaS9T
 dGF0LmgiCisrI2luY2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1
 ZGUgPHRzL3RzLmg+CisrI2luY2x1ZGUgImxvZ2dpbmdfaW50ZXJuYWwuaCIKKysKKyt1c2luZyBu
 YW1lc3BhY2UgYXRzY3BwYXBpOworK3VzaW5nIHN0ZDo6c3RyaW5nOworKworK1N0YXQ6OlN0YXQo
 KSA6IHN0YXRfaWRfKFRTX0VSUk9SKSB7CisrLy8gQVRTIEd1YXJhbnRlZXMgdGhhdCBzdGF0IGlk
 cyB3aWxsIGFsd2F5cyBiZSA+IDAuIFNvIHdlIGNhbiB1c2Ugc3RhdF9pZF8gPiAwIHRvCisrLy8g
 dmVyaWZ5IHRoYXQgdGhpcyBzdGF0IGhhcyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLgorK30K
 KysKKytTdGF0Ojp+U3RhdCgpIHsKKysvLyB3ZSByZWFsbHkgZG9udCBoYXZlIGFueSBjbGVhbnVw
 IHNpbmNlIEFUUyBkb2Vzbid0IGV4cG9zZSBhIG1ldGhvZCB0byBkZXN0cm95IHN0YXRzCisrfQor
 KworK2Jvb2wgU3RhdDo6aW5pdChzdHJpbmcgbmFtZSwgU3RhdDo6U3luY1R5cGUgdHlwZSwgYm9v
 bCBwZXJzaXN0ZW50KSB7CisrICAvLyBUU19SRUNPUkREQVRBVFlQRV9JTlQgaXMgdGhlIG9ubHkg
 dHlwZSBjdXJyZW50bHkgc3VwcG9ydGVkCisrICAvLyBzbyB0aGF0J3Mgd2h5IHRoaXMgYXBpIGRv
 ZXNuJ3QgZXhwb3NlIG90aGVyIHR5cGVzLCBUU1N0YXRTeW5jIGlzIGVxdWl2YWxlbnQgdG8gU3Rh
 dFN5bmNUeXBlCisrICBzdGF0X2lkXyA9IFRTU3RhdENyZWF0ZShuYW1lLmNfc3RyKCksIFRTX1JF
 Q09SRERBVEFUWVBFX0lOVCwgcGVyc2lzdGVudCA/ICBUU19TVEFUX1BFUlNJU1RFTlQgOiBUU19T
 VEFUX05PTl9QRVJTSVNURU5ULCBzdGF0aWNfY2FzdDxUU1N0YXRTeW5jPih0eXBlKSk7CisrICBp
 ZiAoc3RhdF9pZF8gIT0gVFNfRVJST1IpIHsKKysgICAgTE9HX0RFQlVHKCJDcmVhdGVkIG5ldyBz
 dGF0IG5hbWVkICclcycgd2l0aCBzdGF0X2lkID0gJWQiLCBuYW1lLmNfc3RyKCksIHN0YXRfaWRf
 KTsKKysgIH0gZWxzZSB7CisrICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBzdGF0IG5h
 bWVkICclcycuIiwgbmFtZS5jX3N0cigpKTsKKysgIH0KKysKKysgIGlmIChzdGF0X2lkXyA9PSBU
 U19FUlJPUikgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrCisrICBpZiAoIXBlcnNpc3Rl
 bnQpIHsKKysgICAgc2V0KDApOworKyAgfQorKworKyAgcmV0dXJuIHRydWU7CisrfQorKworK3Zv
 aWQgU3RhdDo6c2V0KGludDY0X3QgdmFsdWUpIHsKKysgIGlmIChzdGF0X2lkXyA9PSBUU19FUlJP
 UikgeworKyAgICByZXR1cm47CisrICB9CisrCisrICBUU1N0YXRJbnRTZXQoc3RhdF9pZF8sIHZh
 bHVlKTsKKyt9CisrCisraW50NjRfdCBTdGF0OjpnZXQoKSBjb25zdCB7CisrICBpZiAoc3RhdF9p
 ZF8gPT0gVFNfRVJST1IpIHsKKysgICAgcmV0dXJuIDA7CisrICB9CisrCisrICByZXR1cm4gVFNT
 dGF0SW50R2V0KHN0YXRfaWRfKTsKKyt9CisrCisrdm9pZCBTdGF0OjppbmNyZW1lbnQoaW50NjRf
 dCBhbW91bnQpIHsKKysgIGlmIChzdGF0X2lkXyA9PSBUU19FUlJPUikgeworKyAgICByZXR1cm47
 CisrICB9CisrCisrICBUU1N0YXRJbnRJbmNyZW1lbnQoc3RhdF9pZF8sIGFtb3VudCk7CisrfQor
 KworK3ZvaWQgU3RhdDo6ZGVjcmVtZW50KGludDY0X3QgYW1vdW50KSB7CisrICBpZiAoc3RhdF9p
 ZF8gPT0gVFNfRVJST1IpIHsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgVFNTdGF0SW50RGVj
 cmVtZW50KHN0YXRfaWRfLCBhbW91bnQpOworK30KKysKKysKKysKKysKKysKK2RpZmYgLXJ1TiBs
 aWIvYXRzY3BwYXBpL3NyYy9UcmFuc2FjdGlvbi5jYyBsaWIvYXRzY3BwYXBpL3NyYy9UcmFuc2Fj
 dGlvbi5jYworLS0tIGxpYi9hdHNjcHBhcGkvc3JjL1RyYW5zYWN0aW9uLmNjCTE5NzAtMDEtMDEg
 MDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvVHJhbnNhY3Rp
 b24uY2MJMjAxMy0xMS0xMSAxNDowMzoxMi43MDM1MzIyODQgKzA4MDAKK0BAIC0wLDAgKzEsMzAw
 IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24g
 KEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50
 cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZv
 ciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hp
 cC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNo
 ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1
 c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAg
 WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDov
 L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWly
 ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisr
 ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
 SVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
 TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
 ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0
 aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBUcmFuc2Fj
 dGlvbi5jYworKyAqLworKworKyNpbmNsdWRlICJhdHNjcHBhcGkvVHJhbnNhY3Rpb24uaCIKKysj
 aW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8bWFwPgor
 KyNpbmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPHRzL3RzLmg+CisrI2luY2x1ZGUgImF0c2Nw
 cGFwaS9zaGFyZWRfcHRyLmgiCisrI2luY2x1ZGUgImxvZ2dpbmdfaW50ZXJuYWwuaCIKKysjaW5j
 bHVkZSAidXRpbHNfaW50ZXJuYWwuaCIKKysjaW5jbHVkZSAiSW5pdGlhbGl6YWJsZVZhbHVlLmgi
 CisrI2luY2x1ZGUgImF0c2NwcGFwaS9ub25jb3B5YWJsZS5oIgorKworK3VzaW5nIHN0ZDo6bWFw
 OworK3VzaW5nIHN0ZDo6c3RyaW5nOworK3VzaW5nIG5hbWVzcGFjZSBhdHNjcHBhcGk7CisrCisr
 LyoqCisrICogQHByaXZhdGUKKysgKi8KKytzdHJ1Y3QgYXRzY3BwYXBpOjpUcmFuc2FjdGlvblN0
 YXRlOiBub25jb3B5YWJsZSB7CisrICBUU0h0dHBUeG4gdHhuXzsKKysgIHN0ZDo6bGlzdDxUcmFu
 c2FjdGlvblBsdWdpbiAqPiBwbHVnaW5zXzsKKysgIFRTTUJ1ZmZlciBjbGllbnRfcmVxdWVzdF9o
 ZHJfYnVmXzsKKysgIFRTTUxvYyBjbGllbnRfcmVxdWVzdF9oZHJfbG9jXzsKKysgIENsaWVudFJl
 cXVlc3QgY2xpZW50X3JlcXVlc3RfOworKyAgVFNNQnVmZmVyIHNlcnZlcl9yZXF1ZXN0X2hkcl9i
 dWZfOworKyAgVFNNTG9jIHNlcnZlcl9yZXF1ZXN0X2hkcl9sb2NfOworKyAgUmVxdWVzdCBzZXJ2
 ZXJfcmVxdWVzdF87CisrICBUU01CdWZmZXIgc2VydmVyX3Jlc3BvbnNlX2hkcl9idWZfOworKyAg
 VFNNTG9jIHNlcnZlcl9yZXNwb25zZV9oZHJfbG9jXzsKKysgIFJlc3BvbnNlIHNlcnZlcl9yZXNw
 b25zZV87CisrICBUU01CdWZmZXIgY2xpZW50X3Jlc3BvbnNlX2hkcl9idWZfOworKyAgVFNNTG9j
 IGNsaWVudF9yZXNwb25zZV9oZHJfbG9jXzsKKysgIFJlc3BvbnNlIGNsaWVudF9yZXNwb25zZV87
 CisrICBtYXA8c3RyaW5nLCBzaGFyZWRfcHRyPFRyYW5zYWN0aW9uOjpDb250ZXh0VmFsdWU+ID4g
 Y29udGV4dF92YWx1ZXNfOworKworKyAgVHJhbnNhY3Rpb25TdGF0ZShUU0h0dHBUeG4gdHhuLCBU
 U01CdWZmZXIgY2xpZW50X3JlcXVlc3RfaGRyX2J1ZiwgVFNNTG9jIGNsaWVudF9yZXF1ZXN0X2hk
 cl9sb2MpCisrICAgIDogdHhuXyh0eG4pLCBjbGllbnRfcmVxdWVzdF9oZHJfYnVmXyhjbGllbnRf
 cmVxdWVzdF9oZHJfYnVmKSwgY2xpZW50X3JlcXVlc3RfaGRyX2xvY18oY2xpZW50X3JlcXVlc3Rf
 aGRyX2xvYyksCisrICAgICAgY2xpZW50X3JlcXVlc3RfKHR4biwgY2xpZW50X3JlcXVlc3RfaGRy
 X2J1ZiwgY2xpZW50X3JlcXVlc3RfaGRyX2xvYyksCisrICAgICAgc2VydmVyX3JlcXVlc3RfaGRy
 X2J1Zl8oTlVMTCksIHNlcnZlcl9yZXF1ZXN0X2hkcl9sb2NfKE5VTEwpLAorKyAgICAgIHNlcnZl
 cl9yZXNwb25zZV9oZHJfYnVmXyhOVUxMKSwgc2VydmVyX3Jlc3BvbnNlX2hkcl9sb2NfKE5VTEwp
 LAorKyAgICAgIGNsaWVudF9yZXNwb25zZV9oZHJfYnVmXyhOVUxMKSwgY2xpZW50X3Jlc3BvbnNl
 X2hkcl9sb2NfKE5VTEwpCisrICB7IH07CisrfTsKKysKKytUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
 b24odm9pZCAqcmF3X3R4bikgeworKyAgVFNIdHRwVHhuIHR4biA9IHN0YXRpY19jYXN0PFRTSHR0
 cFR4bj4ocmF3X3R4bik7CisrICBUU01CdWZmZXIgaGRyX2J1ZjsKKysgIFRTTUxvYyBoZHJfbG9j
 OworKyAgVFNIdHRwVHhuQ2xpZW50UmVxR2V0KHR4biwgJmhkcl9idWYsICZoZHJfbG9jKTsKKysg
 IGlmICghaGRyX2J1ZiB8fCAhaGRyX2xvYykgeworKyAgICBMT0dfRVJST1IoIlRTSHR0cFR4bkNs
 aWVudFJlcUdldCB0c2h0dHB0eG49JXAgcmV0dXJuZWQgYSBudWxsIGhkcl9idWY9JXAgb3IgaGRy
 X2xvYz0lcC4iLCB0eG4sIGhkcl9idWYsIGhkcl9sb2MpOworKyAgfQorKworKyAgc3RhdGVfID0g
 bmV3IFRyYW5zYWN0aW9uU3RhdGUodHhuLCBoZHJfYnVmLCBoZHJfbG9jKTsKKysgIExPR19ERUJV
 RygiVHJhbnNhY3Rpb24gdHNodHRwdHhuPSVwIGNvbnN0cnVjdGluZyBUcmFuc2FjdGlvbiBvYmpl
 Y3QgJXAsIGNsaWVudCByZXEgaGRyX2J1Zj0lcCwgY2xpZW50IHJlcSBoZHJfbG9jPSVwIiwKKysg
 ICAgICB0eG4sIHRoaXMsIGhkcl9idWYsIGhkcl9sb2MpOworK30KKysKKytUcmFuc2FjdGlvbjo6
 flRyYW5zYWN0aW9uKCkgeworKyAgTE9HX0RFQlVHKCJUcmFuc2FjdGlvbiB0c2h0dHB0eG49JXAg
 ZGVzdHJveWluZyBUcmFuc2FjdGlvbiBvYmplY3QgJXAiLCBzdGF0ZV8tPnR4bl8sIHRoaXMpOwor
 KyAgc3RhdGljIGNvbnN0IFRTTUxvYyBOVUxMX1BBUkVOVF9MT0MgPSBOVUxMOworKyAgVFNIYW5k
 bGVNTG9jUmVsZWFzZShzdGF0ZV8tPmNsaWVudF9yZXF1ZXN0X2hkcl9idWZfLCBOVUxMX1BBUkVO
 VF9MT0MsIHN0YXRlXy0+Y2xpZW50X3JlcXVlc3RfaGRyX2xvY18pOworKyAgaWYgKHN0YXRlXy0+
 c2VydmVyX3JlcXVlc3RfaGRyX2J1Zl8gJiYgc3RhdGVfLT5zZXJ2ZXJfcmVxdWVzdF9oZHJfbG9j
 XykgeworKyAgICBMT0dfREVCVUcoIlJlbGVhc2luZyBzZXJ2ZXIgcmVxdWVzdCIpOworKyAgICBU
 U0hhbmRsZU1Mb2NSZWxlYXNlKHN0YXRlXy0+c2VydmVyX3JlcXVlc3RfaGRyX2J1Zl8sIE5VTExf
 UEFSRU5UX0xPQywgc3RhdGVfLT5zZXJ2ZXJfcmVxdWVzdF9oZHJfbG9jXyk7CisrICB9CisrICBp
 ZiAoc3RhdGVfLT5zZXJ2ZXJfcmVzcG9uc2VfaGRyX2J1Zl8gJiYgc3RhdGVfLT5zZXJ2ZXJfcmVz
 cG9uc2VfaGRyX2xvY18pIHsKKysgICAgTE9HX0RFQlVHKCJSZWxlYXNpbmcgc2VydmVyIHJlc3Bv
 bnNlIik7CisrICAgIFRTSGFuZGxlTUxvY1JlbGVhc2Uoc3RhdGVfLT5zZXJ2ZXJfcmVzcG9uc2Vf
 aGRyX2J1Zl8sIE5VTExfUEFSRU5UX0xPQywgc3RhdGVfLT5zZXJ2ZXJfcmVzcG9uc2VfaGRyX2xv
 Y18pOworKyAgfQorKyAgaWYgKHN0YXRlXy0+Y2xpZW50X3Jlc3BvbnNlX2hkcl9idWZfICYmIHN0
 YXRlXy0+Y2xpZW50X3Jlc3BvbnNlX2hkcl9sb2NfKSB7CisrICAgIExPR19ERUJVRygiUmVsZWFz
 aW5nIGNsaWVudCByZXNwb25zZSIpOworKyAgICBUU0hhbmRsZU1Mb2NSZWxlYXNlKHN0YXRlXy0+
 Y2xpZW50X3Jlc3BvbnNlX2hkcl9idWZfLCBOVUxMX1BBUkVOVF9MT0MsIHN0YXRlXy0+Y2xpZW50
 X3Jlc3BvbnNlX2hkcl9sb2NfKTsKKysgIH0KKysgIGRlbGV0ZSBzdGF0ZV87CisrfQorKworK3Zv
 aWQgVHJhbnNhY3Rpb246OnJlc3VtZSgpIHsKKysgIFRTSHR0cFR4blJlZW5hYmxlKHN0YXRlXy0+
 dHhuXywgc3RhdGljX2Nhc3Q8VFNFdmVudD4oVFNfRVZFTlRfSFRUUF9DT05USU5VRSkpOworK30K
 KysKKyt2b2lkIFRyYW5zYWN0aW9uOjplcnJvcigpIHsKKysgIExPR19ERUJVRygiVHJhbnNhY3Rp
 b24gdHNodHRwdHhuPSVwIHJlZW5hYmxpbmcgdG8gZXJyb3Igc3RhdGUiLCBzdGF0ZV8tPnR4bl8p
 OworKyAgVFNIdHRwVHhuUmVlbmFibGUoc3RhdGVfLT50eG5fLCBzdGF0aWNfY2FzdDxUU0V2ZW50
 PihUU19FVkVOVF9IVFRQX0VSUk9SKSk7CisrfQorKworK3ZvaWQgVHJhbnNhY3Rpb246OmVycm9y
 KGNvbnN0IHN0ZDo6c3RyaW5nICZwYWdlKSB7CisrICBzZXRFcnJvckJvZHkocGFnZSk7CisrICBl
 cnJvcigpOyAvLyBmaW5hbGx5LCByZWVuYWJsZSB3aXRoIEhUVFBfRVJST1IKKyt9CisrCisrdm9p
 ZCBUcmFuc2FjdGlvbjo6c2V0RXJyb3JCb2R5KGNvbnN0IHN0ZDo6c3RyaW5nICZwYWdlKSB7Cisr
 ICBMT0dfREVCVUcoIlRyYW5zYWN0aW9uIHRzaHR0cHR4bj0lcCBzZXR0aW5nIGVycm9yIGJvZHkg
 cGFnZTogJXMiLCBzdGF0ZV8tPnR4bl8sIHBhZ2UuY19zdHIoKSk7CisrICBjaGFyICpyZXNfYmR5
 ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KFRTbWFsbG9jKHBhZ2UubGVuZ3RoKCkgKyAxKSk7CisrICBz
 dHJuY3B5KHJlc19iZHksIHBhZ2UuY19zdHIoKSwgcGFnZS5sZW5ndGgoKSk7CisrICByZXNfYmR5
 W3BhZ2UubGVuZ3RoKCldID0gJ1wwJzsKKysKKysgIHN0ZDo6c3RyaW5nIHN0cl9jb250ZW50X3R5
 cGUgPSAidGV4dC9odG1sIjsKKysgIGNoYXIgKmNvbnRlbnRfdHlwZSA9IHN0YXRpY19jYXN0PGNo
 YXIqPihUU21hbGxvYyhzdHJfY29udGVudF90eXBlLmxlbmd0aCgpICsgMSkpOworKyAgc3RybmNw
 eShjb250ZW50X3R5cGUsIHN0cl9jb250ZW50X3R5cGUuY19zdHIoKSwgc3RyX2NvbnRlbnRfdHlw
 ZS5sZW5ndGgoKSk7CisrICBjb250ZW50X3R5cGVbc3RyX2NvbnRlbnRfdHlwZS5sZW5ndGgoKV0g
 PSAnXDAnOworKworKyAgVFNIdHRwVHhuRXJyb3JCb2R5U2V0KHN0YXRlXy0+dHhuXywgcmVzX2Jk
 eSwgcGFnZS5sZW5ndGgoKSwgY29udGVudF90eXBlKTsKKyt9CisrCisrYm9vbCBUcmFuc2FjdGlv
 bjo6aXNJbnRlcm5hbFJlcXVlc3QoKSBjb25zdCB7CisrICByZXR1cm4gVFNIdHRwSXNJbnRlcm5h
 bFJlcXVlc3Qoc3RhdGVfLT50eG5fKSA9PSBUU19TVUNDRVNTOworK30KKysKKyt2b2lkICpUcmFu
 c2FjdGlvbjo6Z2V0QXRzSGFuZGxlKCkgY29uc3QgeworKyAgcmV0dXJuIHN0YXRpY19jYXN0PHZv
 aWQgKj4oc3RhdGVfLT50eG5fKTsKKyt9CisrCisrY29uc3Qgc3RkOjpsaXN0PGF0c2NwcGFwaTo6
 VHJhbnNhY3Rpb25QbHVnaW4gKj4gJlRyYW5zYWN0aW9uOjpnZXRQbHVnaW5zKCkgY29uc3Qgewor
 KyAgcmV0dXJuIHN0YXRlXy0+cGx1Z2luc187CisrfQorKworK3ZvaWQgVHJhbnNhY3Rpb246OmFk
 ZFBsdWdpbihUcmFuc2FjdGlvblBsdWdpbiAqcGx1Z2luKSB7CisrICBMT0dfREVCVUcoIlRyYW5z
 YWN0aW9uIHRzaHR0cHR4bj0lcCByZWdpc3RlcmluZyBuZXcgVHJhbnNhY3Rpb25QbHVnaW4gJXAu
 Iiwgc3RhdGVfLT50eG5fLCBwbHVnaW4pOworKyAgc3RhdGVfLT5wbHVnaW5zXy5wdXNoX2JhY2so
 cGx1Z2luKTsKKyt9CisrCisrc2hhcmVkX3B0cjxUcmFuc2FjdGlvbjo6Q29udGV4dFZhbHVlPiBU
 cmFuc2FjdGlvbjo6Z2V0Q29udGV4dFZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXkpIHsKKysg
 IHNoYXJlZF9wdHI8VHJhbnNhY3Rpb246OkNvbnRleHRWYWx1ZT4gcmV0dXJuX2NvbnRleHRfdmFs
 dWU7CisrICBtYXA8c3RyaW5nLCBzaGFyZWRfcHRyPFRyYW5zYWN0aW9uOjpDb250ZXh0VmFsdWU+
 ID46Oml0ZXJhdG9yIGl0ZXIgPSBzdGF0ZV8tPmNvbnRleHRfdmFsdWVzXy5maW5kKGtleSk7Cisr
 ICBpZiAoaXRlciAhPSBzdGF0ZV8tPmNvbnRleHRfdmFsdWVzXy5lbmQoKSkgeworKyAgICByZXR1
 cm5fY29udGV4dF92YWx1ZSA9IGl0ZXItPnNlY29uZDsKKysgIH0KKysKKysgIHJldHVybiByZXR1
 cm5fY29udGV4dF92YWx1ZTsKKyt9CisrCisrdm9pZCBUcmFuc2FjdGlvbjo6c2V0Q29udGV4dFZh
 bHVlKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXksIHNoYXJlZF9wdHI8VHJhbnNhY3Rpb246OkNvbnRl
 eHRWYWx1ZT4gdmFsdWUpIHsKKysgIHN0YXRlXy0+Y29udGV4dF92YWx1ZXNfW2tleV0gPSB2YWx1
 ZTsKKyt9CisrCisrQ2xpZW50UmVxdWVzdCAmVHJhbnNhY3Rpb246OmdldENsaWVudFJlcXVlc3Qo
 KSB7CisrICByZXR1cm4gc3RhdGVfLT5jbGllbnRfcmVxdWVzdF87CisrfQorKworK1JlcXVlc3Qg
 JlRyYW5zYWN0aW9uOjpnZXRTZXJ2ZXJSZXF1ZXN0KCkgeworKyAgcmV0dXJuIHN0YXRlXy0+c2Vy
 dmVyX3JlcXVlc3RfOworK30KKysKKytSZXNwb25zZSAmVHJhbnNhY3Rpb246OmdldFNlcnZlclJl
 c3BvbnNlKCkgeworKyAgcmV0dXJuIHN0YXRlXy0+c2VydmVyX3Jlc3BvbnNlXzsKKyt9CisrCisr
 UmVzcG9uc2UgJlRyYW5zYWN0aW9uOjpnZXRDbGllbnRSZXNwb25zZSgpIHsKKysgIHJldHVybiBz
 dGF0ZV8tPmNsaWVudF9yZXNwb25zZV87CisrfQorKworK3N0cmluZyBUcmFuc2FjdGlvbjo6Z2V0
 RWZmZWN0aXZlVXJsKCkgeworKwlzdHJpbmcgcmV0X3ZhbDsKKysJaW50IGxlbmd0aCA9IDA7Cisr
 CWNoYXIgKmJ1ZiA9IFRTSHR0cFR4bkVmZmVjdGl2ZVVybFN0cmluZ0dldChzdGF0ZV8tPnR4bl8s
 ICZsZW5ndGgpOworKwlpZiAoYnVmICYmIGxlbmd0aCkgeworKwkJcmV0X3ZhbC5hc3NpZ24oYnVm
 LCBsZW5ndGgpOworKwl9CisrCisrCWlmIChidWYpCisrCQlUU2ZyZWUoYnVmKTsKKysKKysJcmV0
 dXJuIHJldF92YWw7CisrfQorKworK2Jvb2wgVHJhbnNhY3Rpb246OnNldENhY2hlVXJsKGNvbnN0
 IHN0cmluZyAmY2FjaGVfdXJsKSB7CisrCVRTUmV0dXJuQ29kZSByZXMgPSBUU0NhY2hlVXJsU2V0
 KHN0YXRlXy0+dHhuXywgY2FjaGVfdXJsLmNfc3RyKCksIGNhY2hlX3VybC5sZW5ndGgoKSk7Cisr
 ICAgIHJldHVybiAocmVzID09IFRTX1NVQ0NFU1MpOworK30KKysKKytjb25zdCBzb2NrYWRkciAq
 VHJhbnNhY3Rpb246OmdldEluY29taW5nQWRkcmVzcygpIGNvbnN0IHsKKysgIHJldHVybiBUU0h0
 dHBUeG5JbmNvbWluZ0FkZHJHZXQoc3RhdGVfLT50eG5fKTsKKyt9CisrCisrY29uc3Qgc29ja2Fk
 ZHIgKlRyYW5zYWN0aW9uOjpnZXRDbGllbnRBZGRyZXNzKCkgY29uc3QgeworKyAgcmV0dXJuIFRT
 SHR0cFR4bkNsaWVudEFkZHJHZXQoc3RhdGVfLT50eG5fKTsKKyt9CisrCisrY29uc3Qgc29ja2Fk
 ZHIgKlRyYW5zYWN0aW9uOjpnZXROZXh0SG9wQWRkcmVzcygpIGNvbnN0IHsKKysgIHJldHVybiBU
 U0h0dHBUeG5OZXh0SG9wQWRkckdldChzdGF0ZV8tPnR4bl8pOworK30KKysKKytjb25zdCBzb2Nr
 YWRkciAqVHJhbnNhY3Rpb246OmdldFNlcnZlckFkZHJlc3MoKSBjb25zdCB7CisrICByZXR1cm4g
 VFNIdHRwVHhuU2VydmVyQWRkckdldChzdGF0ZV8tPnR4bl8pOworK30KKysKKytib29sIFRyYW5z
 YWN0aW9uOjpzZXRTZXJ2ZXJBZGRyZXNzKGNvbnN0IHNvY2thZGRyICpzb2NrYWRkcmVzcykgewor
 KyAgcmV0dXJuIFRTSHR0cFR4blNlcnZlckFkZHJTZXQoc3RhdGVfLT50eG5fLHNvY2thZGRyZXNz
 KSA9PSBUU19TVUNDRVNTOworK30KKysKKytib29sIFRyYW5zYWN0aW9uOjpzZXRJbmNvbWluZ1Bv
 cnQodWludDE2X3QgcG9ydCkgeworKyAgVFNIdHRwVHhuQ2xpZW50SW5jb21pbmdQb3J0U2V0KHN0
 YXRlXy0+dHhuXywgcG9ydCk7CisrICByZXR1cm4gdHJ1ZTsgLy8gSW4gcmVhbGl0eSBUU0h0dHBU
 eG5DbGllbnRJbmNvbWluZ1BvcnRTZXQgc2hvdWxkIHJldHVybiBTVUNDRVNTIG9yIEVSUk9SLgor
 K30KKysKKyt2b2lkIFRyYW5zYWN0aW9uOjpzZXRUaW1lb3V0KFRyYW5zYWN0aW9uOjpUaW1lb3V0
 VHlwZSB0eXBlLCBpbnQgdGltZV9tcykgeworKyAgc3dpdGNoICh0eXBlKSB7CisrICAgIGNhc2Ug
 VElNRU9VVF9ETlM6CisrICAgICAgVFNIdHRwVHhuRE5TVGltZW91dFNldChzdGF0ZV8tPnR4bl8s
 IHRpbWVfbXMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFRJTUVPVVRfQ09OTkVDVDoKKysg
 ICAgICBUU0h0dHBUeG5Db25uZWN0VGltZW91dFNldChzdGF0ZV8tPnR4bl8sIHRpbWVfbXMpOwor
 KyAgICAgIGJyZWFrOworKyAgICBjYXNlIFRJTUVPVVRfTk9fQUNUSVZJVFk6CisrICAgICAgVFNI
 dHRwVHhuTm9BY3Rpdml0eVRpbWVvdXRTZXQoc3RhdGVfLT50eG5fLCB0aW1lX21zKTsKKysgICAg
 ICBicmVhazsKKysgICAgY2FzZSBUSU1FT1VUX0FDVElWRToKKysgICAgICBUU0h0dHBUeG5BY3Rp
 dmVUaW1lb3V0U2V0KHN0YXRlXy0+dHhuXywgdGltZV9tcyk7CisrICAgICAgYnJlYWs7CisrICAg
 IGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICB9CisrfQorKworK25hbWVzcGFjZSB7CisrCisr
 LyoqCisrICogaW5pdGlhbGl6ZUhhbmRsZXMgaXMgYSBjb252aW5pZW5jZSBmdW5jdG9yIHRoYXQg
 dGFrZXMgYSBwb2ludGVyIHRvIGEgVFMgRnVuY3Rpb24gdGhhdAorKyAqIHdpbGwgcmV0dXJuIHRo
 ZSBUU01CdWZmZXIgYW5kIFRTTUxvYyBmb3IgYSBnaXZlbiBzZXJ2ZXIgcmVxdWVzdC9yZXNwb25z
 ZSBvciBjbGllbnQvcmVxdWVzdCByZXNwb25zZQorKyAqCisrICogQHBhcmFtIGNvbnN0cnVjdG9y
 IHRha2VzIGEgZnVuY3Rpb24gcG9pbnRlciBvZiB0eXBlIEdldHRlckZ1bmN0aW9uCisrICogQHBh
 cmFtIHR4biBhIFRTSHR0cFR4bgorKyAqIEBwYXJhbSBoZHJfYnVmIHRoZSBhZGRyZXNzIHdoZXJl
 IHRoZSBoZHIgYnVmIHdpbGwgYmUgc3RvcmVkCisrICogQHBhcmFtIGhkcl9sb2MgdGhlIGFkZHJl
 c3Mgd2hlcmUgdGhlIG1lbSBsb2Mgd2lsbCBiZSBzdG9yZWRzCisrICogQHBhcmFtIG5hbWUgbmFt
 ZSBvZiB0aGUgZW50aXR5IC0gdXNlZCBmb3IgbG9nZ2luZworKyAqLworK2NsYXNzIGluaXRpYWxp
 emVIYW5kbGVzIHsKKytwdWJsaWM6CisrICB0eXBlZGVmIFRTUmV0dXJuQ29kZSAoKkdldHRlckZ1
 bmN0aW9uKShUU0h0dHBUeG4sIFRTTUJ1ZmZlciAqLCBUU01Mb2MgKik7CisrICBpbml0aWFsaXpl
 SGFuZGxlcyhHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIpIDogZ2V0dGVyXyhnZXR0ZXIpIHsgfQorKyAg
 Ym9vbCBvcGVyYXRvcigpKFRTSHR0cFR4biB0eG4sIFRTTUJ1ZmZlciAmaGRyX2J1ZiwgVFNNTG9j
 ICZoZHJfbG9jLCBjb25zdCBjaGFyICpoYW5kbGVzX25hbWUpIHsKKysgICAgaWYgKCFoZHJfYnVm
 ICYmICFoZHJfbG9jKSB7CisrICAgICAgaWYgKGdldHRlcl8odHhuLCAmaGRyX2J1ZiwgJmhkcl9s
 b2MpID09IFRTX1NVQ0NFU1MpIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgIH0KKysg
 ICAgICBlbHNlIHsKKysgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCAlcyIsIGhhbmRs
 ZXNfbmFtZSk7CisrICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgIExPR19FUlJP
 UigiJXMgYWxyZWFkeSBpbml0aWFsaXplZCIsIGhhbmRsZXNfbmFtZSk7CisrICAgIH0KKysgICAg
 cmV0dXJuIGZhbHNlOworKyAgfQorK3ByaXZhdGU6CisrICBHZXR0ZXJGdW5jdGlvbiBnZXR0ZXJf
 OworK307CisrCisrfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrdm9pZCBUcmFuc2FjdGlv
 bjo6aW5pdFNlcnZlclJlcXVlc3QoKSB7CisrICBzdGF0aWMgaW5pdGlhbGl6ZUhhbmRsZXMgaW5p
 dGlhbGl6ZVNlcnZlclJlcXVlc3RIYW5kbGVzKFRTSHR0cFR4blNlcnZlclJlcUdldCk7CisrICBp
 ZiAoaW5pdGlhbGl6ZVNlcnZlclJlcXVlc3RIYW5kbGVzKHN0YXRlXy0+dHhuXywgc3RhdGVfLT5z
 ZXJ2ZXJfcmVxdWVzdF9oZHJfYnVmXywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgc3RhdGVfLT5zZXJ2ZXJfcmVxdWVzdF9oZHJfbG9jXywgInNlcnZlciByZXF1ZXN0Iikp
 IHsKKysgICAgTE9HX0RFQlVHKCJJbml0aWFsaXppbmcgc2VydmVyIHJlcXVlc3QiKTsKKysgICAg
 c3RhdGVfLT5zZXJ2ZXJfcmVxdWVzdF8uaW5pdChzdGF0ZV8tPnNlcnZlcl9yZXF1ZXN0X2hkcl9i
 dWZfLCBzdGF0ZV8tPnNlcnZlcl9yZXF1ZXN0X2hkcl9sb2NfKTsKKysgIH0KKyt9CisrCisrdm9p
 ZCBUcmFuc2FjdGlvbjo6aW5pdFNlcnZlclJlc3BvbnNlKCkgeworKyAgc3RhdGljIGluaXRpYWxp
 emVIYW5kbGVzIGluaXRpYWxpemVTZXJ2ZXJSZXNwb25zZUhhbmRsZXMoVFNIdHRwVHhuU2VydmVy
 UmVzcEdldCk7CisrICBpZiAoaW5pdGlhbGl6ZVNlcnZlclJlc3BvbnNlSGFuZGxlcyhzdGF0ZV8t
 PnR4bl8sIHN0YXRlXy0+c2VydmVyX3Jlc3BvbnNlX2hkcl9idWZfLAorKyAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfLT5zZXJ2ZXJfcmVzcG9uc2VfaGRyX2xvY18s
 ICJzZXJ2ZXIgcmVzcG9uc2UiKSkgeworKyAgICBMT0dfREVCVUcoIkluaXRpYWxpemluZyBzZXJ2
 ZXIgcmVzcG9uc2UiKTsKKysgICAgc3RhdGVfLT5zZXJ2ZXJfcmVzcG9uc2VfLmluaXQoc3RhdGVf
 LT5zZXJ2ZXJfcmVzcG9uc2VfaGRyX2J1Zl8sIHN0YXRlXy0+c2VydmVyX3Jlc3BvbnNlX2hkcl9s
 b2NfKTsKKysgIH0KKyt9CisrCisrdm9pZCBUcmFuc2FjdGlvbjo6aW5pdENsaWVudFJlc3BvbnNl
 KCkgeworKyAgc3RhdGljIGluaXRpYWxpemVIYW5kbGVzIGluaXRpYWxpemVDbGllbnRSZXNwb25z
 ZUhhbmRsZXMoVFNIdHRwVHhuQ2xpZW50UmVzcEdldCk7CisrICBpZiAoaW5pdGlhbGl6ZUNsaWVu
 dFJlc3BvbnNlSGFuZGxlcyhzdGF0ZV8tPnR4bl8sIHN0YXRlXy0+Y2xpZW50X3Jlc3BvbnNlX2hk
 cl9idWZfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfLT5j
 bGllbnRfcmVzcG9uc2VfaGRyX2xvY18sICJjbGllbnQgcmVzcG9uc2UiKSkgeworKyAgICBMT0df
 REVCVUcoIkluaXRpYWxpemluZyBjbGllbnQgcmVzcG9uc2UiKTsKKysgICAgc3RhdGVfLT5jbGll
 bnRfcmVzcG9uc2VfLmluaXQoc3RhdGVfLT5jbGllbnRfcmVzcG9uc2VfaGRyX2J1Zl8sIHN0YXRl
 Xy0+Y2xpZW50X3Jlc3BvbnNlX2hkcl9sb2NfKTsKKysgIH0KKyt9CitkaWZmIC1ydU4gbGliL2F0
 c2NwcGFwaS9zcmMvVHJhbnNhY3Rpb25QbHVnaW4uY2MgbGliL2F0c2NwcGFwaS9zcmMvVHJhbnNh
 Y3Rpb25QbHVnaW4uY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9UcmFuc2FjdGlvblBsdWdpbi5j
 YwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkv
 c3JjL1RyYW5zYWN0aW9uUGx1Z2luLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAzNTMyMjg0ICsw
 ODAwCitAQCAtMCwwICsxLDgzIEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNv
 ZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9y
 IGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVk
 IHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcg
 Y29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5
 b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5z
 ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3
 aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
 CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisr
 CisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
 aXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
 TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUg
 dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
 bnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioK
 KysgKiBAZmlsZSBUcmFuc2FjdGlvblBsdWdpbi5jYworKyAqLworKworKyNpbmNsdWRlICJhdHNj
 cHBhcGkvVHJhbnNhY3Rpb25QbHVnaW4uaCIKKysjaW5jbHVkZSA8dHMvdHMuaD4KKysjaW5jbHVk
 ZSA8Y3N0ZGRlZj4KKysjaW5jbHVkZSA8Y2Fzc2VydD4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL011
 dGV4LmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS9zaGFyZWRfcHRyLmgiCisrI2luY2x1ZGUgInV0
 aWxzX2ludGVybmFsLmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS9ub25jb3B5YWJsZS5oIgorKyNp
 bmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFw
 aTsKKyt1c2luZyBhdHNjcHBhcGk6OlRyYW5zYWN0aW9uUGx1Z2luOworKworKy8qKgorKyAqIEBw
 cml2YXRlCisrICovCisrc3RydWN0IGF0c2NwcGFwaTo6VHJhbnNhY3Rpb25QbHVnaW5TdGF0ZTog
 bm9uY29weWFibGUgeworKyAgVFNDb250IGNvbnRfOworKyAgVFNIdHRwVHhuIGF0c190eG5faGFu
 ZGxlXzsKKysgIHNoYXJlZF9wdHI8TXV0ZXg+IG11dGV4XzsKKysgIFRyYW5zYWN0aW9uUGx1Z2lu
 U3RhdGUoVFNIdHRwVHhuIGF0c190eG5faGFuZGxlKSA6IGF0c190eG5faGFuZGxlXyhhdHNfdHhu
 X2hhbmRsZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBtdXRleF8obmV3IE11dGV4KE11dGV4OjpUWVBFX1JFQ1VSU0lWRSkpIHsgfQorK307
 CisrCisrbmFtZXNwYWNlIHsKKysKKytzdGF0aWMgaW50IGhhbmRsZVRyYW5zYWN0aW9uUGx1Z2lu
 RXZlbnRzKFRTQ29udCBjb250LCBUU0V2ZW50IGV2ZW50LCB2b2lkICplZGF0YSkgeworKyAgVFNI
 dHRwVHhuIHR4biA9IHN0YXRpY19jYXN0PFRTSHR0cFR4bj4oZWRhdGEpOworKyAgVHJhbnNhY3Rp
 b25QbHVnaW4gKnBsdWdpbiA9IHN0YXRpY19jYXN0PFRyYW5zYWN0aW9uUGx1Z2luICo+KFRTQ29u
 dERhdGFHZXQoY29udCkpOworKyAgTE9HX0RFQlVHKCJjb250PSVwLCBldmVudD0lZCwgdHNodHRw
 dHhuPSVwLCBwbHVnaW49JXAiLCBjb250LCBldmVudCwgZWRhdGEsIHBsdWdpbik7CisrICBhdHNj
 cHBhcGk6OnV0aWxzOjppbnRlcm5hbDo6aW52b2tlUGx1Z2luRm9yRXZlbnQocGx1Z2luLCB0eG4s
 IGV2ZW50KTsKKysgIHJldHVybiAwOworK30KKysKKyt9IC8qIGFub255bW91cyBuYW1lc3BhY2Ug
 Ki8KKysKKytUcmFuc2FjdGlvblBsdWdpbjo6VHJhbnNhY3Rpb25QbHVnaW4oVHJhbnNhY3Rpb24g
 JnRyYW5zYWN0aW9uKSB7CisrICBzdGF0ZV8gPSBuZXcgVHJhbnNhY3Rpb25QbHVnaW5TdGF0ZShz
 dGF0aWNfY2FzdDxUU0h0dHBUeG4+KHRyYW5zYWN0aW9uLmdldEF0c0hhbmRsZSgpKSk7CisrICBU
 U011dGV4IG11dGV4ID0gTlVMTDsKKysgIHN0YXRlXy0+Y29udF8gPSBUU0NvbnRDcmVhdGUoaGFu
 ZGxlVHJhbnNhY3Rpb25QbHVnaW5FdmVudHMsIG11dGV4KTsKKysgIFRTQ29udERhdGFTZXQoc3Rh
 dGVfLT5jb250Xywgc3RhdGljX2Nhc3Q8dm9pZCAqPih0aGlzKSk7CisrICBMT0dfREVCVUcoIkNy
 ZWF0aW5nIG5ldyBUcmFuc2FjdGlvblBsdWdpbj0lcCB0c2h0dHB0eG49JXAsIGNvbnQ9JXAiLCB0
 aGlzLCBzdGF0ZV8tPmF0c190eG5faGFuZGxlXywKKysgICAgICAgICAgICBzdGF0ZV8tPmNvbnRf
 KTsKKyt9CisrCisrc2hhcmVkX3B0cjxNdXRleD4gVHJhbnNhY3Rpb25QbHVnaW46OmdldE11dGV4
 KCkgeworKyAgcmV0dXJuIHN0YXRlXy0+bXV0ZXhfOworK30KKysKKytUcmFuc2FjdGlvblBsdWdp
 bjo6flRyYW5zYWN0aW9uUGx1Z2luKCkgeworKyAgTE9HX0RFQlVHKCJEZXN0cm95aW5nIFRyYW5z
 YWN0aW9uUGx1Z2luPSVwIiwgdGhpcyk7CisrICBUU0NvbnREZXN0cm95KHN0YXRlXy0+Y29udF8p
 OworKyAgZGVsZXRlIHN0YXRlXzsKKyt9CisrCisrdm9pZCBUcmFuc2FjdGlvblBsdWdpbjo6cmVn
 aXN0ZXJIb29rKFBsdWdpbjo6SG9va1R5cGUgaG9va190eXBlKSB7CisrICBMT0dfREVCVUcoIlRy
 YW5zYWN0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCByZWdpc3RlcmluZyBob29rX3R5cGU9JWQg
 WyVzXSIsIHRoaXMsIHN0YXRlXy0+YXRzX3R4bl9oYW5kbGVfLAorKyAgICAgICAgICAgIGhvb2tf
 dHlwZSwgSE9PS19UWVBFX1NUUklOR1NbaG9va190eXBlXS5jX3N0cigpKTsKKysgIFRTSHR0cEhv
 b2tJRCBob29rX2lkID0gYXRzY3BwYXBpOjp1dGlsczo6aW50ZXJuYWw6OmNvbnZlcnRJbnRlcm5h
 bEhvb2tUb1RzSG9vayhob29rX3R5cGUpOworKyAgVFNIdHRwVHhuSG9va0FkZChzdGF0ZV8tPmF0
 c190eG5faGFuZGxlXywgaG9va19pZCwgc3RhdGVfLT5jb250Xyk7CisrfQorZGlmZiAtcnVOIGxp
 Yi9hdHNjcHBhcGkvc3JjL1RyYW5zZm9ybWF0aW9uUGx1Z2luLmNjIGxpYi9hdHNjcHBhcGkvc3Jj
 L1RyYW5zZm9ybWF0aW9uUGx1Z2luLmNjCistLS0gbGliL2F0c2NwcGFwaS9zcmMvVHJhbnNmb3Jt
 YXRpb25QbHVnaW4uY2MJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBs
 aWIvYXRzY3BwYXBpL3NyYy9UcmFuc2Zvcm1hdGlvblBsdWdpbi5jYwkyMDEzLTExLTExIDE0OjAz
 OjEyLjcwMzUzMjI4NCArMDgwMAorQEAgLTAsMCArMSwzMTkgQEAKKysvKioKKysgIExpY2Vuc2Vk
 IHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9y
 IG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmls
 ZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp
 b24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0
 aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
 ICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
 IGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
 b2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
 ZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
 ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
 ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VU
 IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
 aW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
 LgorKyAqLworKworKy8qKgorKyAqIEBmaWxlIFRyYW5zZm9ybWF0aW9uUGx1Z2luLmNjCisrICov
 CisrCisrI2luY2x1ZGUgImF0c2NwcGFwaS9UcmFuc2Zvcm1hdGlvblBsdWdpbi5oIgorKworKyNp
 bmNsdWRlIDx0cy90cy5oPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorKyNpbmNsdWRlICJ1dGlsc19p
 bnRlcm5hbC5oIgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrI2luY2x1ZGUgImF0
 c2NwcGFwaS9ub25jb3B5YWJsZS5oIgorKworKyNpZm5kZWYgSU5UNjRfTUFYCisrI2RlZmluZSBJ
 TlQ2NF9NQVggKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCkKKysjZW5kaWYKKysKKyt1c2luZyBuYW1l
 c3BhY2UgYXRzY3BwYXBpOworK3VzaW5nIGF0c2NwcGFwaTo6VHJhbnNmb3JtYXRpb25QbHVnaW47
 CisrCisrLyoqCisrICogQHByaXZhdGUKKysgKi8KKytzdHJ1Y3QgYXRzY3BwYXBpOjpUcmFuc2Zv
 cm1hdGlvblBsdWdpblN0YXRlOiBub25jb3B5YWJsZSB7CisrICBUU1ZDb25uIHZjb25uXzsKKysg
 IFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbl87CisrICBUcmFuc2Zvcm1hdGlvblBsdWdpbiAmdHJh
 bnNmb3JtYXRpb25fcGx1Z2luXzsKKysgIFRyYW5zZm9ybWF0aW9uUGx1Z2luOjpUeXBlIHR5cGVf
 OworKyAgVFNWSU8gb3V0cHV0X3Zpb187IC8vIHRoaXMgZ2V0cyBpbml0aWFsaXplZCBvbiBhbiBv
 dXRwdXQoKS4KKysgIFRTSHR0cFR4biB0eG5fOworKyAgVFNJT0J1ZmZlciBvdXRwdXRfYnVmZmVy
 XzsKKysgIFRTSU9CdWZmZXJSZWFkZXIgb3V0cHV0X2J1ZmZlcl9yZWFkZXJfOworKyAgaW50NjRf
 dCBieXRlc193cml0dGVuXzsKKysKKysgIC8vIFdlIGNhbiBvbmx5IHNlbmQgYSBzaW5nbGUgV1JJ
 VEVfQ09NUExFVEUgZXZlbiB0aG91Z2gKKysgIC8vIHdlIG1heSByZWNlaXZlIGFuIGltbWVkaWF0
 ZSBldmVudCBhZnRlciB3ZSd2ZSBzZW50IGEKKysgIC8vIHdyaXRlIGNvbXBsZXRlLCBzbyB3ZSds
 bCBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3ZlCisrICAvLyBzZW50IHRoZSBpbnB1
 dCBlbmQgb3VyIHdyaXRlIGNvbXBsdGUuCisrICBib29sIGlucHV0X2NvbXBsZXRlX2Rpc3BhdGNo
 ZWRfOworKworKyAgVHJhbnNmb3JtYXRpb25QbHVnaW5TdGF0ZShhdHNjcHBhcGk6OlRyYW5zYWN0
 aW9uICZ0cmFuc2FjdGlvbiwgVHJhbnNmb3JtYXRpb25QbHVnaW4gJnRyYW5zZm9ybWF0aW9uX3Bs
 dWdpbiwKKysgICAgICBUcmFuc2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0eXBlLCBUU0h0dHBUeG4g
 dHhuKQorKyAgICA6IHZjb25uXyhOVUxMKSwgdHJhbnNhY3Rpb25fKHRyYW5zYWN0aW9uKSwgdHJh
 bnNmb3JtYXRpb25fcGx1Z2luXyh0cmFuc2Zvcm1hdGlvbl9wbHVnaW4pLCB0eXBlXyh0eXBlKSwK
 KysgICAgICBvdXRwdXRfdmlvXyhOVUxMKSwgdHhuXyh0eG4pLCBvdXRwdXRfYnVmZmVyXyhOVUxM
 KSwgb3V0cHV0X2J1ZmZlcl9yZWFkZXJfKE5VTEwpLCBieXRlc193cml0dGVuXygwKSwKKysgICAg
 ICBpbnB1dF9jb21wbGV0ZV9kaXNwYXRjaGVkXyhmYWxzZSkgeworKyAgICBvdXRwdXRfYnVmZmVy
 XyA9IFRTSU9CdWZmZXJDcmVhdGUoKTsKKysgICAgb3V0cHV0X2J1ZmZlcl9yZWFkZXJfID0gVFNJ
 T0J1ZmZlclJlYWRlckFsbG9jKG91dHB1dF9idWZmZXJfKTsKKysgIH07CisrCisrICB+VHJhbnNm
 b3JtYXRpb25QbHVnaW5TdGF0ZSgpIHsKKysgICAgaWYgKG91dHB1dF9idWZmZXJfcmVhZGVyXykg
 eworKyAgICAgIFRTSU9CdWZmZXJSZWFkZXJGcmVlKG91dHB1dF9idWZmZXJfcmVhZGVyXyk7Cisr
 ICAgICAgb3V0cHV0X2J1ZmZlcl9yZWFkZXJfID0gTlVMTDsKKysgICAgfQorKworKyAgICBpZiAo
 b3V0cHV0X2J1ZmZlcl8pIHsKKysgICAgICBUU0lPQnVmZmVyRGVzdHJveShvdXRwdXRfYnVmZmVy
 Xyk7CisrICAgICAgb3V0cHV0X2J1ZmZlcl8gPSBOVUxMOworKyAgICB9CisrICB9CisrfTsKKysK
 KytuYW1lc3BhY2UgeworKworK3ZvaWQgY2xlYW51cFRyYW5zZm9ybWF0aW9uKFRTQ29udCBjb250
 cCkgeworKyAgTE9HX0RFQlVHKCJEZXN0cm95aW5nIHRyYW5zZm9ybWF0aW9uIGNvbnRwPSVwIiwg
 Y29udHApOworKyAgVFNDb250RGF0YVNldChjb250cCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+
 KDB4REVBRERFQUQpKTsKKysgIFRTQ29udERlc3Ryb3koY29udHApOworK30KKysKKytpbnQgaGFu
 ZGxlVHJhbnNmb3JtYXRpb25QbHVnaW5SZWFkKFRTQ29udCBjb250cCwgVHJhbnNmb3JtYXRpb25Q
 bHVnaW5TdGF0ZSAqc3RhdGUpIHsKKysgIC8vIFRyYWZmaWMgU2VydmVyIG5hbWluZyBpcyBxdWl0
 ZSBjb25mdXNpbmcsIGluIHRoaXMgY29udGV4dCB0aGUgd3JpdGVfdmlvCisrICAvLyBpcyBhY3R1
 YWxseSB0aGUgdmlvIHdlIHJlYWQgZnJvbS4KKysgIFRTVklPIHdyaXRlX3ZpbyA9IFRTVkNvbm5X
 cml0ZVZJT0dldChjb250cCk7CisrICBpZiAod3JpdGVfdmlvKSB7CisrICAgIGludDY0X3QgdG9f
 cmVhZCA9IFRTVklPTlRvZG9HZXQod3JpdGVfdmlvKTsKKysgICAgTE9HX0RFQlVHKCJUcmFuc2Zv
 cm1hdGlvbiBjb250cD0lcCB3cml0ZV92aW89JXAsIHRvX3JlYWQ9JWxkIiwgY29udHAsIHdyaXRl
 X3ZpbywgdG9fcmVhZCk7CisrCisrICAgIGlmICh0b19yZWFkID4gMCkgeworKyAgICAgIC8qCisr
 ICAgICAgICogVGhlIGFtb3VudCBvZiBkYXRhIGxlZnQgdG8gcmVhZCBuZWVkcyB0byBiZSB0cnVu
 Y2F0ZWQgYnkKKysgICAgICAgKiB0aGUgYW1vdW50IG9mIGRhdGEgYWN0dWFsbHkgaW4gdGhlIHJl
 YWQgYnVmZmVyLgorKyAgICAgICAqKi8KKysgICAgICBpbnQ2NF90IGF2YWlsID0gVFNJT0J1ZmZl
 clJlYWRlckF2YWlsKFRTVklPUmVhZGVyR2V0KHdyaXRlX3ZpbykpOworKyAgICAgIExPR19ERUJV
 RygiVHJhbnNmb3JtYXRpb24gY29udHA9JXAgd3JpdGVfdmlvPSVwLCB0b19yZWFkPSVsZCwgYnVm
 ZmVyIHJlYWRlciBhdmFpbD0lbGQiLCBjb250cCwgd3JpdGVfdmlvLCB0b19yZWFkLCBhdmFpbCk7
 CisrCisrICAgICAgaWYgKHRvX3JlYWQgPiBhdmFpbCkgeworKyAgICAgICAgdG9fcmVhZCA9IGF2
 YWlsOworKyAgICAgICAgTE9HX0RFQlVHKCJUcmFuc2Zvcm1hdGlvbiBjb250cD0lcCB3cml0ZV92
 aW89JXAsIHRvIHJlYWQgPiBhdmFpbCwgZml4aW5nIHRvX3JlYWQgdG8gYmUgZXF1YWwgdG8gYXZh
 aWwuIHRvX3JlYWQ9JWxkLCBidWZmZXIgcmVhZGVyIGF2YWlsPSVsZCIsIGNvbnRwLCB3cml0ZV92
 aW8sIHRvX3JlYWQsIGF2YWlsKTsKKysgICAgICB9CisrCisrICAgICAgaWYgKHRvX3JlYWQgPiAw
 KSB7CisrICAgICAgICAvKiBDcmVhdGUgYSBidWZmZXIgYW5kIGEgYnVmZmVyIHJlYWRlciAqLwor
 KyAgICAgICAgVFNJT0J1ZmZlciBpbnB1dF9idWZmZXIgPSBUU0lPQnVmZmVyQ3JlYXRlKCk7Cisr
 ICAgICAgICBUU0lPQnVmZmVyUmVhZGVyIGlucHV0X3JlYWRlciA9IFRTSU9CdWZmZXJSZWFkZXJB
 bGxvYyhpbnB1dF9idWZmZXIpOworKworKyAgICAgICAgLyogQ29weSB0aGUgZGF0YSBmcm9tIHRo
 ZSByZWFkIGJ1ZmZlciB0byB0aGUgaW5wdXQgYnVmZmVyLiAqLworKyAgICAgICAgVFNJT0J1ZmZl
 ckNvcHkoaW5wdXRfYnVmZmVyLCBUU1ZJT1JlYWRlckdldCh3cml0ZV92aW8pLCB0b19yZWFkLCAw
 KTsKKysKKysgICAgICAgIC8qIFRlbGwgdGhlIHJlYWQgYnVmZmVyIHRoYXQgd2UgaGF2ZSByZWFk
 IHRoZSBkYXRhIGFuZCBhcmUgbm8KKysgICAgICAgICBsb25nZXIgaW50ZXJlc3RlZCBpbiBpdC4g
 Ki8KKysgICAgICAgIFRTSU9CdWZmZXJSZWFkZXJDb25zdW1lKFRTVklPUmVhZGVyR2V0KHdyaXRl
 X3ZpbyksIHRvX3JlYWQpOworKworKyAgICAgICAgLyogTW9kaWZ5IHRoZSByZWFkIFZJTyB0byBy
 ZWZsZWN0IGhvdyBtdWNoIGRhdGEgd2UndmUgY29tcGxldGVkLiAqLworKyAgICAgICAgVFNWSU9O
 RG9uZVNldCh3cml0ZV92aW8sIFRTVklPTkRvbmVHZXQod3JpdGVfdmlvKSArIHRvX3JlYWQpOwor
 KworKyAgICAgICAgc3RkOjpzdHJpbmcgaW5fZGF0YSA9IHV0aWxzOjppbnRlcm5hbDo6Y29uc3Vt
 ZUZyb21UU0lPQnVmZmVyUmVhZGVyKGlucHV0X3JlYWRlcik7CisrICAgICAgICBMT0dfREVCVUco
 IlRyYW5zZm9ybWF0aW9uIGNvbnRwPSVwIHdyaXRlX3Zpbz0lcCBjb25zdW1lZCAlbGQgYnl0ZXMg
 ZnJvbSBidWZmZXJyZWFkZXIiLCBjb250cCwgd3JpdGVfdmlvLCBpbl9kYXRhLmxlbmd0aCgpKTsK
 KysKKysgICAgICAgIC8qIENsZWFuIHVwIHRoZSBidWZmZXIgYW5kIHJlYWRlciAqLworKyAgICAg
 ICAgVFNJT0J1ZmZlclJlYWRlckZyZWUoaW5wdXRfcmVhZGVyKTsKKysgICAgICAgIFRTSU9CdWZm
 ZXJEZXN0cm95KGlucHV0X2J1ZmZlcik7CisrCisrICAgICAgICAvKiBOb3cgY2FsbCB0aGUgY2xp
 ZW50IHRvIHRlbGwgdGhlbSBhYm91dCBkYXRhICovCisrICAgICAgICBpZiAoaW5fZGF0YS5sZW5n
 dGgoKSA+IDApIHsKKysgICAgICAgICAgIHN0YXRlLT50cmFuc2Zvcm1hdGlvbl9wbHVnaW5fLmNv
 bnN1bWUoaW5fZGF0YSk7CisrICAgICAgICB9CisrICAgICAgfQorKworKyAgICAgIC8qIG5vdyB0
 aGF0IHdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgd2Ugd2lsbCBjaGVjayBpZiB0aGVyZSBpcyBhbnl0
 aGluZyBsZWZ0IHRvIHJlYWQuICovCisrICAgICAgVFNDb250IHZpb19jb250ID0gVFNWSU9Db250
 R2V0KHdyaXRlX3Zpbyk7IC8vIGZvciBzb21lIHJlYXNvbiB0aGlzIGNhbiBvY2Nhc2lvbmFsbHkg
 YmUgbnVsbAorKworKyAgICAgIGlmIChUU1ZJT05Ub2RvR2V0KHdyaXRlX3ZpbykgPiAwKSB7Cisr
 ICAgICAgICBMT0dfREVCVUcoIlRyYW5zZm9ybWF0aW9uIGNvbnRwPSVwIHdyaXRlX3Zpbz0lcCwg
 dmlvX2NvbnQ9JXAgc3RpbGwgaGFzIGJ5dGVzIGxlZnQgdG8gcHJvY2VzcywgdG9kbyA+IDAuIiwg
 Y29udHAsIHdyaXRlX3ZpbywgdmlvX2NvbnQpOworKworKyAgICAgICAgaWYgKHRvX3JlYWQgPiAw
 KSB7CisrICAgICAgICAgIFRTVklPUmVlbmFibGUod3JpdGVfdmlvKTsKKysKKysgICAgICAgICAg
 LyogQ2FsbCBiYWNrIHRoZSByZWFkIFZJTyBjb250aW51YXRpb24gdG8gbGV0IGl0IGtub3cgdGhh
 dCB3ZSBhcmUgcmVhZHkgZm9yIG1vcmUgZGF0YS4gKi8KKysgICAgICAgICAgaWYgKHZpb19jb250
 KSB7CisrICAgICAgICAgICAgVFNDb250Q2FsbCh2aW9fY29udCwgc3RhdGljX2Nhc3Q8VFNFdmVu
 dD4oVFNfRVZFTlRfVkNPTk5fV1JJVEVfUkVBRFkpLCB3cml0ZV92aW8pOworKyAgICAgICAgICB9
 CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIExPR19ERUJVRygiVHJhbnNm
 b3JtYXRpb24gY29udHA9JXAgd3JpdGVfdmlvPSVwLCB2aW9fY29udD0lcCBoYXMgbm8gYnl0ZXMg
 bGVmdCB0byBwcm9jZXNzLCB3aWxsIHNlbmQgV1JJVEVfQ09NUExFVEUuIiwgY29udHAsIHdyaXRl
 X3ZpbywgdmlvX2NvbnQpOworKworKyAgICAgICAgLyogQ2FsbCBiYWNrIHRoZSB3cml0ZSBWSU8g
 Y29udGludWF0aW9uIHRvIGxldCBpdCBrbm93IHRoYXQgd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIHdy
 aXRlIG9wZXJhdGlvbi4gKi8KKysgICAgICAgIGlmICghc3RhdGUtPmlucHV0X2NvbXBsZXRlX2Rp
 c3BhdGNoZWRfKSB7CisrICAgICAgICAgc3RhdGUtPnRyYW5zZm9ybWF0aW9uX3BsdWdpbl8uaGFu
 ZGxlSW5wdXRDb21wbGV0ZSgpOworKyAgICAgICAgIHN0YXRlLT5pbnB1dF9jb21wbGV0ZV9kaXNw
 YXRjaGVkXyA9IHRydWU7CisrICAgICAgICAgaWYgKHZpb19jb250KSB7CisrICAgICAgICAgICBU
 U0NvbnRDYWxsKHZpb19jb250LCBzdGF0aWNfY2FzdDxUU0V2ZW50PihUU19FVkVOVF9WQ09OTl9X
 UklURV9DT01QTEVURSksIHdyaXRlX3Zpbyk7CisrICAgICAgICAgfQorKyAgICAgICAgfQorKyAg
 ICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBUU0NvbnQgdmlvX2NvbnQgPSBUU1ZJT0NvbnRH
 ZXQod3JpdGVfdmlvKTsgLy8gZm9yIHNvbWUgcmVhc29uIHRoaXMgY2FuIG9jY2FzaW9uYWxseSBi
 ZSBudWxsPworKyAgICAgIExPR19ERUJVRygiVHJhbnNmb3JtYXRpb24gY29udHA9JXAgd3JpdGVf
 dmlvPSVwLCB2aW9fY29udD0lcCBoYXMgbm8gYnl0ZXMgbGVmdCB0byBwcm9jZXNzLiIsIGNvbnRw
 LCB3cml0ZV92aW8sIHZpb19jb250KTsKKysKKysgICAgICAvKiBDYWxsIGJhY2sgdGhlIHdyaXRl
 IFZJTyBjb250aW51YXRpb24gdG8gbGV0IGl0IGtub3cgdGhhdCB3ZSBoYXZlIGNvbXBsZXRlZCB0
 aGUgd3JpdGUgb3BlcmF0aW9uLiAqLworKyAgICAgIGlmICghc3RhdGUtPmlucHV0X2NvbXBsZXRl
 X2Rpc3BhdGNoZWRfKSB7CisrICAgICAgIHN0YXRlLT50cmFuc2Zvcm1hdGlvbl9wbHVnaW5fLmhh
 bmRsZUlucHV0Q29tcGxldGUoKTsKKysgICAgICAgc3RhdGUtPmlucHV0X2NvbXBsZXRlX2Rpc3Bh
 dGNoZWRfID0gdHJ1ZTsKKysgICAgICAgaWYgKHZpb19jb250KSB7CisrICAgICAgICAgVFNDb250
 Q2FsbCh2aW9fY29udCwgc3RhdGljX2Nhc3Q8VFNFdmVudD4oVFNfRVZFTlRfVkNPTk5fV1JJVEVf
 Q09NUExFVEUpLCB3cml0ZV92aW8pOworKyAgICAgICB9CisrICAgICAgfQorKyAgICB9CisrICB9
 IGVsc2UgeworKyAgICBMT0dfRVJST1IoIlRyYW5zZm9ybWF0aW9uIGNvbnRwPSVwIHdyaXRlX3Zp
 bz0lcCB3YXMgTlVMTCEiLCBjb250cCwgd3JpdGVfdmlvKTsKKysgIH0KKysgIHJldHVybiAwOwor
 K30KKysKKytpbnQgaGFuZGxlVHJhbnNmb3JtYXRpb25QbHVnaW5FdmVudHMoVFNDb250IGNvbnRw
 LCBUU0V2ZW50IGV2ZW50LCB2b2lkICplZGF0YSkgeworKyAgVHJhbnNmb3JtYXRpb25QbHVnaW5T
 dGF0ZSAqc3RhdGUgPSBzdGF0aWNfY2FzdDxUcmFuc2Zvcm1hdGlvblBsdWdpblN0YXRlICo+KFRT
 Q29udERhdGFHZXQoY29udHApKTsKKysgIExPR19ERUJVRygiVHJhbnNmb3JtYXRpb24gY29udHA9
 JXAgZXZlbnQ9JWQgZWRhdGE9JXAgdHNodHRwdHhuPSVwIiwgY29udHAsIGV2ZW50LCBlZGF0YSwg
 c3RhdGUtPnR4bl8pOworKworKyAgLy8gVGhlIGZpcnN0IHRoaW5nIHlvdSBhbHdheXMgZG8gaXMg
 Y2hlY2sgaWYgdGhlIFZDb25uIGlzIGNsb3NlZC4KKysgIGludCBjb25uZWN0aW9uX2Nsb3NlZCA9
 IFRTVkNvbm5DbG9zZWRHZXQoc3RhdGUtPnZjb25uXyk7CisrICBpZiAoY29ubmVjdGlvbl9jbG9z
 ZWQpIHsKKysgICAgTE9HX0RFQlVHKCJUcmFuc2Zvcm1hdGlvbiBjb250cD0lcCB0c2h0dHB0eG49
 JXAgaXMgY2xvc2VkIGNvbm5lY3Rpb25fY2xvc2VkPSVkICIsIGNvbnRwLCBzdGF0ZS0+dHhuXywg
 Y29ubmVjdGlvbl9jbG9zZWQpOworKyAgICAvLyB3ZSdsbCBkbyB0aGUgY2xlYW51cFRyYW5zZm9y
 bWF0aW9uIGluIHRoZSBUcmFuc2Zvcm1hdGlvblBsdWdpbiBkZXN0cnVjdG9yLgorKyAgICByZXR1
 cm4gMDsKKysgIH0KKysKKysgIGlmIChldmVudCA9PSBUU19FVkVOVF9WQ09OTl9XUklURV9DT01Q
 TEVURSkgeworKyAgICBUU1ZDb25uIG91dHB1dF92Y29ubiA9IFRTVHJhbnNmb3JtT3V0cHV0VkNv
 bm5HZXQoc3RhdGUtPnZjb25uXyk7CisrICAgIExPR19ERUJVRygiVHJhbnNmb3JtYXRpb24gY29u
 dHA9JXAgdHNodHRwdHhuPSVwIHJlY2VpdmVkIFdSSVRFX0NPTVBMRVRFLCBzaHV0dGluZyBkb3du
 IG91dHB1dHZjb25uPSVwICIsIGNvbnRwLCBzdGF0ZS0+dHhuXywgb3V0cHV0X3Zjb25uKTsKKysg
 ICAgVFNWQ29ublNodXRkb3duKG91dHB1dF92Y29ubiwgMCwgMSk7ICAvLyBUaGUgb3RoZXIgZW5k
 IGlzIGRvbmUgcmVhZGluZyBvdXIgb3V0cHV0CisrICAgIHJldHVybiAwOworKyAgfSBlbHNlIGlm
 IChldmVudCA9PSBUU19FVkVOVF9FUlJPUikgeworKyAgICBUU1ZJTyB3cml0ZV92aW87CisrICAg
 IC8qIEdldCB0aGUgd3JpdGUgVklPIGZvciB0aGUgd3JpdGUgb3BlcmF0aW9uIHRoYXQgd2FzCisr
 ICAgICBwZXJmb3JtZWQgb24gb3Vyc2VsZi4gVGhpcyBWSU8gY29udGFpbnMgdGhlIGNvbnRpbnVh
 dGlvbiBvZgorKyAgICAgb3VyIHBhcmVudCB0cmFuc2Zvcm1hdGlvbi4gKi8KKysgICAgd3JpdGVf
 dmlvID0gVFNWQ29ubldyaXRlVklPR2V0KHN0YXRlLT52Y29ubl8pOworKyAgICBUU0NvbnQgdmlv
 X2NvbnQgPSBUU1ZJT0NvbnRHZXQod3JpdGVfdmlvKTsKKysgICAgTE9HX0VSUk9SKCJUcmFuc2Zv
 cm1hdGlvbiBjb250cD0lcCB0c2h0dHB0eG49JXAgcmVjZWl2ZWQgRVZFTlRfRVJST1IgZm9yd2Fy
 ZGluZyB0byB3cml0ZV92aW89JXAgdmlvY29udD0lcCIsIGNvbnRwLCBzdGF0ZS0+dHhuXywgd3Jp
 dGVfdmlvLCB2aW9fY29udCk7CisrICAgIGlmICh2aW9fY29udCkgeworKyAgICAgIFRTQ29udENh
 bGwodmlvX2NvbnQsIFRTX0VWRU5UX0VSUk9SLCB3cml0ZV92aW8pOworKyAgICB9CisrICAgIHJl
 dHVybiAwOworKyAgfQorKworKyAgLy8gQWxsIG90aGVyIGV2ZW50cyBpbmNsdWRpZ24gV1JJVEVf
 UkVBRFkgd2lsbCBqdXN0IGF0dGVtcHQgdG8gdHJhbnNmb3JtIG1vcmUgZGF0YS4KKysgIHJldHVy
 biBoYW5kbGVUcmFuc2Zvcm1hdGlvblBsdWdpblJlYWQoc3RhdGUtPnZjb25uXywgc3RhdGUpOwor
 K30KKysKKyt9IC8qIGFub255bW91cyBuYW1lc3BhY2UgKi8KKysKKytUcmFuc2Zvcm1hdGlvblBs
 dWdpbjo6VHJhbnNmb3JtYXRpb25QbHVnaW4oVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uLCBUcmFu
 c2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0eXBlKQorKyAgOiBUcmFuc2FjdGlvblBsdWdpbih0cmFu
 c2FjdGlvbikgeworKyAgc3RhdGVfID0gbmV3IFRyYW5zZm9ybWF0aW9uUGx1Z2luU3RhdGUodHJh
 bnNhY3Rpb24sICp0aGlzLCB0eXBlLCBzdGF0aWNfY2FzdDxUU0h0dHBUeG4+KHRyYW5zYWN0aW9u
 LmdldEF0c0hhbmRsZSgpKSk7CisrICBzdGF0ZV8tPnZjb25uXyA9IFRTVHJhbnNmb3JtQ3JlYXRl
 KGhhbmRsZVRyYW5zZm9ybWF0aW9uUGx1Z2luRXZlbnRzLCBzdGF0ZV8tPnR4bl8pOworKyAgVFND
 b250RGF0YVNldChzdGF0ZV8tPnZjb25uXywgc3RhdGljX2Nhc3Q8dm9pZCAqPihzdGF0ZV8pKTsg
 Ly8gZWRhdGEgaW4gYSBUcmFuc2Zvcm1hdGlvbkhhbmRsZXIgaXMgTk9UIGEgVFNIdHRwVHhuLgor
 KyAgTE9HX0RFQlVHKCJDcmVhdGluZyBUcmFuc2Zvcm1hdGlvblBsdWdpbj0lcCAodmNvbm4pY29u
 dHA9JXAgdHNodHRwdHhuPSVwIHRyYW5zZm9ybWF0aW9uX3R5cGU9JWQiLCB0aGlzLCBzdGF0ZV8t
 PnZjb25uXywgc3RhdGVfLT50eG5fLCB0eXBlKTsKKysgIFRTSHR0cFR4bkhvb2tBZGQoc3RhdGVf
 LT50eG5fLCB1dGlsczo6aW50ZXJuYWw6OmNvbnZlcnRJbnRlcm5hbFRyYW5zZm9ybWF0aW9uVHlw
 ZVRvVHNIb29rKHR5cGUpLCBzdGF0ZV8tPnZjb25uXyk7CisrfQorKworK1RyYW5zZm9ybWF0aW9u
 UGx1Z2luOjp+VHJhbnNmb3JtYXRpb25QbHVnaW4oKSB7CisrICBMT0dfREVCVUcoIkRlc3Ryb3lp
 bmcgVHJhbnNmb3JtYXRpb25QbHVnaW49JXAiLCB0aGlzKTsKKysgIGNsZWFudXBUcmFuc2Zvcm1h
 dGlvbihzdGF0ZV8tPnZjb25uXyk7CisrICBkZWxldGUgc3RhdGVfOworK30KKysKKytzaXplX3Qg
 VHJhbnNmb3JtYXRpb25QbHVnaW46OnByb2R1Y2UoY29uc3Qgc3RkOjpzdHJpbmcgJmRhdGEpIHsK
 KysgIExPR19ERUJVRygiVHJhbnNmb3JtYXRpb25QbHVnaW49JXAgdHNodHRwdHhuPSVwIHByb2R1
 Y2luZyBvdXRwdXQgd2l0aCBsZW5ndGg9JWxkIiwgdGhpcywgc3RhdGVfLT50eG5fLCBkYXRhLmxl
 bmd0aCgpKTsKKysgIGludDY0X3Qgd3JpdGVfbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
 ZGF0YS5sZW5ndGgoKSk7CisrICBpZiAoIXdyaXRlX2xlbmd0aCkgeworKyAgICByZXR1cm4gMDsK
 KysgIH0KKysKKysgIGlmICghc3RhdGVfLT5vdXRwdXRfdmlvXykgeworKyAgICBUU1ZDb25uIG91
 dHB1dF92Y29ubiA9IFRTVHJhbnNmb3JtT3V0cHV0VkNvbm5HZXQoc3RhdGVfLT52Y29ubl8pOwor
 KyAgICBMT0dfREVCVUcoIlRyYW5zZm9ybWF0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCB3aWxs
 IGlzc3VlIGEgVFNWQ29ubldyaXRlLCBvdXRwdXRfdmNvbm49JXAuIiwgdGhpcywgc3RhdGVfLT50
 eG5fLCBvdXRwdXRfdmNvbm4pOworKyAgICBpZiAob3V0cHV0X3Zjb25uKSB7CisrICAgICAgLy8g
 SWYgeW91J3JlIGNvbmZ1c2VkIGFib3V0IHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIHRoZSB0cmFm
 ZmljIHNlcnZlciB0cmFuc2Zvcm1hdGlvbiBkb2NzLgorKyAgICAgIC8vIFlvdSBhbHdheXMgd3Jp
 dGUgSU5UNjRfTUFYLCB0aGlzIGJhc2ljYWxseSBzYXlzIHlvdSdyZSBub3Qgc3VyZSBob3cgbXVj
 aCBkYXRhIHlvdSdyZSBnb2luZyB0byB3cml0ZQorKyAgICAgIHN0YXRlXy0+b3V0cHV0X3Zpb18g
 PSBUU1ZDb25uV3JpdGUob3V0cHV0X3Zjb25uLCBzdGF0ZV8tPnZjb25uXywgc3RhdGVfLT5vdXRw
 dXRfYnVmZmVyX3JlYWRlcl8sIElOVDY0X01BWCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTE9H
 X0VSUk9SKCJUcmFuc2Zvcm1hdGlvblBsdWdpbj0lcCB0c2h0dHB0eG49JXAgb3V0cHV0X3Zjb25u
 PSVwIGNhbm5vdCBpc3N1ZSBUU1ZDb25uV3JpdGUgZHVlIHRvIG51bGwgb3V0cHV0IHZjb25uLiIs
 CisrICAgICAgICAgIHRoaXMsIHN0YXRlXy0+dHhuXywgb3V0cHV0X3Zjb25uKTsKKysgICAgICBy
 ZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoIXN0YXRlXy0+b3V0cHV0X3Zpb18pIHsKKysg
 ICAgICBMT0dfRVJST1IoIlRyYW5zZm9ybWF0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCBzdGF0
 ZV8tPm91dHB1dF92aW89JXAsIFRTVkNvbm5Xcml0ZSBmYWlsZWQuIiwKKysgICAgICAgICAgdGhp
 cywgc3RhdGVfLT50eG5fLCBzdGF0ZV8tPm91dHB1dF92aW9fKTsKKysgICAgICByZXR1cm4gMDsK
 KysgICAgfQorKyAgfQorKworKyAgLy8gRmluYWxseSB3ZSBjYW4gY29weSB0aGlzIGRhdGEgaW50
 byB0aGUgb3V0cHV0X2J1ZmZlcgorKyAgaW50NjRfdCBieXRlc193cml0dGVuID0gVFNJT0J1ZmZl
 cldyaXRlKHN0YXRlXy0+b3V0cHV0X2J1ZmZlcl8sIGRhdGEuY19zdHIoKSwgd3JpdGVfbGVuZ3Ro
 KTsKKysgIHN0YXRlXy0+Ynl0ZXNfd3JpdHRlbl8gKz0gYnl0ZXNfd3JpdHRlbjsgLy8gU28gd2Ug
 Y2FuIHNldCBCeXRlc0RvbmUgb24gb3V0cHV0Q29tcGxldGUoKS4KKysgIExPR19ERUJVRygiVHJh
 bnNmb3JtYXRpb25QbHVnaW49JXAgdHNodHRwdHhuPSVwIHdyaXRlIHRvIFRTSU9CdWZmZXIgJWxk
 IGJ5dGVzIHRvdGFsIGJ5dGVzIHdyaXR0ZW4gJWxkIiwgdGhpcywgc3RhdGVfLT50eG5fLCBieXRl
 c193cml0dGVuLCBzdGF0ZV8tPmJ5dGVzX3dyaXR0ZW5fKTsKKysKKysgIC8vIFNhbml0eSBDaGVj
 a3MKKysgIGlmIChieXRlc193cml0dGVuICE9IHdyaXRlX2xlbmd0aCkgeworKyAgICBMT0dfRVJS
 T1IoIlRyYW5zZm9ybWF0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCBieXRlcyB3cml0dGVuIDwg
 ZXhwZWN0ZWQuIGJ5dGVzX3dyaXR0ZW49JWxkIHdyaXRlX2xlbmd0aD0lbGQiLCB0aGlzLCBzdGF0
 ZV8tPnR4bl8sIGJ5dGVzX3dyaXR0ZW4sIHdyaXRlX2xlbmd0aCk7CisrICB9CisrCisrICBpbnQg
 Y29ubmVjdGlvbl9jbG9zZWQgPSBUU1ZDb25uQ2xvc2VkR2V0KHN0YXRlXy0+dmNvbm5fKTsKKysg
 IExPR19ERUJVRygiVHJhbnNmb3JtYXRpb25QbHVnaW49JXAgdHNodHRwdHhuPSVwIHZjb25uPSVw
 IGNvbm5lY3Rpb25fY2xvc2VkPSVkIiwgdGhpcywgc3RhdGVfLT50eG5fLCBzdGF0ZV8tPnZjb25u
 XywgY29ubmVjdGlvbl9jbG9zZWQpOworKworKyAgaWYgKCFjb25uZWN0aW9uX2Nsb3NlZCkgewor
 KyAgICBUU1ZJT1JlZW5hYmxlKHN0YXRlXy0+b3V0cHV0X3Zpb18pOyAvLyBXYWtlIHVwIHRoZSBk
 b3duc3RyZWFtIHZpbworKyAgfSBlbHNlIHsKKysgICAgTE9HX0VSUk9SKCJUcmFuc2Zvcm1hdGlv
 blBsdWdpbj0lcCB0c2h0dHB0eG49JXAgb3V0cHV0X3Zpbz0lcCBjb25uZWN0aW9uX2Nsb3NlZD0l
 ZCA6IENvdWxkbid0IHJlZW5hYmxlIG91dHB1dCB2aW8gKGNvbm5lY3Rpb24gY2xvc2VkKS4iLCB0
 aGlzLCBzdGF0ZV8tPnR4bl8sIHN0YXRlXy0+b3V0cHV0X3Zpb18sIGNvbm5lY3Rpb25fY2xvc2Vk
 KTsKKysgIH0KKysKKysgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzX3dyaXR0ZW4p
 OworK30KKysKKytzaXplX3QgVHJhbnNmb3JtYXRpb25QbHVnaW46OnNldE91dHB1dENvbXBsZXRl
 KCkgeworKyAgaW50IGNvbm5lY3Rpb25fY2xvc2VkID0gVFNWQ29ubkNsb3NlZEdldChzdGF0ZV8t
 PnZjb25uXyk7CisrICBMT0dfREVCVUcoIk91dHB1dENvbXBsZXRlIFRyYW5zZm9ybWF0aW9uUGx1
 Z2luPSVwIHRzaHR0cHR4bj0lcCB2Y29ubj0lcCBjb25uZWN0aW9uX2Nsb3NlZD0lZCwgdG90YWwg
 Ynl0ZXMgd3JpdHRlbj0lbGQiLCB0aGlzLCBzdGF0ZV8tPnR4bl8sIHN0YXRlXy0+dmNvbm5fLCBj
 b25uZWN0aW9uX2Nsb3NlZCxzdGF0ZV8tPmJ5dGVzX3dyaXR0ZW5fKTsKKysKKysgIGlmICghY29u
 bmVjdGlvbl9jbG9zZWQgJiYgIXN0YXRlXy0+b3V0cHV0X3Zpb18pIHsKKysgICAgICBMT0dfREVC
 VUcoIlRyYW5zZm9ybWF0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCBvdXRwdXQgY29tcGxldGUg
 d2l0aG91dCB3cml0aW5nIGFueSBkYXRhLCBpbml0aWF0aW5nIHdyaXRlIG9mIDAgYnl0ZXMuIiwg
 dGhpcywgc3RhdGVfLT50eG5fKTsKKysKKysgICAgICAvLyBXZSdyZSBkb25lIHdpdGhvdXQgZXZl
 ciBvdXRwdXR0aW5nIGFueXRoaW5nLCB0byBjb3JyZWN0bHkKKysgICAgICAvLyBjbGVhbiB1cCB3
 ZSdsbCBpbml0aWF0ZSBhIHdyaXRlIHRoZW4gaW1tZWlkYXRlbHkgc2V0IGl0IHRvIDAgYnl0ZXMg
 ZG9uZS4KKysgICAgICBzdGF0ZV8tPm91dHB1dF92aW9fID0gVFNWQ29ubldyaXRlKFRTVHJhbnNm
 b3JtT3V0cHV0VkNvbm5HZXQoc3RhdGVfLT52Y29ubl8pLCBzdGF0ZV8tPnZjb25uXywgc3RhdGVf
 LT5vdXRwdXRfYnVmZmVyX3JlYWRlcl8sIDApOworKworKyAgICAgIGlmIChzdGF0ZV8tPm91dHB1
 dF92aW9fKSB7CisrICAgICAgICBUU1ZJT05Eb25lU2V0KHN0YXRlXy0+b3V0cHV0X3Zpb18sIDAp
 OworKyAgICAgICAgVFNWSU9SZWVuYWJsZShzdGF0ZV8tPm91dHB1dF92aW9fKTsgLy8gV2FrZSB1
 cCB0aGUgZG93bnN0cmVhbSB2aW8KKysgICAgICB9IGVsc2UgeworKyAgICAgICAgTE9HX0VSUk9S
 KCJUcmFuc2Zvcm1hdGlvblBsdWdpbj0lcCB0c2h0dHB0eG49JXAgdW5hYmxlIHRvIHJlZW5hYmxl
 IG91dHB1dF92aW89JXAgYmVjYXVzZSBWQ29ubldyaXRlIGZhaWxlZC4iLCB0aGlzLCBzdGF0ZV8t
 PnR4bl8sIHN0YXRlXy0+b3V0cHV0X3Zpb18pOworKyAgICAgIH0KKysKKysgICAgICByZXR1cm4g
 MDsKKysgIH0KKysKKysgIGlmICghY29ubmVjdGlvbl9jbG9zZWQpIHsKKysgICAgLy8gU28gdGhl
 cmUgaXMgYSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiBoZXJlLCBpZiB3ZSB3YWtlIHVwIGEgZGVh
 ZAorKyAgICAvLyBWSU8gaXQgY2FuIGNhdXNlIGEgc2VnZmF1bHQsIHNvIHdlIG11c3QgY2hlY2sg
 dGhhdCB0aGUgVkNPTk4gaXMgbm90IGRlYWQuCisrICAgIGludCBjb25uZWN0aW9uX2Nsb3NlZCA9
 IFRTVkNvbm5DbG9zZWRHZXQoc3RhdGVfLT52Y29ubl8pOworKyAgICBpZiAoIWNvbm5lY3Rpb25f
 Y2xvc2VkKSB7CisrICAgICAgVFNWSU9OQnl0ZXNTZXQoc3RhdGVfLT5vdXRwdXRfdmlvXywgc3Rh
 dGVfLT5ieXRlc193cml0dGVuXyk7CisrICAgICAgVFNWSU9SZWVuYWJsZShzdGF0ZV8tPm91dHB1
 dF92aW9fKTsgLy8gV2FrZSB1cCB0aGUgZG93bnN0cmVhbSB2aW8KKysgICAgfSBlbHNlIHsKKysg
 ICAgICBMT0dfRVJST1IoIlRyYW5zZm9ybWF0aW9uUGx1Z2luPSVwIHRzaHR0cHR4bj0lcCB1bmFi
 bGUgdG8gcmVlbmFibGUgb3V0cHV0X3Zpbz0lcCBjb25uZWN0aW9uIHdhcyBjbG9zZWQ9JWQuIiwg
 dGhpcywgc3RhdGVfLT50eG5fLCBzdGF0ZV8tPm91dHB1dF92aW9fLCBjb25uZWN0aW9uX2Nsb3Nl
 ZCk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIExPR19FUlJPUigiVHJhbnNmb3JtYXRpb25Q
 bHVnaW49JXAgdHNodHRwdHhuPSVwIHVuYWJsZSB0byByZWVuYWJsZSBvdXRwdXRfdmlvPSVwIGNv
 bm5lY3Rpb24gd2FzIGNsb3NlZD0lZC4iLCB0aGlzLCBzdGF0ZV8tPnR4bl8sIHN0YXRlXy0+b3V0
 cHV0X3Zpb18sIGNvbm5lY3Rpb25fY2xvc2VkKTsKKysgIH0KKysKKysgIHJldHVybiBzdGF0ZV8t
 PmJ5dGVzX3dyaXR0ZW5fOworK30KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9VcmwuY2Mg
 bGliL2F0c2NwcGFwaS9zcmMvVXJsLmNjCistLS0gbGliL2F0c2NwcGFwaS9zcmMvVXJsLmNjCTE5
 NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMv
 VXJsLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAzNTMyMjg0ICswODAwCitAQCAtMCwwICsxLDIx
 OCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
 IChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVu
 dHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBm
 b3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNo
 aXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFj
 aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
 dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4g
 IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6
 Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVp
 cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQor
 KyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
 IElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
 SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0
 aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRh
 dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUgVXJsLmNj
 CisrICovCisrI2luY2x1ZGUgImF0c2NwcGFwaS9VcmwuaCIKKysjaW5jbHVkZSA8dHMvdHMuaD4K
 KysjaW5jbHVkZSAiYXRzY3BwYXBpL25vbmNvcHlhYmxlLmgiCisrI2luY2x1ZGUgIkluaXRpYWxp
 emFibGVWYWx1ZS5oIgorKyNpbmNsdWRlICJsb2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcg
 bmFtZXNwYWNlIGF0c2NwcGFwaTsKKyt1c2luZyBzdGQ6OnN0cmluZzsKKysKKysvKioKKysgKiBA
 cHJpdmF0ZQorKyAqLworK3N0cnVjdCBhdHNjcHBhcGk6OlVybFN0YXRlOiBub25jb3B5YWJsZSB7
 CisrICBUU01CdWZmZXIgaGRyX2J1Zl87CisrICBUU01Mb2MgdXJsX2xvY187CisrICBJbml0aWFs
 aXphYmxlVmFsdWU8c3RyaW5nPiB1cmxfc3RyaW5nXzsKKysgIEluaXRpYWxpemFibGVWYWx1ZTxz
 dHJpbmc+IHBhdGhfOworKyAgSW5pdGlhbGl6YWJsZVZhbHVlPHN0cmluZz4gcXVlcnlfOworKyAg
 SW5pdGlhbGl6YWJsZVZhbHVlPHN0cmluZz4gaG9zdF87CisrICBJbml0aWFsaXphYmxlVmFsdWU8
 c3RyaW5nPiBzY2hlbWVfOworKyAgSW5pdGlhbGl6YWJsZVZhbHVlPHVpbnQxNl90PiBwb3J0XzsK
 KysgIFVybFN0YXRlKFRTTUJ1ZmZlciBoZHJfYnVmLCBUU01Mb2MgdXJsX2xvYykgOgorKyAgICAg
 IGhkcl9idWZfKGhkcl9idWYpLCB1cmxfbG9jXyh1cmxfbG9jKSB7CisrICB9CisrfTsKKysKKytV
 cmw6OlVybCgpIHsKKysgIHN0YXRlXyA9IG5ldyBVcmxTdGF0ZShzdGF0aWNfY2FzdDxUU01CdWZm
 ZXI+KE5VTEwpLCBzdGF0aWNfY2FzdDxUU01Mb2M+KE5VTEwpKTsKKyt9CisrCisrVXJsOjpVcmwo
 dm9pZCAqaGRyX2J1Ziwgdm9pZCAqdXJsX2xvYykgeworKyAgc3RhdGVfID0gbmV3IFVybFN0YXRl
 KHN0YXRpY19jYXN0PFRTTUJ1ZmZlcj4oaGRyX2J1ZiksIHN0YXRpY19jYXN0PFRTTUxvYz4odXJs
 X2xvYykpOworK30KKysKKyt2b2lkIFVybDo6aW5pdCh2b2lkICpoZHJfYnVmLCB2b2lkICp1cmxf
 bG9jKSB7CisrICBzdGF0ZV8tPmhkcl9idWZfID0gc3RhdGljX2Nhc3Q8VFNNQnVmZmVyPihoZHJf
 YnVmKTsKKysgIHN0YXRlXy0+dXJsX2xvY18gPSBzdGF0aWNfY2FzdDxUU01Mb2M+KHVybF9sb2Mp
 OworK30KKysKKytVcmw6On5VcmwoKSB7CisrICBkZWxldGUgc3RhdGVfOworK30KKysKKytib29s
 IGlubGluZSBVcmw6OmlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7CisrICByZXR1cm4gc3RhdGVfLT5o
 ZHJfYnVmXyAmJiBzdGF0ZV8tPnVybF9sb2NfOworK30KKysKKyt2b2lkIFVybDo6cmVzZXQoKSB7
 CisrICBzdGF0ZV8tPnVybF9zdHJpbmdfLnNldEluaXRpYWxpemVkKGZhbHNlKTsKKysgIHN0YXRl
 Xy0+cGF0aF8uc2V0SW5pdGlhbGl6ZWQoZmFsc2UpOworKyAgc3RhdGVfLT5xdWVyeV8uc2V0SW5p
 dGlhbGl6ZWQoZmFsc2UpOworKyAgc3RhdGVfLT5ob3N0Xy5zZXRJbml0aWFsaXplZChmYWxzZSk7
 CisrICBzdGF0ZV8tPnNjaGVtZV8uc2V0SW5pdGlhbGl6ZWQoZmFsc2UpOworKyAgc3RhdGVfLT5w
 b3J0Xy5zZXRJbml0aWFsaXplZChmYWxzZSk7CisrfQorKworK2NvbnN0IHN0ZDo6c3RyaW5nICZV
 cmw6OmdldFVybFN0cmluZygpIGNvbnN0IHsKKysgIGlmIChpc0luaXRpYWxpemVkKCkgJiYgIXN0
 YXRlXy0+dXJsX3N0cmluZ18uaXNJbml0aWFsaXplZCgpKSB7CisrICAgIGludCBsZW5ndGg7Cisr
 ICAgIGNoYXIgKm1lbXB0ciA9IFRTVXJsU3RyaW5nR2V0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRl
 Xy0+dXJsX2xvY18sICZsZW5ndGgpOworKyAgICBpZiAobWVtcHRyICYmIGxlbmd0aCkgeworKyAg
 ICAgIHN0YXRlXy0+dXJsX3N0cmluZ18gPSBzdGQ6OnN0cmluZyhtZW1wdHIsIGxlbmd0aCk7Cisr
 ICAgICAgVFNmcmVlKG1lbXB0cik7CisrICAgICAgTE9HX0RFQlVHKCJHb3QgVVJMIFslc10iLCBz
 dGF0ZV8tPnVybF9zdHJpbmdfLmdldFZhbHVlKCkuY19zdHIoKSk7CisrICAgIH0gZWxzZSB7Cisr
 ICAgICAgTE9HX0VSUk9SKCJHb3QgbnVsbC96ZXJvLWxlbmd0aCBVUkwgc3RyaW5nOyBoZHJfYnVm
 ICVwLCB1cmxfbG9jICVwLCBwdHIgJXAsIGxlbmd0aCAlZCIsIHN0YXRlXy0+aGRyX2J1Zl8sCisr
 ICAgICAgICAgICAgICAgIHN0YXRlXy0+dXJsX2xvY18sIG1lbXB0ciwgbGVuZ3RoKTsKKysgICAg
 fQorKyAgfQorKyAgcmV0dXJuIHN0YXRlXy0+dXJsX3N0cmluZ187CisrfQorKworK2NvbnN0IHN0
 ZDo6c3RyaW5nICZVcmw6OmdldFBhdGgoKSBjb25zdCB7CisrICBpZiAoaXNJbml0aWFsaXplZCgp
 ICYmICFzdGF0ZV8tPnBhdGhfLmlzSW5pdGlhbGl6ZWQoKSkgeworKyAgICBpbnQgbGVuZ3RoOwor
 KyAgICBjb25zdCBjaGFyICptZW1wdHIgPSBUU1VybFBhdGhHZXQoc3RhdGVfLT5oZHJfYnVmXywg
 c3RhdGVfLT51cmxfbG9jXywgJmxlbmd0aCk7CisrICAgIGlmIChtZW1wdHIgJiYgbGVuZ3RoKSB7
 CisrICAgICAgc3RhdGVfLT5wYXRoXyA9IHN0ZDo6c3RyaW5nKG1lbXB0ciwgbGVuZ3RoKTsKKysg
 ICAgfQorKyAgICBMT0dfREVCVUcoIlVzaW5nIHBhdGggWyVzXSIsIHN0YXRlXy0+cGF0aF8uZ2V0
 VmFsdWUoKS5jX3N0cigpKTsKKysgIH0KKysgIHJldHVybiBzdGF0ZV8tPnBhdGhfOworK30KKysK
 Kytjb25zdCBzdGQ6OnN0cmluZyAmVXJsOjpnZXRRdWVyeSgpIGNvbnN0IHsKKysgIGlmIChpc0lu
 aXRpYWxpemVkKCkgJiYgIXN0YXRlXy0+cXVlcnlfLmlzSW5pdGlhbGl6ZWQoKSkgeworKyAgICBp
 bnQgbGVuZ3RoOworKyAgICBjb25zdCBjaGFyICptZW1wdHIgPSBUU1VybEh0dHBRdWVyeUdldChz
 dGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9sb2NfLCAmbGVuZ3RoKTsKKysgICAgaWYgKG1l
 bXB0ciAmJiBsZW5ndGgpIHsKKysgICAgICBzdGF0ZV8tPnF1ZXJ5XyA9IHN0ZDo6c3RyaW5nKG1l
 bXB0ciwgbGVuZ3RoKTsKKysgICAgfQorKyAgICBMT0dfREVCVUcoIlVzaW5nIHF1ZXJ5IFslc10i
 LCBzdGF0ZV8tPnF1ZXJ5Xy5nZXRWYWx1ZSgpLmNfc3RyKCkpOworKyAgfQorKyAgcmV0dXJuIHN0
 YXRlXy0+cXVlcnlfOworK30KKysKKytjb25zdCBzdGQ6OnN0cmluZyAmVXJsOjpnZXRTY2hlbWUo
 KSBjb25zdCB7CisrICBpZiAoaXNJbml0aWFsaXplZCgpICYmICFzdGF0ZV8tPnNjaGVtZV8uaXNJ
 bml0aWFsaXplZCgpKSB7CisrICAgIGludCBsZW5ndGg7CisrICAgIGNvbnN0IGNoYXIgKm1lbXB0
 ciA9IFRTVXJsU2NoZW1lR2V0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+dXJsX2xvY18sICZs
 ZW5ndGgpOworKyAgICBpZiAobWVtcHRyICYmIGxlbmd0aCkgeworKyAgICAgIHN0YXRlXy0+c2No
 ZW1lXyA9IHN0ZDo6c3RyaW5nKG1lbXB0ciwgbGVuZ3RoKTsKKysgICAgfQorKyAgICBMT0dfREVC
 VUcoIlVzaW5nIHNjaGVtZSBbJXNdIiwgc3RhdGVfLT5zY2hlbWVfLmdldFZhbHVlKCkuY19zdHIo
 KSk7CisrICB9CisrICByZXR1cm4gc3RhdGVfLT5zY2hlbWVfOworK30KKysKKytjb25zdCBzdGQ6
 OnN0cmluZyAmVXJsOjpnZXRIb3N0KCkgY29uc3QgeworKyAgaWYgKGlzSW5pdGlhbGl6ZWQoKSAm
 JiAhc3RhdGVfLT5ob3N0Xy5pc0luaXRpYWxpemVkKCkpIHsKKysgICAgaW50IGxlbmd0aDsKKysg
 ICAgY29uc3QgY2hhciAqbWVtcHRyID0gVFNVcmxIb3N0R2V0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0
 YXRlXy0+dXJsX2xvY18sICZsZW5ndGgpOworKyAgICBpZiAobWVtcHRyICYmIGxlbmd0aCkgewor
 KyAgICAgIHN0YXRlXy0+aG9zdF8gPSBzdGQ6OnN0cmluZyhtZW1wdHIsIGxlbmd0aCk7CisrICAg
 IH0KKysgICAgTE9HX0RFQlVHKCJVc2luZyBob3N0IFslc10iLCBzdGF0ZV8tPmhvc3RfLmdldFZh
 bHVlKCkuY19zdHIoKSk7CisrICB9CisrICByZXR1cm4gc3RhdGVfLT5ob3N0XzsKKyt9CisrCisr
 dWludDE2X3QgVXJsOjpnZXRQb3J0KCkgY29uc3QgeworKyAgaWYgKGlzSW5pdGlhbGl6ZWQoKSAm
 JiAhc3RhdGVfLT5wb3J0Xy5pc0luaXRpYWxpemVkKCkpIHsKKysgICAgc3RhdGVfLT5wb3J0XyA9
 IFRTVXJsUG9ydEdldChzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9sb2NfKTsKKysgICAg
 TE9HX0RFQlVHKCJHb3QgcG9ydCAlZCIsIHN0YXRlXy0+cG9ydF8uZ2V0VmFsdWUoKSk7CisrICB9
 CisrICByZXR1cm4gc3RhdGVfLT5wb3J0XzsKKyt9CisrCisrdm9pZCBVcmw6OnNldFBhdGgoY29u
 c3Qgc3RkOjpzdHJpbmcgJnBhdGgpIHsKKysgIGlmICghaXNJbml0aWFsaXplZCgpKSB7CisrICAg
 IExPR19FUlJPUigiTm90IGluaXRpYWxpemVkIik7CisrICAgIHJldHVybjsKKysgIH0KKysgIHN0
 YXRlXy0+dXJsX3N0cmluZ18uc2V0SW5pdGlhbGl6ZWQoZmFsc2UpOworKyAgaWYgKFRTVXJsUGF0
 aFNldChzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9sb2NfLCBwYXRoLmNfc3RyKCksIHBh
 dGgubGVuZ3RoKCkpID09IFRTX1NVQ0NFU1MpIHsKKysgICAgc3RhdGVfLT5wYXRoXyA9IHBhdGg7
 CisrICAgIExPR19ERUJVRygiU2V0IHBhdGggdG8gWyVzXSIsIHBhdGguY19zdHIoKSk7CisrICB9
 IGVsc2UgeworKyAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZXQgcGF0aDsgaGRyX2J1ZiAlcCwg
 dXJsX2xvYyAlcCIsIHN0YXRlXy0+aGRyX2J1Zl8sIHN0YXRlXy0+dXJsX2xvY18pOworKyAgfQor
 K30KKysKKyt2b2lkIFVybDo6c2V0UXVlcnkoY29uc3Qgc3RkOjpzdHJpbmcgJnF1ZXJ5KSB7Cisr
 ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgeworKyAgICBMT0dfRVJST1IoIk5vdCBpbml0aWFsaXpl
 ZCIpOworKyAgICByZXR1cm47CisrICB9CisrICBzdGF0ZV8tPnVybF9zdHJpbmdfLnNldEluaXRp
 YWxpemVkKGZhbHNlKTsKKysgIGlmIChUU1VybEh0dHBRdWVyeVNldChzdGF0ZV8tPmhkcl9idWZf
 LCBzdGF0ZV8tPnVybF9sb2NfLCBxdWVyeS5jX3N0cigpLCBxdWVyeS5sZW5ndGgoKSkgPT0gVFNf
 U1VDQ0VTUykgeworKyAgICBzdGF0ZV8tPnF1ZXJ5XyA9IHF1ZXJ5OworKyAgICBMT0dfREVCVUco
 IlNldCBxdWVyeSB0byBbJXNdIiwgcXVlcnkuY19zdHIoKSk7CisrICB9IGVsc2UgeworKyAgICBM
 T0dfRVJST1IoIkNvdWxkIG5vdCBzZXQgcXVlcnk7IGhkcl9idWYgJXAsIHVybF9sb2MgJXAiLCBz
 dGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9sb2NfKTsKKysgIH0KKyt9CisrCisrdm9pZCBV
 cmw6OnNldFNjaGVtZShjb25zdCBzdGQ6OnN0cmluZyAmc2NoZW1lKSB7CisrICBpZiAoIWlzSW5p
 dGlhbGl6ZWQoKSkgeworKyAgICBMT0dfRVJST1IoIk5vdCBpbml0aWFsaXplZCIpOworKyAgICBy
 ZXR1cm47CisrICB9CisrICBzdGF0ZV8tPnVybF9zdHJpbmdfLnNldEluaXRpYWxpemVkKGZhbHNl
 KTsKKysgIGlmIChUU1VybFNjaGVtZVNldChzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9s
 b2NfLCBzY2hlbWUuY19zdHIoKSwgc2NoZW1lLmxlbmd0aCgpKSA9PSBUU19TVUNDRVNTKSB7Cisr
 ICAgIHN0YXRlXy0+c2NoZW1lXyA9IHNjaGVtZTsKKysgICAgTE9HX0RFQlVHKCJTZXQgc2NoZW1l
 IHRvIFslc10iLCBzY2hlbWUuY19zdHIoKSk7CisrICB9IGVsc2UgeworKyAgICBMT0dfRVJST1Io
 IkNvdWxkIG5vdCBzZXQgc2NoZW1lOyBoZHJfYnVmICVwLCB1cmxfbG9jICVwIiwgc3RhdGVfLT5o
 ZHJfYnVmXywgc3RhdGVfLT51cmxfbG9jXyk7CisrICB9CisrfQorKworK3ZvaWQgVXJsOjpzZXRI
 b3N0KGNvbnN0IHN0ZDo6c3RyaW5nICZob3N0KSB7CisrICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkg
 eworKyAgICBMT0dfRVJST1IoIk5vdCBpbml0aWFsaXplZCIpOworKyAgICByZXR1cm47CisrICB9
 CisrICBzdGF0ZV8tPnVybF9zdHJpbmdfLnNldEluaXRpYWxpemVkKGZhbHNlKTsKKysgIGlmIChU
 U1VybEhvc3RTZXQoc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT51cmxfbG9jXywgaG9zdC5jX3N0
 cigpLCBob3N0Lmxlbmd0aCgpKSA9PSBUU19TVUNDRVNTKSB7CisrICAgIHN0YXRlXy0+aG9zdF8g
 PSBob3N0OworKyAgICBMT0dfREVCVUcoIlNldCBob3N0IHRvIFslc10iLCBob3N0LmNfc3RyKCkp
 OworKyAgfSBlbHNlIHsKKysgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgc2V0IGhvc3Q7IGhkcl9i
 dWYgJXAsIHVybF9sb2MgJXAiLCBzdGF0ZV8tPmhkcl9idWZfLCBzdGF0ZV8tPnVybF9sb2NfKTsK
 KysgIH0KKyt9CisrCisrdm9pZCBVcmw6OnNldFBvcnQoY29uc3QgdWludDE2X3QgcG9ydCkgewor
 KyAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKysgICAgTE9HX0VSUk9SKCJOb3QgaW5pdGlhbGl6
 ZWQiKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgc3RhdGVfLT51cmxfc3RyaW5nXy5zZXRJbml0
 aWFsaXplZChmYWxzZSk7CisrICBpZiAoVFNVcmxQb3J0U2V0KHN0YXRlXy0+aGRyX2J1Zl8sIHN0
 YXRlXy0+dXJsX2xvY18sIHBvcnQpID09IFRTX1NVQ0NFU1MpIHsKKysgICAgc3RhdGVfLT5wb3J0
 XyA9IHBvcnQ7CisrICAgIExPR19ERUJVRygiU2V0IHBvcnQgdG8gJWQiLCBwb3J0KTsKKysgIH0g
 ZWxzZSB7CisrICAgIExPR19FUlJPUigiQ291bGQgbm90IHNldCBwb3J0OyBoZHJfYnVmICVwLCB1
 cmxfbG9jICVwIiwgc3RhdGVfLT5oZHJfYnVmXywgc3RhdGVfLT51cmxfbG9jXyk7CisrICB9Cisr
 fQorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvSW5pdGlhbGl6YWJsZVZhbHVl
 LmggbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9Jbml0aWFsaXphYmxlVmFsdWUuaAorLS0tIGxp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvSW5pdGlhbGl6YWJsZVZhbHVlLmgJMTk3MC0wMS0wMSAw
 ODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL0lu
 aXRpYWxpemFibGVWYWx1ZS5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICswODAwCitA
 QCAtMCwwICsxLDkwIEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJl
 IEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vu
 c2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGgg
 dGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJp
 Z2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5k
 ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5
 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRo
 ZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisr
 ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBV
 bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
 IHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
 ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
 TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExp
 Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
 CisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBA
 ZmlsZSBJbml0aWFsaXphYmxlVmFsdWUuaAorKyAqLworKworKyNwcmFnbWEgb25jZQorKyNpZm5k
 ZWYgQVRTQ1BQQVBJX0lOSVRJQUxJWkFCTEVWQUxVRV9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX0lO
 SVRJQUxJWkFCTEVWQUxVRV9IXworKworK25hbWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8vIGNh
 bm5vdCBiZSBzdGF0aWMgYXMgSW5pdGlhbGl6YWJsZVZhbHVlIGlzIGEgdGVtcGxhdGUgYW5kIGEg
 c3RhdGljCisrLy8gbWVtYmVyIG9mIHRoYXQgd291bGQgYmUgaW5zdGFudGlhdGVkIG9uY2UgZm9y
 IGV2ZXJ5IHR5cGUgdGhlCisrLy8gdGVtcGxhdGUgaXMgaW5zdGFudGlhdGVkCisrZXh0ZXJuIGJv
 b2wgdHJhbnNhY3Rpb25fZGF0YV9jYWNoaW5nX2VuYWJsZWQ7CisrCisrLyoqCisrICogQHByaXZh
 dGUKKysgKi8KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gY2xhc3MgSW5pdGlhbGl6YWJsZVZh
 bHVlIHsKKytwdWJsaWM6CisrICBJbml0aWFsaXphYmxlVmFsdWUoKSA6IGluaXRpYWxpemVkXyhm
 YWxzZSkgeyB9CisrICBleHBsaWNpdCBJbml0aWFsaXphYmxlVmFsdWUoVHlwZSB2YWx1ZSwgYm9v
 bCBpbml0aWFsaXplZCA9IHRydWUpIDogdmFsdWVfKHZhbHVlKSwgaW5pdGlhbGl6ZWRfKGluaXRp
 YWxpemVkKSB7IH0KKysKKysgIGlubGluZSB2b2lkIHNldFZhbHVlKGNvbnN0IFR5cGUgJnZhbHVl
 KSB7CisrICAgIHZhbHVlXyA9IHZhbHVlOworKyAgICBpbml0aWFsaXplZF8gPSB0cnVlOworKyAg
 fQorKworKyAgaW5saW5lIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0IHsKKysjaWZkZWYgRElT
 QUJMRV9UUkFOU0FDVElPTl9EQVRBX0NBQ0hJTkcKKysgICAgcmV0dXJuIGZhbHNlOworKyNlbmRp
 ZgorKyAgICByZXR1cm4gdHJhbnNhY3Rpb25fZGF0YV9jYWNoaW5nX2VuYWJsZWQgJiYgaW5pdGlh
 bGl6ZWRfOworKyAgfQorKworKyAgaW5saW5lIFR5cGUgJmdldFZhbHVlUmVmKCkgeworKyAgICBy
 ZXR1cm4gdmFsdWVfOworKyAgfQorKworKyAgaW5saW5lIFR5cGUgZ2V0VmFsdWUoKSB7CisrICAg
 IHJldHVybiB2YWx1ZV87CisrICB9CisrCisrICBpbmxpbmUgY29uc3QgVHlwZSAmZ2V0VmFsdWVS
 ZWYoKSBjb25zdCB7CisrICAgIHJldHVybiB2YWx1ZV87CisrICB9CisrCisrICBpbmxpbmUgdm9p
 ZCBzZXRJbml0aWFsaXplZChib29sIGluaXRpYWxpemVkID0gdHJ1ZSkgeworKyAgICBpbml0aWFs
 aXplZF8gPSBpbml0aWFsaXplZDsKKysgIH0KKysKKysgIGlubGluZSBvcGVyYXRvciBUeXBlJigp
 IHsKKysgICAgcmV0dXJuIHZhbHVlXzsKKysgIH0KKysKKysgIGlubGluZSBvcGVyYXRvciBjb25z
 dCBUeXBlJigpIGNvbnN0IHsKKysgICAgcmV0dXJuIHZhbHVlXzsKKysgIH0KKysKKysgIGlubGlu
 ZSBJbml0aWFsaXphYmxlVmFsdWU8VHlwZT4gJm9wZXJhdG9yPShjb25zdCBUeXBlJiB2YWx1ZSkg
 eworKyAgICBzZXRWYWx1ZSh2YWx1ZSk7CisrICAgIHJldHVybiAqdGhpczsKKysgIH0KKysKKytw
 cml2YXRlOgorKyAgVHlwZSB2YWx1ZV87CisrICBib29sIGluaXRpYWxpemVkXzsKKyt9OworKwor
 K30KKysKKysjZW5kaWYgLyogQVRTQ1BQQVBJX0lOSVRJQUxJWkFCTEVWQUxVRV9IXyAqLworZGlm
 ZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0FzeW5jLmggbGliL2F0
 c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvQXN5bmMuaAorLS0tIGxpYi9hdHNjcHBhcGkv
 c3JjL2luY2x1ZGUvYXRzY3BwYXBpL0FzeW5jLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAw
 MDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9Bc3luYy5o
 CTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAxNTMyMzI4ICswODAwCitAQCAtMCwwICsxLDE4NyBAQAor
 Ky8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0Yp
 IHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBT
 ZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRk
 aXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBU
 aGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGlj
 ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRo
 aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBt
 YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cu
 YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5
 IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlz
 dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
 QVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
 aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
 Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMg
 dW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUgQXN5bmMuaAorKyAq
 IEBicmllZiBQcm92aWRlcyBjb25zdHJ1Y3RzIHRvIHBlcmZvcm0gYXN5bmMgb3BlcmF0aW9ucy4K
 KysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQSV9BU1lOQ19IXworKyNk
 ZWZpbmUgQVRTQ1BQQVBJX0FTWU5DX0hfCisrI2luY2x1ZGUgPGxpc3Q+CisrI2luY2x1ZGUgPGF0
 c2NwcGFwaS9NdXRleC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvbm9uY29weWFibGUuaD4KKysj
 aW5jbHVkZSA8YXRzY3BwYXBpL3NoYXJlZF9wdHIuaD4KKysKKytuYW1lc3BhY2UgYXRzY3BwYXBp
 IHsKKysKKysvKioKKysgKiBAcHJpdmF0ZQorKyAqCisrICogQGJyaWVmIFRoaXMgY2xhc3MgcmVw
 cmVzZW50cyB0aGUgaW50ZXJmYWNlIG9mIGEgZGlzcGF0Y2ggY29udHJvbGxlci4gQSBkaXNwYXRj
 aCBjb250cm9sbGVyCisrICogaXMgdXNlZCB0byBkaXNwYXRjaCBhbiBldmVudCB0byBhIHJlY2Vp
 dmVyLiBUaGlzIGludGVyZmFjZSBleGlzdHMgc28gdGhhdCB0aGUgdHlwZXMgaW4gdGhpcworKyAq
 IGhlYWRlciBmaWxlIGNhbiBiZSBkZWZpbmVkLgorKyAqLworK2NsYXNzIEFzeW5jRGlzcGF0Y2hD
 b250cm9sbGVyQmFzZSA6IG5vbmNvcHlhYmxlIHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIERp
 c3BhdGNoZXMgYW4gYXN5bmMgZXZlbnQgdG8gYSByZWNlaXZlci4KKysgICAqCisrICAgKiBAcmV0
 dXJuIFRydWUgaWYgdGhlIHJlY2VpdmVyIHdhcyBzdGlsbCBhbGl2ZS4KKysgICAqLworKyAgdmly
 dHVhbCBib29sIGRpc3BhdGNoKCkgPSAwOworKyAgdmlydHVhbCB+QXN5bmNEaXNwYXRjaENvbnRy
 b2xsZXJCYXNlKCkgeyB9CisrfTsKKysKKysvKioKKysgKiBAYnJpZWYgQXN5bmNQcm92aWRlciBp
 cyB0aGUgaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXJzIG9mIGFzeW5jIG9wZXJhdGlvbnMgbXVzdCBp
 bXBsZW1lbnQuIAorKyAqIFRoZSBzeXN0ZW0gYWxsb3dzIGRlY291cGxpbmcgb2YgdGhlIGxpZmV0
 aW1lL3Njb3BlIG9mIHByb3ZpZGVyIGFuZCByZWNlaXZlciBvYmplY3RzLiBUaGUgCisrICogcmVj
 ZWl2ZXIgb2JqZWN0IG1pZ2h0IGhhdmUgZXhwaXJlZCBiZWZvcmUgdGhlIGFzeW5jIG9wZXJhdGlv
 biBpcyBjb21wbGV0ZSBhbmQgdGhlIHN5c3RlbQorKyAqIGhhbmRsZXMgdGhpcyBjYXNlLiBCZWNh
 dXNlIG9mIHRoaXMgZGVjb3VwbGluZywgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBw
 cm92aWRlcgorKyAqIHRvIG1hbmFnZSBpdCdzIGV4cGlyYXRpb24gLSBzZWxmLWRlc3RydWN0IG9u
 IGNvbXBsZXRpb24gaXMgYSBnb29kIG9wdGlvbi4KKysgKi8KKytjbGFzcyBBc3luY1Byb3ZpZGVy
 IHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbiB0
 aGUgYXN5bmMgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZC4gVGhpcyBjYWxsIHNob3VsZCBiZSB1c2Vk
 CisrICAgKiB0byBqdXN0IHN0YXJ0IHRoZSBhc3luYyBvcGVyYXRpb24gYW5kICpub3QqIGJsb2Nr
 IHRoaXMgdGhyZWFkLgorKyAgICoKKysgICAqIEBwYXJhbSBkaXNwYXRjaF9jb250cm9sbGVyIHBy
 b3ZpZGVzIGEgd2F5IHRvIGRpc3BhdGNoIGFuICJhc3luYyBjb21wbGV0ZSIgZXZlbnQgdG8gdGhl
 CisrICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZXIuCisrICAgKi8KKysg
 IHZpcnR1YWwgdm9pZCBydW4oc2hhcmVkX3B0cjxBc3luY0Rpc3BhdGNoQ29udHJvbGxlckJhc2U+
 IGRpc3BhdGNoX2NvbnRyb2xsZXIpID0gMDsKKysgIHZpcnR1YWwgfkFzeW5jUHJvdmlkZXIoKSB7
 IH0KKyt9OworKworKy8qKgorKyAqIEBwcml2YXRlCisrICoKKysgKiBAYnJpZWYgRGlzcGF0Y2gg
 Y29udHJvbGxlciBpbXBsZW1lbnRhdGlvbi4gV2hlbiBpbnZva2luZyB0aGUgcmVjZWl2ZXIsIGl0
 IHZlcmlmaWVzIHRoYXQgdGhlCisrICogcmVjZWl2ZXIgaXMgc3RpbGwgYWxpdmUsIGxvY2tzIHRo
 ZSBtdXRleCBhbmQgdGhlbiBpbnZva2VzIGhhbmRsZUFzeW5jQ29tcGxldGUoKS4KKysgKi8KKyt0
 ZW1wbGF0ZTx0eXBlbmFtZSBBc3luY0V2ZW50UmVjZWl2ZXJUeXBlLCB0eXBlbmFtZSBBc3luY1By
 b3ZpZGVyVHlwZT4KKytjbGFzcyBBc3luY0Rpc3BhdGNoQ29udHJvbGxlciA6IHB1YmxpYyBBc3lu
 Y0Rpc3BhdGNoQ29udHJvbGxlckJhc2UgeworK3B1YmxpYzoKKysgIGJvb2wgZGlzcGF0Y2goKSB7
 CisrICAgIGJvb2wgcmV0ID0gZmFsc2U7CisrICAgIFNjb3BlZFNoYXJlZE11dGV4TG9jayBzY29w
 ZWRMb2NrKGRpc3BhdGNoX211dGV4Xyk7CisrICAgIGlmIChldmVudF9yZWNlaXZlcl8pIHsKKysg
 ICAgICBldmVudF9yZWNlaXZlcl8tPmhhbmRsZUFzeW5jQ29tcGxldGUoc3RhdGljX2Nhc3Q8QXN5
 bmNQcm92aWRlclR5cGUgJj4oKnByb3ZpZGVyXykpOworKyAgICAgIHJldCA9IHRydWU7CisrICAg
 IH0KKysgICAgcmV0dXJuIHJldDsKKysgIH0KKysKKysgIC8qKgorKyAgICogQ29uc3RydWN0b3IK
 KysgICAqCisrICAgKiBAcGFyYW0gZXZlbnRfcmVjZWl2ZXIgVGhlIGFzeW5jIGNvbXBsZXRlIGV2
 ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGlzIHJlY2VpdmVyLgorKyAgICogQHBhcmFtIHBy
 b3ZpZGVyIEFzeW5jIG9wZXJhdGlvbiBwcm92aWRlciB0aGF0IGlzIHBhc3NlZCB0byB0aGUgcmVj
 ZWl2ZXIgb24gZGlzcGF0Y2guCisrICAgKiBAcGFyYW0gbXV0ZXggTXV0ZXggb2YgdGhlIHJlY2Vp
 dmVyIHRoYXQgaXMgbG9ja2VkIGR1cmluZyB0aGUgZGlzcGF0Y2gKKysgICAqLworKyAgQXN5bmNE
 aXNwYXRjaENvbnRyb2xsZXIoQXN5bmNFdmVudFJlY2VpdmVyVHlwZSAqZXZlbnRfcmVjZWl2ZXIs
 IEFzeW5jUHJvdmlkZXJUeXBlICpwcm92aWRlciwgc2hhcmVkX3B0cjxNdXRleD4gbXV0ZXgpIDoK
 KysgICAgZXZlbnRfcmVjZWl2ZXJfKGV2ZW50X3JlY2VpdmVyKSwgZGlzcGF0Y2hfbXV0ZXhfKG11
 dGV4KSwgcHJvdmlkZXJfKHByb3ZpZGVyKSB7CisrICB9CisrCisrICB2aXJ0dWFsIH5Bc3luY0Rp
 c3BhdGNoQ29udHJvbGxlcigpIHsgfQorK3B1YmxpYzoKKysgIEFzeW5jRXZlbnRSZWNlaXZlclR5
 cGUgKmV2ZW50X3JlY2VpdmVyXzsKKysgIHNoYXJlZF9wdHI8TXV0ZXg+IGRpc3BhdGNoX211dGV4
 XzsKKytwcml2YXRlOgorKyAgQXN5bmNQcm92aWRlclR5cGUgKnByb3ZpZGVyXzsKKyt9OworKwor
 Ky8qKgorKyAqIEBwcml2YXRlCisrICogCisrICogQGJyaWVmIEEgcHJvbWlzZSBpcyB1c2VkIHRv
 IGxldCB0aGUgZGlzcGF0Y2ggY29udHJvbGxlciBrbm93IGlmIHRoZSByZWNlaXZlciBpcyBzdGls
 bAorKyAqIGFsaXZlIHRvIHJlY2VpdmUgdGhlIGFzeW5jIGNvbXBsZXRlIGRpc3BhdGNoLiBXaGVu
 IHRoZSByZWNlaXZlciBkaWVzLCB0aGlzIHByb21pc2UgaXMKKysgKiBicm9rZW4gYW5kIGl0IGF1
 dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgZGlzcGF0Y2ggY29udHJvbGxlci4KKysgKi8KKyt0ZW1w
 bGF0ZTx0eXBlbmFtZSBBc3luY0V2ZW50UmVjZWl2ZXJUeXBlLCB0eXBlbmFtZSBBc3luY1Byb3Zp
 ZGVyVHlwZT4KKytjbGFzcyBBc3luY1JlY2VpdmVyUHJvbWlzZSA6IG5vbmNvcHlhYmxlIHsKKytw
 dWJsaWM6CisrICBBc3luY1JlY2VpdmVyUHJvbWlzZShzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hD
 b250cm9sbGVyPEFzeW5jRXZlbnRSZWNlaXZlclR5cGUsIEFzeW5jUHJvdmlkZXJUeXBlPiA+IGRp
 c3BhdGNoX2NvbnRyb2xsZXIpIDoKKysgICAgZGlzcGF0Y2hfY29udHJvbGxlcl8oZGlzcGF0Y2hf
 Y29udHJvbGxlcikgeyB9CisrCisrICB+QXN5bmNSZWNlaXZlclByb21pc2UoKSB7CisrICAgIFNj
 b3BlZFNoYXJlZE11dGV4TG9jayBzY29wZWRMb2NrKGRpc3BhdGNoX2NvbnRyb2xsZXJfLT5kaXNw
 YXRjaF9tdXRleF8pOworKyAgICBkaXNwYXRjaF9jb250cm9sbGVyXy0+ZXZlbnRfcmVjZWl2ZXJf
 ID0gTlVMTDsKKysgIH0KKytwcm90ZWN0ZWQ6CisrICBzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hD
 b250cm9sbGVyPEFzeW5jRXZlbnRSZWNlaXZlclR5cGUsIEFzeW5jUHJvdmlkZXJUeXBlPiA+IGRp
 c3BhdGNoX2NvbnRyb2xsZXJfOworK307CisrCisrLyoqCisrICogQGJyaWVmIEFzeW5jUmVjZWl2
 ZXIgaXMgdGhlIGludGVyZmFjZSB0aGF0IHJlY2VpdmVycyBvZiBhc3luYyBvcGVyYXRpb25zIG11
 c3QgaW1wbGVtZW50LiBJdCBpcworKyAqIHRlbXBsYXRlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYXN5
 bmMgb3BlcmF0aW9uIHByb3ZpZGVyLgorKyAqLworK3RlbXBsYXRlPHR5cGVuYW1lIEFzeW5jUHJv
 dmlkZXJUeXBlPgorK2NsYXNzIEFzeW5jUmVjZWl2ZXIgOiBub25jb3B5YWJsZSB7CisrcHVibGlj
 OgorKyAgLyoqCisrICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gdGhlIGFzeW5jIG9w
 ZXJhdGlvbiBpcyBjb21wbGV0ZWQuIFRoZQorKyAgICogbXV0ZXggcHJvdmlkZWQgZHVyaW5nIHRo
 ZSBjcmVhdGlvbiBvZiB0aGUgYXN5bmMgb3BlcmF0aW9uIHdpbGwgYmUKKysgICAqIGF1dG9tYXRp
 Y2FsbHkgbG9ja2VkIGR1cmluZyB0aGUgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZC4KKysgICAq
 CisrICAgKiBAcGFyYW0gcHJvdmlkZXIgQSByZWZlcmVuY2UgdG8gdGhlIHByb3ZpZGVyIHdoaWNo
 IGNvbXBsZXRlZCB0aGUgYXN5bmMgb3BlcmF0aW9uLgorKyAgICovCisrICB2aXJ0dWFsIHZvaWQg
 aGFuZGxlQXN5bmNDb21wbGV0ZShBc3luY1Byb3ZpZGVyVHlwZSAmcHJvdmlkZXIpID0gMDsKKysg
 IHZpcnR1YWwgfkFzeW5jUmVjZWl2ZXIoKSB7IH0KKytwcm90ZWN0ZWQ6CisrICBBc3luY1JlY2Vp
 dmVyKCkgeyB9CisrICBmcmllbmQgY2xhc3MgQXN5bmM7CisrcHJpdmF0ZToKKysgIG11dGFibGUg
 c3RkOjpsaXN0PHNoYXJlZF9wdHI8QXN5bmNSZWNlaXZlclByb21pc2U8QXN5bmNSZWNlaXZlcjxB
 c3luY1Byb3ZpZGVyVHlwZT4sIEFzeW5jUHJvdmlkZXJUeXBlPiA+ID4gcmVjZWl2ZXJfcHJvbWlz
 ZXNfOworK307CisrCisrLyoqCisrICogQGJyaWVmIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBtZXRo
 b2QgdG8gY3JlYXRlIGFuIGFzeW5jIG9wZXJhdGlvbi4KKysgKi8KKytjbGFzcyBBc3luYyA6IG5v
 bmNvcHlhYmxlIHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIFRoaXMgbWV0aG9kIHNldHMgdXAg
 dGhlIGRpc3BhdGNoIGNvbnRyb2xsZXIgdG8gbGluayB0aGUgYXN5bmMgb3BlcmF0aW9uIHByb3Zp
 ZGVyIGFuZCAKKysgICAqIHJlY2VpdmVyIGFuZCB0aGVuIGluaXRpYXRlcyB0aGUgb3BlcmF0aW9u
 IGJ5IGludm9raW5nIHRoZSBwcm92aWRlci4gCisrICAgKgorKyAgICogQHBhcmFtIGV2ZW50X3Jl
 Y2VpdmVyIFRoZSByZWNlaXZlciBvZiB0aGUgYXN5bmMgY29tcGxldGUgZGlzcGF0Y2guCisrICAg
 KiBAcGFyYW0gcHJvdmlkZXIgVGhlIHByb3ZpZGVyIG9mIHRoZSBhc3luYyBvcGVyYXRpb24uCisr
 ICAgKiBAcGFyYW0gbXV0ZXggVGhlIG11dGV4IHRoYXQgaXMgbG9ja2VkIGR1cmluZyB0aGUgZGlz
 cGF0Y2ggb2YgdGhlIGFzeW5jIGV2ZW50IGNvbXBsZXRlLgorKyAgICogICAgICAgICAgICAgIE9u
 ZSB3aWxsIGJlIGNyZWF0ZWQgaWYgbm90aGluZyBpcyBwYXNzZWQgaW4uIFRyYW5zYWN0aW9uIHBs
 dWdpbnMgc2hvdWxkIHVzZSAKKysgICAqICAgICAgICAgICAgICBUcmFuc2FjdGlvblBsdWdpbjo6
 Z2V0TXV0ZXgoKSBoZXJlIGFuZCBnbG9iYWwgcGx1Z2lucyBjYW4gcGFzcyBhbiBhcHByb3ByaWF0
 ZQorKyAgICogICAgICAgICAgICAgIG9yIE5VTEwgbXV0ZXguCisrICAgKi8KKysgIHRlbXBsYXRl
 PHR5cGVuYW1lIEFzeW5jUHJvdmlkZXJUeXBlPgorKyAgc3RhdGljIHZvaWQgZXhlY3V0ZShBc3lu
 Y1JlY2VpdmVyPEFzeW5jUHJvdmlkZXJUeXBlPiAqZXZlbnRfcmVjZWl2ZXIsIEFzeW5jUHJvdmlk
 ZXJUeXBlICpwcm92aWRlciwgc2hhcmVkX3B0cjxNdXRleD4gbXV0ZXgpIHsKKysgICAgaWYgKCFt
 dXRleC5nZXQoKSkgeworKyAgICAgIG11dGV4LnJlc2V0KG5ldyBNdXRleChNdXRleDo6VFlQRV9S
 RUNVUlNJVkUpKTsKKysgICAgfQorKyAgICBzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hDb250cm9s
 bGVyPEFzeW5jUmVjZWl2ZXI8QXN5bmNQcm92aWRlclR5cGU+LCBBc3luY1Byb3ZpZGVyVHlwZSA+
 ID4gZGlzcGF0Y2hlcigKKysgICAgICBuZXcgQXN5bmNEaXNwYXRjaENvbnRyb2xsZXI8QXN5bmNS
 ZWNlaXZlcjxBc3luY1Byb3ZpZGVyVHlwZT4sIEFzeW5jUHJvdmlkZXJUeXBlID4oZXZlbnRfcmVj
 ZWl2ZXIsIHByb3ZpZGVyLCBtdXRleCkpOworKyAgICBzaGFyZWRfcHRyPEFzeW5jUmVjZWl2ZXJQ
 cm9taXNlPEFzeW5jUmVjZWl2ZXI8QXN5bmNQcm92aWRlclR5cGU+LCBBc3luY1Byb3ZpZGVyVHlw
 ZSA+ID4gcmVjZWl2ZXJfcHJvbWlzZSgKKysgICAgICBuZXcgQXN5bmNSZWNlaXZlclByb21pc2U8
 QXN5bmNSZWNlaXZlcjxBc3luY1Byb3ZpZGVyVHlwZT4sIEFzeW5jUHJvdmlkZXJUeXBlID4oZGlz
 cGF0Y2hlcikpOworKyAgICBldmVudF9yZWNlaXZlci0+cmVjZWl2ZXJfcHJvbWlzZXNfLnB1c2hf
 YmFjayhyZWNlaXZlcl9wcm9taXNlKTsgLy8gbm93IGlmIHRoZSBldmVudCByZWNlaXZlciBkaWVz
 LCB3ZSdyZSBzYWZlLgorKyAgICBwcm92aWRlci0+cnVuKGRpc3BhdGNoZXIpOworKyAgfQorK307
 CisrCisrfQorKworKworKyNlbmRpZiAvKiBBVFNDUFBBUElfQVNZTkNfSF8gKi8KK2RpZmYgLXJ1
 TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9Bc3luY0h0dHBGZXRjaC5oIGxp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0FzeW5jSHR0cEZldGNoLmgKKy0tLSBs
 aWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9Bc3luY0h0dHBGZXRjaC5oCTE5NzAt
 MDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvaW5j
 bHVkZS9hdHNjcHBhcGkvQXN5bmNIdHRwRmV0Y2guaAkyMDEzLTExLTExIDE0OjAzOjEyLjY5OTUz
 MjQ3OSArMDgwMAorQEAgLTAsMCArMSwxMDIgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBB
 cGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29u
 dHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlz
 dHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJl
 Z2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUK
 KysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysg
 ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
 Y2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
 Y2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
 RS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
 dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
 IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJ
 RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
 KysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
 ZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLwor
 KworKy8qKgorKyAqIEBmaWxlIEFzeW5jSHR0cEZldGNoLmgKKysgKi8KKysKKysjcHJhZ21hIG9u
 Y2UKKysjaWZuZGVmIEFUU0NQUEFQSV9BU1lOQ0hUVFBGRVRDSF9IXworKyNkZWZpbmUgQVRTQ1BQ
 QVBJX0FTWU5DSFRUUEZFVENIX0hfCisrCisrI2luY2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8
 YXRzY3BwYXBpL3NoYXJlZF9wdHIuaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0FzeW5jLmg+Cisr
 I2luY2x1ZGUgPGF0c2NwcGFwaS9SZXF1ZXN0Lmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9SZXNw
 b25zZS5oPgorKworK25hbWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8vIGZvcndhcmQgZGVjbGFy
 YXRpb25zCisrc3RydWN0IEFzeW5jSHR0cEZldGNoU3RhdGU7CisrbmFtZXNwYWNlIHV0aWxzIHsg
 Y2xhc3MgaW50ZXJuYWw7IH0KKysKKysvKioKKysgKiBAYnJpZWYgVGhpcyBjbGFzcyBwcm92aWRl
 cyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBBc3luY1Byb3ZpZGVyIHRoYXQKKysgKiBtYWtlcyBIVFRQ
 IHJlcXVlc3RzIGFzeW5jaHJvbm91c2x5LiBUaGlzIHByb3ZpZGVyIGF1dG9tYXRpY2FsbHkKKysg
 KiBzZWxmLWRlc3RydWN0cyBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdC4KKysg
 KgorKyAqIFNlZSBleGFtcGxlIGFzeW5jX2h0dHBfZmV0Y2ggZm9yIHNhbXBsZSB1c2FnZS4KKysg
 Ki8KKytjbGFzcyBBc3luY0h0dHBGZXRjaCA6IHB1YmxpYyBBc3luY1Byb3ZpZGVyIHsKKytwdWJs
 aWM6CisrICBBc3luY0h0dHBGZXRjaChjb25zdCBzdGQ6OnN0cmluZyAmdXJsX3N0ciwgSHR0cE1l
 dGhvZCBodHRwX21ldGhvZCA9IEhUVFBfTUVUSE9EX0dFVCk7CisrCisrICAvKioKKysgICAqIFVz
 ZWQgdG8gbWFuaXB1bGF0ZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVxdWVzdCB0byBiZSBtYWRlLgor
 KyAgICoKKysgICAqIEByZXR1cm4gQSByZWZlcmVuY2UgdG8gbXV0YWJsZSBoZWFkZXJzLgorKyAg
 ICovCisrICBIZWFkZXJzICZnZXRSZXF1ZXN0SGVhZGVycygpOworKworKyAgZW51bSBSZXN1bHQg
 eyBSRVNVTFRfU1VDQ0VTUyA9IDEwMDAwLCBSRVNVTFRfVElNRU9VVCwgUkVTVUxUX0ZBSUxVUkUg
 fTsKKysKKysgIC8qKgorKyAgICogVXNlZCB0byBleHRyYWN0IHRoZSByZXNwb25zZSBhZnRlciBy
 ZXF1ZXN0IGNvbXBsZXRpb24uIAorKyAgICoKKysgICAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSBv
 cGVyYXRpb24KKysgICAqLworKyAgUmVzdWx0IGdldFJlc3VsdCgpIGNvbnN0OworKworKyAgLyoq
 CisrICAgKiBAcmV0dXJuIE5vbi1tdXRhYmxlIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBVUkwu
 CisrICAgKi8KKysgIGNvbnN0IFVybCAmZ2V0UmVxdWVzdFVybCgpIGNvbnN0OworKworKyAgLyoq
 CisrICAgKiBVc2VkIHRvIGV4dHJhY3QgdGhlIHJlc3BvbnNlIGFmdGVyIHJlcXVlc3QgY29tcGxl
 dGlvbi4gCisrICAgKgorKyAgICogQHJldHVybiBOb24tbXV0YWJsZSByZWZlcmVuY2UgdG8gdGhl
 IHJlc3BvbnNlLgorKyAgICovCisrICBjb25zdCBSZXNwb25zZSAmZ2V0UmVzcG9uc2UoKSBjb25z
 dDsKKysKKysgIC8qKgorKyAgICogVXNlZCB0byBleHRyYWN0IHRoZSBib2R5IG9mIHRoZSByZXNw
 b25zZSBhZnRlciByZXF1ZXN0IGNvbXBsZXRpb24uIE9uCisrICAgKiB1bnN1Y2Nlc3NmdWwgY29t
 cGxldGlvbiwgdmFsdWVzIChOVUxMLCAwKSBhcmUgc2V0LgorKyAgICoKKysgICAqIEBwYXJhbSBi
 b2R5IE91dHB1dCBhcmd1bWVudDsgd2lsbCBwb2ludCB0byB0aGUgYm9keQorKyAgICogQHBhcmFt
 IGJvZHlfc2l6ZSBPdXRwdXQgYXJndW1lbnQ7IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUg
 Ym9keSAKKysgICAqIAorKyAgICovCisrICB2b2lkIGdldFJlc3BvbnNlQm9keShjb25zdCB2b2lk
 IComYm9keSwgc2l6ZV90ICZib2R5X3NpemUpIGNvbnN0OworKworKyAgdmlydHVhbCB+QXN5bmNI
 dHRwRmV0Y2goKTsKKysKKysgIC8qKgorKyAgICogU3RhcnRzIGEgSFRUUCBmZXRjaCBvZiB0aGUg
 UmVxdWVzdCBjb250YWluZWQuCisrICAgKi8gIAorKyAgdmlydHVhbCB2b2lkIHJ1bihzaGFyZWRf
 cHRyPEFzeW5jRGlzcGF0Y2hDb250cm9sbGVyQmFzZT4gZGlzcGF0Y2hfY29udHJvbGxlcik7Cisr
 CisrcHJpdmF0ZToKKysgIEFzeW5jSHR0cEZldGNoU3RhdGUgKnN0YXRlXzsKKysgIGZyaWVuZCBj
 bGFzcyB1dGlsczo6aW50ZXJuYWw7CisrfTsKKysKKyt9IC8qIGF0c2NwcGFwaSAqLworKworKyNl
 bmRpZiAvKiBBVFNDUFBBUElfQVNZTkNIVFRQRkVUQ0hfSF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRz
 Y3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9Bc3luY1RpbWVyLmggbGliL2F0c2NwcGFwaS9z
 cmMvaW5jbHVkZS9hdHNjcHBhcGkvQXN5bmNUaW1lci5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvQXN5bmNUaW1lci5oCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAw
 MDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvQXN5bmNU
 aW1lci5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNjk5NTMyNDc5ICswODAwCitAQCAtMCwwICsxLDc4
 IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24g
 KEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50
 cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZv
 ciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hp
 cC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNo
 ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1
 c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAg
 WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDov
 L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWly
 ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisr
 ICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
 SVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
 TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
 ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0
 aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBBc3luY1Rp
 bWVyLmgKKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQSV9BU1lOQ1RJ
 TUVSX0hfCisrI2RlZmluZSBBVFNDUFBBUElfQVNZTkNUSU1FUl9IXworKworKyNpbmNsdWRlIDxz
 dHJpbmc+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9zaGFyZWRfcHRyLmg+CisrI2luY2x1ZGUgPGF0
 c2NwcGFwaS9Bc3luYy5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvUmVxdWVzdC5oPgorKyNpbmNs
 dWRlIDxhdHNjcHBhcGkvUmVzcG9uc2UuaD4KKysKKytuYW1lc3BhY2UgYXRzY3BwYXBpIHsKKysK
 KysvLyBmb3J3YXJkIGRlY2xhcmF0aW9ucworK3N0cnVjdCBBc3luY1RpbWVyU3RhdGU7CisrCisr
 LyoqCisrICogQGJyaWVmIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2Yg
 QXN5bmNQcm92aWRlciB0aGF0CisrICogYWN0cyBhcyBhIHRpbWVyLiBJdCBzZW5kcyBldmVudHMg
 YXQgdGhlIHNldCBmcmVxdWVuY3kuIENhbGxpbmcgdGhlCisrICogZGVzdHJ1Y3RvciB3aWxsIHN0
 b3AgdGhlIGV2ZW50cy4gQSBvbmUtb2ZmIHRpbWVyIGp1c3Qgc2VuZHMgb25lCisrICogZXZlbnQu
 IENhbGxpbmcgdGhlIGRlc3RydWN0b3IgYmVmb3JlIHRoaXMgZXZlbnQgd2lsbCBjYW5jZWwgdGhl
 IHRpbWVyLgorKyAqIAorKyAqIEZvciBlaXRoZXIgdHlwZSwgdXNlciBtdXN0IGRlbGV0ZSB0aGUg
 dGltZXIuCisrICoKKysgKiBTZWUgZXhhbXBsZSBhc3luY190aW1lciBmb3Igc2FtcGxlIHVzYWdl
 LgorKyAqLworK2NsYXNzIEFzeW5jVGltZXIgOiBwdWJsaWMgQXN5bmNQcm92aWRlciB7CisrcHVi
 bGljOgorKworKyAgZW51bSBUeXBlIHsgVFlQRV9PTkVfT0ZGID0gMCwgVFlQRV9QRVJJT0RJQyB9
 OworKworKyAgLyoqCisrICAgKiBDb25zdHJ1Y3Rvci4KKysgICAqIAorKyAgICogQHBhcmFtIHR5
 cGUgQSBvbmUtb2ZmIHRpbWVyIGZpcmVzIG9ubHkgb25jZSBhbmQgYSBwZXJpb2RpYyB0aW1lciBm
 aXJlcyBwZXJpb2RpY2FsbHkuCisrICAgKiBAcGFyYW0gcGVyaW9kX2luX21zIFRoZSByZWNlaXZl
 ciB3aWxsIHJlY2VpdmUgYW4gZXZlbnQgZXZlcnkgdGhpcyBtYW55IG1pbGxpc2Vjb25kcy4KKysg
 ICAqIEBwYXJhbSBpbml0aWFsX3BlcmlvZF9pbl9tcyBUaGUgZmlyc3QgZXZlbnQgd2lsbCBhcnJp
 dmUgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcy4gU3Vic2VxdWVudAorKyAgICogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB3aWxsIGhhdmUgInJlZ3VsYXIiIGNhZGVuY2Uu
 IFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB0aW1lciBpcworKyAgICogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIHNldCBmb3IgYSBsb25nIHBlcmlvZCBvZiB0aW1lICgxaHIgZXRjLiksIGJ1dCBh
 biBpbml0aWFsIGV2ZW50IGlzCisrICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
 dWlyZWQuIFZhbHVlIG9mIDAgKGRlZmF1bHQpIGluZGljYXRlcyBubyBpbml0aWFsIGV2ZW50IGlz
 IGRlc2lyZWQuCisrICAgKi8KKysgIEFzeW5jVGltZXIoVHlwZSB0eXBlLCBpbnQgcGVyaW9kX2lu
 X21zLCBpbnQgaW5pdGlhbF9wZXJpb2RfaW5fbXMgPSAwKTsKKysKKysgIHZpcnR1YWwgfkFzeW5j
 VGltZXIoKTsKKysKKysgIC8qKgorKyAgICogU3RhcnRzIHRoZSB0aW1lci4KKysgICAqLyAgCisr
 ICB2b2lkIHJ1bihzaGFyZWRfcHRyPEFzeW5jRGlzcGF0Y2hDb250cm9sbGVyQmFzZT4gZGlzcGF0
 Y2hfY29udHJvbGxlcik7CisrCisrcHJpdmF0ZToKKysgIEFzeW5jVGltZXJTdGF0ZSAqc3RhdGVf
 OworK307CisrCisrfSAvKiBhdHNjcHBhcGkgKi8KKysKKysjZW5kaWYgLyogQVRTQ1BQQVBJX0FT
 WU5DVElNRVJfSF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2Nw
 cGFwaS9DYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yLmggbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvci5oCistLS0g
 bGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvQ2FzZUluc2Vuc2l0aXZlU3RyaW5n
 Q29tcGFyYXRvci5oCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29t
 cGFyYXRvci5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAwNTMyNTY0ICswODAwCitAQCAtMCwwICsx
 LDUxIEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRp
 b24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVt
 ZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3Jr
 IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVy
 c2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFw
 YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
 dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNl
 LiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0
 cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVx
 dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
 CisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
 QVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
 IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9y
 IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1p
 dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysvKioKKysgKiBAZmlsZSBDYXNlSW5z
 ZW5zaXRpdmVTdHJpbmdDb21wYXJhdG9yLmgKKysgKiBAYnJpZWYgQSBjYXNlIGluc2Vuc2l0aXZl
 IGNvbXBhcmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIFNUTCBjb250YWluZXJzLgorKyAqLwor
 KworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQQVBJX0NBU0VfSU5TRU5TSVRJVkVfU1RS
 SU5HX0NPTVBBUkFUT1JfSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9DQVNFX0lOU0VOU0lUSVZFX1NU
 UklOR19DT01QQVJBVE9SX0hfCisrCisrI2luY2x1ZGUgPHN0cmluZz4KKysKKytuYW1lc3BhY2Ug
 YXRzY3BwYXBpIHsKKysKKysvKioKKysgKiBAYnJpZWYgQSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBh
 cmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHN0YW5kYXJkIGxpYnJhcnkgY29udGFpbmVycy4K
 KysgKgorKyAqIFRoZSBwcmltYXJ5IHVzZSBmb3IgdGhpcyBjbGFzcyBpcyB0byBtYWtlIGFsbCBI
 ZWFkZXJzIGNhc2UgaW5zZW5zaXRpdmUuCisrICovCisrY2xhc3MgQ2FzZUluc2Vuc2l0aXZlU3Ry
 aW5nQ29tcGFyYXRvciB7CisrcHVibGljOgorKyAgLyoqCisrICAgKiBAcmV0dXJuIHRydWUgaWYg
 bGhzIGlzIGxleGljb2dyYXBoaWNhbGx5ICJsZXNzLXRoYW4iIHJoczsgbWVhbnQgZm9yIHVzZSBp
 biBzdGQ6Om1hcCBvciBvdGhlciBzdGFuZGFyZCBsaWJyYXJ5IGNvbnRhaW5lcnMuCisrICAgKi8K
 KysgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyAmbGhzLCBjb25zdCBzdGQ6OnN0
 cmluZyAmcmhzKSBjb25zdDsKKysKKysgIC8qKgorKyAgICogQHJldHVybiBudW1lcmljYWwgdmFs
 dWUgb2YgbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gYSBsYSBzdHJjbXAKKysgICAqLworKyAg
 aW50IGNvbXBhcmUoY29uc3Qgc3RkOjpzdHJpbmcgJmxocywgY29uc3Qgc3RkOjpzdHJpbmcgJnJo
 cykgY29uc3Q7CisrfTsKKysKKyt9CisrCisrI2VuZGlmCitkaWZmIC1ydU4gbGliL2F0c2NwcGFw
 aS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvQ2xpZW50UmVxdWVzdC5oIGxpYi9hdHNjcHBhcGkvc3Jj
 L2luY2x1ZGUvYXRzY3BwYXBpL0NsaWVudFJlcXVlc3QuaAorLS0tIGxpYi9hdHNjcHBhcGkvc3Jj
 L2luY2x1ZGUvYXRzY3BwYXBpL0NsaWVudFJlcXVlc3QuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAw
 MDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0Ns
 aWVudFJlcXVlc3QuaAkyMDEzLTExLTExIDE0OjAzOjEyLjcwMDUzMjU2NCArMDgwMAorQEAgLTAs
 MCArMSw1OSBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFn
 cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMg
 d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNz
 IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
 d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
 IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNl
 IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUg
 Q2xpZW50UmVxdWVzdC5oCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBB
 UElfQ0xJRU5UUkVRVUVTVF9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX0NMSUVOVFJFUVVFU1RfSF8K
 KysKKysjaW5jbHVkZSA8YXRzY3BwYXBpL1JlcXVlc3QuaD4KKysKKytuYW1lc3BhY2UgYXRzY3Bw
 YXBpIHsKKysKKytzdHJ1Y3QgQ2xpZW50UmVxdWVzdFN0YXRlOworKworKy8qKgorKyAqIEBicmll
 ZiBFbmNhcHN1bGF0ZXMgYSBjbGllbnQgcmVxdWVzdC4gQSBjbGllbnQgcmVxdWVzdCBpcyBkaWZm
 ZXJlbnQgZnJvbSBhCisrICogc2VydmVyIHJlcXVlc3QgYXMgaXQgaGFzIHR3byBVUkxzIC0gdGhl
 IHByaXN0aW5lIFVSTCBzZW50IGJ5IHRoZSBjbGllbnQgCisrICogYW5kIGEgcmVtYXBwZWQgVVJM
 IGNyZWF0ZWQgYnkgdGhlIHNlcnZlci4KKysgKi8KKytjbGFzcyBDbGllbnRSZXF1ZXN0IDogcHVi
 bGljIFJlcXVlc3QgeworK3B1YmxpYzoKKysgIC8qKgorKyAgICogQHByaXZhdGUKKysgICAqLwor
 KyAgQ2xpZW50UmVxdWVzdCh2b2lkICpyYXdfdHhuLCB2b2lkICpoZHJfYnVmLCB2b2lkICpoZHJf
 bG9jKTsKKysKKysgIC8qKgorKyAgICogUmV0dXJucyB0aGUgcHJpc3RpbmUgKHByZS1yZW1hcCkg
 Y2xpZW50IHJlcXVlc3QgVVJMIAorKyAgICoKKysgICAqIEByZXR1cm4gVXJsIFJlZmVyZW5jZSB0
 byBub24tbXV0YWJsZSBwcmlzdGluZSBVUkwuCisrICAgKi8KKysgIGNvbnN0IFVybCAmZ2V0UHJp
 c3RpbmVVcmwoKSBjb25zdDsKKysKKysgIH5DbGllbnRSZXF1ZXN0KCk7CisrcHJpdmF0ZToKKysg
 IENsaWVudFJlcXVlc3RTdGF0ZSAqc3RhdGVfOworK307CisrCisrfQorKworKyNlbmRpZiAvKiBB
 VFNDUFBBUElfQ0xJRU5UUkVRVUVTVF9IXyAqLworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3Jj
 L2luY2x1ZGUvYXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1
 ZGUvYXRzY3BwYXBpL0dsb2JhbFBsdWdpbi5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVk
 ZS9hdHNjcHBhcGkvR2xvYmFsUGx1Z2luLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAg
 KzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9HbG9iYWxQbHVn
 aW4uaAkyMDEzLTExLTExIDE0OjAzOjEyLjcwMDUzMjU2NCArMDgwMAorQEAgLTAsMCArMSw5MCBA
 QAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChB
 U0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMu
 ICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3Ig
 YWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAu
 ICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUg
 TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
 IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlv
 dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93
 d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVk
 IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAg
 ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
 IiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
 LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
 c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlv
 bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUgR2xvYmFsUGx1
 Z2luLmgKKysgKiBAYnJpZWYgQ29udGFpbnMgdGhlIGludGVyZmFjZSB1c2VkIGluIGNyZWF0aW5n
 IEdsb2JhbCBwbHVnaW5zLgorKyAqLworKworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQ
 QVBJX0dMT0JBTFBMVUdJTl9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX0dMT0JBTFBMVUdJTl9IXwor
 KworKyNpbmNsdWRlIDxhdHNjcHBhcGkvUGx1Z2luLmg+CisrCisrbmFtZXNwYWNlIGF0c2NwcGFw
 aSB7CisrCisrc3RydWN0IEdsb2JhbFBsdWdpblN0YXRlOworKworKy8qKgorKyAqIEBicmllZiBU
 aGUgaW50ZXJmYWNlIHVzZWQgd2hlbiBjcmVhdGluZyBhIEdsb2JhbFBsdWdpbi4KKysgKgorKyAq
 IEEgR2xvYmFsUGx1Z2luIGlzIGEgUGx1Z2luIHRoYXQgd2lsbCBmaXJlIGZvciBhIGdpdmVuIGhv
 b2sgb24gYWxsIFRyYW5zYWN0aW9ucy4KKysgKiBJbiBvdGhlcndvcmRzLCBhIEdsb2JhbFBsdWdp
 biBpcyBub3QgdGllZCB0byBhIHNwZWNpZmljIHBsdWdpbiwgYSBUcmFuc2FjdGlvbgorKyAqIHNw
 ZWNpZmljIHBsdWdpbiB3b3VsZCBiZSBhIFRyYW5zYWN0aW9uUGx1Z2luLgorKyAqCisrICogRGVw
 ZW5kaW5nIG9uIHRoZQorKyAqIHR5cGUgb2YgaG9vayB5b3UgY2hvb3NlIHRvIGJ1aWxkIHlvdSB3
 aWxsIGltcGxlbWVudCBvbmUgb3IgbW9yZSBjYWxsYmFjayBtZXRob2RzLgorKyAqIEhlcmUgaXMg
 YSBzaW1wbGUgZXhhbXBsZSBvZiBhIEdsb2JhbFBsdWdpbjoKKysgKgorKyAqIFxjb2RlCisrICog
 Y2xhc3MgR2xvYmFsSG9va1BsdWdpbiA6IHB1YmxpYyBHbG9iYWxQbHVnaW4geworKyAqIHB1Ymxp
 YzoKKysgKiAgR2xvYmFsSG9va1BsdWdpbigpIHsKKysgKiAgIHJlZ2lzdGVySG9vayhIT09LX1JF
 QURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCk7CisrICogIH0KKysgKiAgdmlydHVhbCB2b2lk
 IGhhbmRsZVJlYWRSZXF1ZXN0SGVhZGVyc1ByZVJlbWFwKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlv
 bikgeworKyAqICAgIHN0ZDo6Y291dCA8PCAiSGVsbG8gZnJvbSBoYW5kbGVSZWFkUmVxdWVzSGVh
 ZGVyc1ByZVJlbWFwISIgPDwgc3RkOjplbmRsOworKyAqICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgp
 OworKyAqICB9CisrICogfTsKKysgKiBcZW5kY29kZQorKyAqIEBzZWUgUGx1Z2luCisrICovCisr
 Y2xhc3MgR2xvYmFsUGx1Z2luIDogcHVibGljIFBsdWdpbiB7CisrcHVibGljOgorKyAgLyoqCisr
 ICAgKiByZWdpc3Rlckhvb2sgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGF0dGFjaCBhIGdsb2Jh
 bCBob29rLgorKyAgICoKKysgICAqIFxub3RlIFdoZW5ldmVyIHlvdSByZWdpc3RlciBhIGhvb2sg
 eW91IG11c3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgZGVmaW5pZWQgaW4geW91ciBH
 bG9iYWxQbHVnaW4KKysgICAqICBzZWUgSG9va1R5cGUgYW5kIFBsdWdpbiBmb3IgdGhlIGNvcnJl
 c3BvbmQgSG9va1R5cGVzIGFuZCBjYWxsYmFjayBtZXRob2RzLiBJZiB5b3UgZmFpbCB0byBpbXBs
 ZW1lbnQgdGhlCisrICAgKiAgY2FsbGJhY2ssIGEgZGVmYXVsdCBpbXBsbWVudGF0aW9uIHdpbGwg
 YmUgdXNlZCB0aGF0IHdpbGwgb25seSByZXN1bWUgdGhlIFRyYW5zYWN0aW9uLgorKyAgICoKKysg
 ICAqIEBwYXJhbSBIb29rVHlwZSB0aGUgdHlwZSBvZiBob29rIHlvdSB3aXNoIHRvIHJlZ2lzdGVy
 CisrICAgKiBAc2VlIEhvb2tUeXBlCisrICAgKiBAc2VlIFBsdWdpbgorKyAgICovCisrICB2b2lk
 IHJlZ2lzdGVySG9vayhQbHVnaW46Okhvb2tUeXBlKTsKKysgIHZpcnR1YWwgfkdsb2JhbFBsdWdp
 bigpOworK3Byb3RlY3RlZDoKKysgIC8qKgorKyAgICogQ29uc3RydWN0b3IuCisrICAgKgorKyAg
 ICogQHBhcmFtIGlnbm9yZV9pbnRlcm5hbF90cmFuc2FjdGlvbnMgV2hlbiB0cnVlLCBhbGwgaG9v
 a3MgcmVnaXN0ZXJlZCBieSB0aGlzIHBsdWdpbiBhcmUgaWdub3JlZAorKyAgICogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGludGVybmFsIHRyYW5zYWN0aW9ucyAoaW50
 ZXJuYWwgdHJhbnNhY3Rpb25zIGFyZSBjcmVhdGVkCisrICAgKiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICB3aGVuIG90aGVyIHBsdWdpbnMgY3JlYXRlIHJlcXVlc3RzKS4gRGVm
 YXVsdHMgdG8gZmFsc2UuCisrICAgKi8KKysgIEdsb2JhbFBsdWdpbihib29sIGlnbm9yZV9pbnRl
 cm5hbF90cmFuc2FjdGlvbnMgPSBmYWxzZSk7CisrcHJpdmF0ZToKKysgIEdsb2JhbFBsdWdpblN0
 YXRlICpzdGF0ZV87IC8qKjwgSW50ZXJuYWwgc3RhdGUgdGllZCB0byBhIEdsb2JhbFBsdWdpbiAq
 LworK307CisrCisrfSAvKiBhdHNjcHBhcGkgKi8KKysKKysKKysjZW5kaWYgLyogQVRTQ1BQQVBJ
 X0dMT0JBTFBMVUdJTl9IXyAqLworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUv
 YXRzY3BwYXBpL0d6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24uaCBsaWIvYXRzY3BwYXBpL3NyYy9p
 bmNsdWRlL2F0c2NwcGFwaS9HemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uLmgKKy0tLSBsaWIvYXRz
 Y3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9HemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uLmgJ
 MTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3Ny
 Yy9pbmNsdWRlL2F0c2NwcGFwaS9HemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uLmgJMjAxMy0xMS0x
 MSAxNDowMzoxMi43MDA1MzI1NjQgKzA4MDAKK0BAIC0wLDAgKzEsOTEgQEAKKysvKioKKysgIExp
 Y2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUK
 KysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJ
 Q0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5m
 b3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNl
 bnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
 b24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
 ZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBh
 IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
 bGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
 IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVu
 ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBX
 SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
 c3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
 aWNlbnNlLgorKyAqLworKworKy8qKgorKyAqIEBmaWxlIEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRp
 b24uaAorKyAqIEBicmllZiBHemlwIERlZmxhdGUgVHJhbnNmb3JtYXRpb24gY2FuIGJlIHVzZWQg
 dG8gY29tcHJlc3MgY29udGVudC4KKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFU
 U0NQUEFQSV9HWklQREVGTEFURVRSQU5TRk9STUFUSU9OX0hfCisrI2RlZmluZSBBVFNDUFBBUElf
 R1pJUERFRkxBVEVUUkFOU0ZPUk1BVElPTl9IXworKworKyNpbmNsdWRlIDxzdHJpbmc+CisrI2lu
 Y2x1ZGUgImF0c2NwcGFwaS9UcmFuc2Zvcm1hdGlvblBsdWdpbi5oIgorKworK25hbWVzcGFjZSBh
 dHNjcHBhcGkgeworKworK25hbWVzcGFjZSB0cmFuc2Zvcm1hdGlvbnMgeworKworKy8qKgorKyAq
 IEludGVybmFsIHN0YXRlIGZvciBEZWZsYXRlIFRyYW5zZm9ybWF0aW9ucworKyAqIEBwcml2YXRl
 CisrICovCisrc3RydWN0IEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb25TdGF0ZTsKKysKKysvKioK
 KysgKiBAYnJpZWYgQSBUcmFuc2Zvcm1hdGlvblBsdWdpbiB0byBlYXNpbHkgYWRkIGd6aXAgZGVm
 bGF0ZSB0byB5b3VyIFRyYW5zZm9ybWF0aW9uUGx1Z2luIGNoYWluLgorKyAqCisrICogVGhlIEd6
 aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24gaXMgYSBoZWxwZXIgdHJhbnNmb3JtYXRpb24gdGhhdCBj
 YW4gYmUgdXNlZAorKyAqIHRvIGVhc2lseSBjb21wcmVzcyBjb250ZW50LiBGb3IgYSBmdWxsIGV4
 YW1wbGUgb2YgR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbgorKyAqIGFuZCBHemlwSW5mbGF0ZVRy
 YW5zZm9ybWF0aW9uIHNlZSBleGFtcGxlcy9nemlwX3RyYW5zZm9ybWF0aW9uLy4KKysgKgorKyAq
 IEBub3RlIEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24gRE9FUyBOT1Qgc2V0IENvbnRlbnQtRW5j
 b2RpbmcgaGVhZGVycywgaXQgaXMgdGhlCisrICogdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gc2V0
 IGFueSBhcHBsaWNhYmxlIGhlYWRlcnMuCisrICoKKysgKiBAc2VlIEd6aXBJbmZsYXRlVHJhbnNm
 b3JtYXRpb24KKysgKi8KKytjbGFzcyBHemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uIDogcHVibGlj
 IFRyYW5zZm9ybWF0aW9uUGx1Z2luIHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIEEgZnVsbCBl
 eGFtcGxlIG9mIGhvdyB0byB1c2UgR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbiBhbmQgR3ppcElu
 ZmxhdGVUcmFuc2Zvcm1hdGlvbiBpcyBhdmFpbGFibGUKKysgICAqIGluIGV4YW1wbGVzL2d6aXBf
 dHJhbmZvcm1hdGlvbi8KKysgICAqCisrICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gQXMgd2l0aCBh
 bnkgVHJhbnNmb3JtYXRpb25QbHVnaW4geW91IG11c3QgcGFzcyBpbiB0aGUgdHJhbnNhY3Rpb24K
 KysgICAqIEBwYXJhbSB0eXBlIGJlY2F1c2UgdGhlIEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24g
 Y2FuIGJlIHVzZWQgd2l0aCBib3RoIHJlcXVlc3RzIGFuZCByZXNwb25zZXMKKysgICAqICB5b3Ug
 bXVzdCBzcGVjaWZ5IHRoZSBUeXBlLgorKyAgICoKKysgICAqIEBzZWUgVHJhbnNmb3JtYXRpb25Q
 bHVnaW46OlR5cGUKKysgICAqLworKyAgR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvbihUcmFuc2Fj
 dGlvbiAmdHJhbnNhY3Rpb24sIFRyYW5zZm9ybWF0aW9uUGx1Z2luOjpUeXBlIHR5cGUpOworKwor
 KyAgLyoqCisrICAgKiBBbnkgVHJhbnNmb3JtYXRpb25QbHVnaW4gbXVzdCBpbXBsZW1lbnQgY29u
 c3VtZSgpLCB0aGlzIG1ldGhvZCB3aWxsIHRha2UgY29udGVudAorKyAgICogZnJvbSB0aGUgdHJh
 bnNmb3JtYXRpb24gY2hhaW4gYW5kIGd6aXAgY29tcHJlc3MgaXQuCisrICAgKgorKyAgICogQHBh
 cmFtIGRhdGEgdGhlIGlucHV0IGRhdGEgdG8gY29tcHJlc3MKKysgICAqLworKyAgdm9pZCBjb25z
 dW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZkYXRhKTsKKysKKysgIC8qKgorKyAgICogQW55IFRyYW5z
 Zm9ybWF0aW9uUGx1Z2luIG11c3QgaW1wbGVtZW50IGhhbmRsZUlucHV0Q29tcGxldGUoKSwgdGhp
 cyBtZXRob2Qgd2lsbAorKyAgICogZmluYWxpemUgdGhlIGd6aXAgY29tcHJlc3Npb24gYW5kIGZs
 dXNoIGFueSByZW1haW5pbmcgZGF0YSBhbmQgdGhlIGVwaWxvdWdlLgorKyAgICovCisrICB2b2lk
 IGhhbmRsZUlucHV0Q29tcGxldGUoKTsKKysKKysgIHZpcnR1YWwgfkd6aXBEZWZsYXRlVHJhbnNm
 b3JtYXRpb24oKTsKKytwcml2YXRlOgorKyAgR3ppcERlZmxhdGVUcmFuc2Zvcm1hdGlvblN0YXRl
 ICpzdGF0ZV87IC8qKiBJbnRlcm5hbCBzdGF0ZSBmb3IgR3ppcCBEZWZsYXRlIFRyYW5zZm9ybWF0
 aW9ucyAqLworK307CisrCisrfQorKworK30KKysKKysKKysjZW5kaWYgLyogQVRTQ1BQQVBJX0da
 SVBERUZMQVRFVFJBTlNGT1JNQVRJT05fSF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3Ny
 Yy9pbmNsdWRlL2F0c2NwcGFwaS9HemlwSW5mbGF0ZVRyYW5zZm9ybWF0aW9uLmggbGliL2F0c2Nw
 cGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbi5oCist
 LS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvR3ppcEluZmxhdGVUcmFuc2Zv
 cm1hdGlvbi5oCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0
 c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbi5o
 CTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAwNTMyNTY0ICswODAwCitAQCAtMCwwICsxLDkyIEBACisr
 LyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikg
 dW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNl
 ZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRp
 dGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRo
 ZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
 bnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
 cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1h
 eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5h
 cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkg
 YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0
 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
 U0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
 dGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
 aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1
 bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBHemlwSW5mbGF0ZVRy
 YW5zZm9ybWF0aW9uLmgKKysgKiBAYnJpZWYgR3ppcCBJbmZsYXRlIFRyYW5zZm9ybWF0aW9uIGNh
 biBiZSB1c2VkIHRvIGRlY29tcHJlc3MgZ3ppcHBlZCBjb250ZW50LgorKyAqLworKworKyNwcmFn
 bWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQQVBJX0daSVBJTkZMQVRFVFJBTlNGT1JNQVRJT05fSF8K
 KysjZGVmaW5lIEFUU0NQUEFQSV9HWklQSU5GTEFURVRSQU5TRk9STUFUSU9OX0hfCisrCisrI2lu
 Y2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL1RyYW5zZm9ybWF0aW9uUGx1Z2lu
 LmgiCisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrCisrbmFtZXNwYWNlIHRyYW5zZm9ybWF0
 aW9ucyB7CisrCisrLyoqCisrICogSW50ZXJuYWwgc3RhdGUgZm9yIEluZmxhdGUgVHJhbnNmb3Jt
 YXRpb25zCisrICogQHByaXZhdGUKKysgKi8KKytzdHJ1Y3QgR3ppcEluZmxhdGVUcmFuc2Zvcm1h
 dGlvblN0YXRlOworKworKy8qKgorKyAqIEBicmllZiBBIFRyYW5zZm9ybWF0aW9uUGx1Z2luIHRv
 IGVhc2lseSBhZGQgZ3ppcCBpbmZsYXRlIHRvIHlvdXIgVHJhbnNmb3JtYXRpb25QbHVnaW4gY2hh
 aW4uCisrICoKKysgKiBUaGUgR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbiBpcyBhIGhlbHBlciB0
 cmFuc2Zvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkCisrICogdG8gZWFzaWx5IGRlY29tcHJlc3Mg
 Z3ppcHBlZCBjb250ZW50LiBGb3IgYSBmdWxsIGV4YW1wbGUgb2YgR3ppcEluZmxhdGVUcmFuc2Zv
 cm1hdGlvbgorKyAqIGFuZCBHemlwRGVmbGF0ZVRyYW5zZm9ybWF0aW9uIHNlZSBleGFtcGxlcy9n
 emlwX3RyYW5zZm9ybWF0aW9uLy4KKysgKgorKyAqIEBub3RlIEd6aXBEZWZsYXRlVHJhbnNmb3Jt
 YXRpb24gRE9FUyBOT1Qgc2V0IG9yIGNoZWNrIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVycywgaXQg
 aXMgdGhlCisrICogdXNlcnMgcmVzcG9uc2liaWxpdHkgdG8gc2V0IGFueSBhcHBsaWNhYmxlIGhl
 YWRlcnMgYW5kIGNoZWNrIHRoYXQgdGhlIGNvbnRlbnQgaXMgYWNjdHVhbGx5CisrICogZ3ppcHBl
 ZCBieSBjaGVja2luZyB0aGUgQ29udGVudC1FbmNvZGluZyBoZWFkZXIgYmVmb3JlIGNyZWF0aW5n
 IGEgR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbiwKKysgKiBzZWUgZXhhbXBsZXMvZ3ppcF90cmFu
 c2Zvcm1hdGlvbi8gZm9yIGEgZnVsbCBleGFtcGxlLgorKyAqCisrICogQHNlZSBHemlwRGVmbGF0
 ZVRyYW5zZm9ybWF0aW9uCisrICovCisrY2xhc3MgR3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbiA6
 IHB1YmxpYyBUcmFuc2Zvcm1hdGlvblBsdWdpbiB7CisrcHVibGljOgorKyAgLyoqCisrICAgKiBB
 IGZ1bGwgZXhhbXBsZSBvZiBob3cgdG8gdXNlIEd6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24gYW5k
 IEd6aXBEZWZsYXRlVHJhbnNmb3JtYXRpb24gaXMgYXZhaWxhYmxlCisrICAgKiBpbiBleGFtcGxl
 cy9nemlwX3RyYW5mb3JtYXRpb24vCisrICAgKgorKyAgICogQHBhcmFtIHRyYW5zYWN0aW9uIEFz
 IHdpdGggYW55IFRyYW5zZm9ybWF0aW9uUGx1Z2luIHlvdSBtdXN0IHBhc3MgaW4gdGhlIHRyYW5z
 YWN0aW9uCisrICAgKiBAcGFyYW0gdHlwZSBiZWNhdXNlIHRoZSBHemlwSW5mbGF0ZVRyYW5zZm9y
 bWF0aW9uIGNhbiBiZSB1c2VkIHdpdGggYm90aCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzCisrICAg
 KiAgeW91IG11c3Qgc3BlY2lmeSB0aGUgVHlwZS4KKysgICAqCisrICAgKiBAc2VlIFRyYW5zZm9y
 bWF0aW9uUGx1Z2luOjpUeXBlCisrICAgKi8KKysgIEd6aXBJbmZsYXRlVHJhbnNmb3JtYXRpb24o
 VHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uLCBUcmFuc2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0eXBl
 KTsKKysKKysgIC8qKgorKyAgICogQW55IFRyYW5zZm9ybWF0aW9uUGx1Z2luIG11c3QgaW1wbGVt
 ZW50IGNvbnN1bWUoKSwgdGhpcyBtZXRob2Qgd2lsbCB0YWtlIGNvbnRlbnQKKysgICAqIGZyb20g
 dGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluIGFuZCBnemlwIGRlY29tcHJlc3MgaXQuCisrICAgKgor
 KyAgICogQHBhcmFtIGRhdGEgdGhlIGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcworKyAgICovCisr
 ICB2b2lkIGNvbnN1bWUoY29uc3Qgc3RkOjpzdHJpbmcgJik7CisrCisrICAvKioKKysgICAqIEFu
 eSBUcmFuc2Zvcm1hdGlvblBsdWdpbiBtdXN0IGltcGxlbWVudCBoYW5kbGVJbnB1dENvbXBsZXRl
 KCksIHRoaXMgbWV0aG9kIHdpbGwKKysgICAqIGZpbmFsaXplIHRoZSBnemlwIGRlY29tcHJlc3Np
 b24uCisrICAgKi8KKysgIHZvaWQgaGFuZGxlSW5wdXRDb21wbGV0ZSgpOworKworKyAgdmlydHVh
 bCB+R3ppcEluZmxhdGVUcmFuc2Zvcm1hdGlvbigpOworK3ByaXZhdGU6CisrICBHemlwSW5mbGF0
 ZVRyYW5zZm9ybWF0aW9uU3RhdGUgKnN0YXRlXzsgLyoqIEludGVybmFsIHN0YXRlIGZvciBHemlw
 IERlZmxhdGUgVHJhbnNmb3JtYXRpb25zICovCisrfTsKKysKKyt9IC8qIHRyYW5zZm9ybWF0aW9u
 cyAqLworKworK30gLyogYXRzY3BwYXBpICovCisrCisrI2VuZGlmIC8qIEFUU0NQUEFQSV9HWklQ
 SU5GTEFURVRSQU5TRk9STUFUSU9OX0hfICovCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvSGVhZGVycy5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRz
 Y3BwYXBpL0hlYWRlcnMuaAorLS0tIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBp
 L0hlYWRlcnMuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9h
 dHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0hlYWRlcnMuaAkyMDEzLTExLTExIDE0OjAz
 OjEyLjcwMDUzMjU2NCArMDgwMAorQEAgLTAsMCArMSwyNDYgQEAKKysvKioKKysgIExpY2Vuc2Vk
 IHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9y
 IG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmls
 ZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp
 b24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0
 aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
 ICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
 IGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
 b2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
 ZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
 ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
 ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VU
 IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
 aW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
 LgorKyAqLworKworKy8qKgorKyAqIEBmaWxlIEhlYWRlcnMuaAorKyAqLworKworKyNwcmFnbWEg
 b25jZQorKyNpZm5kZWYgQVRTQ1BQQVBJX0hFQURFUlNfSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9I
 RUFERVJTX0hfCisrCisrI2luY2x1ZGUgPG1hcD4KKysjaW5jbHVkZSA8bGlzdD4KKysjaW5jbHVk
 ZSA8YXRzY3BwYXBpL0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3IuaD4KKysjaW5jbHVk
 ZSA8YXRzY3BwYXBpL25vbmNvcHlhYmxlLmg+CisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7Cisr
 Cisrc3RydWN0IEhlYWRlcnNTdGF0ZTsKKytjbGFzcyBSZXF1ZXN0OworK2NsYXNzIENsaWVudFJl
 cXVlc3Q7CisrY2xhc3MgUmVzcG9uc2U7CisrCisrLyoqCisrICogQGJyaWVmIEVuY2Fwc3VsYXRl
 cyB0aGUgaGVhZGVycyBwb3J0aW9uIG9mIGEgcmVxdWVzdCBvciByZXNwb25zZS4KKysgKi8KKytj
 bGFzcyBIZWFkZXJzOiBub25jb3B5YWJsZSB7CisrcHVibGljOgorKyAgCisrICBlbnVtIFR5cGUg
 eyBUWVBFX1JFUVVFU1QsIFRZUEVfUkVTUE9OU0UgfTsKKysKKysgIEhlYWRlcnMoVHlwZSB0eXBl
 ID0gVFlQRV9SRVFVRVNUKTsKKysKKysgIFR5cGUgZ2V0VHlwZSgpIGNvbnN0OworKworKyAgdHlw
 ZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiwgQ2FzZUlu
 c2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvcj4gTmFtZVZhbHVlc01hcDsKKysKKysgIHR5cGVkZWYg
 TmFtZVZhbHVlc01hcDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKysgIHR5cGVkZWYgTmFtZVZhbHVl
 c01hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisrICB0eXBlZGVmIE5hbWVWYWx1
 ZXNNYXA6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKysK
 KysgIC8qKgorKyAgICogQHJldHVybiBJdGVyYXRvciB0byBmaXJzdCBoZWFkZXIuCisrICAgKi8K
 KysgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisrCisrICAvKioKKysgICAqIEByZXR1
 cm4gSXRlcmF0b3IgdG8gZW5kIG9mIGhlYWRlcnMuCisrICAgKi8KKysgIGNvbnN0X2l0ZXJhdG9y
 IGVuZCgpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRvIGxhc3Qg
 aGVhZGVyLgorKyAgICovCisrICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0
 OworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRvICJyZXZlcnNlIGVuZCIKKysg
 ICAqLworKyAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Q7CisrCisrICAvKioK
 KysgICAqIEBwYXJhbSBrZXkgTmFtZSBvZiBoZWFkZXIKKysgICAqIEByZXR1cm4gSXRlcmF0b3Ig
 dG8gaGVhZGVyIGlmIGV4aXN0cywgZWxzZSBlbmQoKQorKyAgICovCisrICBjb25zdF9pdGVyYXRv
 ciBmaW5kKGNvbnN0IHN0ZDo6c3RyaW5nICZrZXkpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBA
 cGFyYW0ga2V5IE5hbWUgb2YgaGVhZGVyCisrICAgKiBAcmV0dXJuIDEgaWYgaGVhZGVyIGV4aXN0
 cywgMCBpZiBub3QuIAorKyAgICovCisrICBzaXplX3R5cGUgY291bnQoY29uc3Qgc3RkOjpzdHJp
 bmcgJmtleSkgY29uc3Q7CisrCisrICAvKioKKysgICAqIEVyYXNlcyBoZWFkZXIgd2l0aCBnaXZl
 biBuYW1lLgorKyAgICoKKysgICAqIEBwYXJhbSBrZXkgTmFtZSBvZiBoZWFkZXIKKysgICAqIEBy
 ZXR1cm4gMSBpZiBoZWFkZXIgd2FzIGVyYXNlZCwgMCBpZiBub3QuIAorKyAgICovCisrICBzaXpl
 X3R5cGUgZXJhc2UoY29uc3Qgc3RkOjpzdHJpbmcgJmtleSk7CisrCisrICAvKioKKysgICAqIFNl
 dHMgdGhlIGdpdmVuIGhlYWRlciBhbmQgdmFsdWVzLiBJZiBhIGhlYWRlciBvZiBzYW1lIG5hbWUg
 ZXhpc3RlZCwgdGhhdCBpcworKyAgICogZGVsZXRlZC4gRWxzZSBoZWFkZXIgaXMgYXBwZW5kZWQu
 CisrICAgKiAKKysgICAqIEBwYXJhbSBwYWlyIENvbnRhaW5zIHRoZSBuYW1lIGFuZCBsaXN0IG9m
 IHZhbHVlcy4KKysgICAqCisrICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRvIGhlYWRlciBzZXQuIAor
 KyAgICovCisrICBjb25zdF9pdGVyYXRvciBzZXQoY29uc3Qgc3RkOjpwYWlyPHN0ZDo6c3RyaW5n
 LCBzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+ID4gJnBhaXIpOworKworKyAgLyoqCisrICAgKiBTZXRz
 IHRoZSBnaXZlbiBoZWFkZXIgYW5kIHZhbHVlcy4gSWYgYSBoZWFkZXIgb2Ygc2FtZSBuYW1lIGV4
 aXN0ZWQsIHRoYXQgaXMKKysgICAqIGRlbGV0ZWQuIEVsc2UgaGVhZGVyIGlzIGFwcGVuZGVkLgor
 KyAgICoKKysgICAqIEBwYXJhbSBrZXkgTmFtZSBvZiBoZWFkZXIKKysgICAqIEBwYXJhbSB2YWwg
 TGlzdCBvZiB2YWx1ZXMKKysgICAqIAorKyAgICogQHJldHVybiBJdGVyYXRvciB0byBoZWFkZXIg
 c2V0LiAKKysgICAqLworKyAgY29uc3RfaXRlcmF0b3Igc2V0KGNvbnN0IHN0ZDo6c3RyaW5nICZr
 ZXksIGNvbnN0IHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gJnZhbCk7CisrCisrICAvKioKKysgICAq
 IFNldHMgdGhlIGdpdmVuIGhlYWRlciBhbmQgdmFsdWVzLiBJZiBhIGhlYWRlciBvZiBzYW1lIG5h
 bWUgZXhpc3RlZCwgdGhhdCBpcworKyAgICogZGVsZXRlZC4gRWxzZSBoZWFkZXIgaXMgYXBwZW5k
 ZWQuCisrICAgKgorKyAgICogQHBhcmFtIGtleSBOYW1lIG9mIGhlYWRlcgorKyAgICogQHBhcmFt
 IHZhbCBWYWx1ZQorKyAgICogCisrICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRvIGhlYWRlciBzZXQu
 IAorKyAgICovCisrICBjb25zdF9pdGVyYXRvciBzZXQoY29uc3Qgc3RkOjpzdHJpbmcgJmtleSwg
 Y29uc3Qgc3RkOjpzdHJpbmcgJnZhbCk7CisrCisrICAvKioKKysgICAqIEFwcGVuZHMgYSBuZXcg
 aGVhZGVyLiBJZiBhIGhlYWRlciBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cywgdmFsdWUocykgaXMg
 dGFja2VkCisrICAgKiBvbiB0aGF0IHRoZSBlbmQgb2YgY3VycmVudCB2YWx1ZShzKS4gCisrICAg
 KiAKKysgICAqIEBwYXJhbSBwYWlyIENvbnRhaW5zIHRoZSBuYW1lIGFuZCBsaXN0IG9mIHZhbHVl
 cy4KKysgICAqCisrICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRvIGhlYWRlciBhcHBlbmRlZC4gCisr
 ICAgKi8KKysgIGNvbnN0X2l0ZXJhdG9yIGFwcGVuZChjb25zdCBzdGQ6OnBhaXI8c3RkOjpzdHJp
 bmcsIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gPiAmcGFpcik7CisrCisrICAvKioKKysgICAqIEFw
 cGVuZHMgYSBuZXcgaGVhZGVyLiBJZiBhIGhlYWRlciBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cywg
 dmFsdWUocykgaXMgdGFja2VkCisrICAgKiBvbiB0aGF0IHRoZSBlbmQgb2YgY3VycmVudCB2YWx1
 ZShzKS4gCisrICAgKiAKKysgICAqIEBwYXJhbSBrZXkgTmFtZSBvZiBoZWFkZXIKKysgICAqIEBw
 YXJhbSB2YWwgTGlzdCBvZiB2YWx1ZXMKKysgICAqIAorKyAgICogQHJldHVybiBJdGVyYXRvciB0
 byBoZWFkZXIgYXBwZW5kZWQuIAorKyAgICovCisrICBjb25zdF9pdGVyYXRvciBhcHBlbmQoY29u
 c3Qgc3RkOjpzdHJpbmcgJmtleSwgY29uc3Qgc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiAmdmFsKTsK
 KysKKysgIC8qKgorKyAgICogQXBwZW5kcyBhIG5ldyBoZWFkZXIuIElmIGEgaGVhZGVyIG9mIHRo
 ZSBzYW1lIG5hbWUgZXhpc3RzLCB2YWx1ZShzKSBpcyB0YWNrZWQKKysgICAqIG9uIHRoYXQgdGhl
 IGVuZCBvZiBjdXJyZW50IHZhbHVlKHMpLiAKKysgICAqIAorKyAgICogQHBhcmFtIGtleSBOYW1l
 IG9mIGhlYWRlcgorKyAgICogQHBhcmFtIHZhbCBWYWx1ZQorKyAgICogCisrICAgKiBAcmV0dXJu
 IEl0ZXJhdG9yIHRvIGhlYWRlciBhcHBlbmRlZC4gCisrICAgKi8KKysgIGNvbnN0X2l0ZXJhdG9y
 IGFwcGVuZChjb25zdCBzdGQ6OnN0cmluZyAma2V5LCBjb25zdCBzdGQ6OnN0cmluZyAmdmFsKTsK
 KysKKysgIC8qKgorKyAgICogSm9pbnMgcHJvdmlkZWQgbGlzdCBvZiB2YWx1ZXMgd2l0aCBkZWxp
 bWl0ZXIgKGRlZmF1bHRpbmcgdG8gJywnKS4KKysgICAqCisrICAgKiBAcmV0dXJuIENvbXBvc2l0
 ZSBzdHJpbmcKKysgICAqLworKyAgc3RhdGljIHN0ZDo6c3RyaW5nIGdldEpvaW5lZFZhbHVlcyhj
 b25zdCBzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+ICZ2YWx1ZXMsIGNoYXIgZGVsaW1pdGVyID0gJywn
 KTsKKysKKysgIC8qKgorKyAgICogSm9pbnMgdmFsdWVzIG9mIHByb3ZpZGVkIGhlYWRlciB3aXRo
 IGRlbGltaXRlciAoZGVmYXVsdGluZyB0byAnLCcpLgorKyAgICoKKysgICAqIEByZXR1cm4gQ29t
 cG9zaXRlIHN0cmluZyBpZiBoZWFkZXIgZXhpc3RzLCBlbHNlIGVtcHR5IHN0cmluZ3MuCisrICAg
 Ki8KKysgIHN0ZDo6c3RyaW5nIGdldEpvaW5lZFZhbHVlcyhjb25zdCBzdGQ6OnN0cmluZyAma2V5
 LCBjaGFyIHZhbHVlX2RlbGltaXRlciA9ICcsJyk7CisrCisrICAvKioKKysgICAqIEByZXR1cm4g
 VHJ1ZSBpZiB0aGVyZSBhcmUgbm8gaGVhZGVycy4KKysgICAqLworKyAgYm9vbCBlbXB0eSgpIGNv
 bnN0OworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIExhcmdlc3QgcG9zc2libGUgc2l6ZSBvZiB1
 bmRlcmx5aW5nIG1hcC4KKysgICAqLworKyAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Q7Cisr
 CisrICAvKioKKysgICAqIEByZXR1cm4gTnVtYmVyIG9mIGhlYWRlcnMgY3VycmVudGx5IHN0b3Jl
 ZC4KKysgICAqLworKyAgc2l6ZV90eXBlIHNpemUoKSBjb25zdDsKKysKKysgIHR5cGVkZWYgc3Rk
 OjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gPiBSZXF1ZXN0Q29va2ll
 TWFwOworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIENvb2tpZXMgaW4gdGhlICJDb29raWUiIGhl
 YWRlcnMgb2YgYSByZXF1ZXN0IG9iamVjdC4KKysgICAqLworKyAgY29uc3QgUmVxdWVzdENvb2tp
 ZU1hcCAmZ2V0UmVxdWVzdENvb2tpZXMoKSBjb25zdDsKKysKKysgIHN0cnVjdCBSZXNwb25zZUNv
 b2tpZSB7CisrICAgIHN0ZDo6c3RyaW5nIG5hbWVfOworKyAgICBzdGQ6OnN0cmluZyB2YWx1ZV87
 CisrICAgIHN0ZDo6c3RyaW5nIGNvbW1lbnRfOworKyAgICBzdGQ6OnN0cmluZyBkb21haW5fOwor
 KyAgICBpbnQgbWF4X2FnZV87CisrICAgIHN0ZDo6c3RyaW5nIHBhdGhfOworKyAgICBib29sIHNl
 Y3VyZV87CisrICAgIGludCB2ZXJzaW9uXzsKKysgICAgUmVzcG9uc2VDb29raWUoKSA6IG1heF9h
 Z2VfKDApLCBzZWN1cmVfKGZhbHNlKSwgdmVyc2lvbl8oMCkgeyB9OworKyAgfTsKKysKKysgIC8q
 KgorKyAgICogQHJldHVybiBDb29raWVzIGluIHRoZSAiU2V0LUNvb2tpZSIgaGVhZGVycyBvZiBh
 IHJlc3BvbnNlIG9iamVjdC4KKysgICAqLworKyAgY29uc3Qgc3RkOjpsaXN0PFJlc3BvbnNlQ29v
 a2llPiAmZ2V0UmVzcG9uc2VDb29raWVzKCkgY29uc3Q7CisrCisrICAvKiogQWRkcyBhIHJlcXVl
 c3QgY29va2llICovCisrICBib29sIGFkZENvb2tpZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
 Y29uc3Qgc3RkOjpzdHJpbmcgJnZhbHVlKTsKKysKKysgIC8qKiBBZGRzIGEgcmVzcG9uc2UgY29v
 a2llICovCisrICBib29sIGFkZENvb2tpZShjb25zdCBSZXNwb25zZUNvb2tpZSAmcmVzcG9uc2Vf
 Y29va2llKTsKKysgIAorKyAgLyoqIFNldHMsIGkuZS4sIGNsZWFycyBjdXJyZW50IHZhbHVlIGFu
 ZCBhZGRzIG5ldyB2YWx1ZSwgb2YgYSByZXF1ZXN0IGNvb2tpZSAqLworKyAgYm9vbCBzZXRDb29r
 aWUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YWx1ZSk7Cisr
 CisrICAvKiogU2V0cywgaS5lLiwgY2xlYXJzIGN1cnJlbnQgdmFsdWUgYW5kIGFkZHMgbmV3IHZh
 bHVlLCBvZiBhIHJlc3BvbnNlIGNvb2tpZSAqLworKyAgYm9vbCBzZXRDb29raWUoY29uc3QgUmVz
 cG9uc2VDb29raWUgJnJlc3BvbnNlX2Nvb2tpZSk7CisrCisrICAvKiogRGVsZXRlcyBhIGNvb2tp
 ZSAqLworKyAgYm9vbCBkZWxldGVDb29raWUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworKwor
 KyAgfkhlYWRlcnMoKTsKKytwcml2YXRlOgorKyAgSGVhZGVyc1N0YXRlICpzdGF0ZV87CisrICBi
 b29sIGNoZWNrQW5kSW5pdEhlYWRlcnMoKSBjb25zdDsKKysgIHZvaWQgaW5pdCh2b2lkICpoZHJf
 YnVmLCB2b2lkICpoZHJfbG9jKTsKKysgIHZvaWQgaW5pdERldGFjaGVkKCk7CisrICB2b2lkIHNl
 dFR5cGUoVHlwZSB0eXBlKTsKKysgIHZvaWQgdXBkYXRlUmVxdWVzdENvb2tpZUhlYWRlckZyb21N
 YXAoKTsKKysgIGNvbnN0X2l0ZXJhdG9yIGRvQmFzaWNBcHBlbmQoY29uc3Qgc3RkOjpwYWlyPHN0
 ZDo6c3RyaW5nLCBzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+ID4gJnBhaXIpOworKyAgc2l6ZV90eXBl
 IGRvQmFzaWNFcmFzZShjb25zdCBzdGQ6OnN0cmluZyAma2V5KTsKKysgIGZyaWVuZCBjbGFzcyBS
 ZXF1ZXN0OworKyAgZnJpZW5kIGNsYXNzIENsaWVudFJlcXVlc3Q7CisrICBmcmllbmQgY2xhc3Mg
 UmVzcG9uc2U7CisrfTsKKysKKyt9CisrCisrI2VuZGlmCitkaWZmIC1ydU4gbGliL2F0c2NwcGFw
 aS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvSHR0cE1ldGhvZC5oIGxpYi9hdHNjcHBhcGkvc3JjL2lu
 Y2x1ZGUvYXRzY3BwYXBpL0h0dHBNZXRob2QuaAorLS0tIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1
 ZGUvYXRzY3BwYXBpL0h0dHBNZXRob2QuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCAr
 MDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0h0dHBNZXRob2Qu
 aAkyMDEzLTExLTExIDE0OjAzOjEyLjcwMDUzMjU2NCArMDgwMAorQEAgLTAsMCArMSw1OCBAQAor
 Ky8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0Yp
 IHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBT
 ZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRk
 aXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBU
 aGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGlj
 ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRo
 aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBt
 YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cu
 YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5
 IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlz
 dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
 QVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
 aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
 Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMg
 dW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUgSHR0cE1ldGhvZC5o
 CisrICogQGJyaWVmIENvbnRhaW5zIGFuIGVudW1lcmF0aW9uIGFuZCBwcmludGFibGUgc3RyaW5n
 cyBmb3IgSHR0cCBNZXRob2RzLgorKyAqLworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQ
 QVBJX0hUVFBfTUVUSE9EX0hfCisrI2RlZmluZSBBVFNDUFBBUElfSFRUUF9NRVRIT0RfSF8KKysK
 KysjaW5jbHVkZSA8c3RyaW5nPgorKworK25hbWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8qKgor
 KyAqIEFuIGVudW1lcmF0aW9uIG9mIGFsbCBhdmFpbGFibGUgSHR0cCBNZXRob2RzLgorKyAqLwor
 K2VudW0gSHR0cE1ldGhvZCB7CisrICBIVFRQX01FVEhPRF9VTktOT1dOID0gMCwKKysgIEhUVFBf
 TUVUSE9EX0dFVCwKKysgIEhUVFBfTUVUSE9EX1BPU1QsCisrICBIVFRQX01FVEhPRF9IRUFELAor
 KyAgSFRUUF9NRVRIT0RfQ09OTkVDVCwKKysgIEhUVFBfTUVUSE9EX0RFTEVURSwKKysgIEhUVFBf
 TUVUSE9EX0lDUF9RVUVSWSwKKysgIEhUVFBfTUVUSE9EX09QVElPTlMsCisrICBIVFRQX01FVEhP
 RF9QVVJHRSwKKysgIEhUVFBfTUVUSE9EX1BVVCwKKysgIEhUVFBfTUVUSE9EX1RSQUNFCisrfTsK
 KysKKysvKioKKysgKiBBbiBhcnJheSBvZiBwcmludGFibGUgc3RyaW5ncyByZXByZXNlbnRpbmcg
 b2YgdGhlIEh0dHBNZXRob2QKKysgKiBcY29kZQorKyAqIGNvdXQgPDwgSFRUUF9NRVRIT0RfU1RS
 SU5HU1tIVFRQX01FVEhPRF9HRVRdIDw8IGVuZGw7CisrICogXGVuZGNvZGUKKysgKi8KKytleHRl
 cm4gY29uc3Qgc3RkOjpzdHJpbmcgSFRUUF9NRVRIT0RfU1RSSU5HU1tdOworKworK30KKysKKysj
 ZW5kaWYKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9IdHRw
 U3RhdHVzLmggbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvSHR0cFN0YXR1cy5o
 CistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvSHR0cFN0YXR1cy5oCTE5
 NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvSHR0cFN0YXR1cy5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAwNTMy
 NTY0ICswODAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFw
 YWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250
 cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0
 cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVn
 YXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQor
 KyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAg
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
 ZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
 LTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
 aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElF
 UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
 KyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
 cm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisr
 CisrLyoqCisrICogQGZpbGUgSHR0cFN0YXR1cy5oCisrICogQGJyaWVmIENvbnRhaW5zIGFuIGVu
 dW1lcmF0aW9uIGFuZCBwcmludGFibGUgc3RyaW5ncyBmb3IgSHR0cCBTdGF0dXMgY29kZXMuCisr
 ICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfSFRUUF9TVEFUVVNfSF8K
 KysjZGVmaW5lIEFUU0NQUEFQSV9IVFRQX1NUQVRVU19IXworKworKyNpbmNsdWRlIDxzdHJpbmc+
 CisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrCisrLyoqCisrICogQW4gZW51bWVyYXRpb24g
 b2YgYWxsIGF2YWlsYWJsZSBIdHRwIFN0YXR1cyBDb2Rlcy4KKysgKi8KKytlbnVtIEh0dHBTdGF0
 dXMKKyt7CisrICBIVFRQX1NUQVRVU19VTktOT1dOID0gMCwKKysKKysgIEhUVFBfU1RBVFVTX0NP
 TlRJTlVFID0gMTAwLAorKyAgSFRUUF9TVEFUVVNfU1dJVENISU5HX1BST1RPQ09MID0gMTAxLAor
 KworKyAgSFRUUF9TVEFUVVNfT0sgPSAyMDAsCisrICBIVFRQX1NUQVRVU19DUkVBVEVEID0gMjAx
 LAorKyAgSFRUUF9TVEFUVVNfQUNDRVBURUQgPSAyMDIsCisrICBIVFRQX1NUQVRVU19OT05fQVVU
 SE9SSVRBVElWRV9JTkZPUk1BVElPTiA9IDIwMywKKysgIEhUVFBfU1RBVFVTX05PX0NPTlRFTlQg
 PSAyMDQsCisrICBIVFRQX1NUQVRVU19SRVNFVF9DT05URU5UID0gMjA1LAorKyAgSFRUUF9TVEFU
 VVNfUEFSVElBTF9DT05URU5UID0gMjA2LAorKyAgSFRUUF9TVEFUVVNfTVVMVElfU1RBVFVTID0g
 MjA3LAorKyAgSFRUUF9TVEFUVVNfQUxSRUFEWV9SRVBPUlRFRCA9IDIwOCwKKysgIEhUVFBfU1RB
 VFVTX0lNX1VTRUQgPSAyMTEsCisrCisrICBIVFRQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTID0g
 MzAwLAorKyAgSFRUUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkgPSAzMDEsCisrICBIVFRQX1NU
 QVRVU19NT1ZFRF9URU1QT1JBUklMWSA9IDMwMiwKKysgIEhUVFBfU1RBVFVTX1NFRV9PVEhFUiA9
 IDMwMywKKysgIEhUVFBfU1RBVFVTX05PVF9NT0RJRklFRCA9IDMwNCwKKysgIEhUVFBfU1RBVFVT
 X1VTRV9QUk9YWSA9IDMwNSwKKysgIEhUVFBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCA9IDMw
 NywKKysgIEhUVFBfU1RBVFVTX1BFUk1BTkVOVF9SRURJUkVDVCA9IDMwOCwKKysKKysgIEhUVFBf
 U1RBVFVTX0JBRF9SRVFVRVNUID0gNDAwLAorKyAgSFRUUF9TVEFUVVNfVU5BVVRIT1JJWkVEID0g
 NDAxLAorKyAgSFRUUF9TVEFUVVNfUEFZTUVOVF9SRVFVSVJFRCA9IDQwMiwKKysgIEhUVFBfU1RB
 VFVTX0ZPUkJJRERFTiA9IDQwMywKKysgIEhUVFBfU1RBVFVTX05PVF9GT1VORCA9IDQwNCwKKysg
 IEhUVFBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRCA9IDQwNSwKKysgIEhUVFBfU1RBVFVTX05P
 VF9BQ0NFUFRBQkxFID0gNDA2LAorKyAgSFRUUF9TVEFUVVNfUFJPWFlfQVVUSEVOVElDQVRJT05f
 UkVRVUlSRUQgPSA0MDcsCisrICBIVFRQX1NUQVRVU19SRVFVRVNUX1RJTUVPVVQgPSA0MDgsCisr
 ICBIVFRQX1NUQVRVU19DT05GTElDVCA9IDQwOSwKKysgIEhUVFBfU1RBVFVTX0dPTkUgPSA0MTAs
 CisrICBIVFRQX1NUQVRVU19MRU5HVEhfUkVRVUlSRUQgPSA0MTEsCisrICBIVFRQX1NUQVRVU19Q
 UkVDT05ESVRJT05fRkFJTEVEID0gNDEyLAorKyAgSFRUUF9TVEFUVVNfUkVRVUVTVF9FTlRJVFlf
 VE9PX0xBUkdFID0gNDEzLAorKyAgSFRUUF9TVEFUVVNfUkVRVUVTVF9VUklfVE9PX0xPTkcgPSA0
 MTQsCisrICBIVFRQX1NUQVRVU19VTlNVUFBPUlRFRF9NRURJQV9UWVBFID0gNDE1LAorKyAgSFRU
 UF9TVEFUVVNfUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSA9IDQxNiwKKysgIEhUVFBf
 U1RBVFVTX0VYUEVDVEFUSU9OX0ZBSUxFRCA9IDQxNywKKysgIEhUVFBfU1RBVFVTX1VOUFJPQ0VT
 U0FCTEVfRU5USVRZID0gNDIyLAorKyAgSFRUUF9TVEFUVVNfTE9DS0VEID0gNDIzLAorKyAgSFRU
 UF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kgPSA0MjQsCisrICBIVFRQX1NUQVRVU19VUEdSQURF
 X1JFUVVJUkVEID0gNDI2LAorKyAgSFRUUF9TVEFUVVNfUFJFQ09ORElUSU9OX1JFUVVJUkVEID0g
 NDI4LAorKyAgSFRUUF9TVEFUVVNfVE9PX01BTllfUkVRVUVTVFMgPSA0MjksCisrICBIVFRQX1NU
 QVRVU19SRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFID0gNDMxLAorKworKyAgSFRUUF9T
 VEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gNTAwLAorKyAgSFRUUF9TVEFUVVNfTk9UX0lN
 UExFTUVOVEVEID0gNTAxLAorKyAgSFRUUF9TVEFUVVNfQkFEX0dBVEVXQVkgPSA1MDIsCisrICBI
 VFRQX1NUQVRVU19TRVJWSUNFX1VOQVZBSUxBQkxFID0gNTAzLAorKyAgSFRUUF9TVEFUVVNfR0FU
 RVdBWV9USU1FT1VUID0gNTA0LAorKyAgSFRUUF9TVEFUVVNfSFRUUFZFUl9OT1RfU1VQUE9SVEVE
 ID0gNTA1LAorKyAgSFRUUF9TVEFUVVNfVkFSSUFOVF9BTFNPX05FR09USUFURVMgPSA1MDYsCisr
 ICBIVFRQX1NUQVRVU19JTlNVRkZJQ0lFTlRfU1RPUkFHRSA9IDUwNywKKysgIEhUVFBfU1RBVFVT
 X0xPT1BfREVURUNURUQgPSA1MDgsCisrICBIVFRQX1NUQVRVU19OT1RfRVhURU5ERUQgPSA1MTAs
 CisrICBIVFRQX1NUQVRVU19ORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEID0gNTExCisr
 CisrfTsKKysKKyt9CisrCisrI2VuZGlmCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvaW5j
 bHVkZS9hdHNjcHBhcGkvSHR0cFZlcnNpb24uaCBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0
 c2NwcGFwaS9IdHRwVmVyc2lvbi5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNj
 cHBhcGkvSHR0cFZlcnNpb24uaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAor
 KysrIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0h0dHBWZXJzaW9uLmgJMjAx
 My0xMS0xMSAxNDowMzoxMi43MDA1MzI1NjQgKzA4MDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKioK
 KysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRl
 ciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRo
 ZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9u
 YWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFT
 RiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
 IFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
 bGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9i
 dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNo
 ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
 aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1
 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
 CisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
 IGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
 IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVy
 IHRoZSBMaWNlbnNlLgorKyAqLworKworKy8qKgorKyAqIEBmaWxlIEh0dHBWZXJzaW9uLmgKKysg
 KiBAYnJpZWYgQ29udGFpbnMgYW4gZW51bWVyYXRpb24gYW5kIHByaW50YWJsZSBzdHJpbmdzIGZv
 ciBIdHRwIFZlcnNpb25zLgorKyAqLworKworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQ
 QVBJX0hUVFBfVkVSU0lPTl9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX0hUVFBfVkVSU0lPTl9IXwor
 KworKyNpbmNsdWRlIDxzdHJpbmc+CisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrCisrLyoq
 CisrICogQW4gZW51bWVyYXRpb24gb2YgYWxsIGF2YWlsYWJsZSBIdHRwIFZlcnNpb25zLgorKyAq
 LworK2VudW0gSHR0cFZlcnNpb24geworKyAgSFRUUF9WRVJTSU9OX1VOS05PV04gPSAwLAorKyAg
 SFRUUF9WRVJTSU9OXzBfOSwKKysgIEhUVFBfVkVSU0lPTl8xXzAsCisrICBIVFRQX1ZFUlNJT05f
 MV8xLAorK307CisrCisrLyoqCisrICogQW4gYXJyYXkgb2YgcHJpbnRhYmxlIHN0cmluZ3MgcmVw
 cmVzZW50aW5nIG9mIHRoZSBIdHRwVmVyc2lvbgorKyAqIFxjb2RlCisrICogY291dCA8PCBIVFRQ
 X1ZFUlNJT05fU1RSSU5HU1tIVFRQX1ZFUlNJT05fMV8xXSA8PCBlbmRsOworKyAqIFxlbmRjb2Rl
 CisrICovCisrZXh0ZXJuIGNvbnN0IHN0ZDo6c3RyaW5nIEhUVFBfVkVSU0lPTl9TVFJJTkdTW107
 CisrCisrfQorKworKyNlbmRpZgorZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUv
 YXRzY3BwYXBpL0xvZ2dlci5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL0xv
 Z2dlci5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvTG9nZ2VyLmgJ
 MTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3Ny
 Yy9pbmNsdWRlL2F0c2NwcGFwaS9Mb2dnZXIuaAkyMDEzLTExLTExIDE0OjAzOjEyLjcwMDUzMjU2
 NCArMDgwMAorQEAgLTAsMCArMSwyNjggQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFj
 aGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJp
 YnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJp
 YnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2Fy
 ZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysg
 IHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJM
 aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UK
 KysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
 c2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
 LjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
 aW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
 IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMg
 T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysg
 IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
 aXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKwor
 Ky8qKgorKyAqIEBmaWxlIExvZ2dlci5oCisrICogQGJyaWVmIEhlbHBlcnMgYW5kIENsYXNzZXMg
 cmVsYXRlZCB0byBMb2dnaW5nCisrICoKKysgKiBAd2FybmluZyBMb2cgcm9sbGluZyBkb2Vzbid0
 IHdvcmsgY29ycmVjdGx5IGluIDMuMi54IHNlZToKKysgKiAgIGh0dHBzOi8vaXNzdWVzLmFwYWNo
 ZS5vcmcvamlyYS9icm93c2UvVFMtMTgxMworKyAqICAgQXBwbHkgdGhlIHBhdGNoIGluIFRTLTE4
 MTMgdG8gY29ycmVjdCBsb2cgcm9sbGluZyBpbiAzLjIueAorKyAqCisrICovCisrCisrI3ByYWdt
 YSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfTE9HR0VSX0hfCisrI2RlZmluZSBBVFNDUFBBUElf
 TE9HR0VSX0hfCisrCisrI2luY2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL25v
 bmNvcHlhYmxlLmg+CisrCisrI2lmICFkZWZpbmVkKEFUU0NQUEFQSV9QUklOVEZMSUtFKQorKyNp
 ZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysvKioKKysgKiBUaGlz
 IG1hY3JvIHdpbGwgdGVsbCBHQ0MgdGhhdCB0aGUgZnVuY3Rpb24gdGFrZXMgcHJpbnRmIGxpa2Ug
 YXJ1Z21lbnRzCisrICogdGhpcyBpcyBoZWxwZnVsIGJlY2F1c2UgaXQgY2FuIHByb2R1Y2UgYmV0
 dGVyIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzCisrICogd2hlbiBhIHVzZXIgZG9lc24ndCB1
 c2UgdGhlIG1ldGhvZHMgY29ycmVjdGx5LgorKyAqCisrICogQHByaXZhdGUKKysgKi8KKysjZGVm
 aW5lIEFUU0NQUEFQSV9QUklOVEZMSUtFKGZtdCwgYXJnKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQo
 cHJpbnRmLCBmbXQsIGFyZykpKQorKyNlbHNlCisrI2RlZmluZSBBVFNDUFBBUElfUFJJTlRGTElL
 RShmbXQsIGFyZykKKysjZW5kaWYKKysjZW5kaWYKKysKKysvKioKKysgKiBBIGhlbHBlciBtYWNy
 byBmb3IgTG9nZ2VyIG9iamVjdHMgdGhhdCBhbGxvd3MgeW91IHRvIGVhc2lseSBhZGQgYSBkZWJ1
 ZyBsZXZlbCBtZXNzYWdlCisrICogd2hpY2ggd2lsbCBpbmNsdWRlIGZpbGUsIGxpbmUsIGFuZCBm
 dW5jdGlvbiBuYW1lIHdpdGggdGhlIG1lc3NhZ2UuIEl0J3MgdmVyeSBlYXN5IHRvIHVzZToKKysg
 KiBcY29kZQorKyAqICAvLyBTdXBwb3NlIHlvdSBoYXZlIGFscmVhZHkgY3JlYXRlZCBhIExvZ2dl
 ciBuYW1lZCBsb2dnZXI6CisrICogIExPR19ERUJVRyhsb2dnZXIsICJUaGlzIGlzIGEgdGVzdCBE
 RUJVRyBtZXNzYWdlOiAlcyIsICJoZWxsbyIpOworKyAqICAvLyBPdXRwdXRzIFtmaWxlLmNjOjEy
 NSwgZnVuY3Rpb24oKV0gW0RFQlVHXSBUaGlzIGlzIGEgdGVzdCBERUJVRyBtZXNzYWdlOiBoZWxs
 by4KKysgKiBcZW5kY29kZQorKyAqLworKyNkZWZpbmUgTE9HX0RFQlVHKGxvZywgZm10LCAuLi4p
 IFwKKysgIGRvIHsgXAorKyAgICAobG9nKS5sb2dEZWJ1ZygiWyVzOiVkLCAlcygpXSAiIGZtdCwg
 X19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICMjIF9fVkFfQVJHU19fKTsgXAorKyAg
 fSB3aGlsZSAoZmFsc2UpCisrCisrLyoqCisrICogQSBoZWxwZXIgbWFjcm8gZm9yIExvZ2dlciBv
 YmplY3RzIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgYWRkIGEgaW5mbyBsZXZlbCBtZXNzYWdl
 CisrICogd2hpY2ggd2lsbCBpbmNsdWRlIGZpbGUsIGxpbmUsIGFuZCBmdW5jdGlvbiBuYW1lIHdp
 dGggdGhlIG1lc3NhZ2UuIFNlZSBleGFtcGxlIGluIExPR19ERUJVRworKyAqLworKyNkZWZpbmUg
 TE9HX0lORk8obG9nLCBmbXQsIC4uLikgXAorKyAgZG8geyBcCisrICAgIChsb2cpLmxvZ0luZm8o
 IlslczolZCwgJXMoKV0gIiBmbXQsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAj
 IyBfX1ZBX0FSR1NfXyk7IFwKKysgIH0gd2hpbGUgKGZhbHNlKQorKworKy8qKgorKyAqIEEgaGVs
 cGVyIG1hY3JvIGZvciBMb2dnZXIgb2JqZWN0cyB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGFk
 ZCBhIGVycm9yIGxldmVsIG1lc3NhZ2UKKysgKiB3aGljaCB3aWxsIGluY2x1ZGUgZmlsZSwgbGlu
 ZSwgYW5kIGZ1bmN0aW9uIG5hbWUgd2l0aCB0aGUgbWVzc2FnZS4gIFNlZSBleGFtcGxlIGluIExP
 R19ERUJVRworKyAqLworKyNkZWZpbmUgTE9HX0VSUk9SKGxvZywgZm10LCAuLi4pIFwKKysgIGRv
 IHsgXAorKyAgICAobG9nKS5sb2dFcnJvcigiWyVzOiVkLCAlcygpXSAiIGZtdCwgX19GSUxFX18s
 IF9fTElORV9fLCBfX0ZVTkNUSU9OX18sICMjIF9fVkFfQVJHU19fKTsgXAorKyAgfSB3aGlsZSAo
 ZmFsc2UpCisrCisrLyoqCisrICogV2UgZm9yd2FyZCBkZWNsYXJlIHRoaXMgYmVjYXVzZSBpZiB3
 ZSBkaWRuJ3Qgd2UgZW5kIHVwIHdyaXRpbmcgb3VyCisrICogb3duIHZlcnNpb24gdG8gZG8gdGhl
 IHZzbnByaW50ZiBqdXN0IHRvIGNhbGwgVFNEZWJ1ZyBhbmQgaGF2ZSBpdCBkbworKyAqIGFuIHVu
 bmNlc3NhcnkgdnNucHJpbnRmLgorKyAqCisrICogQHByaXZhdGUKKysgKi8KKytleHRlcm4gIkMi
 IHZvaWQgVFNEZWJ1Zyhjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBBVFND
 UFBBUElfUFJJTlRGTElLRSgyLDMpOworKworKy8qKgorKyAqIFdlIGZvcndhcmQgZGVjbGFyZSB0
 aGlzIGJlY2F1c2UgaWYgd2UgZGlkbid0IHdlIGVuZCB1cCB3cml0aW5nIG91cgorKyAqIG93biB2
 ZXJzaW9uIHRvIGRvIHRoZSB2c25wcmludGYganVzdCB0byBjYWxsIFRTRXJyb3IgYW5kIGhhdmUg
 aXQgZG8KKysgKiBhbiB1bm5jZXNzYXJ5IHZzbnByaW50Zi4KKysgKgorKyAqIEBwcml2YXRlCisr
 ICovCisrZXh0ZXJuICJDIiB2b2lkIFRTRXJyb3IoY29uc3QgY2hhciAqZm10LCAuLi4pIEFUU0NQ
 UEFQSV9QUklOVEZMSUtFKDEsMik7CisrCisrLy8gVGhpcyBpcyB3ZWlyZCwgYnV0IHNlZSB0aGUg
 Zm9sbG93aW5nOgorKy8vICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjQx
 NDI3L2hvdy10by1tYWtlLXByZXByb2Nlc3Nvci1nZW5lcmF0ZS1hLXN0cmluZy1mb3ItbGluZS1r
 ZXl3b3JkCisrI2RlZmluZSBTVFJJTkdJRlkwKHgpICN4CisrI2RlZmluZSBTVFJJTkdJRlkoeCkg
 U1RSSU5HSUZZMCh4KQorKyNkZWZpbmUgTElORV9OTyBTVFJJTkdJRlkoX19MSU5FX18pCisrCisr
 LyoqCisrICogQSBoZWxwZXIgbWFjcm8gdG8gZ2V0IGFjY2VzcyB0byB0aGUgRGlhZyBtZXNzYWdl
 cyBhdmFpbGFibGUgaW4gdHJhZmZpYyBzZXJ2ZXIuIFRoZXNlIGNhbiBiZSBlbmFibGVkCisrICog
 dmlhIHRyYWZmaWNfc2VydmVyIC1UICJ0YWcuKiIgb3Igc2luY2UgdGhpcyBtYWNybyBpbmNsdWRl
 cyB0aGUgZmlsZSBjYW4geW91IGZ1cnRoZXIgcmVmaW5lIHRvIGFuCisrICogaW5kaXZpZHVhbCBm
 aWxlIG9yIGV2ZW4gYSBwYXJ0aWN1bGFyIGxpbmUhIFRoaXMgY2FuIGFsc28gYmUgZW5hYmxlZCB2
 aWEgcmVjb3Jkcy5jb25maWcuCisrICovCisrI2RlZmluZSBUU19ERUJVRyh0YWcsIGZtdCwgLi4u
 KSBcCisrICBkbyB7IFwKKysgICAgVFNEZWJ1Zyh0YWcgIi4iIF9fRklMRV9fICI6IiBMSU5FX05P
 ICwgIlslcygpXSAiIGZtdCwgX19GVU5DVElPTl9fLCAjIyBfX1ZBX0FSR1NfXyk7IFwKKysgIH0g
 d2hpbGUgKGZhbHNlKQorKworKy8qKgorKyAqIEEgaGVscGVyIG1hY3JvIHRvIGdldCBhY2Nlc3Mg
 dG8gdGhlIGVycm9yLmxvZyBtZXNzYWdlcyBhdmFpbGFibGUgaW4gdHJhZmZpYyBzZXJ2ZXIuIFRo
 aXMKKysgKiB3aWxsIGFsc28gb3V0cHV0IGEgREVCVUcgbWVzc2FnZSB2aXNpYmxlIHZpYSB0cmFm
 ZmljX3NlcnZlciAtVCAidGFnLioiLCBvciBieSBlbmFibGluZyB0aGUKKysgKiB0YWcgaW4gcmVj
 b3Jkcy5jb25maWcuCisrICovCisrI2RlZmluZSBUU19FUlJPUih0YWcsIGZtdCwgLi4uKSBcCisr
 ICBkbyB7IFwKKysgICAgVFNfREVCVUcodGFnLCAiW0VSUk9SXSAiIGZtdCwgIyMgX19WQV9BUkdT
 X18pOyBcCisrICAgIFRTRXJyb3IoIlslc10gWyVzOiVkLCAlcygpXSAiIGZtdCwgdGFnLCBfX0ZJ
 TEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgIyMgX19WQV9BUkdTX18pOyBcCisrICB9IHdo
 aWxlIChmYWxzZSkKKysKKytuYW1lc3BhY2UgYXRzY3BwYXBpIHsKKysKKytzdHJ1Y3QgTG9nZ2Vy
 U3RhdGU7CisrCisrLyoqCisrICogQGJyaWVmIENyZWF0ZSBsb2cgZmlsZXMgdGhhdCBhcmUgYXV0
 b21hdGljYWxseSByb2xsZWQgYW5kIGNsZWFuZWQgdXAgYXMgc3BhY2UgaXMgcmVxdWlyZWQuCisr
 ICoKKysgKiBMb2cgZmlsZXMgY3JlYXRlZCB1c2luZyB0aGUgTG9nZ2VyIGNsYXNzIHdpbGwgYmUg
 cGxhY2VkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworKyAqIG90aGVyIGxvZyBmaWxlcywgdGhh
 dCBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIGluIHJlY29yZHMuY29uZmlnLiBBbGwgb2YgdGhlIGxv
 Z2dpbmcKKysgKiBjb25maWd1cmF0aW9uIHN1Y2ggYXMgbWF4IHNwYWNlIGF2YWlsYWJsZSBmb3Ig
 YWxsIGxvZ3MgaW5jbHVkZXMgYW55IGxvZ3MgY3JlYXRlZAorKyAqIHVzaW5nIHRoZSBMb2dnZXIg
 Y2xhc3MuCisrICoKKysgKiBMb2dnZXJzIGFyZSB2ZXJ5IGVhc3kgdG8gdXNlIGFuZCBhIGZ1bGwg
 ZXhhbXBsZSBpcyBhdmFpbGFibGUgaW4gZXhhbXBsZXMvbG9nZ2VyX2V4YW1wbGUvLAorKyAqIGEg
 c2ltcGxlIGV4YW1wbGUgaXM6CisrICogXGNvZGUKKysgKiAvLyBTZWUgTG9nZ2VyOjppbml0KCkg
 Zm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBpbml0KCkgcGFyYW1ldGVycy4KKysgKiBsb2cuaW5p
 dCgibG9nZ2VyX2V4YW1wbGUiLCB0cnVlLCB0cnVlLCBMb2dnZXI6OkxPR19MRVZFTF9ERUJVRyk7
 CisrICogLy8gWW91IGhhdmUgdHdvIHdheXMgdG8gbG9nIHRvIGEgbG9nZ2VyLCB5b3UgY2FuIGxv
 ZyBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IGl0c2VsZjoKKysgKiBsb2cubG9nSW5mbygiSGVsbG8g
 V29ybGQgZnJvbTogJXMiLCBhcmd2WzBdKTsKKysgKiAvLyBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4g
 dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN1cGVyIGhlbHBlciBtYWNyb3MgZm9yIGxvZ2dpbmcKKysg
 KiAvLyB0aGF0IHdpbGwgaW5jbHVkZSB0aGUgZmlsZSwgZnVuY3Rpb24sIGFuZCBsaW5lIG51bWJl
 ciBhdXRvbWF0aWNhbGx5IGFzIHBhcnQKKysgKiAvLyBvZiB0aGUgbG9nIG1lc3NhZ2U6CisrICog
 TE9HX0lORk8obG9nLCAiSGVsbG8gV29ybGQgd2l0aCBtb3JlIGluZm8gZnJvbTogJXMiLCBhcmd2
 WzBdKTsKKysgKiBcZW5kY29kZQorKyAqCisrICogQHdhcm5pbmcgTG9nIHJvbGxpbmcgZG9lc24n
 dCB3b3JrIGNvcnJlY3RseSBpbiAzLjIueCBzZWU6CisrICogICBodHRwczovL2lzc3Vlcy5hcGFj
 aGUub3JnL2ppcmEvYnJvd3NlL1RTLTE4MTMKKysgKiAgIEFwcGx5IHRoZSBwYXRjaCBpbiBUUy0x
 ODEzIHRvIGNvcnJlY3QgbG9nIHJvbGxpbmcgaW4gMy4yLngKKysgKgorKyAqLworK2NsYXNzIExv
 Z2dlciA6IG5vbmNvcHlhYmxlIHsKKytwdWJsaWM6CisrCisrICAvKioKKysgICAqIFRoZSBhdmFp
 bGFibGUgbG9nIGxldmVscworKyAgICovCisrICBlbnVtIExvZ0xldmVsIHsKKysgICAgTE9HX0xF
 VkVMX05PX0xPRyA9IDEyOCwgLyoqPCBUaGlzIGxvZyBsZXZlbCBpcyB1c2VkIHRvIGRpc2FibGUg
 YWxsIGxvZ2dpbmcgKi8KKysgICAgTE9HX0xFVkVMX0RFQlVHID0gMSwgLyoqPCBUaGlzIGxvZyBs
 ZXZlbCBpcyB1c2VkIGZvciBERUJVRyBsZXZlbCBsb2dnaW5nIChERUJVRyArIElORk8gKyBFUlJP
 UikgKi8KKysgICAgTE9HX0xFVkVMX0lORk8gPSAyLCAvKio8IFRoaXMgbG9nIGxldmVsIGlzIHVz
 ZWQgZm9yIElORk8gbGV2ZWwgbG9nZ2luZyAoSU5GTyArIEVSUk9SKSAqLworKyAgICBMT0dfTEVW
 RUxfRVJST1IgPSA0IC8qKjwgVGhpcyBsb2cgbGV2ZWwgaXMgdXNlZCBmb3IgRVJST1IgbGV2ZWwg
 bG9nZ2luZyAoRVJST1IgT05MWSkgKi8KKysgIH07CisrCisrICBMb2dnZXIoKTsKKysgIH5Mb2dn
 ZXIoKTsKKysKKysgIC8qKgorKyAgICogWW91IG11c3QgYWx3YXlzIGluaXQoKSBhIExvZ2dlciBi
 ZWZvcmUgeW91IGJlZ2luIGxvZ2dpbmcuIElmIHlvdSBkbyBub3QgY2FsbCBpbml0KCkgbm90aGlu
 ZyB3aWxsCisrICAgKiBoYXBwZW4uCisrICAgKgorKyAgICogQHBhcmFtIGZpbGUgVGhlIG5hbWUg
 b2YgdGhlIGZpbGUgdG8gY3JlYXRlIGluIHRoZSBsb2dnaW5nIGRpcmVjdG9yeSwgaWYgeW91IGRv
 IG5vdCBzcGVjaWZ5IGFuIGV4dGVuc2lvbiAubG9nIHdpbGwgYmUgdXNlZC4KKysgICAqIEBwYXJh
 bSBhZGRfdGltZXN0YW1wIFByZXBlbmQgYSB0aW1lc3RhbXAgdG8gdGhlIGxvZyBsaW5lcywgdGhl
 IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS4KKysgICAqIEBwYXJhbSByZW5hbWVfZmlsZSBJZiBhIGZp
 bGUgYWxyZWFkeSBleGlzdHMgYnkgdGhlIHNhbWUgbmFtZSBpdCB3aWxsIGF0dGVtcHQgdG8gcmVu
 YW1lIHVzaW5nIGEgc2NoZW1lIHRoYXQgYXBwZW5kcyAuMSwgLjIsIGFuZCBzbyBvbiwKKysgICAq
 ICAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgYXJndW1lbnQgaXMgdHJ1ZS4KKysgICAqIEBw
 YXJhbSBsZXZlbCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhl
 IGxvZ2dlciwgdGhpcyBpcyBzZXQgdG8gTE9HX0xFVkVMX0lORk8gYnkgZGVmYXVsdC4KKysgICAq
 IEBwYXJhbSByb2xsaW5nX2VuYWJsZWQgaWYgc2V0IHRvIHRydWUgdGhpcyB3aWxsIGVuYWJsZSBs
 b2cgcm9sbGluZyBvbiBhIHBlcmlvZGljIGJhc2lzLCB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVs
 dC4KKysgICAqIEBwYXJhbSByb2xsaW5nX2ludGVydmFsX3NlY29uZHMgaG93IGZyZXF1ZW50bHkg
 dG8gcm9sbCB0aGUgbG9uZ3MgaW4gc2Vjb25kcywgdGhpcyBpcyBzZXQgdG8gMzYwMCBieSBkZWZh
 dWx0IChvbmUgaG91cikuCisrICAgKiBAcmV0dXJuIHJldHVybnMgdHJ1ZSBpZiB0aGUgbG9nZ2Vy
 IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuCisrICAgKiBAc2VlIExv
 Z0xldmVsCisrICAgKi8KKysgIGJvb2wgaW5pdChjb25zdCBzdGQ6OnN0cmluZyAmZmlsZSwgYm9v
 bCBhZGRfdGltZXN0YW1wID0gdHJ1ZSwgYm9vbCByZW5hbWVfZmlsZSA9IHRydWUsCisrICAgICAg
 TG9nTGV2ZWwgbGV2ZWwgPSBMT0dfTEVWRUxfSU5GTywgYm9vbCByb2xsaW5nX2VuYWJsZWQgPSB0
 cnVlLCBpbnQgcm9sbGluZ19pbnRlcnZhbF9zZWNvbmRzID0gMzYwMCk7CisrCisrICAvKioKKysg
 ICAqIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSByb2xsaW5nIGludGVydmFsIGluIHNlY29uZHMK
 KysgICAqIEBwYXJhbSBzZWNvbmRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHJvbGxz
 CisrICAgKi8KKysgIHZvaWQgc2V0Um9sbGluZ0ludGVydmFsU2Vjb25kcyhpbnQgc2Vjb25kcyk7
 CisrCisrICAvKioKKysgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4g
 bG9nIHJvbGxzLgorKyAgICovCisrICBpbnQgZ2V0Um9sbGluZ0ludGVydmFsU2Vjb25kcygpIGNv
 bnN0OworKworKyAgLyoqCisrICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGxvZyByb2xsaW5nCisr
 ICAgKiBAcGFyYW0gZW5hYmxlZCB0cnVlIHRvIGVuYWJsZSBsb2cgcm9sbGluZywgZmFsc2UgdG8g
 ZGlzYWJsZSBpdC4KKysgICAqLworKyAgdm9pZCBzZXRSb2xsaW5nRW5hYmxlZChib29sIGVuYWJs
 ZWQpOworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIEEgYm9vbGVhbiB2YWx1ZSB3aGljaCByZXBy
 ZXNlbnRzIHdoZXRoZXIgcm9sbGluZyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgorKyAgICovCisr
 ICBib29sIGlzUm9sbGluZ0VuYWJsZWQoKSBjb25zdDsKKysKKysgIC8qKgorKyAgICogQ2hhbmdl
 IHRoZSBsb2cgbGV2ZWwKKysgICAqCisrICAgKiBAcGFyYW0gbGV2ZWwgdGhlIG5ldyBsb2cgbGV2
 ZWwgdG8gdXNlCisrICAgKiBAc2VlIExvZ0xldmVsCisrICAgKi8KKysgIHZvaWQgc2V0TG9nTGV2
 ZWwoTG9nZ2VyOjpMb2dMZXZlbCBsZXZlbCk7CisrCisrICAvKioKKysgICAqIEByZXR1cm4gVGhl
 IGN1cnJlbnQgbG9nIGxldmVsLgorKyAgICogQHNlZSBMb2dMZXZlbAorKyAgICovCisrICBMb2dn
 ZXI6OkxvZ0xldmVsIGdldExvZ0xldmVsKCkgY29uc3Q7CisrCisrICAvKioKKysgICAqIFRoaXMg
 bWV0aG9kIGFsbG93cyB5b3UgdG8gZmx1c2ggYW55IGxvZyBsaW5lcyB0aGF0IG1pZ2h0IGhhdmUg
 YmVlbiBidWZmZXJlZC4KKysgICAqIEB3YXJuaW5nIFRoaXMgbWV0aG9kIGNhbiBjYXVzZSBzZXJp
 b3VzIHBlcmZvcm1hbmNlIGRlZ3JlZGF0aW9uIHNvIHlvdSBzaG91bGQgb25seQorKyAgICogdXNl
 IGl0IHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuCisrICAgKi8KKysgIHZvaWQgZmx1c2goKTsK
 KysKKysgIC8qKgorKyAgICogVGhpcyBtZXRob2Qgd3JpdGVzIGEgREVCVUcgbGV2ZWwgbWVzc2Fn
 ZSB0byB0aGUgbG9nIGZpbGUsIHRoZSBMT0dfREVCVUcKKysgICAqIG1hY3JvIGluIExvZ2dlci5o
 IHNob3VsZCBiZSB1c2VkIGluIGZhdm9yIG9mIHRoZXNlIHdoZW4gcG9zc2libGUgYmVjYXVzZSBp
 dAorKyAgICogd2lsbCBwcm9kdWNlIGEgbXVjaCBtb3JlIHJpY2ggZGVidWcgbWVzc2FnZS4KKysg
 ICAqCisrICAgKiBTYW1wbGUgdXNhZ2U6CisrICAgKiBcY29kZQorKyAgICogbG9nLmxvZ0RlYnVn
 KCJIZWxsbyB5b3UgYXJlICVkIHllYXJzIG9sZCIsIDI3KTsKKysgICAqIFxlbmRjb2RlCisrICAg
 Ki8KKysgIHZvaWQgbG9nRGVidWcoY29uc3QgY2hhciAqZm10LCAuLi4pIEFUU0NQUEFQSV9QUklO
 VEZMSUtFKDIsMyk7CisrCisrICAvKioKKysgICAqIFRoaXMgbWV0aG9kIHdyaXRlcyBhbiBJTkZP
 IGxldmVsIG1lc3NhZ2UgdG8gdGhlIGxvZyBmaWxlLCB0aGUgTE9HX0lORk8KKysgICAqIG1hY3Jv
 IGluIExvZ2dlci5oIHNob3VsZCBiZSB1c2VkIGluIGZhdm9yIG9mIHRoZXNlIHdoZW4gcG9zc2li
 bGUgYmVjYXVzZSBpdAorKyAgICogd2lsbCBwcm9kdWNlIGEgbXVjaCBtb3JlIHJpY2ggaW5mbyBt
 ZXNzYWdlLgorKyAgICovCisrICB2b2lkIGxvZ0luZm8oY29uc3QgY2hhciAqZm10LCAuLi4pIEFU
 U0NQUEFQSV9QUklOVEZMSUtFKDIsMyk7CisrCisrICAvKioKKysgICAqIFRoaXMgbWV0aG9kIHdy
 aXRlcyBhbiBFUlJPUiBsZXZlbCBtZXNzYWdlIHRvIHRoZSBsb2cgZmlsZSwgdGhlIExPR19FUlJP
 UgorKyAgICogbWFjcm8gaW4gTG9nZ2VyLmggc2hvdWxkIGJlIHVzZWQgaW4gZmF2b3Igb2YgdGhl
 c2Ugd2hlbiBwb3NzaWJsZSBiZWNhdXNlIGl0CisrICAgKiB3aWxsIHByb2R1Y2UgYSBtdWNoIG1v
 cmUgcmljaCBlcnJvciBtZXNzYWdlLgorKyAgICovCisrICB2b2lkIGxvZ0Vycm9yKGNvbnN0IGNo
 YXIgKmZtdCwgLi4uKSBBVFNDUFBBUElfUFJJTlRGTElLRSgyLDMpOworK3ByaXZhdGU6CisrICBM
 b2dnZXJTdGF0ZSAqc3RhdGVfOyAvKio8IEludGVybmFsIHN0YXRlIGZvciB0aGUgTG9nZ2VyICov
 CisrfTsKKysKKyt9IC8qIGF0c2NwcGFwaSAqLworKworKworKworKworKyNlbmRpZiAvKiBBVFND
 UFBBUElfTE9HR0VSX0hfICovCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9h
 dHNjcHBhcGkvTXV0ZXguaCBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9NdXRl
 eC5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvTXV0ZXguaAkxOTcw
 LTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL2lu
 Y2x1ZGUvYXRzY3BwYXBpL011dGV4LmgJMjAxMy0xMS0xMSAxNDowMzoxMi43MDA1MzI1NjQgKzA4
 MDAKK0BAIC0wLDAgKzEsMjUwIEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNv
 ZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9y
 IGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVk
 IHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcg
 Y29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5
 b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5z
 ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3
 aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
 CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisr
 CisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
 aXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
 TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUg
 dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
 bnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioK
 KysgKiBAZmlsZSBNdXRleC5oCisrICogQGJyaWVmIENvbnRhaW5zIE11dGV4IHJlbGF0ZWQgY2xh
 c3NlcyBmb3IgY3JlYXRpbmcgYSBNdXRleCBhbmQgbG9ja2luZyBhIE11dGV4IGluIGEgc3BlY2lm
 aWMgc2NvcGUuCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfTVVU
 RVhfSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9NVVRFWF9IXworKworKyNpbmNsdWRlIDxwdGhyZWFk
 Lmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9ub25jb3B5YWJsZS5oPgorKyNpbmNsdWRlIDxhdHNj
 cHBhcGkvc2hhcmVkX3B0ci5oPgorKworK25hbWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8qKgor
 KyAqIEBicmllZiBBIG11dGV4IGlzIG11dHVhbCBleGNsdXNpb246IGEgYmxvY2tpbmcgbG9jay4K
 KysgKgorKyAqIFRoZSBNdXRleCBjbGFzcyB1c2VzIHB0aHJlYWRzIGZvciBpdHMgaW1wbG1lbnRh
 dGlvbi4KKysgKgorKyAqIEBzZWUgU2NvcGVkTXV0ZXhMb2NrCisrICogQHNlZSBTY29wZWRNdXRl
 eFRyeUxvY2sKKysgKiBAc2VlIFNjb3BlZFNoYXJlZE11dGV4TG9jaworKyAqIEBzZWUgU2NvcGVk
 U2hhcmVkTXV0ZXhUcnlMb2NrCisrICovCisrY2xhc3MgTXV0ZXg6IG5vbmNvcHlhYmxlIHsKKytw
 dWJsaWM6CisrCisrICAvKioKKysgICAqIFRoZSBhdmFpbGFibGUgdHlwZXMgb2YgTXV0ZXhlcy4K
 KysgICAqLworKyAgZW51bSBUeXBlIHsKKysgICAgVFlQRV9OT1JNQUwgPSAwLCAvKio8IFRoaXMg
 dHlwZSBvZiBNdXRleCB3aWxsIGRlYWRsb2NrIGlmIGxvY2tlZCBieSBhIHRocmVhZCBhbHJlYWR5
 IGhvbGRpbmcgdGhlIGxvY2sgKi8KKysgICAgVFlQRV9SRUNVUlNJVkUsIC8qKjwgVGhpcyB0eXBl
 IG9mIE11dGV4IHdpbGwgYWxsb3cgYSB0aHJlYWQgaG9sZGluZyB0aGUgbG9jayB0byBsb2NrIGl0
 IGFnYWluOyBob3dldmVyLCBpdCBtdXN0IGJlIHVubG9ja2VkIHRoZSBzYW1lIG51bWJlciBvZiB0
 aW1lcyAqLworKyAgICBUWVBFX0VSUk9SX0NIRUNLIC8qKjwgVGhpcyB0eXBlIG9mIE11dGV4IHdp
 bGwgcmV0dXJuIGVycm5vID0gRURFQURMQ0sgaWYgYSB0aHJlYWQgd291bGQgZGVhZGxvY2sgYnkg
 dGFraW5nIHRoZSBsb2NrIGFmdGVyIGl0IGFscmVhZHkgaG9sZHMgaXQgKi8KKysgIH07CisrCisr
 ICAvKioKKysgICAqIENyZWF0ZSBhIG11dGV4CisrICAgKgorKyAgICogQHBhcmFtIHR5cGUgVGhl
 IFR5cGUgb2YgTXV0ZXggdG8gY3JlYXRlLCB0aGUgZGVmYXVsdCBpcyBUWVBFX05PUk1BTC4KKysg
 ICAqIEBzZWUgVHlwZQorKyAgICovCisrICBNdXRleChUeXBlIHR5cGUgPSBUWVBFX05PUk1BTCkg
 eworKyAgICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7CisrICAgIHB0aHJlYWRfbXV0ZXhhdHRy
 X2luaXQoJmF0dHIpOworKworKyAgICBzd2l0Y2godHlwZSkgeworKyAgICBjYXNlIFRZUEVfUkVD
 VVJTSVZFOgorKyAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9N
 VVRFWF9SRUNVUlNJVkUpOworKyAgICAgYnJlYWs7CisrICAgIGNhc2UgVFlQRV9FUlJPUl9DSEVD
 SzoKKysgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhf
 RVJST1JDSEVDSyk7CisrICAgICBicmVhazsKKysgICAgY2FzZSBUWVBFX05PUk1BTDoKKysgICAg
 ZGVmYXVsdDoKKysgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURf
 TVVURVhfTk9STUFMKTsKKysgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIHB0aHJlYWRfbXV0
 ZXhfaW5pdCgmbXV0ZXgsICZhdHRyKTsKKysgIH0KKysKKysgIH5NdXRleCgpIHsKKysgICAgcHRo
 cmVhZF9tdXRleF9kZXN0cm95KCZtdXRleCk7CisrICB9CisrCisrICAvKioKKysgICAqIFRyeSB0
 byB0YWtlIHRoZSBsb2NrLCB0aGlzIGNhbGwgd2lsbCBOT1QgYmxvY2sgaWYgdGhlIG11dGV4IGNh
 bm5vdCBiZSB0YWtlbi4KKysgICAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NrIHdh
 cyB0YWtlbiwgZmFsc2UgaWYgaXQgd2FzIG5vdC4gVGhpcyBjYWxsIG9idmlvdXNseSB3aWxsIG5v
 dCBibG9jay4KKysgICAqLworKyAgYm9vbCB0cnlMb2NrKCkgeworKyAgICByZXR1cm4gIXB0aHJl
 YWRfbXV0ZXhfdHJ5bG9jaygmbXV0ZXgpOworKyAgfQorKworKyAgLyoqCisrICAgKiBCbG9jayB1
 bnRpbCB0aGUgbG9jayBpcyB0YWtlbiwgd2hlbiB0aGlzIGNhbGwgcmV0dXJucyB0aGUgdGhyZWFk
 IHdpbGwgYmUgaG9sZGluZyB0aGUgbG9jay4KKysgICAqLworKyAgdm9pZCBsb2NrKCkgeworKyAg
 ICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKKysgIH0KKysKKysgIC8qKgorKyAgICogVW5s
 b2NrIHRoZSBsb2NrLCB0aGlzIGNhbGwgaXMgbm9uYmxvY2tpbmcuCisrICAgKi8KKysgIHZvaWQg
 dW5sb2NrKCkgeworKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOworKyAgfQorK3By
 aXZhdGU6CisrICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7IC8qKjwgSW50ZXJuYWwgbXV0ZXggaWRl
 bnRpZmllciAqLworK307CisrCisrLyoqCisrICogQGJyaWVmIFRha2UgYSBNdXRleCByZWZlcmVu
 Y2UgYW5kIGxvY2sgaW5zaWRlIGEgc2NvcGUgYW5kIHVubG9jayB3aGVuIHRoZSBzY29wZSBpcyBl
 eGl0ZWQuCisrICoKKysgKiBUaGlzIGlzIGFuIFJBSUkgaW1wbGVtZW50YXRpb24gd2hpY2ggd2ls
 bCBsb2NrIGEgbXV0ZXggYXQgdGhlIHN0YXJ0IG9mIHRoZQorKyAqIHNjb3BlIGFuZCB1bmxvY2sg
 aXQgd2hlbiB0aGUgc2NvcGUgaXMgZXhpdGVkLgorKyAqCisrICogQHNlZSBNdXRleAorKyAqLwor
 K2NsYXNzIFNjb3BlZE11dGV4TG9jazogbm9uY29weWFibGUgeworK3B1YmxpYzoKKysgIC8qKgor
 KyAgICogQ3JlYXRlIHRoZSBzY29wZWQgbXV0ZXggbG9jaywgb25jZSB0aGlzIG9iamVjdCBpcyBj
 b25zdHJ1Y3RlZCB0aGUgbG9jayB3aWxsIGJlIGhlbGQgYnkgdGhlIHRocmVhZC4KKysgICAqIEBw
 YXJhbSBtdXRleCBhIHJlZmVyZW5jZSB0byBhIE11dGV4LgorKyAgICovCisrICBleHBsaWNpdCBT
 Y29wZWRNdXRleExvY2soTXV0ZXggJm11dGV4KSA6CisrICAgICAgbXV0ZXhfKG11dGV4KSB7Cisr
 ICAgIG11dGV4Xy5sb2NrKCk7CisrICB9CisrCisrICAvKioKKysgICAqIFVubG9jayB0aGUgbXV0
 ZXguCisrICAgKi8KKysgIH5TY29wZWRNdXRleExvY2soKSB7CisrICAgIG11dGV4Xy51bmxvY2so
 KTsKKysgIH0KKytwcml2YXRlOgorKyAgTXV0ZXggJm11dGV4XzsKKyt9OworKworKy8qKgorKyAq
 IEBicmllZiBUYWtlIGEgc2hhcmVkX3B0ciB0byBhIE11dGV4IGFuZCBsb2NrIGluc2lkZSBhIHNj
 b3BlIGFuZCB1bmxvY2sgd2hlbiB0aGUgc2NvcGUgaXMgZXhpdGVkLgorKyAqCisrICogVGhpcyBp
 cyBhbiBSQUlJIGltcGxlbWVudGF0aW9uIHdoaWNoIHdpbGwgbG9jayBhIG11dGV4IGF0IHRoZSBz
 dGFydCBvZiB0aGUKKysgKiBzY29wZSBhbmQgdW5sb2NrIGl0IHdoZW4gdGhlIHNjb3BlIGlzIGV4
 aXRlZC4KKysgKgorKyAqIEBzZWUgTXV0ZXgKKysgKi8KKytjbGFzcyBTY29wZWRTaGFyZWRNdXRl
 eExvY2s6IG5vbmNvcHlhYmxlIHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIENyZWF0ZSB0aGUg
 c2NvcGVkIG11dGV4IGxvY2ssIG9uY2UgdGhpcyBvYmplY3QgaXMgY29uc3RydWN0ZWQgdGhlIGxv
 Y2sgd2lsbCBiZSBoZWxkIGJ5IHRoZSB0aHJlYWQuCisrICAgKiBAcGFyYW0gbXV0ZXggYSBzaGFy
 ZWQgcG9pbnRlciB0byBhIE11dGV4LgorKyAgICovCisrICBleHBsaWNpdCBTY29wZWRTaGFyZWRN
 dXRleExvY2soc2hhcmVkX3B0cjxNdXRleD4gbXV0ZXgpIDoKKysgICAgICBtdXRleF8obXV0ZXgp
 IHsKKysgICAgbXV0ZXhfLT5sb2NrKCk7CisrICB9CisrCisrICAvKioKKysgICAqIFVubG9jayB0
 aGUgbXV0ZXguCisrICAgKi8KKysgIH5TY29wZWRTaGFyZWRNdXRleExvY2soKSB7CisrICAgIG11
 dGV4Xy0+dW5sb2NrKCk7CisrICB9CisrcHJpdmF0ZToKKysgIHNoYXJlZF9wdHI8TXV0ZXg+IG11
 dGV4XzsKKyt9OworKworKy8qKgorKyAqIEBicmllZiBUYWtlIGEgTXV0ZXggcmVmZXJlbmNlIGFu
 ZCB0cnkgdG8gbG9jayBpbnNpZGUgYSBzY29wZSBhbmQgdW5sb2NrIHdoZW4gdGhlIHNjb3BlIGlz
 IGV4aXRlZCAoaWYgdGhlIGxvY2sgd2FzIHRha2VuKS4KKysgKgorKyAqIFRoaXMgaXMgYW4gUkFJ
 SSBpbXBsZW1lbnRhdGlvbiB3aGljaCB3aWxsIGxvY2sgYSBtdXRleCBhdCB0aGUgc3RhcnQgb2Yg
 dGhlCisrICogc2NvcGUgYW5kIHVubG9jayBpdCB3aGVuIHRoZSBzY29wZSBpcyBleGl0ZWQgaWYg
 dGhlIGxvY2sgd2FzIHRha2VuLgorKyAqCisrICogQHNlZSBNdXRleAorKyAqLworK2NsYXNzIFNj
 b3BlZE11dGV4VHJ5TG9jazogbm9uY29weWFibGUgeworK3B1YmxpYzoKKysgIC8qKgorKyAgICog
 VHJ5IHRvIGNyZWF0ZSB0aGUgc2NvcGVkIG11dGV4IGxvY2ssIGlmIHlvdSBzaG91bGQgY2hlY2sg
 aGFzTG9jaygpIHRvIGRldGVybWluZSBpZiB0aGlzIG9iamVjdCB3YXMgc3VjY2Vzc2Z1bGx5IGFi
 bGUgdG8gdGFrZSB0aGUgbG9jay4KKysgICAqIEBwYXJhbSBtdXRleCBhIHNoYXJlZCBwb2ludGVy
 IHRvIGEgTXV0ZXguCisrICAgKi8KKysgIGV4cGxpY2l0IFNjb3BlZE11dGV4VHJ5TG9jayhNdXRl
 eCAmbXV0ZXgpIDoKKysgICAgICBtdXRleF8obXV0ZXgpLCBoYXNfbG9ja18oZmFsc2UpIHsKKysg
 ICAgaGFzX2xvY2tfID0gbXV0ZXhfLnRyeUxvY2soKTsKKysgIH0KKysKKysgIC8qKgorKyAgICog
 VW5sb2NrIHRoZSBtdXRleCAoaWYgd2UgaG9sZCB0aGUgbG9jaykKKysgICAqLworKyAgflNjb3Bl
 ZE11dGV4VHJ5TG9jaygpIHsKKysgICAgaWYgKGhhc19sb2NrXykgeworKyAgICAgIG11dGV4Xy51
 bmxvY2soKTsKKysgICAgfQorKyAgfQorKworKyAgLyoqCisrICAgKiBAcmV0dXJuIFRydWUgaWYg
 dGhlIGxvY2sgd2FzIHRha2VuLCBGYWxzZSBpZiBpdCB3YXMgbm90IHRha2VuLgorKyAgICovCisr
 ICBib29sIGhhc0xvY2soKSB7CisrICAgIHJldHVybiBoYXNfbG9ja187CisrICB9CisrcHJpdmF0
 ZToKKysgIE11dGV4ICZtdXRleF87CisrICBib29sIGhhc19sb2NrXzsKKyt9OworKworKy8qKgor
 KyAqIEBicmllZiBUYWtlIGEgc2hhcmVkX3B0ciB0byBhIE11dGV4IGFuZCB0cnkgdG8gbG9jayBp
 bnNpZGUgYSBzY29wZSBhbmQgdW5sb2NrIHdoZW4gdGhlIHNjb3BlIGlzIGV4aXRlZCAoaWYgdGhl
 IGxvY2sgd2FzIHRha2VuKS4KKysgKgorKyAqIFRoaXMgaXMgYW4gUkFJSSBpbXBsZW1lbnRhdGlv
 biB3aGljaCB3aWxsIGxvY2sgYSBtdXRleCBhdCB0aGUgc3RhcnQgb2YgdGhlCisrICogc2NvcGUg
 YW5kIHVubG9jayBpdCB3aGVuIHRoZSBzY29wZSBpcyBleGl0ZWQgaWYgdGhlIGxvY2sgd2FzIHRh
 a2VuLgorKyAqCisrICogQHNlZSBNdXRleAorKyAqLworK2NsYXNzIFNjb3BlZFNoYXJlZE11dGV4
 VHJ5TG9jazogbm9uY29weWFibGUgeworK3B1YmxpYzoKKysgIC8qKgorKyAgICogVHJ5IHRvIGNy
 ZWF0ZSB0aGUgc2NvcGVkIG11dGV4IGxvY2ssIGlmIHlvdSBzaG91bGQgY2hlY2sgaGFzTG9jaygp
 IHRvIGRldGVybWluZSBpZiB0aGlzIG9iamVjdCB3YXMgc3VjY2Vzc2Z1bGx5IGFibGUgdG8gdGFr
 ZSB0aGUgbG9jay4KKysgICAqIEBwYXJhbSBtdXRleCBhIHNoYXJlZCBwb2ludGVyIHRvIGEgTXV0
 ZXguCisrICAgKi8KKysgIGV4cGxpY2l0IFNjb3BlZFNoYXJlZE11dGV4VHJ5TG9jayhzaGFyZWRf
 cHRyPE11dGV4PiBtdXRleCkgOgorKyAgICAgIG11dGV4XyhtdXRleCksIGhhc19sb2NrXyhmYWxz
 ZSkgeworKyAgICBoYXNfbG9ja18gPSBtdXRleF8tPnRyeUxvY2soKTsKKysgIH0KKysKKysgIC8q
 KgorKyAgICogVW5sb2NrIHRoZSBtdXRleCAoaWYgd2UgaG9sZCB0aGUgbG9jaykKKysgICAqLwor
 KyAgflNjb3BlZFNoYXJlZE11dGV4VHJ5TG9jaygpIHsKKysgICAgaWYgKGhhc19sb2NrXykgewor
 KyAgICAgIG11dGV4Xy0+dW5sb2NrKCk7CisrICAgIH0KKysgIH0KKysKKysgIC8qKgorKyAgICog
 QHJldHVybiBUcnVlIGlmIHRoZSBsb2NrIHdhcyB0YWtlbiwgRmFsc2UgaWYgaXQgd2FzIG5vdCB0
 YWtlbi4KKysgICAqLworKyAgYm9vbCBoYXNMb2NrKCkgeworKyAgICByZXR1cm4gaGFzX2xvY2tf
 OworKyAgfQorK3ByaXZhdGU6CisrICBzaGFyZWRfcHRyPE11dGV4PiBtdXRleF87CisrICBib29s
 IGhhc19sb2NrXzsKKyt9OworKworK30gLyogYXRzY3BwYXBpICovCisrCisrCisrI2VuZGlmIC8q
 IEFUU0NQUEFQSV9NVVRFWF9IXyAqLworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1
 ZGUvYXRzY3BwYXBpL1BsdWdpbi5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBp
 L1BsdWdpbi5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUGx1Z2lu
 LmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBp
 L3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9QbHVnaW4uaAkyMDEzLTExLTExIDE0OjAzOjEyLjcwMDUz
 MjU2NCArMDgwMAorQEAgLTAsMCArMSwxMDYgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBB
 cGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29u
 dHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlz
 dHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJl
 Z2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUK
 KysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysg
 ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
 Y2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
 Y2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
 RS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
 dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
 IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJ
 RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
 KysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
 ZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLwor
 Ky8qKgorKyAqIEBmaWxlIFBsdWdpbi5oCisrICoKKysgKiBAYnJpZWYgQ29udGFpbnMgdGhlIGJh
 c2UgaW50ZXJmYWNlIHVzZWQgaW4gY3JlYXRpbmcgR2xvYmFsIGFuZCBUcmFuc2FjaXRvbiBwbHVn
 aW5zLgorKyAqIFxub3RlIFRoaXMgaW50ZXJmYWNlIGNhbiBuZXZlciBiZSBpbXBsZW1lbnRlZCBk
 aXJlY3RseSwgaXQgc2hvdWxkIGJlIGltcGxlbWVudGVkCisrICogICB0aHJvdWdoIGV4dGVuZGlu
 ZyBHbG9iYWxQbHVnaW4sIFRyYW5zYWN0aW9uUGx1Z2luLCBvciBUcmFuc2Zvcm1hdGlvblBsdWdp
 bi4KKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQSV9QTFVHSU5fSF8K
 KysjZGVmaW5lIEFUU0NQUEFQSV9QTFVHSU5fSF8KKysKKysjaW5jbHVkZSA8YXRzY3BwYXBpL1Ry
 YW5zYWN0aW9uLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9ub25jb3B5YWJsZS5oPgorKworK25h
 bWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8qKgorKyAqIEBicmllZiBUaGUgYmFzZSBpbnRlcmZh
 Y2UgdXNlZCB3aGVuIGNyZWF0aW5nIGEgUGx1Z2luLgorKyAqCisrICogXG5vdGUgVGhpcyBpbnRl
 cmZhY2UgY2FuIG5ldmVyIGJlIGltcGxlbWVudGVkIGRpcmVjdGx5LCBpdCBzaG91bGQgYmUgaW1w
 bGVtZW50ZWQKKysgKiAgIHRocm91Z2ggZXh0ZW5kaW5nIEdsb2JhbFBsdWdpbiwgVHJhbnNhY3Rp
 b25QbHVnaW4sIG9yIFRyYW5zZm9ybWF0aW9uUGx1Z2luLgorKyAqCisrICogQHNlZSBUcmFuc2Fj
 dGlvblBsdWdpbgorKyAqIEBzZWUgR2xvYmFsUGx1Z2luCisrICogQHNlZSBUcmFuc2Zvcm1hdGlv
 blBsdWdpbgorKyAqLworK2NsYXNzIFBsdWdpbjogbm9uY29weWFibGUgeworK3B1YmxpYzoKKysg
 IC8qKgorKyAgICogQSBlbnVtZXJhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHR5cGVzIG9mIEhvb2tz
 LiBUaGVzZSBhcmUgdXNlZCB3aXRoIEdsb2JhbFBsdWdpbjo6cmVnaXN0ZXJIb29rKCkKKysgICAq
 IGFuZCBUcmFuc2FjdGlvblBsdWdpbjo6cmVnaXN0ZXJIb29rKCkuCisrICAgKi8KKysgIGVudW0g
 SG9va1R5cGUgeworKyAgICBIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUCA9IDAs
 IC8qKjwgVGhpcyBob29rIHdpbGwgYmUgZmlyZWQgYmVmb3JlIHJlbWFwIGhhcyBvY2N1cmVkLiAq
 LworKyAgICBIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BPU1RfUkVNQVAsIC8qKjwgVGhpcyBo
 b29rIHdpbGwgYmUgZmlyZWQgZGlyZWN0bHkgYWZ0ZXIgcmVtYXAgaGFzIG9jY3VyZWQuICovCisr
 ICAgIEhPT0tfU0VORF9SRVFVRVNUX0hFQURFUlMsIC8qKjwgVGhpcyBob29rIHdpbGwgYmUgZmly
 ZWQgcmlnaHQgYmVmb3JlIHJlcXVlc3QgaGVhZGVycyBhcmUgc2VudCB0byB0aGUgb3JpZ2luICov
 CisrICAgIEhPT0tfUkVBRF9SRVNQT05TRV9IRUFERVJTLCAvKio8IFRoaXMgaG9vayB3aWxsIGJl
 IGZpcmVkIHJpZ2h0IGFmdGVyIHJlc3BvbnNlIGhlYWRlcnMgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0
 aGUgb3JpZ2luICovCisrICAgIEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTLCAvKio8IFRoaXMg
 aG9vayB3aWxsIGJlIGZpcmVkIHJpZ2h0IGJlZm9yZSB0aGUgcmVzcG9uc2UgaGVhZGVycyBhcmUg
 c2VudCB0byB0aGUgY2xpZW50ICovCisrICAgIEhPT0tfT1NfRE5TIC8qKjwgVGhpcyBob29rIHdp
 bGwgYmUgZmlyZWQgcmlnaHQgYWZ0ZXIgdGhlIE9TIEROUyBsb29rdXAgKi8KKysgIH07CisrCisr
 ICAvKioKKysgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgd2hlbiB5b3UgaG9v
 ayBIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTX1BSRV9SRU1BUAorKyAgICovCisrICB2aXJ0dWFs
 IHZvaWQgaGFuZGxlUmVhZFJlcXVlc3RIZWFkZXJzUHJlUmVtYXAoVHJhbnNhY3Rpb24gJnRyYW5z
 YWN0aW9uKSB7IHRyYW5zYWN0aW9uLnJlc3VtZSgpOyB9OworKworKyAgLyoqCisrICAgKiBUaGlz
 IG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIHdoZW4geW91IGhvb2sgSE9PS19SRUFEX1JFUVVF
 U1RfSEVBREVSU19QT1NUX1JFTUFQCisrICAgKi8KKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFk
 UmVxdWVzdEhlYWRlcnNQb3N0UmVtYXAoVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSB7IHRyYW5z
 YWN0aW9uLnJlc3VtZSgpOyB9OworKworKyAgLyoqCisrICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJl
 IGltcGxlbWVudGVkIHdoZW4geW91IGhvb2sgSE9PS19TRU5EX1JFUVVFU1RfSEVBREVSUworKyAg
 ICovCisrICB2aXJ0dWFsIHZvaWQgaGFuZGxlU2VuZFJlcXVlc3RIZWFkZXJzKFRyYW5zYWN0aW9u
 ICZ0cmFuc2FjdGlvbikgeyB0cmFuc2FjdGlvbi5yZXN1bWUoKTsgfTsKKysKKysgIC8qKgorKyAg
 ICogVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCB3aGVuIHlvdSBob29rIEhPT0tfUkVB
 RF9SRVNQT05TRV9IRUFERVJTCisrICAgKi8KKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVSZWFkUmVz
 cG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeyB0cmFuc2FjdGlvbi5yZXN1
 bWUoKTsgfTsKKysKKysgIC8qKgorKyAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRl
 ZCB3aGVuIHlvdSBob29rIEhPT0tfU0VORF9SRVNQT05TRV9IRUFERVJTCisrICAgKi8KKysgIHZp
 cnR1YWwgdm9pZCBoYW5kbGVTZW5kUmVzcG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2Fj
 dGlvbikgeyB0cmFuc2FjdGlvbi5yZXN1bWUoKTsgfTsKKysKKysgIC8qKgorKyAgICogVGhpcyBt
 ZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCB3aGVuIHlvdSBob29rIEhPT0tfT1NfRE5TCisrICAg
 Ki8KKysgIHZpcnR1YWwgdm9pZCBoYW5kbGVPc0RucyhUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24p
 IHsgdHJhbnNhY3Rpb24ucmVzdW1lKCk7IH07CisrCisrICB2aXJ0dWFsIH5QbHVnaW4oKSB7IH07
 CisrcHJvdGVjdGVkOgorKyAgLyoqCisrICAqIFxub3RlIFRoaXMgaW50ZXJmYWNlIGNhbiBuZXZl
 ciBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSwgaXQgc2hvdWxkIGJlIGltcGxlbWVudGVkCisrICAq
 ICAgdGhyb3VnaCBleHRlbmRpbmcgR2xvYmFsUGx1Z2luLCBUcmFuc2FjdGlvblBsdWdpbiwgb3Ig
 VHJhbnNmb3JtYXRpb25QbHVnaW4uCisrICAqCisrICAqIEBwcml2YXRlCisrICAqLworKyAgUGx1
 Z2luKCkgeyB9OworK307CisrCisrLyoqPCBIdW1hbiByZWFkYWJsZSBzdHJpbmdzIGZvciBlYWNo
 IEhvb2tUeXBlLCB5b3UgY2FuIGFjY2VzcyB0aGVtIGFzIEhPT0tfVFlQRV9TVFJJTkdTW0hPT0tf
 T1NfRE5TXSBmb3IgZXhhbXBsZS4gKi8KKytleHRlcm4gY29uc3Qgc3RkOjpzdHJpbmcgSE9PS19U
 WVBFX1NUUklOR1NbXTsKKysKKyt9IC8qIGF0c2NwcGFwaSAqLworKworKyNlbmRpZiAvKiBBVFND
 UFBBUElfR0xPQkFMUExVR0lOX0hfICovCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvaW5j
 bHVkZS9hdHNjcHBhcGkvUGx1Z2luSW5pdC5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRz
 Y3BwYXBpL1BsdWdpbkluaXQuaAorLS0tIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3Bw
 YXBpL1BsdWdpbkluaXQuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysr
 IGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL1BsdWdpbkluaXQuaAkyMDEzLTEx
 LTExIDE0OjAzOjEyLjcwMTUzMjMyOCArMDgwMAorQEAgLTAsMCArMSw1NyBAQAorKy8qKgorKyAg
 TGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9u
 ZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5P
 VElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBp
 bmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxp
 Y2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
 c2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
 eGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWlu
 IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
 Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
 bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQg
 dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysg
 IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
 cmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
 Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhl
 IExpY2Vuc2UuCisrICovCisrLyoqCisrICogQGZpbGUgUGx1Z2luSW5pdC5oCisrICogQGJyaWVm
 IFByb3ZpZGVzIGhvb2tzIHRoYXQgcGx1Z2lucyBoYXZlIHRvIGltcGxlbWVudC4gQVRTIHdpbGwg
 aW52b2tlIHRoZXNlIHdoZW4gbG9hZGluZyB0aGUgcGx1Z2luIC5zbyBmaWxlcy4KKysgKi8KKysK
 KysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQSV9QTFVHSU5JTklUX0hfCisrI2RlZmlu
 ZSBBVFNDUFBBUElfUExVR0lOSU5JVF9IXworKworKyNpbmNsdWRlIDxhdHNjcHBhcGkvdXRpbHMu
 aD4KKysKKytleHRlcm4gIkMiIHsKKysKKysvKiogCisrICogSW52b2tlZCBmb3IgImdlbmVyYWwi
 IHBsdWdpbnMgLSBsaXN0ZWQgaW4gcGx1Z2luLmNvbmZpZy4gVGhlIGFyZ3VtZW50cyBpbiB0aGUK
 KysgKiBwbHVnaW4uY29uZmlnIGxpbmUgYXJlIHByb3ZpZGVkIGluIHRoaXMgaW52b2NhdGlvbi4K
 KysgKgorKyAqIEBwYXJhbSBhcmdjIENvdW50IG9mIGFyZ3VtZW50cworKyAqIEBwYXJhbSBhcmd2
 IEFycmF5IG9mIHBvaW50ZXJzIHBvaW50aW5nIHRvIGFyZ3VtZW50cworKyAqLworK3ZvaWQgVFNQ
 bHVnaW5Jbml0KGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pOworKworK2VudW0gVHNSZXR1
 cm5Db2RlIHsgVFNfRVJST1IgPSAtMSwgVFNfU1VDQ0VTUyA9IDAgfTsKKysKKysvKiogCisrICog
 SW52b2tlZCBmb3IgcmVtYXAgcGx1Z2lucyAtIGxpc3RlZCBpbiByZW1hcC5jb25maWcuIFRoZSBh
 cmd1bWVudHMgcHJvdmlkZWQgYXMgQHBwYXJhbQorKyAqIGluIHRoZSByZW1hcC5jb25maWcgbGlu
 ZSBhcmUgcHJvdmlkZWQgaW4gdGhpcyBpbnZvY2F0aW9uLgorKyAqCisrICogQHBhcmFtIGFyZ2Mg
 Q291bnQgb2YgYXJndW1lbnRzCisrICogQHBhcmFtIGFyZ3YgQXJyYXkgb2YgcG9pbnRlcnMgcG9p
 bnRpbmcgdG8gYXJndW1lbnRzCisrICogQHBhcmFtIGluc3RhbmNlX2hhbmRsZSBTaG91bGQgYmUg
 cGFzc2VkIHRvIHRoZSBSZW1hcFBsdWdpbiBjb25zdHJ1Y3RvcgorKyAqIEBwYXJhbSBlcnJidWYg
 Tm90IHVzZWQKKysgKiBAcGFyYW0gZXJyYnVmX3NpemUgTm90IHVzZWQKKysgKi8KKytUc1JldHVy
 bkNvZGUgVFNSZW1hcE5ld0luc3RhbmNlKGludCBhcmdjLCBjaGFyICphcmd2W10sIHZvaWQgKipp
 bnN0YW5jZV9oYW5kbGUsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1Zl9zaXplKTsKKysKKyt9Cisr
 CisrCisrI2VuZGlmIC8qIEFUU0NQUEFQSV9QTFVHSU5JTklUX0hfICovCitkaWZmIC1ydU4gbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUmVtYXBQbHVnaW4uaCBsaWIvYXRzY3Bw
 YXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9SZW1hcFBsdWdpbi5oCistLS0gbGliL2F0c2NwcGFw
 aS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUmVtYXBQbHVnaW4uaAkxOTcwLTAxLTAxIDA4OjAwOjAw
 LjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBp
 L1JlbWFwUGx1Z2luLmgJMjAxMy0xMS0xMSAxNDowMzoxMi43MDE1MzIzMjggKzA4MDAKK0BAIC0w
 LDAgKzEsNzAgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91
 bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBh
 Z3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlz
 IHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQg
 b3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0
 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBt
 YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExp
 Y2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAg
 ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVz
 cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
 dHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
 IGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
 RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5z
 ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysg
 IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKworKy8qKgorKyAqIEBmaWxl
 IFJlbWFwUGx1Z2luLmgKKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQ
 SV9SRU1BUF9QTFVHSU5fSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9SRU1BUF9QTFVHSU5fSF8KKysK
 KysjaW5jbHVkZSAiYXRzY3BwYXBpL1RyYW5zYWN0aW9uLmgiCisrI2luY2x1ZGUgImF0c2NwcGFw
 aS9VcmwuaCIKKysjaW5jbHVkZSAiYXRzY3BwYXBpL3V0aWxzLmgiCisrCisrbmFtZXNwYWNlIGF0
 c2NwcGFwaSB7CisrCisrLyoqIAorKyAqIEBicmllZiBCYXNlIGNsYXNzIHRoYXQgcmVtYXAgcGx1
 Z2lucyBzaG91bGQgZXh0ZW5kLgorKyAqLworK2NsYXNzIFJlbWFwUGx1Z2luIHsKKytwdWJsaWM6
 CisrICAvKioKKysgICAqIENvbnN0cnVjdG9yCisrICAgKiAKKysgICAqIEBwYXJhbSBpbnN0YW5j
 ZV9oYW5kbGUgVGhlIGluc3RhbmNlX2hhbmRsZSBhcmd1bWVudCByZWNlaXZlZCBpbiBUU1JlbWFw
 SW5pdCgpIHNob3VsZCBiZSBwYXNzZWQgaGVyZS4KKysgICAqLworKyAgUmVtYXBQbHVnaW4odm9p
 ZCAqKmluc3RhbmNlX2hhbmRsZSk7CisrCisrICBlbnVtIFJlc3VsdCB7IFJFU1VMVF9FUlJPUiA9
 IDAsIFJFU1VMVF9OT19SRU1BUCwgUkVTVUxUX0RJRF9SRU1BUCwgUkVTVUxUX05PX1JFTUFQX1NU
 T1AsCisrICAgICAgICAgICAgICAgIFJFU1VMVF9ESURfUkVNQVBfU1RPUCB9OworKworKyAgLyoq
 IAorKyAgICogSW52b2tlZCB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSByZW1hcC5jb25maWcg
 bGluZSAtIGltcGxlbWVudGF0aW9uIHNob3VsZCBwZXJmb3JtIHRoZQorKyAgICogcmVtYXAuIFRo
 ZSBjbGllbnQncyBVUkwgaXMgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB0aGF0J3Mgd2hlcmUgaXQg
 c2hvdWxkIGJlIG1vZGlmaWVkLgorKyAgICogCisrICAgKiBAcGFyYW0gbWFwX2Zyb21fdXJsIFRo
 ZSBtYXAgZnJvbSBVUkwgc3BlY2lmaWVkIGluIHRoZSByZW1hcC5jb25maWcgbGluZS4KKysgICAq
 IEBwYXJhbSBtYXBfdG9fdXJsIFRoZSBtYXAgdG8gVVJMIHNwZWNpZmllZCBpbiB0aGUgcmVtYXAu
 Y29uZmlnIGxpbmUuCisrICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24KKysgICAq
 IEBwYXJhbSByZWRpcmVjdCBPdXRwdXQgYXJndW1lbnQgdGhhdCBzaG91bGQgYmUgc2V0IHRvIHRy
 dWUgaWYgdGhlIChuZXcpIHVybCBzaG91bGQgYmUgdXNlZAorKyAgICogICAgICAgICAgICAgICAg
 IGFzIGEgcmVkaXJlY3QuIAorKyAgICoKKysgICAqIEByZXR1cm4gUmVzdWx0IG9mIHRoZSByZW1h
 cCAtIHdpbGwgZGljdGF0ZSBmdXRoZXIgcHJvY2Vzc2luZyBieSB0aGUgc3lzdGVtLgorKyAgICov
 CisrICB2aXJ0dWFsIFJlc3VsdCBkb1JlbWFwKGNvbnN0IFVybCAmbWFwX2Zyb21fdXJsIEFUU0NQ
 UEFQSV9VTlVTRUQsIGNvbnN0IFVybCAmbWFwX3RvX3VybCBBVFNDUFBBUElfVU5VU0VELCBUcmFu
 c2FjdGlvbiAmdHJhbnNhY3Rpb24gQVRTQ1BQQVBJX1VOVVNFRCwKKysgICAgICAgICAgICAgICAg
 ICAgICAgICAgYm9vbCAmcmVkaXJlY3QgQVRTQ1BQQVBJX1VOVVNFRCkgeworKyAgICByZXR1cm4g
 UkVTVUxUX05PX1JFTUFQOworKyAgfQorKworKyAgdmlydHVhbCB+UmVtYXBQbHVnaW4oKSB7IH0K
 Kyt9OworKworK30KKysKKysjZW5kaWYKK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNs
 dWRlL2F0c2NwcGFwaS9SZXF1ZXN0LmggbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBh
 cGkvUmVxdWVzdC5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUmVx
 dWVzdC5oCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2Nw
 cGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUmVxdWVzdC5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIu
 NzAxNTMyMzI4ICswODAwCitAQCAtMCwwICsxLDcyIEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0
 aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3Jl
 IGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysg
 IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisr
 ICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBm
 aWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
 CisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
 bGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
 ZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
 Q0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
 ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
 ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJS
 QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
 ZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
 bmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysg
 Ki8KKysvKioKKysgKiBAZmlsZSBSZXF1ZXN0LmgKKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysj
 aWZuZGVmIEFUU0NQUEFQSV9SRVFVRVNUX0hfCisrI2RlZmluZSBBVFNDUFBBUElfUkVRVUVTVF9I
 XworKworKyNpbmNsdWRlIDxhdHNjcHBhcGkvSGVhZGVycy5oPgorKyNpbmNsdWRlIDxhdHNjcHBh
 cGkvSHR0cFZlcnNpb24uaD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL0h0dHBNZXRob2QuaD4KKysj
 aW5jbHVkZSA8YXRzY3BwYXBpL1VybC5oPgorKyNpbmNsdWRlIDxhdHNjcHBhcGkvbm9uY29weWFi
 bGUuaD4KKysKKytuYW1lc3BhY2UgYXRzY3BwYXBpIHsKKysKKytjbGFzcyBUcmFuc2FjdGlvbjsK
 KytzdHJ1Y3QgUmVxdWVzdFN0YXRlOworKworKy8qKgorKyAqIEBicmllZiBFbmNhcHN1bGF0ZXMg
 YSByZXF1ZXN0LgorKyAqLworK2NsYXNzIFJlcXVlc3Q6IG5vbmNvcHlhYmxlIHsKKytwdWJsaWM6
 CisrICBSZXF1ZXN0KCk7CisrCisrICAvKioKKysgICAqIENvbnN0cnVjdGVkIHdpdGggYW4gaW5p
 dGlhbCBVUkwuCisrICAgKi8KKysgIFJlcXVlc3QoY29uc3Qgc3RkOjpzdHJpbmcgJnVybCwgSHR0
 cE1ldGhvZCBtZXRob2QgPSBIVFRQX01FVEhPRF9HRVQsIEh0dHBWZXJzaW9uIHZlcnNpb24gPSBI
 VFRQX1ZFUlNJT05fMV8xKTsgCisrCisrICAvKiogQHJldHVybiBIVFRQIG1ldGhvZCBvZiB0aGUg
 cmVxdWVzdCAqLworKyAgSHR0cE1ldGhvZCBnZXRNZXRob2QoKSBjb25zdDsKKysKKysgIC8qKiBA
 cmV0dXJuIFVSTCBvZiB0aGUgcmVxdWVzdCAqLworKyAgVXJsICZnZXRVcmwoKTsKKysKKysgIC8q
 KiBAcmV0dXJuIEhUVFAgdmVyc2lvbiBvZiB0aGUgcmVxdWVzdCAqLworKyAgSHR0cFZlcnNpb24g
 Z2V0VmVyc2lvbigpIGNvbnN0OworKworKyAgLyoqIEByZXR1cm4gSGVhZGVycyBvZiB0aGUgcmVx
 dWVzdCAqLworKyAgSGVhZGVycyAmZ2V0SGVhZGVycygpIGNvbnN0OworKworKyAgflJlcXVlc3Qo
 KTsKKytwcml2YXRlOgorKyAgUmVxdWVzdCh2b2lkICpoZHJfYnVmLCB2b2lkICpoZHJfbG9jKTsK
 KysgIFJlcXVlc3RTdGF0ZSAqc3RhdGVfOworKyAgdm9pZCBpbml0KHZvaWQgKmhkcl9idWYsIHZv
 aWQgKmhkcl9sb2MpOworKyAgZnJpZW5kIGNsYXNzIFRyYW5zYWN0aW9uOworKyAgZnJpZW5kIGNs
 YXNzIENsaWVudFJlcXVlc3Q7CisrfTsKKysKKyt9CisrCisrI2VuZGlmCitkaWZmIC1ydU4gbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvUmVzcG9uc2UuaCBsaWIvYXRzY3BwYXBp
 L3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9SZXNwb25zZS5oCistLS0gbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvUmVzcG9uc2UuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAw
 MCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL1Jlc3BvbnNl
 LmgJMjAxMy0xMS0xMSAxNDowMzoxMi43MDE1MzIzMjggKzA4MDAKK0BAIC0wLDAgKzEsNzEgQEAK
 KysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNG
 KSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAg
 U2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFk
 ZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAg
 VGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExp
 Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0
 aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3Ug
 bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3
 LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBi
 eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRp
 c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
 QkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
 ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
 ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25z
 IHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKy8qKgorKyAqIEBmaWxlIFJlc3BvbnNlLmgKKysg
 Ki8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFUU0NQUEFQSV9SRVNQT05TRV9IXworKyNk
 ZWZpbmUgQVRTQ1BQQVBJX1JFU1BPTlNFX0hfCisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9IZWFk
 ZXJzLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9IdHRwVmVyc2lvbi5oPgorKyNpbmNsdWRlIDxh
 dHNjcHBhcGkvSHR0cFN0YXR1cy5oPgorKworK25hbWVzcGFjZSBhdHNjcHBhcGkgeworKworKy8v
 IGZvcndhcmQgZGVjbGFyYXRpb25zCisrc3RydWN0IFJlc3BvbnNlU3RhdGU7CisrbmFtZXNwYWNl
 IHV0aWxzIHsgY2xhc3MgaW50ZXJuYWw7IH0KKysKKysvKioKKysgKiBAYnJpZWYgRW5jYXBzdWxh
 dGVzIGEgcmVzcG9uc2UuCisrICovCisrY2xhc3MgUmVzcG9uc2U6IG5vbmNvcHlhYmxlIHsKKytw
 dWJsaWM6CisrICBSZXNwb25zZSgpOworKworKyAgLyoqIEByZXR1cm4gSFRUUCB2ZXJzaW9uIG9m
 IHRoZSByZXNwb25zZSAqLworKyAgSHR0cFZlcnNpb24gZ2V0VmVyc2lvbigpIGNvbnN0OworKwor
 KyAgLyoqIEByZXR1cm4gU3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlICovCisrICBIdHRwU3Rh
 dHVzIGdldFN0YXR1c0NvZGUoKSBjb25zdDsKKysKKysgIC8qKiBAcGFyYW0gTmV3IHN0YXR1cyBj
 b2RlIHRvIHNldCAqLworKyAgdm9pZCBzZXRTdGF0dXNDb2RlKEh0dHBTdGF0dXMpOworKworKyAg
 LyoqIEByZXR1cm4gUmVhc29uIHBocmFzZSBvZiB0aGUgcmVzcG9uc2UgKi8KKysgIGNvbnN0IHN0
 ZDo6c3RyaW5nICZnZXRSZWFzb25QaHJhc2UoKSBjb25zdDsKKysKKysgIC8qKiBAcGFyYW0gTmV3
 IHJlYXNvbiBwaHJhc2UgdG8gc2V0ICovCisrICB2b2lkIHNldFJlYXNvblBocmFzZShjb25zdCBz
 dGQ6OnN0cmluZyAmKTsKKysKKysgIC8qKiBAcmV0dXJuIEhlYWRlcnMgb2YgdGhlIHJlc3BvbnNl
 ICovCisrICBIZWFkZXJzICZnZXRIZWFkZXJzKCkgY29uc3Q7CisrCisrICB+UmVzcG9uc2UoKTsK
 Kytwcml2YXRlOgorKyAgUmVzcG9uc2VTdGF0ZSAqc3RhdGVfOworKyAgdm9pZCBpbml0KHZvaWQg
 Kmhkcl9idWYsIHZvaWQgKmhkcl9sb2MpOworKyAgZnJpZW5kIGNsYXNzIFRyYW5zYWN0aW9uOwor
 KyAgZnJpZW5kIGNsYXNzIHV0aWxzOjppbnRlcm5hbDsKKyt9OworKworK30KKysKKysjZW5kaWYK
 K2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9TdGF0LmggbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvU3RhdC5oCistLS0gbGliL2F0c2NwcGFw
 aS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvU3RhdC5oCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAw
 MDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvU3RhdC5o
 CTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAxNTMyMzI4ICswODAwCitAQCAtMCwwICsxLDEwNiBAQAor
 Ky8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0Yp
 IHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBT
 ZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRk
 aXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBU
 aGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGlj
 ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRo
 aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBt
 YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cu
 YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5
 IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlz
 dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
 QVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
 aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
 Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMg
 dW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrLyoqCisrICogQGZpbGUgU3RhdC5oCisrICovCisr
 CisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfU1RBVF9IXworKyNkZWZpbmUgQVRT
 Q1BQQVBJX1NUQVRfSF8KKysKKysjaW5jbHVkZSA8YXRzY3BwYXBpL25vbmNvcHlhYmxlLmg+Cisr
 I2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxzdHJpbmc+CisrCisrbmFtZXNwYWNlIGF0
 c2NwcGFwaSB7CisrCisrLyoqCisrICogQGJyaWVmIEEgU3RhdCBpcyBhbiBhdG9taWMgdmFyaWFi
 bGUgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBjb3VudGVycywgYXZlcmFnZXMsIHRpbWUgYXZl
 cmFnZXMsIG9yIHN1bW1hdGlvbnMuCisrICoKKysgKiBBbGwgc3RhdHMgYXJlIGV4cG9zZWQgdGhy
 b3VnaCB0aGUgdHJhZmZpY19saW5lIHByb2dyYW0gaW5jbHVkZWQgd2l0aCBBcGFjaGUgVHJhZmZp
 YyBTZXJ2ZXIuIEFkZGl0aW9uYWxseSwKKysgKiBpZiB5b3UndmUgZW5hYmxlZCBIdHRwU3RhdHMg
 YWxsIFN0YXRzIHlvdSBkZWZpbmUgd2lsbCBiZSBkaXNwbGF5ZWQgdGhlcmUuIFN0YXRzIGNhbiBi
 ZSByZWFkIHZpYQorKyAqIHRyYWZmaWNfbGluZSAtciBzdGF0X25hbWUuCisrICoKKysgKiBTdGF0
 cyBhcmUgdmVyeSBlYXN5IHRvIHVzZSwgaGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIG9mIGhvdyB5
 b3UgY2FuIGNyZWF0ZSBhIGNvdW50ZXIgYW5kIGluY3JlbWVudCBpdHMKKysgKiB2YWx1ZToKKysg
 KiBcY29kZQorKyAqICBTdGF0IHN0YXQ7CisrICogIHN0YXQuaW5pdCgic3RhdF9uYW1lIik7Cisr
 ICAgIHN0YXQuaW5jKCk7CisrICogXGVuZGNvZGUKKysgKgorKyAqIEEgZnVsbCBleGFtcGxlIGlz
 IGF2YWlsYWJsZSBpbiBleGFtcGxlcy9zdGF0X2V4YW1wbGUvLgorKyAqLworK2NsYXNzIFN0YXQg
 OiBub25jb3B5YWJsZSB7CisrcHVibGljOgorKyAgLyoqCisrICAgKiBUaGUgYXZhaWxhYmxlIFN0
 YXQgdHlwZXMuCisrICAgKi8KKysgIGVudW0gU3luY1R5cGUgeworKyAgICBTWU5DX1NVTSA9IDAs
 IC8qKjwgVGhlIHN0YXQgd2lsbCBzdW0gYWxsIHZhbHVlcyBmcm9tIGEgc3RhdC5pbmMoVkFMKSAq
 LworKyAgICBTWU5DX0NPVU5ULCAvKio8IFRoZSBzdGF0IHdpbGwgY291bnQgYWxsIGNhbGxzIHRv
 IHN0YXQuaW5jKFZBTCkgKi8KKysgICAgU1lOQ19BVkcsIC8qKjwgVGhlIHN0YXQgd2lsbCBrZWVw
 IGFuIGF2ZXJhZ2UgYWZ0ZXIgY2FsbCBjYWxscyB0byBzdGF0LmluYyhWQUwpICovCisrICAgIFNZ
 TkNfVElNRUFWRyAvKio8IFRoZSBzdGF0IHdpbGwga2VlcCBhIHRpbWUgYXZlcmFnZSBvZiBhbGwg
 Y2FsbHMgdG8gc3RhdC5pbmMoVkFMKSAqLworKyAgfTsKKysKKysgIFN0YXQoKTsKKysgIH5TdGF0
 KCk7CisrCisrICAvKioKKysgICAqIFlvdSBtdXN0IGluaXRpYWxpemUgeW91ciBTdGF0IHdpdGgg
 YSBjYWxsIHRvIHRoaXMgaW5pdCgpIG1ldGhvZC4KKysgICAqCisrICAgKiBAcGFyYW0gbmFtZSBU
 aGUgc3RyaW5nIG5hbWUgb2YgdGhlIHN0YXQsIHRoaXMgd2lsbCBiZSB2aXNiaWJsZSB2aWEgdHJh
 ZmZpY19saW5lIC1yLCBvciB0aHJvdWdoIGh0dHAgc3RhdHMuCisrICAgKiBAcGFyYW0gdHlwZSBU
 aGUgU3luY1R5cGUgb2YgdGhlIFN0YXQsIHRoaXMgZGVjaWRlcyBob3cgVHJhZmZpY1NlcnZlciB3
 aWxsIHRyZWF0IHlvdXIgaW5wdXRzLiBUaGUgZGVmYXVsdAorKyAgICogICB2YWx1ZSBpcyBTWU5D
 X0NPVU5ULgorKyAgICogQHBhcmFtIHBlcnNpc3RlbnQgVGhpcyBkZXRlcm1pbmVzIGlmIHlvdXIg
 U3RhdHMgd2lsbCBwZXJzaXN0LCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4KKysgICAqIEBy
 ZXR1cm4gVHJ1ZSBpZiB0aGUgc3RhdCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW5kIGZhbHNl
 IG90aGVyd2lzZS4KKysgICAqCisrICAgKiBAc2VlIFN5bmNUeXBlCisrICAgKi8KKysgIGJvb2wg
 aW5pdChzdGQ6OnN0cmluZyBuYW1lLCBTdGF0OjpTeW5jVHlwZSB0eXBlID0gU1lOQ19DT1VOVCwg
 Ym9vbCBwZXJzaXN0ZW50ID0gZmFsc2UpOworKworKyAgLyoqCisrICAgKiBUaGlzIG1ldGhvZCBh
 bGxvd3MgeW91IHRvIGluY3JlbWVudCBhIHN0YXQgYnkgYSBjZXJ0YWluIGFtb3VudC4KKysgICAq
 IEBwYXJhbSBhbW91bnQgdGhlIGFtb3VudCB0byBpbmNyZW1lbnQgdGhlIHN0YXQgYnkgdGhlIGRl
 ZmF1bHQgdmFsdWUgaXMgMS4KKysgICAqLworKyAgdm9pZCBpbmNyZW1lbnQoaW50NjRfdCBhbW91
 bnQgPSAxKTsKKysKKysgIC8qKgorKyAgICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBkZWNy
 ZW1lbnQgYSBzdGF0IGJ5IGEgY2VydGFpbiBhbW91bnQuCisrICAgKiBAcGFyYW0gYW1vdW50IHRo
 ZSBhbW91bnQgdG8gZGVjcmVtZW50IHRoZSBzdGF0IGJ5IHRoZSBkZWZhdWx0IHZhbHVlIGlzIDEu
 CisrICAgKi8KKysgIHZvaWQgZGVjcmVtZW50KGludDY0X3QgYW1vdW50ID0gMSk7CisrCisrICAv
 KioKKysgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0
 YXQuCisrICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgc3RhdC4KKysgICAqLworKyAgaW50
 NjRfdCBnZXQoKSBjb25zdDsKKysKKysgIC8qKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSB2YWx1ZSBv
 ZiB0aGUgc3RhdC4KKysgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0IHRoZSBzdGF0
 IHRvLgorKyAgICovCisrICB2b2lkIHNldChpbnQ2NF90IHZhbHVlKTsKKytwcml2YXRlOgorKyAg
 aW50IHN0YXRfaWRfOyAvKio8IFRoZSBpbnRlcm5hbCBzdGF0IElEICovCisrfTsKKysKKyt9IC8q
 IGF0c2NwcGFwaSAqLworKworKworKyNlbmRpZiAvKiBBVFNDUFBBUElfU1RBVF9IXyAqLworZGlm
 ZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL1RyYW5zYWN0aW9uLmgg
 bGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvVHJhbnNhY3Rpb24uaAorLS0tIGxp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL1RyYW5zYWN0aW9uLmgJMTk3MC0wMS0w
 MSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRl
 L2F0c2NwcGFwaS9UcmFuc2FjdGlvbi5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAxNTMyMzI4ICsw
 ODAwCitAQCAtMCwwICsxLDMxNCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBT
 b2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRv
 ciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRl
 ZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5n
 IGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8g
 eW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vu
 c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAg
 d2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
 dAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
 KworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
 cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
 dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
 T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2Vl
 IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
 b25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrLyoqCisr
 ICogQGZpbGUgVHJhbnNhY3Rpb24uaAorKyAqLworKworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYg
 QVRTQ1BQQVBJX1RSQU5TQUNUSU9OX0hfCisrI2RlZmluZSBBVFNDUFBBUElfVFJBTlNBQ1RJT05f
 SF8KKysKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysj
 aW5jbHVkZSA8bGlzdD4KKysjaW5jbHVkZSAiYXRzY3BwYXBpL1JlcXVlc3QuaCIKKysjaW5jbHVk
 ZSAiYXRzY3BwYXBpL3NoYXJlZF9wdHIuaCIKKysjaW5jbHVkZSAiYXRzY3BwYXBpL0NsaWVudFJl
 cXVlc3QuaCIKKysjaW5jbHVkZSAiYXRzY3BwYXBpL1Jlc3BvbnNlLmgiCisrCisrbmFtZXNwYWNl
 IGF0c2NwcGFwaSB7CisrCisrLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKKytjbGFzcyBUcmFuc2Fj
 dGlvblBsdWdpbjsKKytzdHJ1Y3QgVHJhbnNhY3Rpb25TdGF0ZTsKKytuYW1lc3BhY2UgdXRpbHMg
 eyBjbGFzcyBpbnRlcm5hbDsgfQorKworKy8qKgorKyAqIEBicmllZiBUcmFuc2FjdGlvbnMgYXJl
 IHRoZSBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIHN0YXRlIHJlbGF0ZWQgdG8gYSBIVFRQIFRy
 YW5zYWN0aW9uCisrICoKKysgKiBAd2FybmluZyBUcmFuc2FjdGlvbnMgc2hvdWxkIG5ldmVyIGJl
 IGRpcmVjdGx5IGNyZWF0ZWQgYnkgdGhlIHVzZXIsIHRoZXkgd2lsbCBhbHdheXMgYmUgYXV0b21h
 dGljYWxseQorKyAqIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhcyB0aGV5IGFyZSBuZWVkZWQuIFRy
 YW5zYWN0aW9ucyBzaG91bGQgbmV2ZXIgYmUgc2F2ZWQgYmV5b25kIHRoZQorKyAqIHNjb3BlIG9m
 IHRoZSBmdW5jdGlvbiBpbiB3aGljaCB0aGV5IGFyZSBkZWxpdmVyZWQgb3RoZXJ3aXNlIHVuZGVm
 aW5lZCBiZWhhdmlvdXIgd2lsbCByZXN1bHQuCisrICovCisrY2xhc3MgVHJhbnNhY3Rpb246IG5v
 bmNvcHlhYmxlIHsKKytwdWJsaWM6CisrICAvKioKKysgICAqIEBicmllZiBDb250ZXh0VmFsdWVz
 IGFyZSBhIG1lY2hhbmlzbSB0byBzaGFyZSBkYXRhIGJldHdlZW4gcGx1Z2lucyB1c2luZyB0aGUg
 YXRzY3BwYXBpLgorKyAgICoKKysgICAqIEFueSBkYXRhIGNhbiBiZSBzaGFyZWQgc28gbG9uZyBh
 cyBpdCBleHRlbmRzIENvbnRleHRWYWx1ZSwgYSBzaW1wbGUgZXhhbXBsZSBtaWdodAorKyAgICog
 YmU6CisrICAgKgorKyAgICogXGNvZGUKKysgICAqICAgICBzdHJ1Y3QgbXlkYXRhIDogQ29udGV4
 dFZhbHVlIHsKKysgICAqICAgICAgIGludCBpZF87CisrICAgKiAgICAgICBzdHJpbmcgZm9vXzsK
 KysgICAqICAgICAgIG15ZGF0YShpbnQgaWQsIHN0cmluZyBmb28pIDogaWRfKGlkKSwgZm9vXyhm
 b28pIHsgfQorKyAgICogICAgIH0KKysgICAqCisrICAgKiAgICAgVHJhbnNhY3Rpb24uc2V0Q29u
 dGV4dFZhbHVlKCJzb21lLWtleSIsIHNoYXJlZF9wdHIobmV3IG15ZGF0YSgxMiwgImhlbGxvIikp
 KTsKKysgICAqCisrICAgKiAgICAgLy8gRnJvbSBhbm90aGVyIHBsdWdpbiB5b3UnbGwgaGF2ZSBh
 Y2Nlc3MgdG8gdGhpcyBjb250ZXh0dWFsIGRhdGE6CisrICAgKiAgICAgc2hhcmVkX3B0cjxUcmFu
 c2FjdGlvbi5nZXRDb250ZXh0VmFsdWUoInNvbWUta2V5IikKKysgICAqCisrICAgKiBcZW5kY29k
 ZQorKyAgICoKKysgICAqIEJlY2F1c2UgZ2V0Q29udGV4dFZhbHVlKCkgYW5kIHNldENvbnRleHRW
 YWx1ZSgpCisrICAgKiB0YWtlIHNoYXJlZCBwb2ludGVycyB5b3UgZG9udCBoYXZlIHRvIHdvcnJ5
 IGFib3V0IHRoZSBjbGVhbnVwIGFzIHRoYXQgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSBzbyBs
 b25nCisrICAgKiBhcyB5b3UgZG9udCBoYXZlIHNoYXJlZF9wdHJzIHRoYXQgY2Fubm90IGdvIG91
 dCBvZiBzY29wZS4KKysgICAqLworKyAgY2xhc3MgQ29udGV4dFZhbHVlIHsKKysgIHB1YmxpYzoK
 KysgICAgdmlydHVhbCB+Q29udGV4dFZhbHVlKCkgeyB9CisrICB9OworKworKyAgflRyYW5zYWN0
 aW9uKCk7CisrCisrICAvKioKKysgICAqIENvbnRleHQgVmFsdWVzIGFyZSBhIHdheSB0byBzaGFy
 ZSBkYXRhIGJldHdlZW4gcGx1Z2lucywgdGhlIGtleSBpcyBhbHdheXMgYSBzdHJpbmcKKysgICAq
 IGFuZCB0aGUgdmFsdWUgY2FuIGJlIGEgc2hhcmVkX3B0ciB0byBhbnkgdHlwZSB0aGF0IGV4dGVu
 ZHMgQ29udGV4dFZhbHVlLgorKyAgICogQHBhcmFtIGtleSB0aGUga2V5IHRvIHNlYXJjaCBmb3Iu
 CisrICAgKiBAcmV0dXJuIFNoYXJlZCBwb2ludGVyIHRoYXQgaXMgY29ycmVjdGx5IGluaXRpYWxp
 emVkIGlmIHRoZQorKyAgICogICAgICAgICB2YWx1ZSBleGlzdGVkLiBJdCBzaG91bGQgYmUgY2hl
 Y2tlZCB3aXRoIC5nZXQoKSAhPSBOVUxMIGJlZm9yZSB1c2UuCisrICAgKi8KKysgIHNoYXJlZF9w
 dHI8Q29udGV4dFZhbHVlPiBnZXRDb250ZXh0VmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcgJmtleSk7
 CisrCisrICAvKioKKysgICAqIENvbnRleHQgVmFsdWVzIGFyZSBhIHdheSB0byBzaGFyZSBkYXRh
 IGJldHdlZW4gcGx1Z2lucywgdGhlIGtleSBpcyBhbHdheXMgYSBzdHJpbmcKKysgICAqIGFuZCB0
 aGUgdmFsdWUgY2FuIGJlIGEgc2hhcmVkX3B0ciB0byBhbnkgdHlwZSB0aGF0IGV4dGVuZHMgQ29u
 dGV4dFZhbHVlLgorKyAgICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGluc2VydC4KKysgICAqIEBw
 YXJhbSB2YWx1ZSBhIHNoYXJlZCBwb2ludGVyIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIENvbnRl
 eHRWYWx1ZS4KKysgICAqLworKyAgdm9pZCBzZXRDb250ZXh0VmFsdWUoY29uc3Qgc3RkOjpzdHJp
 bmcgJmtleSwgc2hhcmVkX3B0cjxDb250ZXh0VmFsdWU+IHZhbHVlKTsKKysKKysgIC8qKgorKyAg
 ICogQ2F1c2VzIHRoZSBUcmFuc2FjdGlvbiB0byBjb250aW51ZSBvbiB0byBvdGhlciBzdGF0ZXMg
 aW4gdGhlIEhUVFAgc3RhdGUgbWFjaGluZQorKyAgICogSWYgeW91IGRvIG5vdCBjYWxsIHJlc3Vt
 ZSgpIG9uIGEgVHJhbnNhY3Rpb24gaXQgd2lsbCByZW1haW4gaW4gdGhhdCBzdGF0ZSB1bnRpbAor
 KyAgICogaXQncyBhZHZhbmNlZCBvdXQgYnkgYSBjYWxsIHRvIHJlc3VtZSgpIG9yIGVycm9yKCku
 CisrICAgKi8KKysgIHZvaWQgcmVzdW1lKCk7CisrCisrICAvKioKKysgICAqIENhdXNlcyB0aGUg
 VHJhbnNhY3Rpb24gdG8gYWR2YW5jZSB0byB0aGUgZXJyb3Igc3RhdGUgaW4gdGhlIEhUVFAgc3Rh
 dGUgbWFjaGluZS4KKysgICAqIEBzZWUgZXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcgJikKKysgICAq
 LworKyAgdm9pZCBlcnJvcigpOworKworKyAgLyoqCisrICAgKiBDYXVzZXMgdGhlIFRyYW5zYWN0
 aW9uIHRvIGFkdmFuY2UgdG8gdGhlIGVycm9yIHN0YXRlIGluIHRoZSBIVFRQIHN0YXRlIG1hY2hp
 bmUgd2l0aAorKyAgICogYSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGRpc3BsYXllZC4gVGhpcyBp
 cyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgorKyAgICoKKysgICAq
 IFxjb2RlCisrICAgKiBzZXRFcnJvckJvZHkoY29udGVudCk7CisrICAgKiBlcnJvcigpOworKyAg
 ICogXGVuZGNvZGUKKysgICAqCisrICAgKiBAcGFyYW0gY29udGVudCB0aGUgZXJyb3IgcGFnZSBi
 b2R5LgorKyAgICovCisrICB2b2lkIGVycm9yKGNvbnN0IHN0ZDo6c3RyaW5nICZjb250ZW50KTsK
 KysKKysgIC8qKgorKyAgICogU2V0cyB0aGUgZXJyb3IgYm9keSBwYWdlIGJ1dCB0aGlzIG1ldGhv
 ZCBkb2VzIG5vdCBhZHZhbmNlIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBlcnJvciBzdGF0ZS4K
 KysgICAqIFRvIGRvIHRoYXQgeW91IG11c3QgZXhwbGljaXRhbGx5IGNhbGwgZXJyb3IoKS4KKysg
 ICAqCisrICAgKiBAcGFyYW0gY29udGVudCB0aGUgZXJyb3IgcGFnZSBjb250ZW50LgorKyAgICov
 CisrICB2b2lkIHNldEVycm9yQm9keShjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCk7CisrCisr
 ICAvKioKKysgICAqIEdldCB0aGUgY2xpZW50cyBhZGRyZXNzCisrICAgKiBAcmV0dXJuIFRoZSBz
 b2NrYWRkciBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBjbGllbnQncyBhZGRyZXNzCisrICAg
 KiBAc2VlIGF0c2NwcGFwaTo6dXRpbHM6OmdldElwU3RyaW5nKCkgaW4gYXRzY3BwYXBpL3V0aWxz
 LmgKKysgICAqIEBzZWUgYXRzY3BwYXBpOjp1dGlsczo6Z2V0UG9ydCgpIGluIGF0c2NwcGFwaS91
 dGlscy5oCisrICAgKiBAc2VlIGF0c2NwcGFwaTo6dXRpbHM6OmdldElwUG9ydFN0cmluZyBpbiBh
 dHNjcHBhcGkvdXRpbHMuaAorKyAgICovCisrICBjb25zdCBzb2NrYWRkciAqZ2V0Q2xpZW50QWRk
 cmVzcygpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBHZXQgdGhlIGluY29taW5nIGFkZHJlc3MK
 KysgICAqIEByZXR1cm4gVGhlIHNvY2thZGRyIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGlu
 Y29taW5nIGFkZHJlc3MKKysgICAqIEBzZWUgYXRzY3BwYXBpOjp1dGlsczo6Z2V0SXBTdHJpbmco
 KSBpbiBhdHNjcHBhcGkvdXRpbHMuaAorKyAgICogQHNlZSBhdHNjcHBhcGk6OnV0aWxzOjpnZXRQ
 b3J0KCkgaW4gYXRzY3BwYXBpL3V0aWxzLmgKKysgICAqIEBzZWUgYXRzY3BwYXBpOjp1dGlsczo6
 Z2V0SXBQb3J0U3RyaW5nIGluIGF0c2NwcGFwaS91dGlscy5oCisrICAgKi8KKysgIGNvbnN0IHNv
 Y2thZGRyICpnZXRJbmNvbWluZ0FkZHJlc3MoKSBjb25zdDsKKysKKysgIC8qKgorKyAgICogR2V0
 IHRoZSBzZXJ2ZXIgYWRkcmVzcworKyAgICogQHJldHVybiBUaGUgc29ja2FkZHIgc3RydWN0dXJl
 IHJlcHJlc2VudGluZyB0aGUgc2VydmVyJ3MgYWRkcmVzcworKyAgICogQHNlZSBhdHNjcHBhcGk6
 OnV0aWxzOjpnZXRJcFN0cmluZygpIGluIGF0c2NwcGFwaS91dGlscy5oCisrICAgKiBAc2VlIGF0
 c2NwcGFwaTo6dXRpbHM6OmdldFBvcnQoKSBpbiBhdHNjcHBhcGkvdXRpbHMuaAorKyAgICogQHNl
 ZSBhdHNjcHBhcGk6OnV0aWxzOjpnZXRJcFBvcnRTdHJpbmcgaW4gYXRzY3BwYXBpL3V0aWxzLmgK
 KysgICAqLworKyAgY29uc3Qgc29ja2FkZHIgKmdldFNlcnZlckFkZHJlc3MoKSBjb25zdDsKKysK
 KysgIC8qKgorKyAgICogR2V0IHRoZSBuZXh0IGhvcCBhZGRyZXNzCisrICAgKiBAcmV0dXJuIFRo
 ZSBzb2NrYWRkciBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBuZXh0IGhvcCdzIGFkZHJlc3MK
 KysgICAqIEBzZWUgYXRzY3BwYXBpOjp1dGlsczo6Z2V0SXBTdHJpbmcoKSBpbiBhdHNjcHBhcGkv
 dXRpbHMuaAorKyAgICogQHNlZSBhdHNjcHBhcGk6OnV0aWxzOjpnZXRQb3J0KCkgaW4gYXRzY3Bw
 YXBpL3V0aWxzLmgKKysgICAqIEBzZWUgYXRzY3BwYXBpOjp1dGlsczo6Z2V0SXBQb3J0U3RyaW5n
 IGluIGF0c2NwcGFwaS91dGlscy5oCisrICAgKi8KKysgIGNvbnN0IHNvY2thZGRyICpnZXROZXh0
 SG9wQWRkcmVzcygpIGNvbnN0OworKworKworKyAgLyoqCisrICAgKiBTZXQgdGhlIGluY29taW5n
 IHBvcnQgb24gdGhlIFRyYW5zYWN0aW9uCisrICAgKgorKyAgICogQHBhcmFtIHBvcnQgaXMgdGhl
 IHBvcnQgdG8gc2V0IGFzIHRoZSBpbmNvbWluZyBwb3J0IG9uIHRoZSB0cmFuc2FjdGlvbgorKyAg
 ICovCisrICBib29sIHNldEluY29taW5nUG9ydCh1aW50MTZfdCBwb3J0KTsKKysKKysgIC8qKgor
 KyAgICogU2V0cyB0aGUgc2VydmVyIGFkZHJlc3Mgb24gdGhlIFRyYW5zYWN0aW9uIHRvIGEgcG9w
 dWxhdGVkIHNvY2thZGRyICoKKysgICAqCisrICAgKiBAcGFyYW0gc29ja2FkZHIqIHRoZSBzb2Nr
 YWRkciBzdHJ1Y3R1cmUgcG9wdWxhdGVkIGFzIHRoZSBzZXJ2ZXIgYWRkcmVzcy4KKysgICAqLwor
 KyAgYm9vbCBzZXRTZXJ2ZXJBZGRyZXNzKGNvbnN0IHNvY2thZGRyICopOworKworKyAgLyoqCisr
 ICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBpZiB0aGUgcmVxdWVzdCBpcyBhbiBpbnRlcm5h
 bCByZXF1ZXN0LgorKyAgICogQSByZXF1ZXN0IGlzIGFuIGludGVybmFsIHJlcXVlc3QgaWYgaXQg
 b3JpZ2luYXRlcyBmcm9tIHdpdGhpbiB0cmFmZmljIHNlcnZlci4KKysgICAqIEFuIGV4YW1wbGUg
 d291bGQgYmUgdXNpbmcgVFNGZXRjaFVybCAob3IgdGhlIGF0c2NwcGFwaSBlcXVpdmFsZW50IG9m
 IEFzeW5jSHR0cEZldGNoKQorKyAgICogdG8gbWFrZSBhbm90aGVyIHJlcXVlc3QgYWxvbmcgd2l0
 aCB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gVGhlIHNlY29uZGFyeSByZXF1ZXN0CisrICAgKiBvcmln
 aW5hdGVkIHdpdGhpbiB0cmFmZmljIHNlcnZlciBhbmQgaXMgYW4gaW50ZXJuYWwgcmVxdWVzdC4K
 KysgICAqCisrICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUgc3BlY2lmeWluZyBpZiB0aGUgcmVx
 dWVzdCB3YXMgYW4gaW50ZXJuYWwgcmVxdWVzdC4KKysgICAqLworKyAgYm9vbCBpc0ludGVybmFs
 UmVxdWVzdCgpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBSZXR1cm5zIHRoZSBDbGllbnRSZXF1
 ZXN0IG9iamVjdCBmb3IgdGhlIGluY29taW5nIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LgorKyAg
 ICoKKysgICAqIEByZXR1cm4gQ2xpZW50UmVxdWVzdCBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0
 byBtYW5pcHVsYXRlIHRoZSBpbmNvbWluZyByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC4KKysgICAq
 LworKyAgQ2xpZW50UmVxdWVzdCAmZ2V0Q2xpZW50UmVxdWVzdCgpOworKworKyAgLyoqCisrICAg
 KiBSZXR1cm5zIGEgUmVxdWVzdCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlcXVlc3QgZnJvbSBUcmFm
 ZmljIFNlcnZlciB0byB0aGUgb3JpZ2luIHNlcnZlci4KKysgICAqCisrICAgKiBAcmV0dXJuIFJl
 cXVlc3Qgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgb3V0Z29pbmcg
 cmVxdWVzdCB0byB0aGUgb3JpZ2luIHNlcnZlci4KKysgICAqLworKyAgUmVxdWVzdCAmZ2V0U2Vy
 dmVyUmVxdWVzdCgpOworKworKyAgLyoqCisrICAgKiBSZXR1cm5zIGEgUmVzcG9uc2Ugb2JqZWN0
 IHdoaWNoIGlzIHRoZSByZXNwb25zZSBjb21pbmcgZnJvbSB0aGUgb3JpZ2luIHNlcnZlcgorKyAg
 ICoKKysgICAqIEByZXR1cm4gUmVzcG9uc2Ugb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFu
 aXB1bGF0ZSB0aGUgaW5jb21pbmcgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luIHNlcnZlci4KKysg
 ICAqLworKyAgUmVzcG9uc2UgJmdldFNlcnZlclJlc3BvbnNlKCk7CisrCisrICAvKioKKysgICAq
 IFJldHVybnMgYSBSZXNwb25zZSBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3BvbnNlIGdvaW5nIHRv
 IHRoZSBjbGllbnQKKysgICAqCisrICAgKiBAcmV0dXJuIFJlc3BvbnNlIG9iamVjdCB0aGF0IGNh
 biBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIG91dGdvaW5nIHJlc3BvbnNlIGZyb20gdGhlIGNs
 aWVudC4KKysgICAqLworKyAgUmVzcG9uc2UgJmdldENsaWVudFJlc3BvbnNlKCk7CisrCisrICAv
 KioKKysgICAqIFJldHVybnMgdGhlIEVmZmVjdGl2ZSBVUkwgZm9yIHRoaXMgdHJhbnNhY3Rpb24g
 dGFraW5nIGludG8gYWNjb3VudCBob3N0LgorKyAgICovCisrICBzdGQ6OnN0cmluZyBnZXRFZmZl
 Y3RpdmVVcmwoKTsKKysKKysgIC8qKgorKyAgICogU2V0cyB0aGUgdXJsIHVzZWQgYnkgdGhlIEFU
 UyBjYWNoZSBmb3IgYSBzcGVjaWZpYyB0cmFuc2FjdGlvbi4KKysgICAqIEBwYXJhbSB1cmwgaXMg
 dGhlIHVybCB0byB1c2UgaW4gdGhlIGNhY2hlLgorKyAgICovCisrICBib29sIHNldENhY2hlVXJs
 KGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKworKyAgLyoqCisrICAgKiBUaGUgYXZhaWxhYmxlIHR5
 cGVzIG9mIHRpbWVvdXRzIHlvdSBjYW4gc2V0IG9uIGEgVHJhbnNhY3Rpb24uCisrICAgKi8KKysg
 IGVudW0gVGltZW91dFR5cGUgeworKyAgICBUSU1FT1VUX0ROUyA9IDAsIC8qKjwgVGltZW91dCBv
 biBETlMgKi8KKysgICAgVElNRU9VVF9DT05ORUNULCAvKio8IFRpbWVvdXQgb24gQ29ubmVjdCAq
 LworKyAgICBUSU1FT1VUX05PX0FDVElWSVRZLCAvKio8IFRpbWVvdXQgb24gTm8gQWN0aXZpdHkg
 Ki8KKysgICAgVElNRU9VVF9BQ1RJVkUgLyoqPCBUaW1lb3V0IHdpdGggQWN0aXZpdHkgKi8KKysg
 IH07CisrCisrICAvKioKKysgICAqIEFsbG93cyB5b3UgdG8gc2V0IHZhcmlvdXMgdHlwZXMgb2Yg
 dGltZW91dHMgb24gYSBUcmFuc2FjdGlvbgorKyAgICoKKysgICAqIEBwYXJhbSB0eXBlIFRoZSB0
 eXBlIG9mIHRpbWVvdXQKKysgICAqIEBwYXJhbSB0aW1lX21zIFRoZSB0aW1lb3V0IHRpbWUgaW4g
 bWlsbGlzZWNvbmRzCisrICAgKiBAc2VlIFRpbWVvdXRUeXBlCisrICAgKi8KKysgIHZvaWQgc2V0
 VGltZW91dChUaW1lb3V0VHlwZSB0eXBlLCBpbnQgdGltZV9tcyk7CisrCisrICAvKioKKysgICAq
 IFJldHVybnMgdGhlIFRTSHR0cFR4biByZWxhdGVkIHRvIHRoZSBjdXJyZW50IFRyYW5zYWN0aW9u
 CisrICAgKgorKyAgICogQHJldHVybiBhIHZvaWQgKiB3aGljaCBjYW4gYmUgY2FzdCBiYWNrIHRv
 IGEgVFNIdHRwVHhuLgorKyAgICovCisrICB2b2lkICpnZXRBdHNIYW5kbGUoKSBjb25zdDsKKysK
 KysgIC8qKgorKyAgICogQWRkcyBhIFRyYW5zYWN0aW9uUGx1Z2luIHRvIHRoZSBjdXJyZW50IFRy
 YW5zYWN0aW9uLiBUaGlzIGVmZmVjdGl2ZWx5IHRyYW5zZmVycyBvd25lcnNoaXAgYW5kIHRoZQor
 KyAgICogVHJhbnNhY3Rpb24gaXMgbm93IHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyBpdCB1cC4K
 KysgICAqCisrICAgKiBAcGFyYW0gVHJhbnNhY3Rpb25QbHVnaW4qIHRoZSBUcmFuc2FjdGlvblBs
 dWdpbiB0aGF0IHdpbGwgYmUgbm93IGJvdW5kIHRvIHRoZSBjdXJyZW50IFRyYW5zYWN0aW9uLgor
 KyAgICovCisrICB2b2lkIGFkZFBsdWdpbihUcmFuc2FjdGlvblBsdWdpbiAqKTsKKysKKytwcml2
 YXRlOgorKyAgVHJhbnNhY3Rpb25TdGF0ZSAqc3RhdGVfOyAvLyE8IFRoZSBpbnRlcm5hbCBUcmFu
 c2FjdGlvblN0YXRlIG9iamVjdCB0aWVkIHRvIHRoZSBjdXJyZW50IFRyYW5zYWN0aW9uCisrICBm
 cmllbmQgY2xhc3MgVHJhbnNhY3Rpb25QbHVnaW47IC8vITwgVHJhbnNhY3Rpb25QbHVnaW4gaXMg
 YSBmcmllbmQgc28gaXQgY2FuIGNhbGwgYWRkUGx1Z2luKCkKKysgIGZyaWVuZCBjbGFzcyBUcmFu
 c2Zvcm1hdGlvblBsdWdpbjsgLy8hPCBUcmFuc2Zvcm1hdGlvblBsdWdpbiBpcyBhIGZyaWVuZCBz
 byBpdCBjYW4gY2FsbCBhZGRQbHVnaW4oKQorKworKyAgLyoqCisrICAgKiBAcHJpdmF0ZQorKyAg
 ICoKKysgICAqIEBwYXJhbSByYXdfdHhuIGEgdm9pZCBwb2ludGVyIHRoYXQgcmVwcmVzZW50cyBh
 IFRTSHR0cFR4bgorKyAgICovCisrICBUcmFuc2FjdGlvbih2b2lkICopOworKworKyAgLyoqCisr
 ICAgKiBVc2VkIHRvIGluaXRpYWxpemUgdGhlIFJlcXVlc3Qgb2JqZWN0IGZvciB0aGUgU2VydmVy
 LgorKyAgICoKKysgICAqIEBwcml2YXRlCisrICAgKi8KKysgIHZvaWQgaW5pdFNlcnZlclJlcXVl
 c3QoKTsKKysKKysgIC8qKgorKyAgICogVXNlZCB0byBpbml0aWFsaXplIHRoZSBSZXNwb25zZSBv
 YmplY3QgZm9yIHRoZSBTZXJ2ZXIuCisrICAgKgorKyAgICogQHByaXZhdGUKKysgICAqLworKyAg
 dm9pZCBpbml0U2VydmVyUmVzcG9uc2UoKTsKKysKKysgIC8qKgorKyAgICogVXNlZCB0byBpbml0
 aWFsaXplIHRoZSBSZXNwb25zZSBvYmplY3QgZm9yIHRoZSBDbGllbnQuCisrICAgKgorKyAgICog
 QHByaXZhdGUKKysgICAqLworKyAgdm9pZCBpbml0Q2xpZW50UmVzcG9uc2UoKTsKKysKKysgIC8q
 KgorKyAgICogUmV0dXJucyBhIGxpc3Qgb2YgVHJhbnNhY3Rpb25QbHVnaW4gcG9pbnRlcnMgYm91
 bmQgdG8gdGhlIGN1cnJlbnQgVHJhbnNhY3Rpb24KKysgICAqCisrICAgKiBAcHJpdmF0ZQorKyAg
 ICoKKysgICAqIEByZXR1cm4gYSBzdGQ6Omxpc3Q8VHJhbnNhY3Rpb25QbHVnaW4gKj4gd2hpY2gg
 cmVwcmVzZW50cyBhbGwgVHJhbnNhY3Rpb25QbHVnaW4gYm91bmQgdG8gdGhlIGN1cnJlbnQgVHJh
 bnNhY3Rpb24uCisrICAgKi8KKysgIGNvbnN0IHN0ZDo6bGlzdDxUcmFuc2FjdGlvblBsdWdpbiAq
 PiAmZ2V0UGx1Z2lucygpIGNvbnN0OworKworKyAgZnJpZW5kIGNsYXNzIHV0aWxzOjppbnRlcm5h
 bDsKKyt9OworKworK30gLyogYXRzY3BwYXBpICovCisrCisrI2VuZGlmIC8qIEFUU0NQUEFQSV9U
 UkFOU0FDVElPTl9IXyAqLworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRz
 Y3BwYXBpL1RyYW5zYWN0aW9uUGx1Z2luLmggbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNj
 cHBhcGkvVHJhbnNhY3Rpb25QbHVnaW4uaAorLS0tIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUv
 YXRzY3BwYXBpL1RyYW5zYWN0aW9uUGx1Z2luLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAw
 MDAgKzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9UcmFuc2Fj
 dGlvblBsdWdpbi5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAxNTMyMzI4ICswODAwCitAQCAtMCww
 ICsxLDExMyBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFn
 cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMg
 d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNz
 IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
 d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
 IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNl
 IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrLyoqCisrICogQGZpbGUgVHJh
 bnNhY3Rpb25QbHVnaW4uaAorKyAqIEBicmllZiBDb250YWlucyB0aGUgaW50ZXJmYWNlIHVzZWQg
 aW4gY3JlYXRpbmcgVHJhbnNhY2l0b24gcGx1Z2lucy4KKysgKi8KKysKKysjcHJhZ21hIG9uY2UK
 KysjaWZuZGVmIEFUU0NQUEFQSV9UUkFOU0FDVElPTlBMVUdJTl9IXworKyNkZWZpbmUgQVRTQ1BQ
 QVBJX1RSQU5TQUNUSU9OUExVR0lOX0hfCisrCisrI2luY2x1ZGUgPGF0c2NwcGFwaS9QbHVnaW4u
 aD4KKysjaW5jbHVkZSA8YXRzY3BwYXBpL1RyYW5zYWN0aW9uLmg+CisrI2luY2x1ZGUgPGF0c2Nw
 cGFwaS9zaGFyZWRfcHRyLmg+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9NdXRleC5oPgorKworK25h
 bWVzcGFjZSBhdHNjcHBhcGkgeworKworK25hbWVzcGFjZSB1dGlscyB7CisrIGNsYXNzIGludGVy
 bmFsOworK30gLyogdXRpbHMgKi8KKysKKysvKioKKysgKiBAcHJpdmF0ZQorKyAqLworK3N0cnVj
 dCBUcmFuc2FjdGlvblBsdWdpblN0YXRlOworKworKy8qKgorKyAqIEBicmllZiBUaGUgaW50ZXJm
 YWNlIHVzZWQgd2hlbiBjcmVhdGluZyBhIFRyYW5zYWN0aW9uUGx1Z2luLgorKyAqCisrICogQSBU
 cmFuc2FjdGlvbiBQbHVnaW4gaXMgYSBwbHVnaW4gdGhhdCB3aWxsIGZpcmUgb25seSBmb3IgdGhl
 IHNwZWNpZmljIFRyYW5zYWN0aW9uIGl0CisrICogd2FzIGJvdW5kIHRvLiBXaGVuIHlvdSBjcmVh
 dGUgYSBUcmFuc2FjdGlvblBsdWdpbiB5b3UgY2FsbCB0aGUgcGFyZW50IGNvbnN0cnVjdG9yIHdp
 dGgKKysgKiB0aGUgYXNzb2NpYXRlZCBUcmFuc2FjdGlvbiBhbmQgaXQgd2lsbCBiZWNvbWUgYXV0
 b21hdGljYWxseSBib3VuZC4gVGhpcyBtZWFucyB0aGF0IHlvdXIKKysgKiBUcmFuc2FjdGlvblBs
 dWdpbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGVzdHJveWVkIHdoZW4gdGhlIFRyYW5zYWN0aW9u
 IGRpZXMuCisrICoKKysgKiBJbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgdGhhdCB5b3UgY2FuIGVh
 c2lseSBhZGQgVHJhbnNhY3Rpb24gc2NvcGVkIHN0b3JhZ2UgYnkgYWRkaW5nCisrICogYSBtZW1i
 ZXIgdG8gYSBUcmFuc2FjdGlvblBsdWdpbiBzaW5jZSB0aGUgZGVzdHJ1Y3RvciB3aWxsIGJlIGNh
 bGxlZCBvZiB5b3VyIFRyYW5zYWN0aW9uUGx1Z2luCisrICogYW55IGNsZWFudXAgdGhhdCBuZWVk
 cyB0byBoYXBwZW4gY2FuIGhhcHBlbiBpbiB5b3VyIGRlc3RydWN0b3IgYXMgeW91IG5vcm1hbGx5
 IHdvdWxkLgorKyAqCisrICogWW91IG11c3QgYWx3YXlzIGJlIHN1cmUgdG8gaW1wbGVtZW50IHRo
 ZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBmb3IgdGhlIHR5cGUgb2YgaG9vayB5b3UgcmVnaXN0ZXIu
 CisrICoKKysgKiBcY29kZQorKyAqIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZXhhbXBsZSBzZWUg
 ZXhhbXBsZXMvdHJhbnNhY3Rpb25ob29rLworKyAqIGNsYXNzIFRyYW5zYWN0aW9uSG9va1BsdWdp
 biA6IHB1YmxpY1RyYW5zYWN0aW9uUGx1Z2luIHsKKysgKiBwdWJsaWM6CisrICogICBUcmFuc2Fj
 dGlvbkhvb2tQbHVnaW4oVHJhbnNhY3Rpb24gJnRyYW5zYWN0aW9uKSA6IFRyYW5zYWN0aW9uUGx1
 Z2luKHRyYW5zYWN0aW9uKSB7CisrICogICAgIGNoYXJfcHRyXyA9IG5ldyBjaGFyWzEwMF07IC8v
 IFRyYW5zYWN0aW9uIHNjb3BlZCBzdG9yYWdlCisrICogICAgIHJlZ2lzdGVySG9vayhIT09LX1NF
 TkRfUkVTUE9OU0VfSEVBREVSUyk7CisrICogICB9CisrICogICB2aXJ0dWFsIH5UcmFuc2FjdGlv
 bkhvb2tQbHVnaW4oKSB7CisrICogICAgIGRlbGV0ZVtdIGNoYXJfcHRyXzsgLy8gY2xlYW51cAor
 KyAqICAgfQorKyAqICAgdm9pZCBoYW5kbGVTZW5kUmVzcG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9u
 ICZ0cmFuc2FjdGlvbikgeworKyAqICAgICB0cmFuc2FjdGlvbi5yZXN1bWUoKTsKKysgKiAgIH0K
 KysgKiBwcml2YXRlOgorKyAqICAgY2hhciAqY2hhcl9wdHJfOworKyAqIH07CisrICogXGVuZGNv
 ZGUKKysgKgorKyAqIEBzZWUgUGx1Z2luCisrICogQHNlZSBIb29rVHlwZQorKyAqLworK2NsYXNz
 IFRyYW5zYWN0aW9uUGx1Z2luIDogcHVibGljIFBsdWdpbiB7CisrcHVibGljOgorKyAgLyoqCisr
 ICAgKiByZWdpc3Rlckhvb2sgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIHRvIGF0dGFjaCBhIHRyYW5z
 YWN0aW9uIGhvb2suCisrICAgKgorKyAgICogXG5vdGUgV2hlbmV2ZXIgeW91IHJlZ2lzdGVyIGEg
 aG9vayB5b3UgbXVzdCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBkZWZpbmllZCBpbiB5
 b3VyIFRyYW5zYWN0aW9uUGx1Z2luCisrICAgKiAgc2VlIEhvb2tUeXBlIGFuZCBQbHVnaW4gZm9y
 IHRoZSBjb3JyZXNwb25kIEhvb2tUeXBlcyBhbmQgY2FsbGJhY2sgbWV0aG9kcy4gSWYgeW91IGZh
 aWwgdG8gaW1wbGVtZW50IHRoZQorKyAgICogIGNhbGxiYWNrLCBhIGRlZmF1bHQgaW1wbG1lbnRh
 dGlvbiB3aWxsIGJlIHVzZWQgdGhhdCB3aWxsIG9ubHkgcmVzdW1lIHRoZSBUcmFuc2FjdGlvbi4K
 KysgICAqCisrICAgKiBAcGFyYW0gSG9va1R5cGUgdGhlIHR5cGUgb2YgaG9vayB5b3Ugd2lzaCB0
 byByZWdpc3RlcgorKyAgICogQHNlZSBIb29rVHlwZQorKyAgICogQHNlZSBQbHVnaW4KKysgICAq
 LworKyAgdm9pZCByZWdpc3Rlckhvb2soUGx1Z2luOjpIb29rVHlwZSBob29rX3R5cGUpOworKyAg
 dmlydHVhbCB+VHJhbnNhY3Rpb25QbHVnaW4oKTsKKytwcm90ZWN0ZWQ6CisrICBUcmFuc2FjdGlv
 blBsdWdpbihUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24pOworKworKyAgLyoqCisrICAgKiBUaGlz
 IG1ldGhvZCB3aWxsIHJldHVybiBhIHNoYXJlZF9wdHIgdG8gYSBNdXRleCB0aGF0IGNhbiBiZSB1
 c2VkIGZvciBBc3luY1Byb3ZpZGVyIGFuZCBBc3luY1JlY2VpdmVyIG9wZXJhdGlvbnMuCisrICAg
 KgorKyAgICogSWYgYW5vdGhlciB0aHJlYWQgd2FudGVkIHRvIHN0b3AgdGhpcyB0cmFuc2FjdGlv
 biBmcm9tIGRpc3BhdGNoaW5nIGFuIGV2ZW50IGl0IGNvdWxkIGJlIHBhc3NlZAorKyAgICogdGhp
 cyBtdXRleCBhbmQgaXQgd291bGQgYmUgYWJsZSB0byBsb2NrIGl0IGFuZCBwcmV2ZW50IGFub3Ro
 ZXIgdGhyZWFkIGZyb20gZGlzcGF0Y2hpbmcgYmFjayBpbnRvIHRoaXMKKysgICAqIFRyYW5zYWN0
 aW9uUGx1Z2luLgorKyAgICovCisrICBzaGFyZWRfcHRyPE11dGV4PiBnZXRNdXRleCgpOworK3By
 aXZhdGU6CisrICBUcmFuc2FjdGlvblBsdWdpblN0YXRlICpzdGF0ZV87IC8qKjwgVGhlIGludGVy
 bmFsIHN0YXRlIGZvciBhIFRyYW5zYWN0aW9uUGx1Z2luICovCisrICBmcmllbmQgY2xhc3MgdXRp
 bHM6OmludGVybmFsOworK307CisrCisrfSAvKiBhdHNjcHBhcGkgKi8KKysKKysKKysjZW5kaWYg
 LyogQVRTQ1BQQVBJX1RSQU5TQUNUSU9OUExVR0lOX0hfICovCitkaWZmIC1ydU4gbGliL2F0c2Nw
 cGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4uaCBsaWIvYXRz
 Y3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9UcmFuc2Zvcm1hdGlvblBsdWdpbi5oCistLS0g
 bGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4u
 aAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkv
 c3JjL2luY2x1ZGUvYXRzY3BwYXBpL1RyYW5zZm9ybWF0aW9uUGx1Z2luLmgJMjAxMy0xMS0xMSAx
 NDowMzoxMi43MDE1MzIzMjggKzA4MDAKK0BAIC0wLDAgKzEsMTI5IEBACisrLyoqCisrICBMaWNl
 bnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisr
 ICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNF
 IGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9y
 bWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5z
 ZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
 IDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
 dCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBj
 b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
 Y2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
 YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRl
 ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lU
 SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
 IG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
 ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
 ZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSBUcmFuc2Zvcm1hdGlvblBsdWdpbi5oCisr
 ICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfVFJBTlNGT1JNQVRJT05Q
 TFVHSU5fSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9UUkFOU0ZPUk1BVElPTlBMVUdJTl9IXworKwor
 KyNpbmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPGF0c2NwcGFwaS9UcmFuc2FjdGlvbi5oPgor
 KyNpbmNsdWRlIDxhdHNjcHBhcGkvVHJhbnNhY3Rpb25QbHVnaW4uaD4KKysKKytuYW1lc3BhY2Ug
 YXRzY3BwYXBpIHsKKysKKytzdHJ1Y3QgVHJhbnNmb3JtYXRpb25QbHVnaW5TdGF0ZTsKKysKKysv
 KioKKysgKiBAYnJpZWYgVGhlIGludGVyZmFjZSB1c2VkIHdoZW4geW91IHdpc2ggdG8gdHJhbnNm
 b3JtIFJlcXVlc3Qgb3IgUmVzcG9uc2UgYm9keSBjb250ZW50LgorKyAqCisrICogVHJhbnNmb3Jt
 YXRpb25zIGFyZSBkZWNlcHRpdmVseSBzaW1wbGUsIHRyYW5zZm9ybWF0aW9ucyBhcmUgY2hhaW5l
 ZCBzbyB0aGUgb3V0cHV0CisrICogb2Ygb25lIFRyYW5zZm9ybWF0aW9uUGx1Z2luIGJlY29tZXMg
 dGhlIGlucHV0IG9mIGFub3RoZXIgVHJhbnNmb3JtYXRpb25QbHVnaW4uIEFzCisrICogZGF0YSBh
 cnJpdmVzIGl0IHdpbGwgZmlyZSBhIGNvbnN1bWUoKSBhbmQgd2hlbiBhbGwgdGhlIGRhdGEgaGFz
 IGJlZW4gc2VudAorKyAqIHlvdSB3aWxsIHJlY2VpdmUgYSBoYW5kbGVJbnB1dENvbXBsZXRlKCku
 IERhdGEgY2FuIGJlIHNlbnQgdG8gdGhlIG5leHQgVHJhbnNmb3JtYXRpb25QbHVnaW4KKysgKiBp
 biB0aGUgY2hhaW4gYnkgY2FsbGluZyBwcm9kdWNlKCkgYW5kIHdoZW4gdGhlIHRyYW5zZm9ybWF0
 aW9uIGhhcyBubyBkYXRhIGxlZnQgdG8gc2VuZAorKyAqIGl0IHdpbGwgZmlyZSBhIHNldE91dHB1
 dENvbXBldGUoKS4KKysgKgorKyAqIFNpbmNlIGEgVHJhbnNmb3JtYXRpb25QbHVnaW4gaXMgYSB0
 eXBlIG9mIFRyYW5zYWN0aW9uUGx1Z2luIHlvdSBjYW4gY2FsbCByZWdpc3Rlckhvb2soKSBhbmQK
 KysgKiBlc3RhYmxpc2ggYW55IGhvb2sgZm9yIGEgVHJhbnNhY3Rpb24gYWxzbzsgaG93ZXZlciwg
 cmVtZW1iZXIgdGhhdCB5b3UgbXVzdCBpbXBsZW1lbnQKKysgKiB0aGUgYXBwcm9wcmlhdGUgY2Fs
 bGJhY2sgZm9yIGFueSBob29rcyB5b3UgcmVnaXN0ZXIuCisrICoKKysgKiBBIHNpbXBsZSBleGFt
 cGxlIG9mIGhvdyB0byB1c2UgdGhlIFRyYW5zZm9ybWF0aW9uUGx1Z2luIGludGVyZmFjZSBmb2xs
 b3dzLCB0aGlzIGlzIGFuIGV4YW1wbGUKKysgKiBvZiBhIFJlc3BvbnNlIHRyYW5zZm9ybWF0aW9u
 LCB0aGUgYXZpYWxhYmxlIG9wdGlvbnMgYXJlIFJFUVVFU1RfVFJBTlNGT1JNQVRJT04gYW5kIFJF
 U1BPTlNFX1RSQU5TRk9STUFUSU9OCisrICogd2hpY2ggYXJlIGRlZmluZWQgaW4gVHlwZS4KKysg
 KgorKyAqIFRoaXMgZXhhbXBsZSBpcyBhIE51bGwgVHJhbnNmb3JtYXRpb24sIG1lYW5pbmcgaXQg
 d2lsbCBqdXN0IHNwaXQgb3V0IHRoZSBjb250ZW50IGl0IHJlY2VpdmVzIHdpdGhvdXQKKysgKiBh
 Y3R1YWxseSBkb2luZyBhbnkgd29yayBvbiBpdC4KKysgKgorKyAqIFxjb2RlCisrICogY2xhc3Mg
 TnVsbFRyYW5zZm9ybWF0aW9uUGx1Z2luIDogcHVibGljIFRyYW5zZm9ybWF0aW9uUGx1Z2luIHsK
 KysgKiBwdWJsaWM6CisrICogICBOdWxsVHJhbnNmb3JtYXRpb25QbHVnaW4oVHJhbnNhY3Rpb24g
 JnRyYW5zYWN0aW9uKQorKyAqICAgICA6IFRyYW5zZm9ybWF0aW9uUGx1Z2luKHRyYW5zYWN0aW9u
 LCBSRVNQT05TRV9UUkFOU0ZPUk1BVElPTikgeworKyAqICAgICByZWdpc3Rlckhvb2soSE9PS19T
 RU5EX1JFU1BPTlNFX0hFQURFUlMpOworKyAqICAgfQorKyAqICAgdm9pZCBoYW5kbGVTZW5kUmVz
 cG9uc2VIZWFkZXJzKFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlvbikgeworKyAqICAgICB0cmFuc2Fj
 dGlvbi5nZXRDbGllbnRSZXNwb25zZSgpLmdldEhlYWRlcnMoKS5zZXQoIlgtQ29udGVudC1UcmFu
 c2Zvcm1lZCIsICIxIik7CisrICogICAgIHRyYW5zYWN0aW9uLnJlc3VtZSgpOworKyAqICAgfQor
 KyAqICAgdm9pZCBjb25zdW1lKGNvbnN0IHN0cmluZyAmZGF0YSkgeworKyAqICAgICBwcm9kdWNl
 KGRhdGEpOworKyAqICAgfQorKyAqICAgdm9pZCBoYW5kbGVJbnB1dENvbXBsZXRlKCkgeworKyAq
 ICAgICBzZXRPdXRwdXRDb21wbGV0ZSgpOworKyAqICAgfQorKyAqIH07CisrICogXGVuZGNvZGUK
 KysgKgorKyAqIEBzZWUgUGx1Z2luCisrICogQHNlZSBUcmFuc2FjdGlvblBsdWdpbgorKyAqIEBz
 ZWUgVHlwZQorKyAqIEBzZWUgSG9va1R5cGUKKysgKi8KKytjbGFzcyBUcmFuc2Zvcm1hdGlvblBs
 dWdpbiA6IHB1YmxpYyBUcmFuc2FjdGlvblBsdWdpbiB7CisrcHVibGljOgorKyAgLyoqCisrICAg
 KiBUaGUgYXZhaWxhYmxlIHR5cGVzIG9mIFRyYW5zZm9ybWF0aW9ucy4KKysgICAqLworKyAgZW51
 bSBUeXBlIHsKKysgICAgUkVRVUVTVF9UUkFOU0ZPUk1BVElPTiA9IDAsIC8qKjwgVHJhbnNmb3Jt
 IHRoZSBSZXF1ZXN0IGJvZHkgY29udGVudCAqLworKyAgICBSRVNQT05TRV9UUkFOU0ZPUk1BVElP
 TiAvKio8IFRyYW5zZm9ybSB0aGUgUmVzcG9uc2UgYm9keSBjb250ZW50ICovCisrICB9OworKwor
 KyAgLyoqCisrICAgKiBBIG1ldGhvZCB0aGF0IHlvdSBtdXN0IGltcGxlbWVudCB3aGVuIHdyaXRp
 bmcgYSBUcmFuc2Zvcm1hdGlvblBsdWdpbiwgdGhpcyBtZXRob2Qgd2lsbCBiZQorKyAgICogZmly
 ZWQgd2hlbmV2ZXIgYW4gdXBzdHJlYW0gVHJhbnNmb3JtYXRpb25QbHVnaW4gaGFzIHByb2R1Y2Vk
 IG91dHB1dC4KKysgICAqLworKyAgdmlydHVhbCB2b2lkIGNvbnN1bWUoY29uc3Qgc3RkOjpzdHJp
 bmcgJmRhdGEpID0gMDsKKysKKysgIC8qKgorKyAgICogQSBtZXRob2QgdGhhdCB5b3UgbXVzdCBp
 bXBsZW1lbnQgd2hlbiB3cml0aW5nIGEgVHJhbnNmb3JtYXRpb25QbHVnaW4sIHRoaXMgbWV0aG9k
 CisrICAgKiB3aWxsIGJlIGZpcmVkIHdoZW5ldmVyIHRoZSB1cHN0cmVhbSBUcmFuc2Zvcm1hdGlv
 blBsdWdpbiBoYXMgY29tcGxldGVkIHdyaXRpbmcgZGF0YS4KKysgICAqLworKyAgdmlydHVhbCB2
 b2lkIGhhbmRsZUlucHV0Q29tcGxldGUoKSA9IDA7CisrCisrICB2aXJ0dWFsIH5UcmFuc2Zvcm1h
 dGlvblBsdWdpbigpOyAvKio8IERlc3RydWN0b3IgZm9yIGEgVHJhbnNmb3JtYXRpb25QbHVnaW4g
 Ki8KKytwcm90ZWN0ZWQ6CisrCisrICAvKioKKysgICAqIFRoaXMgbWV0aG9kIGlzIGhvdyBhIFRy
 YW5zZm9ybWF0aW9uUGx1Z2luIHdpbGwgcHJvZHVjZSBvdXRwdXQgZm9yIHRoZSBkb3duc3RyZWFt
 CisrICAgKiB0cmFuc2Zvcm1hdGlvbiBwbHVnaW4sIGlmIHlvdSBuZWVkIHRvIHByb2R1Y2UgYmlu
 YXJ5IGRhdGEgdGhpcyBjYW4gc3RpbGwgYmUKKysgICAqIGRvbmUgd2l0aCBzdHJpbmdzIGJ5IGEg
 Y2FsbCB0byBzdHJpbmc6OmFzc2lnbigpIG9yIGJ5IGNvbnN0cnVjdGluZyBhIHN0cmluZworKyAg
 ICogd2l0aCBzdHJpbmc6OnN0cmluZyhjaGFyICosIHNpemVfdCkuCisrICAgKi8KKysgIHNpemVf
 dCBwcm9kdWNlKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKworKyAgLyoqCisrICAgKiBUaGlzIGlz
 IHRoZSBtZXRob2QgdGhhdCB5b3UgbXVzdCBjYWxsIHdoZW4geW91J3JlIGRvbmUgcHJvZHVjaW5n
 IG91dHB1dCBmb3IKKysgICAqIHRoZSBkb3duc3RyZWFtIFRyYW5mb3JtYXRpb25QbHVnaW4uCisr
 ICAgKi8KKysgIHNpemVfdCBzZXRPdXRwdXRDb21wbGV0ZSgpOworKworKyAgLyoqIGEgVHJhbnNm
 b3JtYXRpb25QbHVnaW4gbXVzdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UsIGl0IGNhbm5vdCBi
 ZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSAqLworKyAgVHJhbnNmb3JtYXRpb25QbHVnaW4oVHJhbnNh
 Y3Rpb24gJnRyYW5zYWN0aW9uLCBUeXBlIHR5cGUpOworK3ByaXZhdGU6CisrICBUcmFuc2Zvcm1h
 dGlvblBsdWdpblN0YXRlICpzdGF0ZV87IC8qKiBJbnRlcm5hbCBzdGF0ZSBmb3IgYSBUcmFuc2Zv
 cm1hdGlvblBsdWdpbiAqLworK307CisrCisrfSAvKiBhdHNjcHBhcGkgKi8KKysKKysKKysjZW5k
 aWYgLyogQVRTQ1BQQVBJX1RSQU5TRk9STUFUSU9OUExVR0lOX0hfICovCitkaWZmIC1ydU4gbGli
 L2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvVXJsLmggbGliL2F0c2NwcGFwaS9zcmMv
 aW5jbHVkZS9hdHNjcHBhcGkvVXJsLmgKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0
 c2NwcGFwaS9VcmwuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL1VybC5oCTIwMTMtMTEtMTEgMTQ6MDM6
 MTIuNzAxNTMyMzI4ICswODAwCitAQCAtMCwwICsxLDE0OSBAQAorKy8qKgorKyAgTGljZW5zZWQg
 dG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3Ig
 bW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxl
 CisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlv
 bgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRo
 aXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
 KHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
 Y29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
 ZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
 cy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
 IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
 IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQg
 V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
 bXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
 CisrICovCisrLyoqCisrICogQGZpbGUgVXJsLmgKKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysj
 aWZuZGVmIEFUU0NQUEFQSV9VUkxfSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9VUkxfSF8KKysKKysj
 aW5jbHVkZSA8c3RyaW5nPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8YXRzY3Bw
 YXBpL25vbmNvcHlhYmxlLmg+CisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrCisrc3RydWN0
 IFVybFN0YXRlOworKworKy8qKgorKyAqIEBicmllZiBUaGlzIGNsYXNzIGNvbnRhaW5zIGFsbCBw
 cm9wZXJ0aWVzIG9mIGEgVXJsLgorKyAqCisrICogWW91IGNhbiB1c2UgYSBVcmwgb2JqZWN0IHRv
 IGdldCBhbmQgc2V0IGFueSBwcm9wZXJ0eSBvZiBhIHVybC4KKysgKgorKyAqIEB3YXJuaW5nIFVy
 bCBvYmplY3RzIHNob3VsZCBuZXZlciBiZSBjb25zdHJ1Y3RlZCBieSB0aGUgdXNlci4KKysgKiBJ
 ZiBhIHVzZXIgbmVlZHMgdG8gY3JlYXRlIGFuIHVuYm91bmQgVXJsIHRoZW4gdGhleSBzaG91bGQg
 Y3JlYXRlIGEgUmVxdWVzdAorKyAqIG9iamVjdCB1c2luZyBSZXF1ZXN0OjpSZXF1ZXN0KHN0cmlu
 Zykgd2hpY2ggd2lsbCBjb25zdHJ1Y3QgYSBVcmwgb2JqZWN0IGZvciB0aGVtCisrICogYW5kIGl0
 IGNhbiBiZSByZXRyaWV2ZWQgdmlhIFJlcXVlc3Q6OmdldFVybCgpLiBBIGZ1bGwgZXhhbXBsZSBv
 ZiB0aGlzCisrICogaXMgYXZhaWxhYmxlIGluIGV4YW1wbGVzL2RldGFjaGVkcmVxdWVzdC8uCisr
 ICovCisrY2xhc3MgVXJsOiBub25jb3B5YWJsZSB7CisrcHVibGljOgorKyAgLyoqCisrICAgKiBA
 d2FybmluZyBVcmwgb2JqZWN0cyBzaG91bGQgbmV2ZXIgYmUgY29uc3RydWN0ZWQgYnkgdGhlIHVz
 ZXIuCisrICAgKiBJZiBhIHVzZXIgbmVlZHMgdG8gY3JlYXRlIGFuIHVuYm91bmQgVXJsIHRoZW4g
 dGhleSBzaG91bGQgY3JlYXRlIGEgUmVxdWVzdAorKyAgICogb2JqZWN0IHVzaW5nIFJlcXVlc3Q6
 OlJlcXVlc3Qoc3RyaW5nKSB3aGljaCB3aWxsIGNvbnN0cnVjdCBhIFVybCBvYmplY3QgZm9yIHRo
 ZW0KKysgICAqIGFuZCBpdCBjYW4gYmUgcmV0cmlldmVkIHZpYSBSZXF1ZXN0OjpnZXRVcmwoKS4g
 QSBmdWxsIGV4YW1wbGUgb2YgdGhpcworKyAgICogaXMgYXZhaWxhYmxlIGluIGV4YW1wbGVzL2Rl
 dGFjaGVkcmVxdWVzdC8uCisrICAgKgorKyAgICogQHByaXZhdGUKKysgICAqLworKyAgVXJsKCk7
 CisrCisrICAvKioKKysgICAqIEB3YXJuaW5nIFVybCBvYmplY3RzIHNob3VsZCBuZXZlciBiZSBj
 b25zdHJ1Y3RlZCBieSB0aGUgdXNlci4KKysgICAqIElmIGEgdXNlciBuZWVkcyB0byBjcmVhdGUg
 YW4gdW5ib3VuZCBVcmwgdGhlbiB0aGV5IHNob3VsZCBjcmVhdGUgYSBSZXF1ZXN0CisrICAgKiBv
 YmplY3QgdXNpbmcgUmVxdWVzdDo6UmVxdWVzdChzdHJpbmcpIHdoaWNoIHdpbGwgY29uc3RydWN0
 IGEgVXJsIG9iamVjdCBmb3IgdGhlbQorKyAgICogYW5kIGl0IGNhbiBiZSByZXRyaWV2ZWQgdmlh
 IFJlcXVlc3Q6OmdldFVybCgpLiBBIGZ1bGwgZXhhbXBsZSBvZiB0aGlzCisrICAgKiBpcyBhdmFp
 bGFibGUgaW4gZXhhbXBsZXMvZGV0YWNoZWRyZXF1ZXN0Ly4KKysgICAqCisrICAgKiBAcHJpdmF0
 ZQorKyAgICovCisrICBVcmwodm9pZCAqaGRyX2J1Ziwgdm9pZCAqdXJsX2xvYyk7CisrICB+VXJs
 KCk7CisrCisrICAvKioKKysgICAqIEByZXR1cm4gVGhlIGZ1bGwgdXJsIGFzIGEgc3RyaW5nLCBz
 dWNoIGEgdXJsIG1pZ2h0IGJlIGh0dHA6Ly90cmFmZmljc2VydmVyLmFwYWNoZS5vcmcvc2VhcmNo
 P3E9YmxhaAorKyAgICovCisrICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0VXJsU3RyaW5nKCkgY29u
 c3Q7CisrCisrICAvKioKKysgICAqIEByZXR1cm4gVGhlIHBhdGggb25seSBwb3J0aW9uIG9mIHRo
 ZSB1cmwsIHN1Y2ggYXMgL3NlYXJjaAorKyAgICovCisrICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0
 UGF0aCgpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBAcmV0dXJuIFRoZSBxdWVyeSBvbmx5IHBv
 cnRpb24gb2YgdGhlIHVybCwgd2hpY2ggbWlnaHQgYmUgcT1ibGFoCisrICAgKi8KKysgIGNvbnN0
 IHN0ZDo6c3RyaW5nICZnZXRRdWVyeSgpIGNvbnN0OworKworKyAgLyoqCisrICAgKiBAcmV0dXJu
 IFRoZSBzY2hlbWUgb2YgdGhlIHVybCwgdGhpcyB3aWxsIGJlIGVpdGhlciBodHRwIG9yIGh0dHBz
 LgorKyAgICovCisrICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0U2NoZW1lKCkgY29uc3Q7CisrCisr
 ICAvKioKKysgICAqIEByZXR1cm4gVGhlIGhvc3Qgb25seSBvZiB0aGUgdXJsLCB0aGlzIG1pZ2h0
 IGJlIHd3dy5nb29nbGUuY29tCisrICAgKi8KKysgIGNvbnN0IHN0ZDo6c3RyaW5nICZnZXRIb3N0
 KCkgY29uc3Q7CisrCisrICAvKioKKysgICAqIEByZXR1cm4gVGhlIHBvcnQgb25seSBwb3J0aW9u
 IG9mIHRoZSB1cmwsIHRoaXMgd2lsbCBsaWtlbHkgYmUgODAgb3IgNDQzLgorKyAgICovCisrICB1
 aW50MTZfdCBnZXRQb3J0KCkgY29uc3Q7CisrCisrICAvKioKKysgICAqIFNldCB0aGUgcGF0aCBv
 ZiB0aGUgdXJsLgorKyAgICogQHBhcmFtIHBhdGggdGhlIHBhdGggcG9ydGlvbiBvZiB0aGUgdXJs
 IHRvIHNldCwgdGhpcyBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSAvZm9vL2JhcgorKyAgICovCisr
 ICB2b2lkIHNldFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcgJik7CisrCisrICAvKioKKysgICAqIFNl
 dCB0aGUgcXVlcnkgcGFyYW0gb2YgdGhlIHVybC4KKysgICAqIEBwYXJhbSBxdWVyeSB0aGUgcXVl
 cnkgcG9ydGlvbiBvZiB0aGUgdXJsLCB0aGlzIG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlIGZvbz1i
 YXImYmxhaD1iYXouCisrICAgKi8KKysgIHZvaWQgc2V0UXVlcnkoY29uc3Qgc3RkOjpzdHJpbmcg
 Jik7CisrCisrICAvKioKKysgICAqIFNldCB0aGUgc2NoZW1lIG9mIHRoZSB1cmwKKysgICAqIEBw
 YXJhbSBzY2hlbWUgdGhpcyBtaWdodCBiZSBlaXRoZXIgaHR0cCBvciBodHRwcy4KKysgICAqLwor
 KyAgdm9pZCBzZXRTY2hlbWUoY29uc3Qgc3RkOjpzdHJpbmcgJik7CisrCisrICAvKioKKysgICAq
 IFNldCB0aGUgaG9zdCBvZiB0aGUgdXJsCisrICAgKiBAcGFyYW0gaG9zdCB0aGlzIG1pZ2h0IGJl
 IHNvbWV0aGluZyBzdWNoIGFzIHd3dy5saW5rZWRpbi5jb20gb3Igd3d3LmFwYWNoZS5vcmcKKysg
 ICAqLworKyAgdm9pZCBzZXRIb3N0KGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKworKyAgLyoqCisr
 ICAgKiBTZXQgdGhlIHBvcnQgcG9ydGlvbiBvZiB0aGUgdXJsLgorKyAgICogQHBhcmFtIHBvcnQg
 dGhpcyBpcyBhIHVpbnQxNl90IHdoaWNoIHJlcHJlc2VudHMgdGhlIHBvcnQgKGluIGhvc3Qgb3Jk
 ZXIsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udmVyIHRvIG5ldHdvcmsgb3JkZXIpLiBZb3UKKysg
 ICAqIG1pZ2h0IHVzZSBhIHZhbHVlIHN1Y2ggYXMgODAgb3IgODA4MC4KKysgICAqLworKyAgdm9p
 ZCBzZXRQb3J0KGNvbnN0IHVpbnQxNl90KTsKKysKKysgIC8qKgorKyAgICogVGhpcyBtZXRob2Qg
 YWxsb3dzIHlvdSB0byByZXNldCB0aGUgdXJsLCB0aGlzIHdpbGwgZm9yY2UgdGhlIFVybCB0byBm
 dWxseSByZS1yZWFkIGFsbCBjYWNoZWQgdmFsdWVzLgorKyAgICogSWYgdGhpcyBtZXRob2QgaXMg
 dXNlZCBvbiBhIERldGFjaGVkIFJlcXVlc3RzJyBVcmwgb2JqZWN0IGl0IHdpbGwgY29tcGxldGVs
 eSBkZXN0cm95IHRoZSB2YWx1ZXMuCisrICAgKgorKyAgICogXG5vdGUgVGhpcyBtZXRob2Qgc2hv
 dWxkIHJhcmVseSBiZSB1c2VkLgorKyAgICovCisrICB2b2lkIHJlc2V0KCk7CisrcHJpdmF0ZToK
 KysgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0OworKyAgdm9pZCBpbml0KHZvaWQgKmhkcl9i
 dWYsIHZvaWQgKnVybF9sb2MpOworKyAgVXJsU3RhdGUgKnN0YXRlXzsKKysgIGZyaWVuZCBjbGFz
 cyBSZXF1ZXN0OworKyAgZnJpZW5kIGNsYXNzIENsaWVudFJlcXVlc3Q7CisrICBmcmllbmQgY2xh
 c3MgUmVtYXBQbHVnaW47CisrfTsKKysKKyt9CisrCisrI2VuZGlmIC8qIEFUU0NQUEFQSV9VUkxf
 SF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9ub25j
 b3B5YWJsZS5oIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL25vbmNvcHlhYmxl
 LmgKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9ub25jb3B5YWJsZS5o
 CTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9z
 cmMvaW5jbHVkZS9hdHNjcHBhcGkvbm9uY29weWFibGUuaAkyMDEzLTExLTExIDE0OjAzOjEyLjcw
 MTUzMjMyOCArMDgwMAorQEAgLTAsMCArMSw2NCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhl
 IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBj
 b250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBk
 aXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAg
 cmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmls
 ZQorKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQor
 KyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
 YW5jZQorKyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
 TGljZW5zZSBhdAorKworKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
 TlNFLTIuMAorKworKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
 ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
 c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFO
 VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
 LgorKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
 IHBlcm1pc3Npb25zIGFuZAorKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICov
 CisrCisrLyoqCisrICogQGZpbGUgbm9uY29weWFibGUuaAorKyAqIEBicmllZiBBIGJhc2UgY2xh
 c3MgdXNlZCB0byBwcmV2ZW50IGRlcnZpZWQgY2xhc3NlcyBmcm9tIGJlaW5nIGNvcHlhYmxlLCB0
 aGlzIGVmZmVjdGl2ZWx5CisrICogZWxpbWluYXRlcyB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQg
 YXNzaWdubWVudCBvcGVyYXRvci4KKysgKi8KKysKKysjcHJhZ21hIG9uY2UKKysjaWZuZGVmIEFU
 U0NQUEFQSV9OT05DT1BZQUJMRV9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX05PTkNPUFlBQkxFX0hf
 CisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrCisrLyoqCisrICogQGJyaWVmIG5vbmNvcHlh
 YmxlIGlzIGEgYmFzZSBjbGFzcyB0aGF0IHdpbGwgcHJldmVudCBkZXJpdmVkIGNsYXNzZXMgZnJv
 bSBiZWluZyBjb3BpZWQuCisrICoKKysgKiBAcHJpdmF0ZSBQcmV2ZW50IERveHlnZW4gZnJvbSBz
 aG93aW5nIHRoaXMgY2xhc3MgaW4gdGhlIGluaGVyaXRhbmNlIGRpYWdyYW1zLgorKyAqCisrICog
 VG8gdXNlIG5vbmNvcHlhYmxlIHlvdSBvbmx5IG5lZWQgdG8gaW5oZXJpdCBmcm9tIHRoaXMgY2xh
 c3MgYW5kIHlvdSdyZSBkZXJpdmVkIGNsYXNzCisrICogd2lsbCBiZWNvbWUgdW5jb3B5YWJsZQor
 KyAqCisrICogXGNvZGUKKysgKiBjbGFzcyBteUNsYXNzIDogdW5jb3B5YWJsZSB7CisrICogcHVi
 bGljOgorKyAqICBpbnQgdGVzdF87CisrICogfQorKyAqCisrICogLy8gVGhlIGZvbGxvd2luZyB3
 aWxsIGZhaWw6CisrICogbXlDbGFzcyBhOworKyAqIG15Q2xhc3MgYihhKTsgLy8gZmFpbHMKKysg
 KiBteUNsYXNzIGMgPSBhOyAvLyBmYWlscworKyAqIFxlbmRjb2RlCisrICovCisrY2xhc3Mgbm9u
 Y29weWFibGUKKyt7CisrcHJvdGVjdGVkOgorKyAgbm9uY29weWFibGUoKSB7fQorKyAgfm5vbmNv
 cHlhYmxlKCkge30KKytwcml2YXRlOgorKyAgbm9uY29weWFibGUoY29uc3Qgbm9uY29weWFibGUm
 KTsKKysgIGNvbnN0IG5vbmNvcHlhYmxlJiBvcGVyYXRvcj0oY29uc3Qgbm9uY29weWFibGUmKTsK
 Kyt9OworKworK30gLyogYXRzY3BwYXBpICovCisrCisrCisrI2VuZGlmIC8qIEFUU0NQUEFQSV9O
 T05DT1BZQUJMRV9IXyAqLworZGlmZiAtcnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRz
 Y3BwYXBpL3NoYXJlZF9wdHIuaCBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9z
 aGFyZWRfcHRyLmgKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9zaGFy
 ZWRfcHRyLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvYXRz
 Y3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS9zaGFyZWRfcHRyLmgJMjAxMy0xMS0xMSAxNDow
 MzoxMi43MDE1MzIzMjggKzA4MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysvKioKKysgIExpY2Vuc2Vk
 IHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9y
 IG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmls
 ZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp
 b24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0
 aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
 ICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
 IGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
 b2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
 ZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
 ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
 ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VU
 IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
 aW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
 dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
 LgorKyAqLworKy8qKgorKyAqIEBmaWxlIHNoYXJlZF9wdHIuaAorKyAqCisrICogU2hhcmVkIHBv
 aW50ZXIgZGVjbGFyYXRpb24uCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBU1RD
 UFBBUElfU0hBUkVEX1BUUl9IXworKyNkZWZpbmUgQVNUQ1BQQVBJX1NIQVJFRF9QVFJfSF8KKysK
 KysjaW5jbHVkZSA8dHIxL21lbW9yeT4KKysKKytuYW1lc3BhY2UgYXRzY3BwYXBpIHsKKysKKysv
 KioKKysgKiBGb3JjZSB0aGUgdXNlIG9mIHN0ZDo6dHIxOjpzaGFyZWRfcHRyCisrICogXHRvZG8g
 Q29uc2lkZXIgYWRkaW5nIGEgc2ltcGxlIG1hY3JvIHRvIGNoZWNrIGlmIGMrKzB4LzExIGlzIGVu
 YWJsZWQKKysgKiBhbmQgaWYgc28gY2hhbmdlIGl0IHRvIHN0ZDo6c2hhcmVkX3B0ciBhbmQgI2lu
 Y2x1ZGUgPG1lbW9yeT5zCisrICovCisrdXNpbmcgc3RkOjp0cjE6OnNoYXJlZF9wdHI7CisrCisr
 fSAvKiBhdHNjcHBhcGkgKi8KKysKKysjZW5kaWYgLyogU0hBUkVEX1BUUl9IXyAqLworZGlmZiAt
 cnVOIGxpYi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvYXRzY3BwYXBpL3V0aWxzLmggbGliL2F0c2Nw
 cGFwaS9zcmMvaW5jbHVkZS9hdHNjcHBhcGkvdXRpbHMuaAorLS0tIGxpYi9hdHNjcHBhcGkvc3Jj
 L2luY2x1ZGUvYXRzY3BwYXBpL3V0aWxzLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAg
 KzA4MDAKKysrKyBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2F0c2NwcGFwaS91dGlscy5oCTIw
 MTMtMTEtMTEgMTQ6MDM6MTIuNjk5NTMyNDc5ICswODAwCitAQCAtMCwwICsxLDczIEBACisrLyoq
 CisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5k
 ZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0
 aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlv
 bmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBB
 U0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
 LCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
 aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBv
 YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAgICAgaHR0cDovL3d3dy5hcGFj
 aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
 bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisrICBkaXN0cmli
 dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
 LAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
 ciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
 YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisrICBsaW1pdGF0aW9ucyB1bmRl
 ciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmlsZSB1dGlscy5oCisrICogQGJy
 aWVmIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGF2YWlsYWJsZSB0byB1c2VycyBvZiB0aGUg
 YXBpLgorKyAqCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lmbmRlZiBBVFNDUFBBUElfVVRJ
 TFNfSF8KKysjZGVmaW5lIEFUU0NQUEFQSV9VVElMU19IXworKworKyNpbmNsdWRlIDxzdHJpbmc+
 CisrI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaWZu
 ZGVmIEFUU0NQUEFQSV9VTlVTRUQKKysjZGVmaW5lIEFUU0NQUEFQSV9VTlVTRUQgX19hdHRyaWJ1
 dGVfXyAoKHVudXNlZCkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIGF0c2NwcGFwaSB7CisrbmFt
 ZXNwYWNlIHV0aWxzIHsKKysKKysvKioKKysgKiBAYnJpZWYgUmV0dXJucyBhIHByZXR0eSBwcmlu
 dGVkIHN0cmluZyBvZiBhIHNvY2thZGRyICoKKysgKgorKyAqIEBwYXJhbSBzb2NrYWRkciogQSBw
 b2ludGVyIHRvIGEgc29ja2FkZHIgKgorKyAqIEByZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhl
 IHByZXR0eSBwcmludGVkIGFkZHJlc3MKKysgKi8KKytzdGQ6OnN0cmluZyBnZXRJcFN0cmluZyhj
 b25zdCBzb2NrYWRkciAqKTsKKysKKysvKioKKysgKiBAYnJpZWYgUmV0dXJucyBqdXN0IHRoZSBw
 b3J0IHBvcnRpb24gb2YgdGhlIHNvY2thZGRyICoKKysgKgorKyAqIEBwYXJhbSBzb2NrYWRkciog
 QSBwb2ludGVyIHRvIGEgc29ja2FkZHIgKgorKyAqIEByZXR1cm4gYSB1aW50MTZfdCB3aGljaCBp
 cyB0aGUgcG9ydCBmcm9tIHRoZSBzb2NrYWRkciAqCisrICovCisrdWludDE2X3QgZ2V0UG9ydChj
 b25zdCBzb2NrYWRkciAqKTsKKysKKysvKioKKysgKiBAYnJpZWYgUmV0dXJucyBhIHByZXR0eSBw
 cmludGVkIHN0cmluZyBvZiBhIHNvY2thZGRyICogaW5jbHVkaW5nIHBvcnQKKysgKgorKyAqIEBw
 YXJhbSBzb2NrYWRkciogQSBwb2ludGVyIHRvIGEgc29ja2FkZHIgKgorKyAqIEByZXR1cm4gYSBz
 dHJpbmcgd2hpY2ggaXMgdGhlIHByZXR0eSBwcmludGVkIGFkZHJlc3MgaW5jbHVkaW5nIHBvcnQK
 KysgKi8KKytzdGQ6OnN0cmluZyBnZXRJcFBvcnRTdHJpbmcoY29uc3Qgc29ja2FkZHIgKik7Cisr
 CisrLyoqCisrICogQGJyaWVmIFRoaXMgaXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQg
 ZGlzYWJsZXMgY2FjaGluZyBpbiBhbGwKKysgKiB0eXBlcyBpbmNsdWRpbmcgSW5pdGlhbGl6YWJs
 ZVZhbHVlLgorKyAqLworK2V4dGVybiBjb25zdCBzdGQ6OnN0cmluZyBESVNBQkxFX0RBVEFfQ0FD
 SElOR19FTlZfRkxBRzsKKysKKyt9CisrfQorKworKyNlbmRpZiAvKiBBVFNDUFBBUElfVVRJTFNf
 SF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2xvZ2dpbmdfaW50ZXJu
 YWwuaCBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL2xvZ2dpbmdfaW50ZXJuYWwuaAorLS0tIGxp
 Yi9hdHNjcHBhcGkvc3JjL2luY2x1ZGUvbG9nZ2luZ19pbnRlcm5hbC5oCTE5NzAtMDEtMDEgMDg6
 MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS9sb2dn
 aW5nX2ludGVybmFsLmgJMjAxMy0xMS0xMSAxNDowMzoxMi43MDI1MzIwOTMgKzA4MDAKK0BAIC0w
 LDAgKzEsNDQgQEAKKysvKioKKysgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91
 bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKysgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBh
 Z3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlz
 IHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKysgIHJlZ2FyZGluZyBjb3B5cmlnaHQg
 b3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKysgIHRvIHlvdSB1bmRlciB0
 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKysgICJMaWNlbnNlIik7IHlvdSBt
 YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKysgIHdpdGggdGhlIExp
 Y2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysKKysgICAg
 ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysKKysgIFVubGVz
 cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
 dHdhcmUKKysgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
 IGFuICJBUyBJUyIgQkFTSVMsCisrICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
 RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKysgIFNlZSB0aGUgTGljZW5z
 ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKysg
 IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqLworKworKy8qKgorKyAqIEBmaWxl
 IGxvZ2dpbmdfaW50ZXJuYWwuaAorKyAqCisrICoKKysgKiBAYnJpZWYgbG9nZ2luZyB1c2VkIGlu
 c2lkZSB0aGUgYXRzY3BwYXBpIGxpYnJhcnkuCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrI2lm
 bmRlZiBBVFNDUFBBUElfTE9HR0lOR19JTlRFUk5BTF9IXworKyNkZWZpbmUgQVRTQ1BQQVBJX0xP
 R0dJTkdfSU5URVJOQUxfSF8KKysKKysjaW5jbHVkZSAiYXRzY3BwYXBpL0xvZ2dlci5oIgorKwor
 Ky8vIEJlY2F1c2Ugd2UgaGF2ZSB0aGUgaGVscGVyIGluIExvZ2dlci5oIHdpdGggdGhlIHNhbWUg
 bmFtZS4KKysjaWZkZWYgTE9HX0RFQlVHCisrI3VuZGVmIExPR19ERUJVRworKyNlbmRpZgorKwor
 KyNpZmRlZiBMT0dfRVJST1IKKysjdW5kZWYgTE9HX0VSUk9SCisrI2VuZGlmCisrCisrI2RlZmlu
 ZSBMT0dfREVCVUcoZm10LCAuLi4pIFRTX0RFQlVHKCJhdHNjcHBhcGkiLCBmbXQsICMjIF9fVkFf
 QVJHU19fKQorKyNkZWZpbmUgTE9HX0VSUk9SKGZtdCwgLi4uKSBUU19FUlJPUigiYXRzY3BwYXBp
 IiwgZm10LCAjIyBfX1ZBX0FSR1NfXykKKysKKysjZW5kaWYgLyogQVRTQ1BQQVBJX0xPR0dJTkdf
 SU5URVJOQUxfSF8gKi8KK2RpZmYgLXJ1TiBsaWIvYXRzY3BwYXBpL3NyYy9pbmNsdWRlL3V0aWxz
 X2ludGVybmFsLmggbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS91dGlsc19pbnRlcm5hbC5oCist
 LS0gbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS91dGlsc19pbnRlcm5hbC5oCTE5NzAtMDEtMDEg
 MDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbGliL2F0c2NwcGFwaS9zcmMvaW5jbHVkZS91
 dGlsc19pbnRlcm5hbC5oCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAyNTMyMDkzICswODAwCitAQCAt
 MCwwICsxLDg5IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv
 dW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2Ug
 YWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhp
 cyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0
 IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIg
 dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3Ug
 bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBM
 aWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAg
 ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxl
 c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
 ZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
 biBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
 T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vu
 c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisr
 ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmls
 ZSBhdHN1dGlscy5oCisrICoKKysgKgorKyAqIEBicmllZiBpbnRlcm5hbCB1dGlsaXRpZXMgZm9y
 IGF0c2NwcGFwaQorKyAqLworKworKyNwcmFnbWEgb25jZQorKyNpZm5kZWYgQVRTQ1BQQVBJX0FU
 U1VUSUxTX0hfCisrI2RlZmluZSBBVFNDUFBBUElfQVRTVVRJTFNfSF8KKysKKysjaW5jbHVkZSA8
 dHMvdHMuaD4KKysjaW5jbHVkZSA8c3RyaW5nPgorKyNpbmNsdWRlICJhdHNjcHBhcGkvR2xvYmFs
 UGx1Z2luLmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS9UcmFuc2FjdGlvblBsdWdpbi5oIgorKyNp
 bmNsdWRlICJhdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4uaCIKKysjaW5jbHVkZSAiYXRz
 Y3BwYXBpL1BsdWdpbi5oIgorKyNpbmNsdWRlICJhdHNjcHBhcGkvSHR0cFZlcnNpb24uaCIKKysj
 aW5jbHVkZSAiYXRzY3BwYXBpL3V0aWxzLmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS9Bc3luY0h0
 dHBGZXRjaC5oIgorKyNpbmNsdWRlICJhdHNjcHBhcGkvVHJhbnNhY3Rpb24uaCIKKysKKytuYW1l
 c3BhY2UgYXRzY3BwYXBpIHsKKysKKytuYW1lc3BhY2UgdXRpbHMgeworKworKy8qKgorKyAqIEBw
 cml2YXRlCisrICovCisrY2xhc3MgaW50ZXJuYWwgeworK3B1YmxpYzoKKysgIHN0YXRpYyBUU0h0
 dHBIb29rSUQgY29udmVydEludGVybmFsSG9va1RvVHNIb29rKFBsdWdpbjo6SG9va1R5cGUpOwor
 KyAgc3RhdGljIFRTSHR0cEhvb2tJRCBjb252ZXJ0SW50ZXJuYWxUcmFuc2Zvcm1hdGlvblR5cGVU
 b1RzSG9vayhUcmFuc2Zvcm1hdGlvblBsdWdpbjo6VHlwZSB0eXBlKTsKKysgIHN0YXRpYyB2b2lk
 IGludm9rZVBsdWdpbkZvckV2ZW50KFRyYW5zYWN0aW9uUGx1Z2luICosIFRTSHR0cFR4biwgVFNF
 dmVudCk7CisrICBzdGF0aWMgdm9pZCBpbnZva2VQbHVnaW5Gb3JFdmVudChHbG9iYWxQbHVnaW4g
 KiwgVFNIdHRwVHhuLCBUU0V2ZW50KTsKKysgIHN0YXRpYyBIdHRwVmVyc2lvbiBnZXRIdHRwVmVy
 c2lvbihUU01CdWZmZXIgaGRyX2J1ZiwgVFNNTG9jIGhkcl9sb2MpOworKyAgc3RhdGljIHZvaWQg
 aW5pdFRyYW5zYWN0aW9uTWFuYWdlbWVudCgpOworKyAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnN1
 bWVGcm9tVFNJT0J1ZmZlclJlYWRlcihUU0lPQnVmZmVyUmVhZGVyKTsKKysgIHN0YXRpYyBzaGFy
 ZWRfcHRyPE11dGV4PiBnZXRUcmFuc2FjdGlvblBsdWdpbk11dGV4KFRyYW5zYWN0aW9uUGx1Z2lu
 ICYpOworKyAgc3RhdGljIFRyYW5zYWN0aW9uICZnZXRUcmFuc2FjdGlvbihUU0h0dHBUeG4pOwor
 KworKyAgc3RhdGljIEFzeW5jSHR0cEZldGNoU3RhdGUgKmdldEFzeW5jSHR0cEZldGNoU3RhdGUo
 QXN5bmNIdHRwRmV0Y2ggJmFzeW5jX2h0dHBfZmV0Y2gpIHsKKysgICAgcmV0dXJuIGFzeW5jX2h0
 dHBfZmV0Y2guc3RhdGVfOworKyAgfQorKworKyAgc3RhdGljIHZvaWQgaW5pdFJlc3BvbnNlKFJl
 c3BvbnNlICZyZXNwb25zZSwgVFNNQnVmZmVyIGhkcl9idWYsIFRTTUxvYyBoZHJfbG9jKSB7Cisr
 ICAgIHJlc3BvbnNlLmluaXQoaGRyX2J1ZiwgaGRyX2xvYyk7CisrICB9CisrCisrICBzdGF0aWMg
 dm9pZCBpbml0VHJhbnNhY3Rpb25TZXJ2ZXJSZXF1ZXN0KFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlv
 bikgeworKyAgICB0cmFuc2FjdGlvbi5pbml0U2VydmVyUmVxdWVzdCgpOworKyAgfQorKworKyAg
 c3RhdGljIHZvaWQgaW5pdFRyYW5zYWN0aW9uU2VydmVyUmVzcG9uc2UoVHJhbnNhY3Rpb24gJnRy
 YW5zYWN0aW9uKSB7CisrICAgIHRyYW5zYWN0aW9uLmluaXRTZXJ2ZXJSZXNwb25zZSgpOworKyAg
 fQorKworKyAgc3RhdGljIHZvaWQgaW5pdFRyYW5zYWN0aW9uQ2xpZW50UmVzcG9uc2UoVHJhbnNh
 Y3Rpb24gJnRyYW5zYWN0aW9uKSB7CisrICAgIHRyYW5zYWN0aW9uLmluaXRDbGllbnRSZXNwb25z
 ZSgpOworKyAgfQorKworKyAgc3RhdGljIGNvbnN0IHN0ZDo6bGlzdDxUcmFuc2FjdGlvblBsdWdp
 biAqPiAmZ2V0VHJhbnNhY3Rpb25QbHVnaW5zKGNvbnN0IFRyYW5zYWN0aW9uICZ0cmFuc2FjdGlv
 bikgeworKyAgICByZXR1cm4gdHJhbnNhY3Rpb24uZ2V0UGx1Z2lucygpOworKyAgfQorK307IC8q
 IGludGVybmFsICovCisrCisrfSAvKiB1dGlscyAqLworKworK30KKysKKysjZW5kaWYgLyogQVRT
 Q1BQQVBJX0FUU1VUSUxTX0hfICovCitkaWZmIC1ydU4gbGliL2F0c2NwcGFwaS9zcmMvdXRpbHMu
 Y2MgbGliL2F0c2NwcGFwaS9zcmMvdXRpbHMuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy91dGls
 cy5jYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBh
 cGkvc3JjL3V0aWxzLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzAzNTMyMjg0ICswODAwCitAQCAt
 MCwwICsxLDc5IEBACisrLyoqCisrICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZv
 dW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisrICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2Ug
 YWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKysgIGRpc3RyaWJ1dGVkIHdpdGggdGhp
 cyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisrICByZWdhcmRpbmcgY29weXJpZ2h0
 IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisrICB0byB5b3UgdW5kZXIg
 dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisrICAiTGljZW5zZSIpOyB5b3Ug
 bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisrICB3aXRoIHRoZSBM
 aWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrCisrICAg
 ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrCisrICBVbmxl
 c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
 ZnR3YXJlCisrICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
 biBhbiAiQVMgSVMiIEJBU0lTLAorKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
 T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisrICBTZWUgdGhlIExpY2Vu
 c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisr
 ICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKysgKi8KKysKKysvKioKKysgKiBAZmls
 ZSB1dGlscy5jYworKyAqLworKworKyNpbmNsdWRlICJhdHNjcHBhcGkvdXRpbHMuaCIKKysjaW5j
 bHVkZSA8c3N0cmVhbT4KKysjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHRzL3Rz
 Lmg+CisrI2luY2x1ZGUgImxvZ2dpbmdfaW50ZXJuYWwuaCIKKysKKytjb25zdCBzdGQ6OnN0cmlu
 ZyBhdHNjcHBhcGk6OnV0aWxzOjpESVNBQkxFX0RBVEFfQ0FDSElOR19FTlZfRkxBRygiQVRTQ1BQ
 QVBJX0RJU0FCTEVfVFJBTlNBQ1RJT05fREFUQV9DQUNISU5HIik7CisrCisrc3RkOjpzdHJpbmcg
 YXRzY3BwYXBpOjp1dGlsczo6Z2V0SXBTdHJpbmcoY29uc3Qgc29ja2FkZHIgKnNvY2thZGRyZXNz
 KSB7CisrICBpZiAoc29ja2FkZHJlc3MgPT0gTlVMTCkgeworKyAgICBMT0dfRVJST1IoIkNhbm5v
 dCB3b3JrIG9uIE5VTEwgc29ja2FkZHJlc3MiKTsKKysgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsK
 KysgIH0KKysKKysgIGNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworKworKyAgc3dpdGNoIChz
 b2NrYWRkcmVzcy0+c2FfZmFtaWx5KSB7CisrICBjYXNlIEFGX0lORVQ6CisrICAgIGluZXRfbnRv
 cChBRl9JTkVULCAmKCgoc3RydWN0IHNvY2thZGRyX2luICopIHNvY2thZGRyZXNzKS0+c2luX2Fk
 ZHIpLCBidWYsIElORVRfQUREUlNUUkxFTik7CisrICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWYp
 OworKyAgY2FzZSBBRl9JTkVUNjoKKysgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmKCgoc3RydWN0
 IHNvY2thZGRyX2luNiAqKSBzb2NrYWRkcmVzcyktPnNpbjZfYWRkciksIGJ1ZiwgSU5FVDZfQURE
 UlNUUkxFTik7CisrICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWYpOworKyAgZGVmYXVsdDoKKysg
 ICAgTE9HX0VSUk9SKCJVbmtub3duIEFkZHJlc3MgRmFtaWx5ICVkIiwgc3RhdGljX2Nhc3Q8aW50
 Pihzb2NrYWRkcmVzcy0+c2FfZmFtaWx5KSk7CisrICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwor
 KyAgfQorK30KKysKKyt1aW50MTZfdCBhdHNjcHBhcGk6OnV0aWxzOjpnZXRQb3J0KGNvbnN0IHNv
 Y2thZGRyICpzb2NrYWRkcmVzcykgeworKyAgaWYgKHNvY2thZGRyZXNzID09IE5VTEwpIHsKKysg
 ICAgTE9HX0VSUk9SKCJDYW5ub3Qgd29yayBvbiBOVUxMIHNvY2thZGRyZXNzIik7CisrICAgIHJl
 dHVybiAwOworKyAgfQorKworKyAgaWYgKHNvY2thZGRyZXNzLT5zYV9mYW1pbHkgPT0gQUZfSU5F
 VCkgeworKyAgICByZXR1cm4gbnRvaHMoKCgoc3RydWN0IHNvY2thZGRyX2luKikgc29ja2FkZHJl
 c3MpLT5zaW5fcG9ydCkpOworKyAgfSBlbHNlIGlmIChzb2NrYWRkcmVzcy0+c2FfZmFtaWx5ID09
 IEFGX0lORVQ2KSB7CisrICAgIHJldHVybiBudG9ocygoKChzdHJ1Y3Qgc29ja2FkZHJfaW42Kikg
 c29ja2FkZHJlc3MpLT5zaW42X3BvcnQpKTsKKysgIH0gZWxzZSB7CisrICAgIExPR19FUlJPUigi
 VW5rbm93biBBZGRyZXNzIEZhbWlseSAlZCIsIHN0YXRpY19jYXN0PGludD4oc29ja2FkZHJlc3Mt
 PnNhX2ZhbWlseSkpOworKyAgICByZXR1cm4gMDsKKysgIH0KKyt9CisrCisrc3RkOjpzdHJpbmcg
 YXRzY3BwYXBpOjp1dGlsczo6Z2V0SXBQb3J0U3RyaW5nKGNvbnN0IHNvY2thZGRyICpzb2NrYWRk
 cmVzcykgeworKyAgaWYgKHNvY2thZGRyZXNzID09IE5VTEwpIHsKKysgICAgTE9HX0VSUk9SKCJD
 YW5ub3Qgd29yayBvbiBOVUxMIHNvY2thZGRyZXNzIik7CisrICAgIHJldHVybiBzdGQ6OnN0cmlu
 ZygpOworKyAgfQorKworKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKKysgIG9zcyA8PCBnZXRJ
 cFN0cmluZyhzb2NrYWRkcmVzcyk7CisrICBvc3MgPDwgIjoiOworKyAgb3NzIDw8IGdldFBvcnQo
 c29ja2FkZHJlc3MpOworKyAgcmV0dXJuIG9zcy5zdHIoKTsKKyt9CitkaWZmIC1ydU4gbGliL2F0
 c2NwcGFwaS9zcmMvdXRpbHNfaW50ZXJuYWwuY2MgbGliL2F0c2NwcGFwaS9zcmMvdXRpbHNfaW50
 ZXJuYWwuY2MKKy0tLSBsaWIvYXRzY3BwYXBpL3NyYy91dGlsc19pbnRlcm5hbC5jYwkxOTcwLTAx
 LTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9hdHNjcHBhcGkvc3JjL3V0aWxz
 X2ludGVybmFsLmNjCTIwMTMtMTEtMTEgMTQ6MDM6MTIuNzA0NTMyNTgyICswODAwCitAQCAtMCww
 ICsxLDI0NCBAQAorKy8qKgorKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu
 ZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFn
 cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisrICBkaXN0cmlidXRlZCB3aXRoIHRoaXMg
 d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKyAgdG8geW91IHVuZGVyIHRo
 ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKyAgIkxpY2Vuc2UiKTsgeW91IG1h
 eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorKyAgd2l0aCB0aGUgTGlj
 ZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKworKyAgICAg
 IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKworKyAgVW5sZXNz
 IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
 d2FyZQorKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
 YW4gIkFTIElTIiBCQVNJUywKKysgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
 IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKyAgU2VlIHRoZSBMaWNlbnNl
 IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKyAg
 bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisrICovCisrCisrLyoqCisrICogQGZpbGUg
 dXRpbHNfaW50ZXJuYWwuY2MKKysgKi8KKysjaW5jbHVkZSAidXRpbHNfaW50ZXJuYWwuaCIKKysj
 aW5jbHVkZSA8Y2Fzc2VydD4KKysjaW5jbHVkZSA8dHMvdHMuaD4KKysjaW5jbHVkZSA8cHRocmVh
 ZC5oPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjYXNzZXJ0PgorKyNpbmNsdWRl
 IDxjc3RkZGVmPgorKyNpbmNsdWRlICJhdHNjcHBhcGkvUGx1Z2luLmgiCisrI2luY2x1ZGUgImF0
 c2NwcGFwaS9HbG9iYWxQbHVnaW4uaCIKKysjaW5jbHVkZSAiYXRzY3BwYXBpL1RyYW5zYWN0aW9u
 LmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS9UcmFuc2FjdGlvblBsdWdpbi5oIgorKyNpbmNsdWRl
 ICJhdHNjcHBhcGkvVHJhbnNmb3JtYXRpb25QbHVnaW4uaCIKKysjaW5jbHVkZSAiSW5pdGlhbGl6
 YWJsZVZhbHVlLmgiCisrI2luY2x1ZGUgImF0c2NwcGFwaS91dGlscy5oIgorKyNpbmNsdWRlICJs
 b2dnaW5nX2ludGVybmFsLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGF0c2NwcGFwaTsKKysKKytu
 YW1lc3BhY2UgeworKworKy8vIFRoaXMgaXMgdGhlIGhpZ2hlc3QgdHhuIGFyZyB0aGF0IGNhbiBi
 ZSB1c2VkLCB3ZSBjaG9vc2UgdGhpcworKy8vIHZhbHVlIHRvIG1pbmltaXplIHRoZSBsaWtlbGlo
 b29kIG9mIGl0IGNhdXNpbmcgYW55IHByb2JsZW1zLgorK2NvbnN0IGludCBNQVhfVFhOX0FSRyA9
 IDE1OworK2NvbnN0IGludCBUUkFOU0FDVElPTl9TVE9SQUdFX0lOREVYID0gTUFYX1RYTl9BUkc7
 CisrCisraW50IGhhbmRsZVRyYW5zYWN0aW9uRXZlbnRzKFRTQ29udCBjb250LCBUU0V2ZW50IGV2
 ZW50LCB2b2lkICplZGF0YSkgeworKyAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGhlcmUgdG8g
 Y2xlYW4gdXAgVHJhbnNhY3Rpb24gb2JqZWN0cworKyAgVFNIdHRwVHhuIGF0c190eG5faGFuZGxl
 ID0gc3RhdGljX2Nhc3Q8VFNIdHRwVHhuPihlZGF0YSk7CisrICBUcmFuc2FjdGlvbiAmdHJhbnNh
 Y3Rpb24gPSB1dGlsczo6aW50ZXJuYWw6OmdldFRyYW5zYWN0aW9uKGF0c190eG5faGFuZGxlKTsK
 KysgIExPR19ERUJVRygiR290IGV2ZW50ICVkIG9uIGNvbnRpbnVhdGlvbiAlcCBmb3IgdHJhbnNh
 Y3Rpb24gKGF0cyBwb2ludGVyICVwLCBvYmplY3QgJXApIiwgZXZlbnQsIGNvbnQsCisrICAgICAg
 ICAgICAgYXRzX3R4bl9oYW5kbGUsICZ0cmFuc2FjdGlvbik7CisrCisrICBzd2l0Y2ggKGV2ZW50
 KSB7CisrICBjYXNlIFRTX0VWRU5UX0hUVFBfUE9TVF9SRU1BUDoKKysgICAgdHJhbnNhY3Rpb24u
 Z2V0Q2xpZW50UmVxdWVzdCgpLmdldFVybCgpLnJlc2V0KCk7CisrICAgIGJyZWFrOworKyAgY2Fz
 ZSBUU19FVkVOVF9IVFRQX1NFTkRfUkVRVUVTVF9IRFI6CisrICAgIHV0aWxzOjppbnRlcm5hbDo6
 aW5pdFRyYW5zYWN0aW9uU2VydmVyUmVxdWVzdCh0cmFuc2FjdGlvbik7CisrICAgIGJyZWFrOwor
 KyAgY2FzZSBUU19FVkVOVF9IVFRQX1JFQURfUkVTUE9OU0VfSERSOgorKyAgICB1dGlsczo6aW50
 ZXJuYWw6OmluaXRUcmFuc2FjdGlvblNlcnZlclJlc3BvbnNlKHRyYW5zYWN0aW9uKTsKKysgICAg
 YnJlYWs7CisrICBjYXNlIFRTX0VWRU5UX0hUVFBfU0VORF9SRVNQT05TRV9IRFI6CisrICAgIHV0
 aWxzOjppbnRlcm5hbDo6aW5pdFRyYW5zYWN0aW9uQ2xpZW50UmVzcG9uc2UodHJhbnNhY3Rpb24p
 OworKyAgICBicmVhazsKKysgIGNhc2UgVFNfRVZFTlRfSFRUUF9UWE5fQ0xPU0U6CisrICAgIHsg
 Ly8gb3BlbmluZyBzY29wZSB0byBkZWNsYXJlIHBsdWdpbnMgdmFyaWFibGUgYmVsb3cgCisrICAg
 ICAgY29uc3Qgc3RkOjpsaXN0PFRyYW5zYWN0aW9uUGx1Z2luICo+ICZwbHVnaW5zID0gdXRpbHM6
 OmludGVybmFsOjpnZXRUcmFuc2FjdGlvblBsdWdpbnModHJhbnNhY3Rpb24pOworKyAgICAgIGZv
 ciAoc3RkOjpsaXN0PFRyYW5zYWN0aW9uUGx1Z2luICo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
 cGx1Z2lucy5iZWdpbigpLCBlbmQgPSBwbHVnaW5zLmVuZCgpOworKyAgICAgICAgICAgaXRlciAh
 PSBlbmQ7ICsraXRlcikgeworKyAgICAgICAgc2hhcmVkX3B0cjxNdXRleD4gdHJhbnNfbXV0ZXgg
 PSB1dGlsczo6aW50ZXJuYWw6OmdldFRyYW5zYWN0aW9uUGx1Z2luTXV0ZXgoKippdGVyKTsKKysg
 ICAgICAgIExPR19ERUJVRygiTG9ja2luZyBUcmFuc2FjaXRvblBsdWdpbiBtdXRleCB0byBkZWxl
 dGUgdHJhbnNhY3Rpb24gcGx1Z2luIGF0ICVwIiwgKml0ZXIpOworKyAgICAgICAgdHJhbnNfbXV0
 ZXgtPmxvY2soKTsKKysgICAgICAgIExPR19ERUJVRygiTG9ja2VkIE11dGV4Li4uRGVsZXRpbmcg
 dHJhbnNhY3Rpb24gcGx1Z2luIGF0ICVwIiwgKml0ZXIpOworKyAgICAgICAgZGVsZXRlICppdGVy
 OworKyAgICAgICAgdHJhbnNfbXV0ZXgtPnVubG9jaygpOworKyAgICAgIH0KKysgICAgICBkZWxl
 dGUgJnRyYW5zYWN0aW9uOworKyAgICB9CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAg
 YXNzZXJ0KGZhbHNlKTsgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisrICAgIGJyZWFr
 OworKyAgfSAgICAKKysgIFRTSHR0cFR4blJlZW5hYmxlKGF0c190eG5faGFuZGxlLCBUU19FVkVO
 VF9IVFRQX0NPTlRJTlVFKTsKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkIHNldHVwVHJhbnNh
 Y3Rpb25NYW5hZ2VtZW50KCkgeworKyAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBhIGNsZWFudXAg
 aGFuZGxlciBhdmFpbGFibGUKKysgIFRTTXV0ZXggbXV0ZXggPSBOVUxMOworKyAgVFNDb250IGNv
 bnQgPSBUU0NvbnRDcmVhdGUoaGFuZGxlVHJhbnNhY3Rpb25FdmVudHMsIG11dGV4KTsKKysgIFRT
 SHR0cEhvb2tBZGQoVFNfSFRUUF9QT1NUX1JFTUFQX0hPT0ssIGNvbnQpOworKyAgVFNIdHRwSG9v
 a0FkZChUU19IVFRQX1NFTkRfUkVRVUVTVF9IRFJfSE9PSywgY29udCk7CisrICBUU0h0dHBIb29r
 QWRkKFRTX0hUVFBfUkVBRF9SRVNQT05TRV9IRFJfSE9PSywgY29udCk7CisrICBUU0h0dHBIb29r
 QWRkKFRTX0hUVFBfU0VORF9SRVNQT05TRV9IRFJfSE9PSywgY29udCk7CisrICBUU0h0dHBIb29r
 QWRkKFRTX0hUVFBfVFhOX0NMT1NFX0hPT0ssIGNvbnQpOworKyNpZm5kZWYgRElTQUJMRV9UUkFO
 U0FDVElPTl9EQVRBX0NBQ0hJTkcKKysgIHRyYW5zYWN0aW9uX2RhdGFfY2FjaGluZ19lbmFibGVk
 ID0gKGdldGVudih1dGlsczo6RElTQUJMRV9EQVRBX0NBQ0hJTkdfRU5WX0ZMQUcuY19zdHIoKSkg
 PT0gTlVMTCk7CisrI2VuZGlmCisrICBMT0dfREVCVUcoIkluaXRpYWxpemVkIHRyYW5zYWN0aW9u
 IG1hbmFnZW1lbnQgd2l0aCBkYXRhIGNhY2hpbmcgJXMiLAorKyAgICAgICAgICAgICh0cmFuc2Fj
 dGlvbl9kYXRhX2NhY2hpbmdfZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKysg
 IC8vIFRPRE8gaXMgZXhpc3RlbmNlIG9mIGVudiB2YXJpYWJsZSBlbm91Z2ggb3Igc2hvdWxkIHdl
 IGV4cGVjdCBhIHNwZWNpZmljIHZhbHVlPworK30KKysKKyt2b2lkIGlubGluZSBpbnZva2VQbHVn
 aW5Gb3JFdmVudChQbHVnaW4gKnBsdWdpbiwgVFNIdHRwVHhuIGF0c190eG5faGFuZGxlLCBUU0V2
 ZW50IGV2ZW50KSB7CisrICBUcmFuc2FjdGlvbiAmdHJhbnNhY3Rpb24gPSB1dGlsczo6aW50ZXJu
 YWw6OmdldFRyYW5zYWN0aW9uKGF0c190eG5faGFuZGxlKTsKKysgIHN3aXRjaCAoZXZlbnQpIHsK
 KysgIGNhc2UgVFNfRVZFTlRfSFRUUF9QUkVfUkVNQVA6CisrICAgIHBsdWdpbi0+aGFuZGxlUmVh
 ZFJlcXVlc3RIZWFkZXJzUHJlUmVtYXAodHJhbnNhY3Rpb24pOworKyAgICBicmVhazsKKysgIGNh
 c2UgVFNfRVZFTlRfSFRUUF9QT1NUX1JFTUFQOgorKyAgICBwbHVnaW4tPmhhbmRsZVJlYWRSZXF1
 ZXN0SGVhZGVyc1Bvc3RSZW1hcCh0cmFuc2FjdGlvbik7CisrICAgIGJyZWFrOworKyAgY2FzZSBU
 U19FVkVOVF9IVFRQX1NFTkRfUkVRVUVTVF9IRFI6CisrICAgIHBsdWdpbi0+aGFuZGxlU2VuZFJl
 cXVlc3RIZWFkZXJzKHRyYW5zYWN0aW9uKTsKKysgICAgYnJlYWs7CisrICBjYXNlIFRTX0VWRU5U
 X0hUVFBfUkVBRF9SRVNQT05TRV9IRFI6CisrICAgIHBsdWdpbi0+aGFuZGxlUmVhZFJlc3BvbnNl
 SGVhZGVycyh0cmFuc2FjdGlvbik7CisrICAgIGJyZWFrOworKyAgY2FzZSBUU19FVkVOVF9IVFRQ
 X1NFTkRfUkVTUE9OU0VfSERSOgorKyAgICBwbHVnaW4tPmhhbmRsZVNlbmRSZXNwb25zZUhlYWRl
 cnModHJhbnNhY3Rpb24pOworKyAgICBicmVhazsKKysgIGNhc2UgVFNfRVZFTlRfSFRUUF9PU19E
 TlM6CisrICAgIHBsdWdpbi0+aGFuZGxlT3NEbnModHJhbnNhY3Rpb24pOworKyAgICBicmVhazsK
 KysgIGRlZmF1bHQ6CisrICAgIGFzc2VydChmYWxzZSk7IC8qIHdlIHNob3VsZCBuZXZlciBnZXQg
 aGVyZSAqLworKyAgICBicmVhazsKKysgIH0KKyt9CisrCisrfSAvKiBhbm9ueW1vdXMgbmFtZXNw
 YWNlICovCisrCisrVHJhbnNhY3Rpb24gJnV0aWxzOjppbnRlcm5hbDo6Z2V0VHJhbnNhY3Rpb24o
 VFNIdHRwVHhuIGF0c190eG5faGFuZGxlKSB7CisrICBUcmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24g
 PSBzdGF0aWNfY2FzdDxUcmFuc2FjdGlvbiAqPihUU0h0dHBUeG5BcmdHZXQoYXRzX3R4bl9oYW5k
 bGUsIFRSQU5TQUNUSU9OX1NUT1JBR0VfSU5ERVgpKTsKKysgIGlmICghdHJhbnNhY3Rpb24pIHsK
 KysgICAgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oc3RhdGljX2Nhc3Q8dm9pZCAqPihh
 dHNfdHhuX2hhbmRsZSkpOworKyAgICBMT0dfREVCVUcoIkNyZWF0ZWQgbmV3IHRyYW5zYWN0aW9u
 IG9iamVjdCBhdCAlcCBmb3IgYXRzIHBvaW50ZXIgJXAiLCB0cmFuc2FjdGlvbiwgYXRzX3R4bl9o
 YW5kbGUpOworKyAgICBUU0h0dHBUeG5BcmdTZXQoYXRzX3R4bl9oYW5kbGUsIFRSQU5TQUNUSU9O
 X1NUT1JBR0VfSU5ERVgsIHRyYW5zYWN0aW9uKTsKKysgIH0KKysgIHJldHVybiAqdHJhbnNhY3Rp
 b247CisrfQorKworK3NoYXJlZF9wdHI8TXV0ZXg+IHV0aWxzOjppbnRlcm5hbDo6Z2V0VHJhbnNh
 Y3Rpb25QbHVnaW5NdXRleChUcmFuc2FjdGlvblBsdWdpbiAmdHJhbnNhY3Rpb25fcGx1Z2luKSB7
 CisrICByZXR1cm4gdHJhbnNhY3Rpb25fcGx1Z2luLmdldE11dGV4KCk7CisrfQorKworK1RTSHR0
 cEhvb2tJRCB1dGlsczo6aW50ZXJuYWw6OmNvbnZlcnRJbnRlcm5hbEhvb2tUb1RzSG9vayhQbHVn
 aW46Okhvb2tUeXBlIGhvb2t0eXBlKSB7CisrICBzd2l0Y2ggKGhvb2t0eXBlKSB7CisrICBjYXNl
 IFBsdWdpbjo6SE9PS19SRUFEX1JFUVVFU1RfSEVBREVSU19QT1NUX1JFTUFQOgorKyAgICByZXR1
 cm4gVFNfSFRUUF9QT1NUX1JFTUFQX0hPT0s7CisrICBjYXNlIFBsdWdpbjo6SE9PS19SRUFEX1JF
 UVVFU1RfSEVBREVSU19QUkVfUkVNQVA6CisrICAgIHJldHVybiBUU19IVFRQX1BSRV9SRU1BUF9I
 T09LOworKyAgY2FzZSBQbHVnaW46OkhPT0tfUkVBRF9SRVNQT05TRV9IRUFERVJTOgorKyAgICBy
 ZXR1cm4gVFNfSFRUUF9SRUFEX1JFU1BPTlNFX0hEUl9IT09LOworKyAgY2FzZSBQbHVnaW46OkhP
 T0tfU0VORF9SRVFVRVNUX0hFQURFUlM6CisrICAgIHJldHVybiBUU19IVFRQX1NFTkRfUkVRVUVT
 VF9IRFJfSE9PSzsKKysgIGNhc2UgUGx1Z2luOjpIT09LX1NFTkRfUkVTUE9OU0VfSEVBREVSUzoK
 KysgICAgcmV0dXJuIFRTX0hUVFBfU0VORF9SRVNQT05TRV9IRFJfSE9PSzsKKysgIGNhc2UgUGx1
 Z2luOjpIT09LX09TX0ROUzoKKysgICAgcmV0dXJuIFRTX0hUVFBfT1NfRE5TX0hPT0s7CisrICBk
 ZWZhdWx0OgorKyAgICBhc3NlcnQoZmFsc2UpOyAvLyBzaG91bGRuJ3QgaGFwcGVuLCBsZXQncyBj
 YXRjaCBpdCBlYXJseQorKyAgICBicmVhazsKKysgIH0KKysgIHJldHVybiBzdGF0aWNfY2FzdDxU
 U0h0dHBIb29rSUQ+KC0xKTsKKyt9CisrCisrVFNIdHRwSG9va0lEIHV0aWxzOjppbnRlcm5hbDo6
 Y29udmVydEludGVybmFsVHJhbnNmb3JtYXRpb25UeXBlVG9Uc0hvb2soVHJhbnNmb3JtYXRpb25Q
 bHVnaW46OlR5cGUgdHlwZSkgeworKyAgc3dpdGNoICh0eXBlKSB7CisrICAgIGNhc2UgVHJhbnNm
 b3JtYXRpb25QbHVnaW46OlJFU1BPTlNFX1RSQU5TRk9STUFUSU9OOgorKyAgICAgIHJldHVybiBU
 U19IVFRQX1JFU1BPTlNFX1RSQU5TRk9STV9IT09LOworKyAgICBjYXNlIFRyYW5zZm9ybWF0aW9u
 UGx1Z2luOjpSRVFVRVNUX1RSQU5TRk9STUFUSU9OOgorKyAgICAgIHJldHVybiBUU19IVFRQX1JF
 UVVFU1RfVFJBTlNGT1JNX0hPT0s7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYXNzZXJ0KGZhbHNl
 KTsgLy8gc2hvdWxkbid0IGhhcHBlbiwgbGV0J3MgY2F0Y2ggaXQgZWFybHkKKysgICAgICBicmVh
 azsKKysgIH0KKysgIHJldHVybiBzdGF0aWNfY2FzdDxUU0h0dHBIb29rSUQ+KC0xKTsKKyt9Cisr
 Cisrdm9pZCB1dGlsczo6aW50ZXJuYWw6Omludm9rZVBsdWdpbkZvckV2ZW50KFRyYW5zYWN0aW9u
 UGx1Z2luICpwbHVnaW4sIFRTSHR0cFR4biBhdHNfdHhuX2hhbmRsZSwgVFNFdmVudCBldmVudCkg
 eworKyAgU2NvcGVkU2hhcmVkTXV0ZXhMb2NrIHNjb3BlZExvY2socGx1Z2luLT5nZXRNdXRleCgp
 KTsKKysgIDo6aW52b2tlUGx1Z2luRm9yRXZlbnQoc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHBsdWdp
 biksIGF0c190eG5faGFuZGxlLCBldmVudCk7CisrfQorKworK3ZvaWQgdXRpbHM6OmludGVybmFs
 OjppbnZva2VQbHVnaW5Gb3JFdmVudChHbG9iYWxQbHVnaW4gKnBsdWdpbiwgVFNIdHRwVHhuIGF0
 c190eG5faGFuZGxlLCBUU0V2ZW50IGV2ZW50KSB7CisrICA6Omludm9rZVBsdWdpbkZvckV2ZW50
 KHN0YXRpY19jYXN0PFBsdWdpbiAqPihwbHVnaW4pLCBhdHNfdHhuX2hhbmRsZSwgZXZlbnQpOwor
 K30KKysKKytzdGQ6OnN0cmluZyB1dGlsczo6aW50ZXJuYWw6OmNvbnN1bWVGcm9tVFNJT0J1ZmZl
 clJlYWRlcihUU0lPQnVmZmVyUmVhZGVyIHJlYWRlcikgeworKyAgc3RkOjpzdHJpbmcgc3RyOwor
 KyAgaW50IGF2YWlsID0gVFNJT0J1ZmZlclJlYWRlckF2YWlsKHJlYWRlcik7CisrCisrICBpZiAo
 YXZhaWwgIT0gVFNfRVJST1IpIHsKKysgICAgaW50IGNvbnN1bWVkID0gMDsKKysgICAgaWYgKGF2
 YWlsID4gMCkgeworKyAgICAgIHN0ci5yZXNlcnZlKGF2YWlsICsgMSk7CisrCisrICAgICAgaW50
 NjRfdCBkYXRhX2xlbjsKKysgICAgICBjb25zdCBjaGFyICpjaGFyX2RhdGE7CisrICAgICAgVFNJ
 T0J1ZmZlckJsb2NrIGJsb2NrID0gVFNJT0J1ZmZlclJlYWRlclN0YXJ0KHJlYWRlcik7CisrICAg
 ICAgd2hpbGUgKGJsb2NrICE9IE5VTEwpIHsKKysgICAgICAgIGNoYXJfZGF0YSA9IFRTSU9CdWZm
 ZXJCbG9ja1JlYWRTdGFydChibG9jaywgcmVhZGVyLCAmZGF0YV9sZW4pOworKyAgICAgICAgc3Ry
 LmFwcGVuZChjaGFyX2RhdGEsIGRhdGFfbGVuKTsKKysgICAgICAgIGNvbnN1bWVkICs9IGRhdGFf
 bGVuOworKyAgICAgICAgYmxvY2sgPSBUU0lPQnVmZmVyQmxvY2tOZXh0KGJsb2NrKTsKKysgICAg
 ICB9CisrICAgIH0KKysgICAgVFNJT0J1ZmZlclJlYWRlckNvbnN1bWUocmVhZGVyLCBjb25zdW1l
 ZCk7CisrICB9IGVsc2UgeworKyAgICBMT0dfRVJST1IoIlRTSU9CdWZmZXJSZWFkZXJBdmFpbCBy
 ZXR1cm5lZCBlcnJvciBjb2RlICVkIGZvciByZWFkZXIgJXAiLCBhdmFpbCwgcmVhZGVyKTsKKysg
 IH0KKysKKysgIHJldHVybiBzdHI7CisrfQorKworKworK0h0dHBWZXJzaW9uIHV0aWxzOjppbnRl
 cm5hbDo6Z2V0SHR0cFZlcnNpb24oVFNNQnVmZmVyIGhkcl9idWYsIFRTTUxvYyBoZHJfbG9jKSB7
 CisrICBpbnQgdmVyc2lvbiA9IFRTSHR0cEhkclZlcnNpb25HZXQoaGRyX2J1ZiwgaGRyX2xvYyk7
 CisrICBpZiAodmVyc2lvbiAhPSBUU19FUlJPUikgeworKyAgICBpZiAoKFRTX0hUVFBfTUFKT1Io
 dmVyc2lvbikgPT0gMCkgJiYgKFRTX0hUVFBfTUlOT1IodmVyc2lvbikgPT0gMCkpIHsKKysgICAg
 ICByZXR1cm4gSFRUUF9WRVJTSU9OXzBfOTsKKysgICAgfQorKyAgICBpZiAoKFRTX0hUVFBfTUFK
 T1IodmVyc2lvbikgPT0gMSkgJiYgKFRTX0hUVFBfTUlOT1IodmVyc2lvbikgPT0gMCkpIHsKKysg
 ICAgICByZXR1cm4gSFRUUF9WRVJTSU9OXzFfMDsKKysgICAgfQorKyAgICBpZiAoKFRTX0hUVFBf
 TUFKT1IodmVyc2lvbikgPT0gMSkgJiYgKFRTX0hUVFBfTUlOT1IodmVyc2lvbikgPT0gMSkpIHsK
 KysgICAgICByZXR1cm4gSFRUUF9WRVJTSU9OXzFfMTsKKysgICAgfSBlbHNlIHsKKysgICAgICBM
 T0dfRVJST1IoIlVucmVjb2duaXplZCB2ZXJzaW9uICVkIiwgdmVyc2lvbik7CisrICAgIH0KKysg
 IH0gZWxzZSB7CisrICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCB2ZXJzaW9uOyBoZHJfYnVm
 ICVwLCBoZHJfbG9jICVwIiwgaGRyX2J1ZiwgaGRyX2xvYyk7CisrICB9CisrICByZXR1cm4gSFRU
 UF9WRVJTSU9OX1VOS05PV047CisrfQorKworK3ZvaWQgdXRpbHM6OmludGVybmFsOjppbml0VHJh
 bnNhY3Rpb25NYW5hZ2VtZW50KCkgeworKyAgc3RhdGljIHB0aHJlYWRfb25jZV90IHNldHVwX3B0
 aHJlYWRfb25jZV9jb250cm9sID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisrICBwdGhyZWFkX29uY2Uo
 JnNldHVwX3B0aHJlYWRfb25jZV9jb250cm9sLCBzZXR1cFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7
 CisrfQorZGlmZiAtcnVOIGxpYi9jcHAxMWFwaS9NYWtlZmlsZS5hbSBsaWIvY3BwMTFhcGkvTWFr
 ZWZpbGUuYW0KKy0tLSBsaWIvY3BwMTFhcGkvTWFrZWZpbGUuYW0JMjAxMy0xMS0xMSAxNDowMjo1
 My4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvY3BwMTFhcGkvTWFrZWZpbGUuYW0JMTk3MC0wMS0w
 MSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDM3ICswLDAgQEAKKy0jIE1ha2VmaWxl
 LmFtIGZvciBDKysxMSBBUEkKKy0jCistIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2Fy
 ZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorLSMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGlj
 ZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorLSMgIGRpc3RyaWJ1dGVkIHdp
 dGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCistIyAgcmVnYXJkaW5nIGNv
 cHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorLSMgIHRvIHlv
 dSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKy0jICAiTGljZW5z
 ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCistIyAg
 d2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
 dAorLSMKKy0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
 CistIworLSMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
 aW4gd3JpdGluZywgc29mdHdhcmUKKy0jICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
 cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLSMgIFdJVEhPVVQgV0FSUkFOVElF
 UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
 LSMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
 ZXJtaXNzaW9ucyBhbmQKKy0jICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0KKy1p
 bmNsdWRlZGlyPSQocHJlZml4KS9pbmNsdWRlL3RzCistCistQU1fQ1BQRkxBR1MgPSAtSSQodG9w
 X2J1aWxkZGlyKS9wcm94eS9hcGkvdHMKKy0gIAorLWlmIEJVSUxEX0hBVkVfQ1hYXzExCistCist
 aWYgQlVJTERfSEFWRV9MSUJDWFgKKy1BTV9DWFhGTEFHUyArPSAtc3RkbGliPWxpYmMrKworLWVu
 ZGlmCistCistbGliX0xUTElCUkFSSUVTID0gbGliYXRzY3BwMTFhcGkubGEKKy0KKy1saWJhdHNj
 cHAxMWFwaV9sYV9TT1VSQ0VTID0gXAorLSAgY3BwMTFhcGkuY2MKKy0gIAorLWluY2x1ZGVfSEVB
 REVSUyA9IFwKKy0gIHRzLWNwcDExLmggdHMtY3BwMTEtaGVhZGVycy5oCistCistZW5kaWYgIyBC
 VUlMRF9IQVZFX0NYWF8xMQorZGlmZiAtcnVOIGxpYi9jcHAxMWFwaS9NYWtlZmlsZS5pbiBsaWIv
 Y3BwMTFhcGkvTWFrZWZpbGUuaW4KKy0tLSBsaWIvY3BwMTFhcGkvTWFrZWZpbGUuaW4JMjAxMy0x
 MS0xMSAxNDowMjo1My4wMDAwMDAwMDAgKzA4MDAKKysrKyBsaWIvY3BwMTFhcGkvTWFrZWZpbGUu
 aW4JMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDkxMSArMCwwIEBA
 CistIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMy40IGZyb20gTWFrZWZp
 bGUuYW0uCistIyBAY29uZmlndXJlX2lucHV0QAorLQorLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIw
 MTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistIyBUaGlzIE1ha2VmaWxlLmlu
 IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy0jIGdpdmVz
 IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCistIyB3
 aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBw
 cmVzZXJ2ZWQuCistCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
 dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8g
 dGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CistIyBldmVuIHRoZSBpbXBsaWVk
 IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCistIyBQQVJUSUNV
 TEFSIFBVUlBPU0UuCistCistQFNFVF9NQUtFQAorLQorLSMgTWFrZWZpbGUuYW0gZm9yIEMrKzEx
 IEFQSQorLSMKKy0jICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24g
 KEFTRikgdW5kZXIgb25lCistIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVu
 dHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCistIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsg
 Zm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKy0jICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVy
 c2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCistIyAgdG8geW91IHVuZGVyIHRoZSBB
 cGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorLSMgICJMaWNlbnNlIik7IHlvdSBtYXkg
 bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKy0jICB3aXRoIHRoZSBMaWNl
 bnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CistIworLSMgICAg
 ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy0jCistIyAgVW5s
 ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
 b2Z0d2FyZQorLSMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
 IG9uIGFuICJBUyBJUyIgQkFTSVMsCistIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
 TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCistIyAgU2VlIHRoZSBM
 aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
 ZAorLSMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLQorLQorLVZQQVRIID0gQHNy
 Y2RpckAKKy1hbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0
 ZXN0IC1uICckKE1BS0VMRVZFTCknCistYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwK
 Ky0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKy0gICAgICA/KSA7OyBcCistICAgICAg
 KikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGlu
 dmFsaWQiIFwKKy0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9u
 LX0nIHNwZWNpZmllZCIgPiYyOyBcCistICAgICAgICAgZXhpdCAxOzsgXAorLSAgZXNhYzsgXAor
 LSAgaGFzX29wdD1ubzsgXAorLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKy0gIGlm
 ICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCistICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdT
 OyBcCistICBlbHNlIFwKKy0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCistICAgICAgKlxcW1wg
 XAldKikgXAorLSAgICAgICAgYnM9XFw7IFwKKy0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmlu
 dGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1sk
 JGJzICQkYnMJXSovL2ciYDs7IFwKKy0gICAgZXNhYzsgXAorLSAgZmk7IFwKKy0gIHNraXBfbmV4
 dD1ubzsgXAorLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAorLSAgeyBcCistICAgIGZsZz1gcHJpbnRm
 ICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCistICB9OyBcCistICBmb3Ig
 ZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKy0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHll
 cyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKy0gICAgY2FzZSAkJGZsZyBpbiBc
 CistICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCistICAgICAgICAtKkkpIHN0cmlwX3RyYWls
 b3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKy0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQg
 J0knOzsgXAorLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7
 OyBcCistICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKy0gICAgICAgIC0qbCkg
 c3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorLSAgICAgIC0qbD8qKSBzdHJp
 cF90cmFpbG9wdCAnbCc7OyBcCistICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKy0g
 ICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKy0gICAgZXNhYzsgXAorLSAgICBjYXNlICQk
 ZmxnIGluIFwKKy0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsg
 XAorLSAgICBlc2FjOyBcCistICBkb25lOyBcCistICB0ZXN0ICQkaGFzX29wdCA9IHllcworLWFt
 X19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRo
 X29wdGlvbikpCistYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9f
 bWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKKy1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGly
 KS9AUEFDS0FHRUAKKy1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NF
 UEFSQVRPUikiICYmIGNkCistaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2
 NDQKKy1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCistaW5zdGFsbF9zaF9T
 Q1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCistSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFU
 QSkKKy10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCistTk9STUFMX0lOU1RB
 TEwgPSA6CistUFJFX0lOU1RBTEwgPSA6CistUE9TVF9JTlNUQUxMID0gOgorLU5PUk1BTF9VTklO
 U1RBTEwgPSA6CistUFJFX1VOSU5TVEFMTCA9IDoKKy1QT1NUX1VOSU5TVEFMTCA9IDoKKy1idWls
 ZF90cmlwbGV0ID0gQGJ1aWxkQAorLWhvc3RfdHJpcGxldCA9IEBob3N0QAorLUBCVUlMRF9IQVZF
 X0NYWF8xMV9UUlVFQEBCVUlMRF9IQVZFX0xJQkNYWF9UUlVFQGFtX19hcHBlbmRfMSA9IC1zdGRs
 aWI9bGliYysrCistc3ViZGlyID0gbGliL2NwcDExYXBpCistRElTVF9DT01NT04gPSAkKHNyY2Rp
 cikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKy0JJCh0b3Bfc3JjZGlyKS9i
 dWlsZC9hdXgvZGVwY29tcCAkKGFtX19pbmNsdWRlX0hFQURFUlNfRElTVCkKKy1BQ0xPQ0FMX000
 ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CistYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9w
 X3NyY2RpcikvYnVpbGQvYXhfYm9vc3RfYmFzZS5tNCBcCistCSQodG9wX3NyY2RpcikvYnVpbGQv
 YXhfY29tcGFyZV92ZXJzaW9uLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9idWlsZC9heF9jb21waWxl
 cl92ZW5kb3IubTQgXAorLQkkKHRvcF9zcmNkaXIpL2J1aWxkL2F4X2N4eF9jb21waWxlX3N0ZGN4
 eF8xMS5tNCBcCistCSQodG9wX3NyY2RpcikvYnVpbGQvYXhfbGliX2N1cmwubTQgXAorLQkkKHRv
 cF9zcmNkaXIpL2J1aWxkL2F4X2xpYl9yZWFkbGluZS5tNCBcCistCSQodG9wX3NyY2RpcikvYnVp
 bGQvYXhfcGF0aF9nZW5lcmljLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9idWlsZC9heF9wZXJsX21v
 ZHVsZXMubTQgXAorLQkkKHRvcF9zcmNkaXIpL2J1aWxkL2F4X3dpdGhfY3Vyc2VzLm00IFwKKy0J
 JCh0b3Bfc3JjZGlyKS9idWlsZC9jb21tb24ubTQgJCh0b3Bfc3JjZGlyKS9idWlsZC9jcnlwdG8u
 bTQgXAorLQkkKHRvcF9zcmNkaXIpL2J1aWxkL2plbWFsbG9jLm00ICQodG9wX3NyY2RpcikvYnVp
 bGQvbGlidG9vbC5tNCBcCistCSQodG9wX3NyY2RpcikvYnVpbGQvbHRvcHRpb25zLm00IFwKKy0J
 JCh0b3Bfc3JjZGlyKS9idWlsZC9sdHN1Z2FyLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9idWlsZC9s
 dHZlcnNpb24ubTQgXAorLQkkKHRvcF9zcmNkaXIpL2J1aWxkL2x0fm9ic29sZXRlLm00ICQodG9w
 X3NyY2RpcikvYnVpbGQvbHVhLm00IFwKKy0JJCh0b3Bfc3JjZGlyKS9idWlsZC9sem1hLm00ICQo
 dG9wX3NyY2RpcikvYnVpbGQvbmV0d29yay5tNCBcCistCSQodG9wX3NyY2RpcikvYnVpbGQvcGNy
 ZS5tNCAkKHRvcF9zcmNkaXIpL2J1aWxkL3BrZy5tNCBcCistCSQodG9wX3NyY2RpcikvYnVpbGQv
 dGNsLm00ICQodG9wX3NyY2RpcikvYnVpbGQvdGNtYWxsb2MubTQgXAorLQkkKHRvcF9zcmNkaXIp
 L2J1aWxkL3htbC5tNCAkKHRvcF9zcmNkaXIpL2J1aWxkL3psaWIubTQgXAorLQkkKHRvcF9zcmNk
 aXIpL2NvbmZpZ3VyZS5hYworLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRf
 ZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCistCSQoQUNMT0NBTF9NNCkKKy1ta2lu
 c3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWls
 ZGRpcikvbGliL3RzL2lua19hdXRvY29uZi5oCistQ09ORklHX0NMRUFOX0ZJTEVTID0KKy1DT05G
 SUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJp
 cD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworLWFtX192cGF0aF9hZGogPSBj
 YXNlICQkcCBpbiBcCistICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4k
 JHNyY2RpcnN0cmlwL3x8ImA7OyBcCistICAgICopIGY9JCRwOzsgXAorLSAgZXNhYzsKKy1hbV9f
 c3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CistYW1fX2luc3Rh
 bGxfbWF4ID0gNDAKKy1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorLSAgc3JjZGlyc3RyaXA9
 YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorLWFtX19u
 b2Jhc2Vfc3RyaXAgPSBcCistICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUg
 fCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKKy1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19u
 b2Jhc2Vfc3RyaXBfc2V0dXApOyBcCistICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAk
 JHAiOyBkb25lIHwgXAorLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMv
 IC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKy0gICQoQVdLKSAnQkVHSU4geyBm
 aWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKy0g
 ICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorLSAgICAgIHsgcHJpbnQg
 JCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKy0gICAg
 RU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworLWFtX19i
 YXNlX2xpc3QgPSBcCistICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47
 cy9cbi8gL2cnIHwgXAorLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworLWFt
 X191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKy0gIHRlc3QgLXogIiQkZmlsZXMiIFwK
 Ky0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0
 ICEgLXIgIiQkZGlyIjsgfSBcCistICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAt
 ZiIgJCRmaWxlcyAiKSI7IFwKKy0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAk
 JGZpbGVzOyB9OyBcCistICB9CistYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRp
 cikiICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIKKy1MVExJQlJBUklFUyA9ICQobGliX0xUTElC
 UkFSSUVTKQorLWxpYmF0c2NwcDExYXBpX2xhX0xJQkFERCA9CistYW1fX2xpYmF0c2NwcDExYXBp
 X2xhX1NPVVJDRVNfRElTVCA9IGNwcDExYXBpLmNjCistQEJVSUxEX0hBVkVfQ1hYXzExX1RSVUVA
 YW1fbGliYXRzY3BwMTFhcGlfbGFfT0JKRUNUUyA9IGNwcDExYXBpLmxvCistbGliYXRzY3BwMTFh
 cGlfbGFfT0JKRUNUUyA9ICQoYW1fbGliYXRzY3BwMTFhcGlfbGFfT0JKRUNUUykKKy1BTV9WX2x0
 ID0gJChhbV9fdl9sdF9AQU1fVkApCistYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVM
 VF9WQCkKKy1hbV9fdl9sdF8wID0gLS1zaWxlbnQKKy1hbV9fdl9sdF8xID0gCistQEJVSUxEX0hB
 VkVfQ1hYXzExX1RSVUVAYW1fbGliYXRzY3BwMTFhcGlfbGFfcnBhdGggPSAtcnBhdGggJChsaWJk
 aXIpCistQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKKy1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9A
 QU1fREVGQVVMVF9WQCkKKy1hbV9fdl9QXzAgPSBmYWxzZQorLWFtX192X1BfMSA9IDoKKy1BTV9W
 X0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKKy1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFN
 X0RFRkFVTFRfVkApCistYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CistYW1f
 X3ZfR0VOXzEgPSAKKy1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCistYW1fX3ZfYXRfID0g
 JChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKKy1hbV9fdl9hdF8wID0gQAorLWFtX192X2F0XzEg
 PSAKKy1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9s
 aWIvdHMKKy1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9idWlsZC9hdXgvZGVwY29t
 cAorLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCistYW1fX212ID0gbXYgLWYKKy1DWFhD
 T01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBc
 CistCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1Mp
 CistTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJ
 QlRPT0xGTEFHUykgXAorLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQo
 REVGUykgXAorLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1Mp
 ICQoQ1BQRkxBR1MpIFwKKy0JJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKKy1BTV9WX0NYWCA9
 ICQoYW1fX3ZfQ1hYX0BBTV9WQCkKKy1hbV9fdl9DWFhfID0gJChhbV9fdl9DWFhfQEFNX0RFRkFV
 TFRfVkApCistYW1fX3ZfQ1hYXzAgPSBAZWNobyAiICBDWFggICAgICIgJEA7CistYW1fX3ZfQ1hY
 XzEgPSAKKy1DWFhMRCA9ICQoQ1hYKQorLUNYWExJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkg
 LS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCistCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9
 bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCistCSQoQ1hYRkxBR1MpICQoQU1fTERGTEFH
 UykgJChMREZMQUdTKSAtbyAkQAorLUFNX1ZfQ1hYTEQgPSAkKGFtX192X0NYWExEX0BBTV9WQCkK
 Ky1hbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQorLWFtX192X0NY
 WExEXzAgPSBAZWNobyAiICBDWFhMRCAgICIgJEA7CistYW1fX3ZfQ1hYTERfMSA9IAorLVNPVVJD
 RVMgPSAkKGxpYmF0c2NwcDExYXBpX2xhX1NPVVJDRVMpCistRElTVF9TT1VSQ0VTID0gJChhbV9f
 bGliYXRzY3BwMTFhcGlfbGFfU09VUkNFU19ESVNUKQorLWFtX19jYW5fcnVuX2luc3RhbGxpbmZv
 ID0gXAorLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCistICAgIG58bm98Tk8pIGZh
 bHNlOzsgXAorLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYx
 OzsgXAorLSAgZXNhYworLWFtX19pbmNsdWRlX0hFQURFUlNfRElTVCA9IHRzLWNwcDExLmggdHMt
 Y3BwMTEtaGVhZGVycy5oCistSEVBREVSUyA9ICQoaW5jbHVkZV9IRUFERVJTKQorLWFtX190YWdn
 ZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCist
 IyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5k
 YXJkIGlucHV0LAorLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxp
 Y2F0ZXMuICBJbnB1dCBvcmRlciBpcworLSMgKm5vdCogcHJlc2VydmVkLgorLWFtX191bmlxdWlm
 eV9pbnB1dCA9ICQoQVdLKSAnXAorLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorLSAgeyBp
 dGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKy0gIEVORCB7IGlmIChub25lbXB0eSkg
 eyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorLScKKy0jIE1ha2Ugc3VyZSB0aGUg
 bGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCist
 IyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJD
 RVMgdmFyaWFibGVzCistIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KKy1hbV9f
 ZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAorLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVz
 KSc7IFwKKy0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCistICAgIGlmIHRlc3QgLWYg
 IiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorLSAg
 ZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKKy1FVEFHUyA9IGV0YWdzCistQ1RBR1MgPSBj
 dGFncworLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElO
 Rk9TKSAkKEVYVFJBX0RJU1QpCistcGtnZGF0YWRpciA9IEBwa2dkYXRhZGlyQAorLXBrZ2xpYmRp
 ciA9IEBwa2dsaWJkaXJACistcGtnbGliZXhlY2RpciA9IEBwa2dsaWJleGVjZGlyQAorLUFDTE9D
 QUwgPSBAQUNMT0NBTEAKKy1BTVRBUiA9IEBBTVRBUkAKKy1BTV9DRkxBR1MgPSBAQU1fQ0ZMQUdT
 QAorLUFNX0NYWEZMQUdTID0gQEFNX0NYWEZMQUdTQCAkKGFtX19hcHBlbmRfMSkKKy1BTV9ERUZB
 VUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKKy1BUElfREVGUyA9IEBBUElf
 REVGU0AKKy1BUiA9IEBBUkAKKy1BU0NQUCA9IEBBU0NQUEAKKy1BVVRPQ09ORiA9IEBBVVRPQ09O
 RkAKKy1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACistQVVUT01BS0UgPSBAQVVUT01BS0VACist
 QVdLID0gQEFXS0AKKy1CT09TVF9DUFBGTEFHUyA9IEBCT09TVF9DUFBGTEFHU0AKKy1CT09TVF9M
 REZMQUdTID0gQEJPT1NUX0xERkxBR1NACistQ0MgPSBAQ0NACistQ0NBQ0hFID0gQENDQUNIRUAK
 Ky1DQ0FTID0gQENDQVNACistQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACistQ0NBU0ZMQUdT
 ID0gQENDQVNGTEFHU0AKKy1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorLUNGTEFHUyA9IEBDRkxB
 R1NACistQ1BQID0gQENQUEAKKy1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKKy1DVVJMX0NGTEFHUyA9
 IEBDVVJMX0NGTEFHU0AKKy1DVVJMX0NPTkZJRyA9IEBDVVJMX0NPTkZJR0AKKy1DVVJMX0xJQlMg
 PSBAQ1VSTF9MSUJTQAorLUNVUlNFU19MSUIgPSBAQ1VSU0VTX0xJQkAKKy1DWFggPSBAQ1hYQAor
 LUNYWENQUCA9IEBDWFhDUFBACistQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorLUNYWEZMQUdT
 ID0gQENYWEZMQUdTQAorLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACistREVGUyA9IEBERUZTQAor
 LURFUERJUiA9IEBERVBESVJACistRExMVE9PTCA9IEBETExUT09MQAorLURPWFlHRU4gPSBARE9Y
 WUdFTkAKKy1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKKy1EVU1QQklOID0gQERVTVBCSU5ACistRUNI
 T19DID0gQEVDSE9fQ0AKKy1FQ0hPX04gPSBARUNIT19OQAorLUVDSE9fVCA9IEBFQ0hPX1RACist
 RUdSRVAgPSBARUdSRVBACistRVhFRVhUID0gQEVYRUVYVEAKKy1FWFBBVF9MREZMQUdTID0gQEVY
 UEFUX0xERkxBR1NACistRVhUUkFfQ0NfTERGTEFHUyA9IEBFWFRSQV9DQ19MREZMQUdTQAorLUVY
 VFJBX0NYWF9MREZMQUdTID0gQEVYVFJBX0NYWF9MREZMQUdTQAorLUZHUkVQID0gQEZHUkVQQAor
 LUZMRVhfQ0ZMQUdTID0gQEZMRVhfQ0ZMQUdTQAorLUdFT0lQX0xJQlMgPSBAR0VPSVBfTElCU0AK
 Ky1HUkVQID0gQEdSRVBACistSE9TVF9HVUVTUyA9IEBIT1NUX0dVRVNTQAorLUlOU1RBTEwgPSBA
 SU5TVEFMTEAKKy1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorLUlOU1RBTExfUFJPR1JB
 TSA9IEBJTlNUQUxMX1BST0dSQU1ACistSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRA
 CistSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKKy1JT0NP
 UkVfTU9EVUxBUklaRURfREVGUyA9IEBJT0NPUkVfTU9EVUxBUklaRURfREVGU0AKKy1MRCA9IEBM
 REAKKy1MREZMQUdTID0gQExERkxBR1NACistTEVYID0gQExFWEAKKy1MRVhMSUIgPSBATEVYTElC
 QAorLUxFWF9PVVRQVVRfUk9PVCA9IEBMRVhfT1VUUFVUX1JPT1RACistTElCQ0FQID0gQExJQkNB
 UEAKKy1MSUJDUllQVCA9IEBMSUJDUllQVEAKKy1MSUJERU1BTkdMRSA9IEBMSUJERU1BTkdMRUAK
 Ky1MSUJFWFBBVCA9IEBMSUJFWFBBVEAKKy1MSUJMWk1BID0gQExJQkxaTUFACistTElCT0JKUyA9
 IEBMSUJPQkpTQAorLUxJQlBDUkUgPSBATElCUENSRUAKKy1MSUJQUk9GSUxFUiA9IEBMSUJQUk9G
 SUxFUkAKKy1MSUJSRUFETElORSA9IEBMSUJSRUFETElORUAKKy1MSUJSRVNPTFYgPSBATElCUkVT
 T0xWQAorLUxJQlMgPSBATElCU0AKKy1MSUJTU0wgPSBATElCU1NMQAorLUxJQlRDTCA9IEBMSUJU
 Q0xACistTElCVE9PTCA9IEBMSUJUT09MQAorLUxJQlRPT0xfTElOS19GTEFHUyA9IEBMSUJUT09M
 X0xJTktfRkxBR1NACistTElCWiA9IEBMSUJaQAorLUxJUE8gPSBATElQT0AKKy1MTl9TID0gQExO
 X1NACistTFRMSUJPQkpTID0gQExUTElCT0JKU0AKKy1MVUFfQ0ZMQUdTID0gQExVQV9DRkxBR1NA
 CistTFVBX0xJQlMgPSBATFVBX0xJQlNACistTFVBX0xVQUpJVF9MREZMQUdTID0gQExVQV9MVUFK
 SVRfTERGTEFHU0AKKy1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKKy1NQU5JRkVTVF9UT09MID0gQE1B
 TklGRVNUX1RPT0xACistTUdNVF9ERUZTID0gQE1HTVRfREVGU0AKKy1NS0RJUl9QID0gQE1LRElS
 X1BACistTk0gPSBATk1ACistTk1FRElUID0gQE5NRURJVEAKKy1PQkpEVU1QID0gQE9CSkRVTVBA
 CistT0JKRVhUID0gQE9CSkVYVEAKKy1PVE9PTCA9IEBPVE9PTEAKKy1PVE9PTDY0ID0gQE9UT09M
 NjRACistUEFDS0FHRSA9IEBQQUNLQUdFQAorLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0Vf
 QlVHUkVQT1JUQAorLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACistUEFDS0FHRV9TVFJJ
 TkcgPSBAUEFDS0FHRV9TVFJJTkdACistUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFN
 RUAKKy1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKKy1QQUNLQUdFX1ZFUlNJT04gPSBAUEFD
 S0FHRV9WRVJTSU9OQAorLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorLVBDUkVf
 Q09ORklHID0gQFBDUkVfQ09ORklHQAorLVBFUkwgPSBAUEVSTEAKKy1QS0dfQ09ORklHID0gQFBL
 R19DT05GSUdACistUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACistUEtH
 X0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKKy1SQU5MSUIgPSBAUkFOTElCQAorLVJN
 ID0gQFJNQAorLVNFRCA9IEBTRURACistU0VUX01BS0UgPSBAU0VUX01BS0VACistU0hBUkVEX0NG
 TEFHUyA9IEBTSEFSRURfQ0ZMQUdTQAorLVNIQVJFRF9DWFhGTEFHUyA9IEBTSEFSRURfQ1hYRkxB
 R1NACistU0hBUkVEX0NYWExJTktGTEFHUyA9IEBTSEFSRURfQ1hYTElOS0ZMQUdTQAorLVNIQVJF
 RF9MREZMQUdTID0gQFNIQVJFRF9MREZMQUdTQAorLVNIRUxMID0gQFNIRUxMQAorLVNUUklQID0g
 QFNUUklQQAorLVRDTF9CSU5fRElSID0gQFRDTF9CSU5fRElSQAorLVRDTF9MSUJfRklMRSA9IEBU
 Q0xfTElCX0ZJTEVACistVENMX0xJQl9GTEFHID0gQFRDTF9MSUJfRkxBR0AKKy1UQ0xfTElCX1NQ
 RUMgPSBAVENMX0xJQl9TUEVDQAorLVRDTF9QQVRDSF9MRVZFTCA9IEBUQ0xfUEFUQ0hfTEVWRUxA
 CistVENMX1NSQ19ESVIgPSBAVENMX1NSQ19ESVJACistVENMX1NUVUJfTElCX0ZJTEUgPSBAVENM
 X1NUVUJfTElCX0ZJTEVACistVENMX1NUVUJfTElCX0ZMQUcgPSBAVENMX1NUVUJfTElCX0ZMQUdA
 CistVENMX1NUVUJfTElCX1NQRUMgPSBAVENMX1NUVUJfTElCX1NQRUNACistVENMX1ZFUlNJT04g
 PSBAVENMX1ZFUlNJT05ACistVEZXX1BBQ0tBR0VfU1VGRklYID0gQFRGV19QQUNLQUdFX1NVRkZJ
 WEAKKy1UU19MSUJUT09MX1ZFUlNJT04gPSBAVFNfTElCVE9PTF9WRVJTSU9OQAorLVRTX1ZFUlNJ
 T05fTUFKT1IgPSBAVFNfVkVSU0lPTl9NQUpPUkAKKy1UU19WRVJTSU9OX01JQ1JPID0gQFRTX1ZF
 UlNJT05fTUlDUk9ACistVFNfVkVSU0lPTl9NSU5PUiA9IEBUU19WRVJTSU9OX01JTk9SQAorLVRT
 X1ZFUlNJT05fTlVNQkVSID0gQFRTX1ZFUlNJT05fTlVNQkVSQAorLVRTX1ZFUlNJT05fU1RSSU5H
 ID0gQFRTX1ZFUlNJT05fU1RSSU5HQAorLVZFUlNJT04gPSBAVkVSU0lPTkAKKy1ZQUNDID0gQFlB
 Q0NACistYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKKy1hYnNfc3JjZGlyID0gQGFic19z
 cmNkaXJACistYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorLWFic190b3Bf
 c3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorLWFjX2N0X0FSID0gQGFjX2N0X0FSQAorLWFjX2N0
 X0NDID0gQGFjX2N0X0NDQAorLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACistYWNfY3RfRFVNUEJJ
 TiA9IEBhY19jdF9EVU1QQklOQAorLWFjX2N2X3NpemVvZl92b2lkcCA9IEBhY19jdl9zaXplb2Zf
 dm9pZHBACistYWxsb2NhaCA9IEBhbGxvY2FoQAorLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRl
 QAorLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACistYW1fX3F1b3RlID0gQGFt
 X19xdW90ZUAKKy1hbV9fdGFyID0gQGFtX190YXJACistYW1fX3VudGFyID0gQGFtX191bnRhckAK
 Ky1hcnBhX2luZXRoID0gQGFycGFfaW5ldGhACistYXJwYV9uYW1lc2VyX2NvbXBhdGggPSBAYXJw
 YV9uYW1lc2VyX2NvbXBhdGhACistYXJwYV9uYW1lc2VyaCA9IEBhcnBhX25hbWVzZXJoQAorLWJp
 bmRpciA9IEBiaW5kaXJACistYnVpbGQgPSBAYnVpbGRACistYnVpbGRfYWxpYXMgPSBAYnVpbGRf
 YWxpYXNACistYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKKy1idWlsZF9ncm91cCA9IEBidWlsZF9n
 cm91cEAKKy1idWlsZF9tYWNoaW5lID0gQGJ1aWxkX21hY2hpbmVACistYnVpbGRfb3MgPSBAYnVp
 bGRfb3NACistYnVpbGRfcGVyc29uID0gQGJ1aWxkX3BlcnNvbkAKKy1idWlsZF92ZW5kb3IgPSBA
 YnVpbGRfdmVuZG9yQAorLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAorLWNhY2hlZGlyID0gQGNhY2hl
 ZGlyQAorLWNwaW9oID0gQGNwaW9oQAorLWN0eXBlaCA9IEBjdHlwZWhACistZGF0YWRpciA9IEBk
 YXRhZGlyQAorLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorLWRlZmF1bHRfbG9vcGJhY2tf
 aWZhY2UgPSBAZGVmYXVsdF9sb29wYmFja19pZmFjZUAKKy1kZWZlcl9hY2NlcHQgPSBAZGVmZXJf
 YWNjZXB0QAorLWRvY2RpciA9IEBkb2NkaXJACistZHZpZGlyID0gQGR2aWRpckAKKy1lbmFibGVf
 cmVtb3RlX2Nvdl9jb21taXQgPSBAZW5hYmxlX3JlbW90ZV9jb3ZfY29tbWl0QAorLWVuZGlhbmgg
 PSBAZW5kaWFuaEAKKy1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKy1leGVjaW5mb2ggPSBA
 ZXhlY2luZm9oQAorLWV4cF9iaW5kaXIgPSBAZXhwX2JpbmRpckAKKy1leHBfY2FjaGVkaXIgPSBA
 ZXhwX2NhY2hlZGlyQAorLWV4cF9kYXRhZGlyID0gQGV4cF9kYXRhZGlyQAorLWV4cF9kb2NkaXIg
 PSBAZXhwX2RvY2RpckAKKy1leHBfZXhlY19wcmVmaXggPSBAZXhwX2V4ZWNfcHJlZml4QAorLWV4
 cF9pbmNsdWRlZGlyID0gQGV4cF9pbmNsdWRlZGlyQAorLWV4cF9pbmZvZGlyID0gQGV4cF9pbmZv
 ZGlyQAorLWV4cF9pbnN0YWxsYnVpbGRkaXIgPSBAZXhwX2luc3RhbGxidWlsZGRpckAKKy1leHBf
 bGliZGlyID0gQGV4cF9saWJkaXJACistZXhwX2xpYmV4ZWNkaXIgPSBAZXhwX2xpYmV4ZWNkaXJA
 CistZXhwX2xvY2Fsc3RhdGVkaXIgPSBAZXhwX2xvY2Fsc3RhdGVkaXJACistZXhwX2xvZ2RpciA9
 IEBleHBfbG9nZGlyQAorLWV4cF9tYW5kaXIgPSBAZXhwX21hbmRpckAKKy1leHBfcHJlZml4ID0g
 QGV4cF9wcmVmaXhACistZXhwX3J1bnRpbWVkaXIgPSBAZXhwX3J1bnRpbWVkaXJACistZXhwX3Ni
 aW5kaXIgPSBAZXhwX3NiaW5kaXJACistZXhwX3N5c2NvbmZkaXIgPSBAZXhwX3N5c2NvbmZkaXJA
 CistZXhwYXRoID0gQGV4cGF0aEAKKy1mbG9hdGggPSBAZmxvYXRoQAorLWdldGhvc3RieW5hbWVf
 cl9nbGliYzIgPSBAZ2V0aG9zdGJ5bmFtZV9yX2dsaWJjMkAKKy1oYXNfMTI4Yml0X2NhcyA9IEBo
 YXNfMTI4Yml0X2Nhc0AKKy1oYXNfYmFja3RyYWNlID0gQGhhc19iYWNrdHJhY2VACistaGFzX2lu
 Nl9pc19hZGRyX3Vuc3BlY2lmaWVkID0gQGhhc19pbjZfaXNfYWRkcl91bnNwZWNpZmllZEAKKy1o
 YXNfaW50ZXJpbV9jYWNoZSA9IEBoYXNfaW50ZXJpbV9jYWNoZUAKKy1oYXNfaXBfdG9zID0gQGhh
 c19pcF90b3NACistaGFzX3Byb2ZpbGVyID0gQGhhc19wcm9maWxlckAKKy1oYXNfc29fbWFyayA9
 IEBoYXNfc29fbWFya0AKKy1oYXNfc3RhbmRhbG9uZV9pb2NvcmUgPSBAaGFzX3N0YW5kYWxvbmVf
 aW9jb3JlQAorLWhhc190Y21hbGxvYyA9IEBoYXNfdGNtYWxsb2NACistaGFzX3Rlc3RzID0gQGhh
 c190ZXN0c0AKKy1oYXNfd2NjcCA9IEBoYXNfd2NjcEAKKy1ob3N0ID0gQGhvc3RACistaG9zdF9h
 bGlhcyA9IEBob3N0X2FsaWFzQAorLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAorLWhvc3Rfb3MgPSBA
 aG9zdF9vc0AKKy1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKKy1odG1sZGlyID0gQGh0bWxk
 aXJACistaHdsb2NfQ0ZMQUdTID0gQGh3bG9jX0NGTEFHU0AKKy1od2xvY19MSUJTID0gQGh3bG9j
 X0xJQlNACistaWZhZGRyc2ggPSBAaWZhZGRyc2hACistaW5jbHVkZWRpciA9ICQocHJlZml4KS9p
 bmNsdWRlL3RzCistaW5mb2RpciA9IEBpbmZvZGlyQAorLWlua193aXRoX21vZHVsZXNfZGVmID0g
 QGlua193aXRoX21vZHVsZXNfZGVmQAorLWlua193aXRoX21vZHVsZXNfbG9jYWwgPSBAaW5rX3dp
 dGhfbW9kdWxlc19sb2NhbEAKKy1pbmtfd2l0aF9tb2R1bGVzX3Byb2Nlc3MgPSBAaW5rX3dpdGhf
 bW9kdWxlc19wcm9jZXNzQAorLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKKy1pbnN0YWxsYnVp
 bGRkaXIgPSBAaW5zdGFsbGJ1aWxkZGlyQAorLWlvY29yZV9pbmNsdWRlX2RpcnMgPSBAaW9jb3Jl
 X2luY2x1ZGVfZGlyc0AKKy1pcF90cmFuc3BhcmVudCA9IEBpcF90cmFuc3BhcmVudEAKKy1pc19t
 aWNyb19idWlsZCA9IEBpc19taWNyb19idWlsZEAKKy1qZW1hbGxvY2ggPSBAamVtYWxsb2NoQAor
 LWxpYmRpciA9IEBsaWJkaXJACistbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorLWxpYmdlbmgg
 PSBAbGliZ2VuaEAKKy1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorLWxvY2Fsc3RhdGVkaXIgPSBA
 bG9jYWxzdGF0ZWRpckAKKy1sb2dkaXIgPSBAbG9nZGlyQAorLWx1YWppdF9DRkxBR1MgPSBAbHVh
 aml0X0NGTEFHU0AKKy1sdWFqaXRfTElCUyA9IEBsdWFqaXRfTElCU0AKKy1sem1haCA9IEBsem1h
 aEAKKy1tYWNoaW5lX2VuZGlhbmggPSBAbWFjaGluZV9lbmRpYW5oQAorLW1hbGxvY2ggPSBAbWFs
 bG9jaEAKKy1tYW5kaXIgPSBAbWFuZGlyQAorLW1hdGhoID0gQG1hdGhoQAorLW1heF9hcGlfc3Rh
 dHMgPSBAbWF4X2FwaV9zdGF0c0AKKy1tYXhfZXZlbnRfdGhyZWFkcyA9IEBtYXhfZXZlbnRfdGhy
 ZWFkc0AKKy1tYXhfaG9zdF9uYW1lX2xlbiA9IEBtYXhfaG9zdF9uYW1lX2xlbkAKKy1tYXhfdGhy
 ZWFkc19wZXJfdHlwZSA9IEBtYXhfdGhyZWFkc19wZXJfdHlwZUAKKy1ta2Rpcl9wID0gQG1rZGly
 X3BACistbmV0X3BwcF9kZWZzaCA9IEBuZXRfcHBwX2RlZnNoQAorLW5ldGRiaCA9IEBuZXRkYmhA
 CistbmV0aW5ldF9pbl9zeXN0bWggPSBAbmV0aW5ldF9pbl9zeXN0bWhACistbmV0aW5ldF9pbmgg
 PSBAbmV0aW5ldF9pbmhACistbmV0aW5ldF9pcF9pY21waCA9IEBuZXRpbmV0X2lwX2ljbXBoQAor
 LW5ldGluZXRfaXBoID0gQG5ldGluZXRfaXBoQAorLW5ldGluZXRfdGNwaCA9IEBuZXRpbmV0X3Rj
 cGhACistb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorLXBjcmVfcGNyZWggPSBAcGNy
 ZV9wY3JlaEAKKy1wY3JlaCA9IEBwY3JlaEAKKy1wZGZkaXIgPSBAcGRmZGlyQAorLXBrZ2JpbmRp
 ciA9IEBwa2diaW5kaXJACistcGtnY2FjaGVkaXIgPSBAcGtnY2FjaGVkaXJACistcGtnZG9jZGly
 ID0gQHBrZ2RvY2RpckAKKy1wa2dsb2NhbHN0YXRlZGlyID0gQHBrZ2xvY2Fsc3RhdGVkaXJACist
 cGtnbG9nZGlyID0gQHBrZ2xvZ2RpckAKKy1wa2dydW50aW1lZGlyID0gQHBrZ3J1bnRpbWVkaXJA
 CistcGtnc2JpbmRpciA9IEBwa2dzYmluZGlyQAorLXBrZ3N5c2NvbmZkaXIgPSBAcGtnc3lzY29u
 ZmRpckAKKy1wa2dzeXNncm91cCA9IEBwa2dzeXNncm91cEAKKy1wa2dzeXN1c2VyID0gQHBrZ3N5
 c3VzZXJACistcHJlZml4ID0gQHByZWZpeEAKKy1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHBy
 b2dyYW1fdHJhbnNmb3JtX25hbWVACistcHNkaXIgPSBAcHNkaXJACistcHRocmVhZF9ucGggPSBA
 cHRocmVhZF9ucGhACistcmVhZGxpbmVfcmVhZGxpbmVoID0gQHJlYWRsaW5lX3JlYWRsaW5laEAK
 Ky1yZWxfYmluZGlyID0gQHJlbF9iaW5kaXJACistcmVsX2NhY2hlZGlyID0gQHJlbF9jYWNoZWRp
 ckAKKy1yZWxfZGF0YWRpciA9IEByZWxfZGF0YWRpckAKKy1yZWxfZG9jZGlyID0gQHJlbF9kb2Nk
 aXJACistcmVsX2V4ZWNfcHJlZml4ID0gQHJlbF9leGVjX3ByZWZpeEAKKy1yZWxfaW5jbHVkZWRp
 ciA9IEByZWxfaW5jbHVkZWRpckAKKy1yZWxfaW5mb2RpciA9IEByZWxfaW5mb2RpckAKKy1yZWxf
 aW5zdGFsbGJ1aWxkZGlyID0gQHJlbF9pbnN0YWxsYnVpbGRkaXJACistcmVsX2xpYmRpciA9IEBy
 ZWxfbGliZGlyQAorLXJlbF9saWJleGVjZGlyID0gQHJlbF9saWJleGVjZGlyQAorLXJlbF9sb2Nh
 bHN0YXRlZGlyID0gQHJlbF9sb2NhbHN0YXRlZGlyQAorLXJlbF9sb2dkaXIgPSBAcmVsX2xvZ2Rp
 ckAKKy1yZWxfbWFuZGlyID0gQHJlbF9tYW5kaXJACistcmVsX3ByZWZpeCA9IEByZWxfcHJlZml4
 QAorLXJlbF9ydW50aW1lZGlyID0gQHJlbF9ydW50aW1lZGlyQAorLXJlbF9zYmluZGlyID0gQHJl
 bF9zYmluZGlyQAorLXJlbF9zeXNjb25mZGlyID0gQHJlbF9zeXNjb25mZGlyQAorLXJ1bnRpbWVk
 aXIgPSBAcnVudGltZWRpckAKKy1zYmluZGlyID0gQHNiaW5kaXJACistc2NoZWRoID0gQHNjaGVk
 aEAKKy1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKKy1zaWdpbmZvaCA9IEBzaWdp
 bmZvaEAKKy1zcmNkaXIgPSBAc3JjZGlyQAorLXN0cm9wdHNoID0gQHN0cm9wdHNoQAorLXN5c19i
 eXRlb3JkZXJoID0gQHN5c19ieXRlb3JkZXJoQAorLXN5c19jcHVzZXRoID0gQHN5c19jcHVzZXRo
 QAorLXN5c19lcG9sbGggPSBAc3lzX2Vwb2xsaEAKKy1zeXNfZXZlbnRoID0gQHN5c19ldmVudGhA
 Cistc3lzX2lvY3RsaCA9IEBzeXNfaW9jdGxoQAorLXN5c19tb3VudGggPSBAc3lzX21vdW50aEAK
 Ky1zeXNfcGFyYW1oID0gQHN5c19wYXJhbWhACistc3lzX3BzZXRoID0gQHN5c19wc2V0aEAKKy1z
 eXNfc29ja2lvaCA9IEBzeXNfc29ja2lvaEAKKy1zeXNfc3lzY3RsaCA9IEBzeXNfc3lzY3RsaEAK
 Ky1zeXNfc3lzaW5mb2ggPSBAc3lzX3N5c2luZm9oQAorLXN5c19zeXNtYWNyb3NoID0gQHN5c19z
 eXNtYWNyb3NoQAorLXN5c19zeXN0ZW1pbmZvaCA9IEBzeXNfc3lzdGVtaW5mb2hACistc3lzY29u
 ZmRpciA9IEBzeXNjb25mZGlyQAorLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACistdG9w
 X2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAorLXRvcF9idWlsZGRpciA9IEB0b3Bf
 YnVpbGRkaXJACistdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorLXVzZV9jb3BfZGVidWcgPSBA
 dXNlX2NvcF9kZWJ1Z0AKKy11c2VfZGlhZ3MgPSBAdXNlX2RpYWdzQAorLXVzZV9lcG9sbCA9IEB1
 c2VfZXBvbGxACistdXNlX2Zhc3Rfc2RrID0gQHVzZV9mYXN0X3Nka0AKKy11c2VfZnJlZWxpc3Qg
 PSBAdXNlX2ZyZWVsaXN0QAorLXVzZV9od2xvYyA9IEB1c2VfaHdsb2NACistdXNlX2txdWV1ZSA9
 IEB1c2Vfa3F1ZXVlQAorLXVzZV9saW51eF9uYXRpdmVfYWlvID0gQHVzZV9saW51eF9uYXRpdmVf
 YWlvQAorLXVzZV9wb3J0ID0gQHVzZV9wb3J0QAorLXVzZV9wb3NpeF9jYXAgPSBAdXNlX3Bvc2l4
 X2NhcEAKKy11c2VfcmVjbGFpbWFibGVfZnJlZWxpc3QgPSBAdXNlX3JlY2xhaW1hYmxlX2ZyZWVs
 aXN0QAorLXVzZV90bHNfbnBuID0gQHVzZV90bHNfbnBuQAorLXVzZV90bHNfc25pID0gQHVzZV90
 bHNfc25pQAorLXVzZV90cHJveHkgPSBAdXNlX3Rwcm94eUAKKy12YWx1ZXNoID0gQHZhbHVlc2hA
 Cistd2FpdGggPSBAd2FpdGhACistemxpYmggPSBAemxpYmhACistQU1fQ1BQRkxBR1MgPSAtSSQo
 dG9wX2J1aWxkZGlyKS9wcm94eS9hcGkvdHMKKy1AQlVJTERfSEFWRV9DWFhfMTFfVFJVRUBsaWJf
 TFRMSUJSQVJJRVMgPSBsaWJhdHNjcHAxMWFwaS5sYQorLUBCVUlMRF9IQVZFX0NYWF8xMV9UUlVF
 QGxpYmF0c2NwcDExYXBpX2xhX1NPVVJDRVMgPSBcCistQEJVSUxEX0hBVkVfQ1hYXzExX1RSVUVA
 ICBjcHAxMWFwaS5jYworLQorLUBCVUlMRF9IQVZFX0NYWF8xMV9UUlVFQGluY2x1ZGVfSEVBREVS
 UyA9IFwKKy1AQlVJTERfSEFWRV9DWFhfMTFfVFJVRUAgIHRzLWNwcDExLmggdHMtY3BwMTEtaGVh
 ZGVycy5oCistCistYWxsOiBhbGwtYW0KKy0KKy0uU1VGRklYRVM6CistLlNVRkZJWEVTOiAuY2Mg
 LmxvIC5vIC5vYmoKKy0kKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUu
 YW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAorLQkgIGNh
 c2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorLQkgICAgKiQkZGVwKikgXAorLQkgICAg
 ICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVm
 cmVzaCApIFwKKy0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNl
 IGJyZWFrOyBmaTsgfTsgXAorLQkgICAgICBleGl0IDE7OyBcCistCSAgZXNhYzsgXAorLQlkb25l
 OyBcCistCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBs
 aWIvY3BwMTFhcGkvTWFrZWZpbGUnOyBcCistCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwK
 Ky0JICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGliL2NwcDExYXBpL01ha2VmaWxlCistLlBSRUNJ
 T1VTOiBNYWtlZmlsZQorLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVp
 bGRkaXIpL2NvbmZpZy5zdGF0dXMKKy0JQGNhc2UgJyQ/JyBpbiBcCistCSAgKmNvbmZpZy5zdGF0
 dXMqKSBcCistCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFH
 UykgYW0tLXJlZnJlc2g7OyBcCistCSAgKikgXAorLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxk
 ZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZp
 bGVzX21heWJlKSc7IFwKKy0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2Nv
 bmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKy0JZXNh
 YzsKKy0KKy0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25m
 aWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKy0JY2QgJCh0b3BfYnVpbGRkaXIp
 ICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCistCistJCh0b3Bfc3JjZGly
 KS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKy0JY2QgJCh0b3BfYnVpbGRkaXIp
 ICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCistJChBQ0xPQ0FMX000KTog
 ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKy0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkg
 JChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCistJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKy0K
 Ky1pbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKy0JQCQoTk9STUFM
 X0lOU1RBTEwpCistCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRp
 cikiIHx8IGxpc3Q9OyBcCistCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCistCSAgaWYg
 dGVzdCAtZiAkJHA7IHRoZW4gXAorLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorLQkgIGVs
 c2UgOjsgZmk7IFwKKy0JZG9uZTsgXAorLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKy0JICBl
 Y2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZGlyKSciOyBcCistCSAgJChNS0RJUl9Q
 KSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCistCSAgZWNobyAiICQoTElCVE9P
 TCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElO
 U1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIp
 JyI7IFwKKy0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykg
 LS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAi
 JChERVNURElSKSQobGliZGlyKSI7IFwKKy0JfQorLQorLXVuaW5zdGFsbC1saWJMVExJQlJBUklF
 UzoKKy0JQCQoTk9STUFMX1VOSU5TVEFMTCkKKy0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7
 IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKy0JZm9yIHAgaW4gJCRsaXN0OyBkbyBc
 CistCSAgJChhbV9fc3RyaXBfZGlyKSBcCistCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJU
 T09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RE
 SVIpJChsaWJkaXIpLyQkZiciOyBcCistCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykg
 JChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRp
 cikvJCRmIjsgXAorLQlkb25lCistCistY2xlYW4tbGliTFRMSUJSQVJJRVM6CistCS10ZXN0IC16
 ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorLQlAbGlz
 dD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgXAorLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVj
 aG8gJCRwOyBkb25lIHwgXAorLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8
 fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCistCSAgICAgIHNvcnQgLXVgOyBcCistCXRlc3Qg
 LXogIiQkbG9jcyIgfHwgeyBcCistCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAorLQkgIHJtIC1m
 ICQke2xvY3N9OyBcCistCX0KKy0KKy1saWJhdHNjcHAxMWFwaS5sYTogJChsaWJhdHNjcHAxMWFw
 aV9sYV9PQkpFQ1RTKSAkKGxpYmF0c2NwcDExYXBpX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9s
 aWJhdHNjcHAxMWFwaV9sYV9ERVBFTkRFTkNJRVMpIAorLQkkKEFNX1ZfQ1hYTEQpJChDWFhMSU5L
 KSAkKGFtX2xpYmF0c2NwcDExYXBpX2xhX3JwYXRoKSAkKGxpYmF0c2NwcDExYXBpX2xhX09CSkVD
 VFMpICQobGliYXRzY3BwMTFhcGlfbGFfTElCQUREKSAkKExJQlMpCistCistbW9zdGx5Y2xlYW4t
 Y29tcGlsZToKKy0JLXJtIC1mICouJChPQkpFWFQpCistCistZGlzdGNsZWFuLWNvbXBpbGU6Cist
 CS1ybSAtZiAqLnRhYi5jCistCistQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3Rl
 QC4vJChERVBESVIpL2NwcDExYXBpLlBsb0BhbV9fcXVvdGVACistCistLmNjLm86CistQGFtX19m
 YXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAt
 TUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkk
 KEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCistQEFN
 REVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9i
 amVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorLUBBTURFUF9UUlVFQEBhbV9f
 ZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29t
 cCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBh
 bV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKy0KKy0uY2Mub2JqOgorLUBhbV9f
 ZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAg
 LU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorLUBhbV9f
 ZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChE
 RVBESVIpLyQqLlBvCistQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1Zf
 Q1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAor
 LUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENY
 WERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorLUBhbV9fZmFzdGRlcENYWF9G
 QUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lH
 UEFUSF9XKSAnJDwnYAorLQorLS5jYy5sbzoKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9W
 X0NYWCkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8g
 LWMgLW8gJEAgJDwKKy1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAk
 KERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KKy1AQU1ERVBfVFJVRUBAYW1fX2Zhc3Rk
 ZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15
 ZXMgQEFNREVQQkFDS1NMQVNIQAorLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJ
 REVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNI
 QAorLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTFRDWFhD
 T01QSUxFKSAtYyAtbyAkQCAkPAorLQorLW1vc3RseWNsZWFuLWxpYnRvb2w6CistCS1ybSAtZiAq
 LmxvCistCistY2xlYW4tbGlidG9vbDoKKy0JLXJtIC1yZiAubGlicyBfbGlicworLWluc3RhbGwt
 aW5jbHVkZUhFQURFUlM6ICQoaW5jbHVkZV9IRUFERVJTKQorLQlAJChOT1JNQUxfSU5TVEFMTCkK
 Ky0JQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZWRpcikiIHx8
 IGxpc3Q9OyBcCistCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorLQkgIGVjaG8gIiAkKE1L
 RElSX1ApICckKERFU1RESVIpJChpbmNsdWRlZGlyKSciOyBcCistCSAgJChNS0RJUl9QKSAiJChE
 RVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAorLQlmaTsgXAorLQlmb3IgcCBpbiAk
 JGxpc3Q7IGRvIFwKKy0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3Jj
 ZGlyKS8iOyBmaTsgXAorLQkgIGVjaG8gIiQkZCQkcCI7IFwKKy0JZG9uZSB8ICQoYW1fX2Jhc2Vf
 bGlzdCkgfCBcCistCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKy0JICBlY2hvICIgJChJTlNUQUxM
 X0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAorLQkgICQoSU5T
 VEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiB8fCBleGl0ICQk
 PzsgXAorLQlkb25lCistCistdW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTOgorLQlAJChOT1JNQUxf
 VU5JTlNUQUxMKQorLQlAbGlzdD0nJChpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNs
 dWRlZGlyKSIgfHwgbGlzdD07IFwKKy0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAk
 JHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKy0JZGlyPSckKERFU1RESVIpJChpbmNs
 dWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKy0KKy1JRDogJChhbV9f
 dGFnZ2VkX2ZpbGVzKQorLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1m
 SUQgJCR1bmlxdWUKKy10YWdzOiB0YWdzLWFtCistVEFHUzogdGFncworLQorLXRhZ3MtYW06ICQo
 VEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKy0Jc2V0IHg7IFwKKy0JaGVy
 ZT1gcHdkYDsgXAorLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCistCXNoaWZ0
 OyBcCistCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxz
 ZSBcCistCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorLQkg
 IGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKy0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykg
 JChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICAgIiQkQCIgJCR1bmlxdWU7
 IFwKKy0JICBlbHNlIFwKKy0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZM
 QUdTKSAkKEVUQUdTX0FSR1MpIFwKKy0JICAgICAgJCR1bmlxdWU7IFwKKy0JICBmaTsgXAorLQlm
 aQorLWN0YWdzOiBjdGFncy1hbQorLQorLUNUQUdTOiBjdGFncworLWN0YWdzLWFtOiAkKFRBR1Nf
 REVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCistCSQoYW1fX2RlZmluZV91bmlxX3Rh
 Z2dlZF9maWxlcyk7IFwKKy0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCistCSAg
 fHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykg
 XAorLQkgICAgICQkdW5pcXVlCistCistR1RBR1M6CistCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9i
 dWlsZGRpcikgJiYgcHdkYCBcCistCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorLQkg
 ICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKy1jc2NvcGVsaXN0OiBjc2NvcGVs
 aXN0LWFtCistCistY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQorLQlsaXN0PSck
 KGFtX190YWdnZWRfZmlsZXMpJzsgXAorLQljYXNlICIkKHNyY2RpcikiIGluIFwKKy0JICBbXFwv
 XSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCistCSAgKikgc2Rpcj0kKHN1YmRp
 cikvJChzcmNkaXIpIDs7IFwKKy0JZXNhYzsgXAorLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKy0J
 ICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKy0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBc
 CistCSAgZWxzZSBcCistCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorLQkgIGZpOyBcCistCWRv
 bmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcworLQorLWRpc3RjbGVhbi10YWdzOgor
 LQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworLQorLWRpc3Rk
 aXI6ICQoRElTVEZJTEVTKQorLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQg
 J3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCistCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRv
 cF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKy0JbGlzdD0nJChE
 SVNURklMRVMpJzsgXAorLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNo
 byAkJGZpbGU7IGRvbmUgfCBcCistCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwK
 Ky0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsg
 XAorLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCistCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIk
 JGRpc3RfZmlsZXMiIHwgXAorLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywv
 W14vXSokJCwsJyB8IFwKKy0JCQkgICBzb3J0IC11YCA7OyBcCistCWVzYWM7IFwKKy0JZm9yIGZp
 bGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCistCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAt
 ZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorLQkgIGlmIHRlc3Qg
 LWQgJCRkLyQkZmlsZTsgdGhlbiBcCistCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1l
 ICdzLC9bXi9dKiQkLCwnYDsgXAorLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUi
 OyB0aGVuIFwKKy0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVy
 bSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCistCSAgICBmaTsgXAorLQkgICAgaWYg
 dGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBc
 CistCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBl
 eGl0IDE7IFwKKy0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVy
 bSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCistCSAgICBmaTsgXAorLQkgICAgY3Ag
 LWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorLQkgIGVsc2Ug
 XAorLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKy0JICAgIHx8IGNwIC1wICQk
 ZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCistCSAgICB8fCBleGl0IDE7IFwKKy0JICBm
 aTsgXAorLQlkb25lCistY2hlY2stYW06IGFsbC1hbQorLWNoZWNrOiBjaGVjay1hbQorLWFsbC1h
 bTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQorLWluc3RhbGxkaXJzOgorLQlm
 b3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoaW5jbHVkZWRpciki
 OyBkbyBcCistCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorLQlk
 b25lCistaW5zdGFsbDogaW5zdGFsbC1hbQorLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFt
 CistaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KKy11bmluc3RhbGw6IHVuaW5zdGFsbC1h
 bQorLQorLWluc3RhbGwtYW06IGFsbC1hbQorLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5z
 dGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorLQorLWluc3RhbGxjaGVjazogaW5zdGFsbGNo
 ZWNrLWFtCistaW5zdGFsbC1zdHJpcDoKKy0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwK
 Ky0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9T
 VFJJUF9QUk9HUkFNKSIgXAorLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RS
 SVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCistCSAgICAgIGluc3RhbGw7IFwK
 Ky0JZWxzZSBcCistCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIk
 KElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKy0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJ
 TlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorLQkgICAgIklO
 U1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKy0JZmkK
 Ky1tb3N0bHljbGVhbi1nZW5lcmljOgorLQorLWNsZWFuLWdlbmVyaWM6CistCistZGlzdGNsZWFu
 LWdlbmVyaWM6CistCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQo
 Q09ORklHX0NMRUFOX0ZJTEVTKQorLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAi
 JChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFU
 SF9GSUxFUykKKy0KKy1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CistCUBlY2hvICJUaGlzIGNv
 bW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKy0JQGVjaG8gIml0IGRl
 bGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgor
 LWNsZWFuOiBjbGVhbi1hbQorLQorLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxU
 TElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorLQltb3N0bHljbGVhbi1hbQorLQorLWRpc3RjbGVh
 bjogZGlzdGNsZWFuLWFtCistCS1ybSAtcmYgLi8kKERFUERJUikKKy0JLXJtIC1mIE1ha2VmaWxl
 CistZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2Vu
 ZXJpYyBcCistCWRpc3RjbGVhbi10YWdzCistCistZHZpOiBkdmktYW0KKy0KKy1kdmktYW06Cist
 CistaHRtbDogaHRtbC1hbQorLQorLWh0bWwtYW06CistCistaW5mbzogaW5mby1hbQorLQorLWlu
 Zm8tYW06CistCistaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluY2x1ZGVIRUFERVJTCistCist
 aW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCistCistaW5zdGFsbC1kdmktYW06CistCistaW5z
 dGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCistCistaW5zdGFsbC1odG1sOiBp
 bnN0YWxsLWh0bWwtYW0KKy0KKy1pbnN0YWxsLWh0bWwtYW06CistCistaW5zdGFsbC1pbmZvOiBp
 bnN0YWxsLWluZm8tYW0KKy0KKy1pbnN0YWxsLWluZm8tYW06CistCistaW5zdGFsbC1tYW46Cist
 CistaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCistCistaW5zdGFsbC1wZGYtYW06CistCist
 aW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorLQorLWluc3RhbGwtcHMtYW06CistCistaW5zdGFs
 bGNoZWNrLWFtOgorLQorLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKy0J
 LXJtIC1yZiAuLyQoREVQRElSKQorLQktcm0gLWYgTWFrZWZpbGUKKy1tYWludGFpbmVyLWNsZWFu
 LWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCistCistbW9zdGx5Y2xl
 YW46IG1vc3RseWNsZWFuLWFtCistCistbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBp
 bGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCistCW1vc3RseWNsZWFuLWxpYnRvb2wKKy0KKy1wZGY6
 IHBkZi1hbQorLQorLXBkZi1hbToKKy0KKy1wczogcHMtYW0KKy0KKy1wcy1hbToKKy0KKy11bmlu
 c3RhbGwtYW06IHVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtbGliTFRMSUJSQVJJ
 RVMKKy0KKy0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCistCistLlBIT05ZOiBDVEFH
 UyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJp
 YyBcCistCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBj
 dGFncyBcCistCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4t
 Z2VuZXJpYyBcCistCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZp
 IGR2aS1hbSBodG1sIFwKKy0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFt
 IGluc3RhbGwtZGF0YSBcCistCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2
 aS1hbSBpbnN0YWxsLWV4ZWMgXAorLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3Rh
 bGwtaHRtbC1hbSBcCistCWluc3RhbGwtaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1pbmZvIGluc3Rh
 bGwtaW5mby1hbSBcCistCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gaW5zdGFs
 bC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFs
 bC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFp
 bnRhaW5lci1jbGVhbiBcCistCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBt
 b3N0bHljbGVhbi1jb21waWxlIFwKKy0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1s
 aWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVu
 aW5zdGFsbC1hbSB1bmluc3RhbGwtaW5jbHVkZUhFQURFUlMgXAorLQl1bmluc3RhbGwtbGliTFRM
 SUJSQVJJRVMKKy0KKy0KKy0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ug
 dG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0
 IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLS5OT0VYUE9SVDoKK2RpZmYg
 LXJ1TiBsaWIvY3BwMTFhcGkvY3BwMTFhcGkuY2MgbGliL2NwcDExYXBpL2NwcDExYXBpLmNjCist
 LS0gbGliL2NwcDExYXBpL2NwcDExYXBpLmNjCTIwMTMtMTEtMTEgMTQ6MDI6NTMuMDAwMDAwMDAw
 ICswODAwCisrKysgbGliL2NwcDExYXBpL2NwcDExYXBpLmNjCTE5NzAtMDEtMDEgMDg6MDA6MDAu
 MDAwMDAwMDAwICswODAwCitAQCAtMSw4ODAgKzAsMCBAQAorLS8qKiBAZmlsZQorLSBAc2VjdGlv
 biBsaWNlbnNlIExpY2Vuc2UKKy0KKy0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBG
 b3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorLSBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2Ug
 YWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKy0gZGlzdHJpYnV0ZWQgd2l0aCB0aGlz
 IHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKy0gcmVnYXJkaW5nIGNvcHlyaWdodCBv
 d25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorLSB0byB5b3UgdW5kZXIgdGhl
 IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCistICJMaWNlbnNlIik7IHlvdSBtYXkg
 bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKy0gd2l0aCB0aGUgTGljZW5z
 ZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLQorLSBodHRwOi8v
 d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy0KKy0gVW5sZXNzIHJlcXVpcmVk
 IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLSBk
 aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
 IEJBU0lTLAorLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
 ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
 Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLSBsaW1pdGF0aW9ucyB1
 bmRlciB0aGUgTGljZW5zZS4KKy0gKi8KKy0KKy0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CistI2lu
 Y2x1ZGUgPHRzLmg+CistI2luY2x1ZGUgPGFsZ29yaXRobT4KKy0jaW5jbHVkZSAidHMtY3BwMTEu
 aCIKKy0jaW5jbHVkZSAidHMtY3BwMTEtaGVhZGVycy5oIgorLQorLXVzaW5nIG5hbWVzcGFjZSBh
 dHM6OmFwaTsKKy0KKy1UU0h0dHBIb29rSUQgVFNIb29rSURGcm9tSG9va1R5cGUoSG9va1R5cGUg
 aG9vayk7CistCistY2xhc3MgSG9va0NvbnRpbnVhdGlvbkRhdGEgeworLXB1YmxpYzoKKy0gIEds
 b2JhbEhvb2tDYWxsYmFjayBjYWxsYmFjazsKKy0gIEhvb2tUeXBlIGhvb2t0eXBlOworLSAgVFNI
 dHRwSG9va0lEIHRzX2hvb2tfaWQ7CistfTsKKy0KKy1jbGFzcyBhdHM6OmFwaTo6VHJhbnNhY3Rp
 b24geworLXB1YmxpYzoKKy0gIFRTSHR0cFR4biB0c19odHRwX3R4bl8gPSBOVUxMOworLSAgVFND
 b250IHRzX2NvbnRwXyA9IE5VTEw7CistfTsKKy0KKy1leHRlcm4gIkMiIHZvaWQgVFNQbHVnaW5J
 bml0KGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKKy0KKy0gIFRTUGx1Z2luUmVnaXN0
 cmF0aW9uSW5mbyByZWdpc3RyYXRpb25faW5mbzsKKy0KKy0gIGNvbnN0IGNoYXIgKmFwaV92ZXJz
 aW9uX3N0cmluZyA9ICJjcHAxMWFwaSI7CistCistICByZWdpc3RyYXRpb25faW5mby5wbHVnaW5f
 bmFtZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGFwaV92ZXJzaW9uX3N0cmluZyk7CistICByZWdpc3Ry
 YXRpb25faW5mby52ZW5kb3JfbmFtZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGFwaV92ZXJzaW9uX3N0
 cmluZyk7CistICByZWdpc3RyYXRpb25faW5mby5zdXBwb3J0X2VtYWlsID0gY29uc3RfY2FzdDxj
 aGFyKj4oYXBpX3ZlcnNpb25fc3RyaW5nKTsKKy0KKy0gIGlmIChUU1BsdWdpblJlZ2lzdGVyKFRT
 X1NES19WRVJTSU9OXzNfMCwgJnJlZ2lzdHJhdGlvbl9pbmZvKSAhPSBUU19TVUNDRVNTKSB7Cist
 ICAgIHJldHVybjsKKy0gIH0KKy0KKy0gIFN0cmluZ1ZlY3RvciBhcmd1bWVudHM7CistICBmb3Ig
 KGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworLSAgICBhcmd1bWVudHMucHVzaF9iYWNrKHN0
 ZDo6c3RyaW5nKGFyZ3ZbaV0pKTsKKy0gIH0KKy0KKy0gIC8vIEZpbmFsbHkgd2Ugd2lsbCBjYWxs
 IHRoZSB3cmFwcGVyIEFQSSByZWdpc3RyYXRpb24gcG9pbnQKKy0gIFBsdWdpblJlZ2lzdGVyKGFy
 Z3VtZW50cyk7CistfQorLQorLVRTSHR0cEhvb2tJRCBUU0hvb2tJREZyb21Ib29rVHlwZShIb29r
 VHlwZSBob29rKSB7CistICBzd2l0Y2ggKGhvb2spIHsKKy0gIGNhc2UgYXRzOjphcGk6Okhvb2tU
 eXBlOjpIT09LX1BSRV9SRU1BUDoKKy0gICAgcmV0dXJuIFRTX0hUVFBfUFJFX1JFTUFQX0hPT0s7
 CistICAgIGJyZWFrOworLSAgY2FzZSBhdHM6OmFwaTo6SG9va1R5cGU6OkhPT0tfUE9TVF9SRU1B
 UDoKKy0gICAgcmV0dXJuIFRTX0hUVFBfUE9TVF9SRU1BUF9IT09LOworLSAgICBicmVhazsKKy0g
 IGNhc2UgYXRzOjphcGk6Okhvb2tUeXBlOjpIT09LX1JFQURfUkVRVUVTVF9IRUFERVJTOgorLSAg
 ICByZXR1cm4gVFNfSFRUUF9SRUFEX1JFUVVFU1RfSERSX0hPT0s7CistICAgIGJyZWFrOworLSAg
 Y2FzZSBhdHM6OmFwaTo6SG9va1R5cGU6OkhPT0tfUkVBRF9SRVNQT05TRV9IRUFERVJTOgorLSAg
 ICByZXR1cm4gVFNfSFRUUF9SRUFEX1JFU1BPTlNFX0hEUl9IT09LOworLSAgICBicmVhazsKKy0g
 IGNhc2UgYXRzOjphcGk6Okhvb2tUeXBlOjpIT09LX1NFTkRfUkVTUE9OU0VfSEVBREVSUzoKKy0g
 ICAgcmV0dXJuIFRTX0hUVFBfU0VORF9SRVNQT05TRV9IRFJfSE9PSzsKKy0gICAgYnJlYWs7Cist
 ICBjYXNlIGF0czo6YXBpOjpIb29rVHlwZTo6SE9PS19UUkFOU0FDVElPTl9TVEFSVDoKKy0gICAg
 cmV0dXJuIFRTX0hUVFBfVFhOX1NUQVJUX0hPT0s7CistICAgIGJyZWFrOworLSAgY2FzZSBhdHM6
 OmFwaTo6SG9va1R5cGU6OkhPT0tfVFJBTlNBQ1RJT05fRU5EOgorLSAgICByZXR1cm4gVFNfSFRU
 UF9UWE5fQ0xPU0VfSE9PSzsKKy0gICAgYnJlYWs7CistICB9CistCistICByZXR1cm4gVFNfSFRU
 UF9QUkVfUkVNQVBfSE9PSzsKKy19CistCistdm9pZCBpbmxpbmUgUmVlbmFibGVCYXNlZE9uTmV4
 dFN0YXRlKFRTSHR0cFR4biB0eG5wLCBOZXh0U3RhdGUgbnMpIHsKKy0gIHN3aXRjaCAobnMpIHsK
 Ky0gIGNhc2UgTmV4dFN0YXRlOjpIVFRQX0RPTlRfQ09OVElOVUU6CistICAgIHJldHVybjsKKy0g
 ICAgYnJlYWs7CistICBjYXNlIE5leHRTdGF0ZTo6SFRUUF9FUlJPUjoKKy0gICAgVFNIdHRwVHhu
 UmVlbmFibGUodHhucCwgc3RhdGljX2Nhc3Q8VFNFdmVudD4oVFNfRVZFTlRfSFRUUF9FUlJPUikp
 OworLSAgICBicmVhazsKKy0gIGNhc2UgTmV4dFN0YXRlOjpIVFRQX0NPTlRJTlVFOgorLSAgZGVm
 YXVsdDoKKy0gICAgVFNIdHRwVHhuUmVlbmFibGUodHhucCwgc3RhdGljX2Nhc3Q8VFNFdmVudD4o
 VFNfRVZFTlRfSFRUUF9DT05USU5VRSkpOworLSAgICBicmVhazsKKy0gIH0KKy19CistCistc3Rk
 OjpzdHJpbmcgcHJpbnRhYmxlX3NvY2thZGRyX2lwKHNvY2thZGRyIGNvbnN0ICogc19zb2NrYWRk
 cikgeworLSAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICogc19zb2NrYWRkcl9pbiA9CistICAg
 ICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKj4oc19zb2NrYWRk
 cik7CistCistICBjaGFyIHJlc1tJTkVUX0FERFJTVFJMRU5dOworLSAgaW5ldF9udG9wKEFGX0lO
 RVQsICZzX3NvY2thZGRyX2luLT5zaW5fYWRkciwgcmVzLCBJTkVUX0FERFJTVFJMRU4pOworLQor
 LSAgcmV0dXJuIHN0ZDo6c3RyaW5nKHJlcyk7CistfQorLQorLXN0ZDo6c3RyaW5nIGF0czo6YXBp
 OjpHZXRQcmlzdGluZVJlcXVlc3RVcmwoVHJhbnNhY3Rpb24gJnQpIHsKKy0gIFRTTUJ1ZmZlciBi
 dWZwOworLSAgVFNNTG9jIHVybF9sb2M7CistCistICBpZiAoVFNIdHRwVHhuUHJpc3RpbmVVcmxH
 ZXQodC50c19odHRwX3R4bl8sICZidWZwLCAmdXJsX2xvYykgIT0gVFNfU1VDQ0VTUykKKy0gICAg
 cmV0dXJuIHN0ZDo6c3RyaW5nKCk7CistCistICBpbnQgdXJsX2xlbjsKKy0gIGNoYXIgKnVybHAg
 PSBUU1VybFN0cmluZ0dldChidWZwLCB1cmxfbG9jLCAmdXJsX2xlbik7CistICBzdGQ6OnN0cmlu
 ZyB1cmwodXJscCwgdXJsX2xlbik7CistCistICBUU2ZyZWUodXJscCk7CistCistICBUU0hhbmRs
 ZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgdXJsX2xvYyk7CistCistICByZXR1cm4g
 dXJsOworLX0KKy0KKy1zdGQ6OnN0cmluZyBhdHM6OmFwaTo6R2V0UmVxdWVzdFVybChUcmFuc2Fj
 dGlvbiAmdCkgeworLSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xvYzsKKy0gIFRT
 TUxvYyB1cmxfbG9jOworLQorLSAgaWYgKFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBf
 dHhuXywgJmJ1ZnAsICZoZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1cm4gc3RkOjpz
 dHJpbmcoKTsKKy0KKy0gIFRTSHR0cEhkclVybEdldChidWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7
 CistCistICBpbnQgdXJsX2xlbjsKKy0gIGNoYXIgKnVybHAgPSBUU1VybFN0cmluZ0dldChidWZw
 LCB1cmxfbG9jLCAmdXJsX2xlbik7CistICBzdGQ6OnN0cmluZyB1cmwodXJscCwgdXJsX2xlbik7
 CistCistICBUU2ZyZWUodXJscCk7CistCistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIGhk
 cl9sb2MsIHVybF9sb2MpOworLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01M
 T0MsIGhkcl9sb2MpOworLQorLSAgcmV0dXJuIHVybDsKKy19CistCistc3RkOjpzdHJpbmcgYXRz
 OjphcGk6OkdldFJlcXVlc3RVcmxTY2hlbWUoVHJhbnNhY3Rpb24gJnQpIHsKKy0gIFRTTUJ1ZmZl
 ciBidWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIGlm
 IChUU0h0dHBUeG5DbGllbnRSZXFHZXQodC50c19odHRwX3R4bl8sICZidWZwLCAmaGRyX2xvYykg
 IT0gVFNfU1VDQ0VTUykKKy0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CistCistICBUU0h0dHBI
 ZHJVcmxHZXQoYnVmcCwgaGRyX2xvYywgJnVybF9sb2MpOworLQorLSAgaW50IHNjaGVtZV9sZW5n
 dGg7CistICBjb25zdCBjaGFyICpzY2hlbWUgPSBUU1VybFNjaGVtZUdldChidWZwLCB1cmxfbG9j
 LCAmc2NoZW1lX2xlbmd0aCk7CistCistICBzdGQ6OnN0cmluZyByZXQoc2NoZW1lLCBzY2hlbWVf
 bGVuZ3RoKTsKKy0KKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgaGRyX2xvYywgdXJsX2xv
 Yyk7CistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xvYyk7
 CistCistICByZXR1cm4gcmV0OworLX0KKy0KKy0KKy1zdGQ6OnN0cmluZyBhdHM6OmFwaTo6R2V0
 UHJpc3RpbmVSZXF1ZXN0VXJsU2NoZW1lKFRyYW5zYWN0aW9uICZ0KSB7CistICBUU01CdWZmZXIg
 YnVmcDsKKy0gIFRTTUxvYyB1cmxfbG9jOworLQorLSAgVFNIdHRwVHhuUHJpc3RpbmVVcmxHZXQo
 dC50c19odHRwX3R4bl8sICZidWZwLCAmdXJsX2xvYyk7CistCistICBpbnQgbGVuZ3RoOworLSAg
 Y29uc3QgY2hhciAqc2NoZW1lID0gVFNVcmxIb3N0R2V0KGJ1ZnAsIHVybF9sb2MsICZsZW5ndGgp
 OworLQorLSAgc3RkOjpzdHJpbmcgcmV0KHNjaGVtZSwgbGVuZ3RoKTsKKy0KKy0gIFRTSGFuZGxl
 TUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCB1cmxfbG9jKTsKKy0KKy0gIHJldHVybiBy
 ZXQ7CistfQorLQorLXZvaWQgYXRzOjphcGk6OlNldFJlcXVlc3RVcmxTY2hlbWUoVHJhbnNhY3Rp
 b24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZzY2hlbWUpIHsKKy0gIFRTTUJ1ZmZlciBidWZwOwor
 LSAgVFNNTG9jIGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIFRTSHR0cFR4bkNs
 aWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKTsKKy0gIFRTSHR0cEhk
 clVybEdldChidWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistCistICBUU1VybEhvc3RTZXQoYnVm
 cCwgdXJsX2xvYywgc2NoZW1lLmNfc3RyKCksIHNjaGVtZS5sZW5ndGgoKSk7CistCistICBUU0hh
 bmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIGhkcl9sb2MsIHVybF9sb2MpOworLSAgVFNIYW5kbGVNTG9j
 UmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9sb2MpOworLX0KKy0KKy0KKy1zdGQ6OnN0
 cmluZyBhdHM6OmFwaTo6R2V0UmVxdWVzdFVybFF1ZXJ5KFRyYW5zYWN0aW9uICZ0KSB7CistICBU
 U01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9jOworLSAgVFNNTG9jIHVybF9sb2M7Cist
 CistICBpZiAoVFNIdHRwVHhuQ2xpZW50UmVxR2V0KHQudHNfaHR0cF90eG5fLCAmYnVmcCwgJmhk
 cl9sb2MpICE9IFRTX1NVQ0NFU1MpCistICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworLQorLSAg
 VFNIdHRwSGRyVXJsR2V0KGJ1ZnAsIGhkcl9sb2MsICZ1cmxfbG9jKTsKKy0KKy0gIGludCBxdWVy
 eV9sZW5ndGg7CistICBjb25zdCBjaGFyICpxdWVyeSA9IFRTVXJsSHR0cFF1ZXJ5R2V0KGJ1ZnAs
 IHVybF9sb2MsICZxdWVyeV9sZW5ndGgpOworLQorLSAgc3RkOjpzdHJpbmcgcmV0KHF1ZXJ5LCBx
 dWVyeV9sZW5ndGgpOworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBoZHJfbG9jLCB1
 cmxfbG9jKTsKKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJf
 bG9jKTsKKy0KKy0gIHJldHVybiByZXQ7CistfQorLQorLXN0ZDo6c3RyaW5nIGF0czo6YXBpOjpH
 ZXRQcmlzdGluZVJlcXVlc3RVcmxRdWVyeShUcmFuc2FjdGlvbiAmdCkgeworLSAgVFNNQnVmZmVy
 IGJ1ZnA7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIFRTSHR0cFR4blByaXN0aW5lVXJsR2V0
 KHQudHNfaHR0cF90eG5fLCAmYnVmcCwgJnVybF9sb2MpOworLQorLSAgaW50IHF1ZXJ5X2xlbmd0
 aDsKKy0gIGNvbnN0IGNoYXIgKnF1ZXJ5ID0gVFNVcmxIb3N0R2V0KGJ1ZnAsIHVybF9sb2MsICZx
 dWVyeV9sZW5ndGgpOworLQorLSAgc3RkOjpzdHJpbmcgcmV0KHF1ZXJ5LCBxdWVyeV9sZW5ndGgp
 OworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIHVybF9sb2Mp
 OworLQorLSAgcmV0dXJuIHJldDsKKy19CistCistdm9pZCBhdHM6OmFwaTo6U2V0UmVxdWVzdFVy
 bFF1ZXJ5KFRyYW5zYWN0aW9uICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmcXVlcnkpIHsKKy0gIFRT
 TUJ1ZmZlciBidWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0K
 Ky0gIFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9j
 KTsKKy0gIFRTSHR0cEhkclVybEdldChidWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistCistICBU
 U1VybEhvc3RTZXQoYnVmcCwgdXJsX2xvYywgcXVlcnkuY19zdHIoKSwgcXVlcnkubGVuZ3RoKCkp
 OworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBoZHJfbG9jLCB1cmxfbG9jKTsKKy0g
 IFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJfbG9jKTsKKy19Cist
 Cistc3RkOjpzdHJpbmcgYXRzOjphcGk6OkdldFJlcXVlc3RVcmxIb3N0KFRyYW5zYWN0aW9uICZ0
 KSB7CistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9jOworLSAgVFNNTG9jIHVy
 bF9sb2M7CistCistICBpZiAoVFNIdHRwVHhuQ2xpZW50UmVxR2V0KHQudHNfaHR0cF90eG5fLCAm
 YnVmcCwgJmhkcl9sb2MpICE9IFRTX1NVQ0NFU1MpCistICAgIHJldHVybiBzdGQ6OnN0cmluZygp
 OworLQorLSAgVFNIdHRwSGRyVXJsR2V0KGJ1ZnAsIGhkcl9sb2MsICZ1cmxfbG9jKTsKKy0KKy0g
 IGludCBob3N0X2xlbmd0aDsKKy0gIGNvbnN0IGNoYXIgKmhvc3QgPSBUU1VybEhvc3RHZXQoYnVm
 cCwgdXJsX2xvYywgJmhvc3RfbGVuZ3RoKTsKKy0KKy0gIHN0ZDo6c3RyaW5nIHJldChob3N0LCBo
 b3N0X2xlbmd0aCk7CistCistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIGhkcl9sb2MsIHVy
 bF9sb2MpOworLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9s
 b2MpOworLQorLSAgcmV0dXJuIHJldDsKKy19CistCistc3RkOjpzdHJpbmcgYXRzOjphcGk6Okdl
 dFByaXN0aW5lUmVxdWVzdFVybEhvc3QoVHJhbnNhY3Rpb24gJnQpIHsKKy0gIFRTTUJ1ZmZlciBi
 dWZwOworLSAgVFNNTG9jIHVybF9sb2M7CistCistICBUU0h0dHBUeG5QcmlzdGluZVVybEdldCh0
 LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZ1cmxfbG9jKTsKKy0KKy0gIGludCBob3N0X2xlbmd0aDsK
 Ky0gIGNvbnN0IGNoYXIgKmhvc3QgPSBUU1VybEhvc3RHZXQoYnVmcCwgdXJsX2xvYywgJmhvc3Rf
 bGVuZ3RoKTsKKy0KKy0gIHN0ZDo6c3RyaW5nIHJldChob3N0LCBob3N0X2xlbmd0aCk7CistCist
 ICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgdXJsX2xvYyk7CistCist
 ICByZXR1cm4gcmV0OworLX0KKy0KKy12b2lkIGF0czo6YXBpOjpTZXRSZXF1ZXN0VXJsSG9zdChU
 cmFuc2FjdGlvbiAmdCwgY29uc3Qgc3RkOjpzdHJpbmcgJmhvc3QpIHsKKy0gIFRTTUJ1ZmZlciBi
 dWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIFRTSHR0
 cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKTsKKy0gIFRT
 SHR0cEhkclVybEdldChidWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistCistICBUU1VybEhvc3RT
 ZXQoYnVmcCwgdXJsX2xvYywgaG9zdC5jX3N0cigpLCBob3N0Lmxlbmd0aCgpKTsKKy0KKy0KKy0g
 IFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgaGRyX2xvYywgdXJsX2xvYyk7CistICBUU0hhbmRs
 ZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xvYyk7CistfQorLQorLXN0ZDo6
 c3RyaW5nIGF0czo6YXBpOjpHZXRSZXF1ZXN0VXJsUGF0aChUcmFuc2FjdGlvbiAmdCkgeworLSAg
 VFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xvYzsKKy0gIFRTTUxvYyB1cmxfbG9jOwor
 LQorLSAgaWYgKFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZo
 ZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKy0KKy0g
 IFRTSHR0cEhkclVybEdldChidWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistCistICBpbnQgcGF0
 aF9sZW5ndGg7CistICBjb25zdCBjaGFyICpwYXRoID0gVFNVcmxQYXRoR2V0KGJ1ZnAsIHVybF9s
 b2MsICZwYXRoX2xlbmd0aCk7CistCistICBzdGQ6OnN0cmluZyByZXQocGF0aCwgcGF0aF9sZW5n
 dGgpOworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBoZHJfbG9jLCB1cmxfbG9jKTsK
 Ky0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJfbG9jKTsKKy0K
 Ky0gIHJldHVybiByZXQ7CistfQorLQorLXVuc2lnbmVkIGludCBhdHM6OmFwaTo6R2V0UmVxdWVz
 dFVybFBvcnQoVHJhbnNhY3Rpb24gJnQpIHsKKy0gIFRTTUJ1ZmZlciBidWZwOworLSAgVFNNTG9j
 IGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIFRTSHR0cFR4bkNsaWVudFJlcUdl
 dCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKTsKKy0gIFRTSHR0cEhkclVybEdldChi
 dWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistICBpbnQgcG9ydCA9IFRTVXJsUG9ydEdldChidWZw
 LCB1cmxfbG9jKTsKKy0KKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgaGRyX2xvYywgdXJs
 X2xvYyk7CistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xv
 Yyk7CistCistICByZXR1cm4gcG9ydDsKKy19CistCistdW5zaWduZWQgaW50IGF0czo6YXBpOjpH
 ZXRQcmlzdGluZVJlcXVlc3RVcmxQb3J0KFRyYW5zYWN0aW9uICZ0KSB7CistICBUU01CdWZmZXIg
 YnVmcDsKKy0gIFRTTUxvYyB1cmxfbG9jOworLQorLSAgVFNIdHRwVHhuUHJpc3RpbmVVcmxHZXQo
 dC50c19odHRwX3R4bl8sICZidWZwLCAmdXJsX2xvYyk7CistICBpbnQgcG9ydCA9IFRTVXJsUG9y
 dEdldChidWZwLCB1cmxfbG9jKTsKKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVM
 TF9NTE9DLCB1cmxfbG9jKTsgLy8gVE9ETzogaXMgdGhpcyB3cm9uZz8KKy0KKy0gIHJldHVybiBw
 b3J0OworLX0KKy0KKy12b2lkIGF0czo6YXBpOjpTZXRSZXF1ZXN0VXJsUG9ydChUcmFuc2FjdGlv
 biAmdCwgdW5zaWduZWQgaW50IHBvcnQpIHsKKy0gIFRTTUJ1ZmZlciBidWZwOworLSAgVFNNTG9j
 IGhkcl9sb2M7CistICBUU01Mb2MgdXJsX2xvYzsKKy0KKy0gIFRTSHR0cFR4bkNsaWVudFJlcUdl
 dCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKTsKKy0gIFRTSHR0cEhkclVybEdldChi
 dWZwLCBoZHJfbG9jLCAmdXJsX2xvYyk7CistCistICBUU1VybFBvcnRTZXQoYnVmcCwgdXJsX2xv
 YywgcG9ydCk7CistCistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIGhkcl9sb2MsIHVybF9s
 b2MpOworLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9sb2Mp
 OworLX0KKy0KKy1zdGQ6OnN0cmluZyBhdHM6OmFwaTo6R2V0UHJpc3RpbmVSZXF1ZXN0VXJsUGF0
 aChUcmFuc2FjdGlvbiAmdCkgeworLSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgdXJsX2xv
 YzsKKy0KKy0gIFRTSHR0cFR4blByaXN0aW5lVXJsR2V0KHQudHNfaHR0cF90eG5fLCAmYnVmcCwg
 JnVybF9sb2MpOworLQorLSAgaW50IHBhdGhfbGVuZ3RoOworLSAgY29uc3QgY2hhciAqcGF0aCA9
 IFRTVXJsUGF0aEdldChidWZwLCB1cmxfbG9jLCAmcGF0aF9sZW5ndGgpOworLQorLSAgc3RkOjpz
 dHJpbmcgcmV0KHBhdGgsIHBhdGhfbGVuZ3RoKTsKKy0KKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2Uo
 YnVmcCwgVFNfTlVMTF9NTE9DLCB1cmxfbG9jKTsKKy0KKy0gIHJldHVybiByZXQ7CistfQorLQor
 LXZvaWQgYXRzOjphcGk6OlNldFJlcXVlc3RVcmxQYXRoKFRyYW5zYWN0aW9uICZ0LCBjb25zdCBz
 dGQ6OnN0cmluZyAmcGF0aCkgeworLSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xv
 YzsKKy0gIFRTTUxvYyB1cmxfbG9jOworLQorLSAgVFNIdHRwVHhuQ2xpZW50UmVxR2V0KHQudHNf
 aHR0cF90eG5fLCAmYnVmcCwgJmhkcl9sb2MpOworLSAgVFNIdHRwSGRyVXJsR2V0KGJ1ZnAsIGhk
 cl9sb2MsICZ1cmxfbG9jKTsKKy0KKy0gIFRTVXJsUGF0aFNldChidWZwLCB1cmxfbG9jLCBwYXRo
 LmNfc3RyKCksIHBhdGgubGVuZ3RoKCkpOworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZw
 LCBoZHJfbG9jLCB1cmxfbG9jKTsKKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVM
 TF9NTE9DLCBoZHJfbG9jKTsKKy19CistCistc3RhdGljIGludCBHbG9iYWxDb250aW51YXRpb25I
 YW5kbGVyKFRTQ29udCBjb250cCwgVFNFdmVudCAvKiBldmVudCBBVFNfVU5VU0VEICovLCB2b2lk
 ICplZGF0YSkgeworLSAgVFNIdHRwVHhuIHR4bnAgPSBzdGF0aWNfY2FzdDxUU0h0dHBUeG4+KGVk
 YXRhKTsKKy0KKy0gIFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOworLSAgdHJhbnNhY3Rpb24udHNf
 aHR0cF90eG5fID0gdHhucDsKKy0gIHRyYW5zYWN0aW9uLnRzX2NvbnRwXyA9IGNvbnRwOworLQor
 LSAgSG9va0NvbnRpbnVhdGlvbkRhdGEgKmRhdGEgPSBzdGF0aWNfY2FzdDxIb29rQ29udGludWF0
 aW9uRGF0YSo+KFRTQ29udERhdGFHZXQoCistICAgICAgY29udHApKTsKKy0KKy0gIGF0czo6YXBp
 OjpOZXh0U3RhdGUgbnMgPSBkYXRhLT5jYWxsYmFjayh0cmFuc2FjdGlvbik7CistICBSZWVuYWJs
 ZUJhc2VkT25OZXh0U3RhdGUodHhucCwgbnMpOworLQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0
 ZDo6c3RyaW5nIGF0czo6YXBpOjpHZXRDbGllbnRJUChUcmFuc2FjdGlvbiAmdCkgeworLSAgcmV0
 dXJuIHByaW50YWJsZV9zb2NrYWRkcl9pcChUU0h0dHBUeG5DbGllbnRBZGRyR2V0KHQudHNfaHR0
 cF90eG5fKSk7CistfQorLQorLXVuc2lnbmVkIGludCBhdHM6OmFwaTo6R2V0Q2xpZW50UG9ydChU
 cmFuc2FjdGlvbiAmdCkgeworLSAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICogY2xpZW50X3Nv
 Y2thZGRyID0KKy0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9p
 biAqPihUU0h0dHBUeG5DbGllbnRBZGRyR2V0KAorLSAgICAgICAgICB0LnRzX2h0dHBfdHhuXykp
 OworLQorLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obnRvaHMoY2xpZW50X3Nv
 Y2thZGRyLT5zaW5fcG9ydCkpOworLX0KKy0KKy1zdGQ6OnN0cmluZyBhdHM6OmFwaTo6R2V0U2Vy
 dmVySW5jb21pbmdJUChUcmFuc2FjdGlvbiAmdCkgeworLSAgcmV0dXJuIHByaW50YWJsZV9zb2Nr
 YWRkcl9pcChUU0h0dHBUeG5JbmNvbWluZ0FkZHJHZXQodC50c19odHRwX3R4bl8pKTsKKy19Cist
 CistdW5zaWduZWQgaW50IGF0czo6YXBpOjpHZXRTZXJ2ZXJJbmNvbWluZ1BvcnQoVHJhbnNhY3Rp
 b24gJnQpIHsKKy0gIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqIGNsaWVudF9zb2NrYWRkciA9
 CistICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKj4oVFNI
 dHRwVHhuSW5jb21pbmdBZGRyR2V0KAorLSAgICAgICAgICB0LnRzX2h0dHBfdHhuXykpOworLQor
 LSAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obnRvaHMoY2xpZW50X3NvY2thZGRy
 LT5zaW5fcG9ydCkpOworLX0KKy0KKy1ib29sIGF0czo6YXBpOjpJc0ludGVybmFsUmVxdWVzdChU
 cmFuc2FjdGlvbiAmdCkgeworLSAgcmV0dXJuIFRTSHR0cElzSW50ZXJuYWxSZXF1ZXN0KHQudHNf
 aHR0cF90eG5fKSA9PSBUU19TVUNDRVNTOworLX0KKy0KKy1pbnQgYXRzOjphcGk6OkdldFNlcnZl
 clJlc3BvbnNlU3RhdHVzQ29kZShUcmFuc2FjdGlvbiAmdCkgeworLSAgVFNNQnVmZmVyIGJ1ZnA7
 CistICBUU01Mb2MgaGRyX2xvYzsKKy0KKy0gIFRTSHR0cFR4blNlcnZlclJlc3BHZXQodC50c19o
 dHRwX3R4bl8sICZidWZwLCAmaGRyX2xvYyk7CistICBpbnQgc3RhdHVzID0gVFNIdHRwSGRyU3Rh
 dHVzR2V0KGJ1ZnAsIGhkcl9sb2MpOworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBU
 U19OVUxMX01MT0MsIGhkcl9sb2MpOworLQorLSAgcmV0dXJuIHN0YXR1czsKKy19CistCistc3Rk
 OjpzdHJpbmcgYXRzOjphcGk6OkdldFJlcXVlc3RNZXRob2QoVHJhbnNhY3Rpb24gJnQpIHsKKy0K
 Ky0gIFRTTUJ1ZmZlciBidWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistCistICBUU0h0dHBUeG5D
 bGllbnRSZXFHZXQodC50c19odHRwX3R4bl8sICZidWZwLCAmaGRyX2xvYyk7CistCistICBpbnQg
 bWV0aG9kX2xlbjsKKy0gIGNvbnN0IGNoYXIgKm1ldGhvZHAgPSBUU0h0dHBIZHJNZXRob2RHZXQo
 YnVmcCwgaGRyX2xvYywgJm1ldGhvZF9sZW4pOworLSAgc3RkOjpzdHJpbmcgbWV0aG9kKG1ldGhv
 ZHAsIG1ldGhvZF9sZW4pOworLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxM
 X01MT0MsIGhkcl9sb2MpOworLQorLSAgcmV0dXJuIG1ldGhvZDsKKy19CistCistdm9pZCBhdHM6
 OmFwaTo6U2V0UmVxdWVzdE1ldGhvZChUcmFuc2FjdGlvbiAmdCwgY29uc3Qgc3RkOjpzdHJpbmcg
 Jm1ldGhvZCkgeworLSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xvYzsKKy0KKy0g
 IFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKTsK
 Ky0KKy0gIFRTSHR0cEhkck1ldGhvZFNldChidWZwLCBoZHJfbG9jLCBtZXRob2QuY19zdHIoKSwg
 bWV0aG9kLmxlbmd0aCgpKTsKKy0KKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVM
 TF9NTE9DLCBoZHJfbG9jKTsKKy19CistCistdm9pZCBhdHM6OmFwaTo6UmVlbmFibGVUcmFuc2Fj
 dGlvbihUcmFuc2FjdGlvbiAmdCwgTmV4dFN0YXRlIG5zKSB7CistICBSZWVuYWJsZUJhc2VkT25O
 ZXh0U3RhdGUodC50c19odHRwX3R4bl8sIG5zKTsKKy19CistCistc3RhdGljIGludCBUcmFuc2Fj
 dGlvbkNvbnRpbnVhdGlvbkhhbmRsZXIoVFNDb250IGNvbnRwLCBUU0V2ZW50IGV2ZW50LAorLSAg
 ICB2b2lkICplZGF0YSkgeworLSAgVFNIdHRwVHhuIHR4bnAgPSBzdGF0aWNfY2FzdDxUU0h0dHBU
 eG4+KGVkYXRhKTsKKy0KKy0gIFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOworLSAgdHJhbnNhY3Rp
 b24udHNfaHR0cF90eG5fID0gdHhucDsKKy0gIHRyYW5zYWN0aW9uLnRzX2NvbnRwXyA9IGNvbnRw
 OworLQorLSAgTmV4dFN0YXRlIG5zID0gTmV4dFN0YXRlOjpIVFRQX0NPTlRJTlVFOworLSAgSG9v
 a0NvbnRpbnVhdGlvbkRhdGEgKmRhdGEgPSBzdGF0aWNfY2FzdDxIb29rQ29udGludWF0aW9uRGF0
 YSo+KFRTQ29udERhdGFHZXQoCistICAgICAgY29udHApKTsKKy0gIGlmIChldmVudCAhPSBUU19F
 VkVOVF9IVFRQX1RYTl9DTE9TRQorLSAgICAgIHx8IChldmVudCA9PSBUU19FVkVOVF9IVFRQX1RY
 Tl9DTE9TRQorLSAgICAgICAgICAmJiBkYXRhLT50c19ob29rX2lkID09IFRTX0hUVFBfVFhOX0NM
 T1NFX0hPT0spKSB7CistICAgIG5zID0gZGF0YS0+Y2FsbGJhY2sodHJhbnNhY3Rpb24pOworLSAg
 fQorLQorLSAgLy8gV2UgbXVzdCBmcmVlIHRoZSBIb29rQ29udGludWF0aW9uRGF0YSBzdHJ1Y3R1
 cmUgYW5kIGNvbnRpbnVhdGlvbgorLSAgLy8gSWYgdGhpcyB0cmFuc2FjdGlvbiBpcyBjb21wbGV0
 ZQorLSAgaWYgKGV2ZW50ID09IFRTX0VWRU5UX0hUVFBfVFhOX0NMT1NFKSB7CistICAgIGRlbGV0
 ZSBkYXRhOworLSAgICBUU0NvbnREZXN0cm95KGNvbnRwKTsKKy0gIH0KKy0KKy0gIFJlZW5hYmxl
 QmFzZWRPbk5leHRTdGF0ZSh0eG5wLCBucyk7CistICByZXR1cm4gMDsKKy19CistCistdm9pZCog
 YXRzOjphcGk6OkdldFRyYW5zYWN0aW9uSWRlbnRpZmllcihUcmFuc2FjdGlvbiAmdCkgeworLSAg
 cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPih0LnRzX2h0dHBfdHhuXyk7CistfQorLQor
 LXZvaWQgYXRzOjphcGk6OkNyZWF0ZVRyYW5zYWN0aW9uSG9vayhUcmFuc2FjdGlvbiAmdHhuLEhv
 b2tUeXBlIGhvb2ssCistICAgIEdsb2JhbEhvb2tDYWxsYmFjayBjYWxsYmFjaykgeworLSAgVFNI
 dHRwSG9va0lEIHRzX2hvb2tfaWQgPSBUU0hvb2tJREZyb21Ib29rVHlwZShob29rKTsKKy0gIFRT
 Q29udCBjb250cCA9IFRTQ29udENyZWF0ZShUcmFuc2FjdGlvbkNvbnRpbnVhdGlvbkhhbmRsZXIs
 IE5VTEwpOworLQorLSAgSG9va0NvbnRpbnVhdGlvbkRhdGEgKmRhdGEgPSBuZXcgSG9va0NvbnRp
 bnVhdGlvbkRhdGEoKTsKKy0gIGRhdGEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CistICBkYXRhLT5o
 b29rdHlwZSA9IGhvb2s7CistICBkYXRhLT50c19ob29rX2lkID0gdHNfaG9va19pZDsKKy0KKy0g
 IFRTQ29udERhdGFTZXQoY29udHAsIHN0YXRpY19jYXN0PHZvaWQqPihkYXRhKSk7CistICBUU0h0
 dHBUeG5Ib29rQWRkKHR4bi50c19odHRwX3R4bl8sIHRzX2hvb2tfaWQsIGNvbnRwKTsKKy0KKy0g
 IGlmICh0c19ob29rX2lkICE9IFRTX0hUVFBfVFhOX0NMT1NFX0hPT0spIHsKKy0gICAgVFNIdHRw
 VHhuSG9va0FkZCh0eG4udHNfaHR0cF90eG5fLCBUU19IVFRQX1RYTl9DTE9TRV9IT09LLCBjb250
 cCk7CistICB9CistfQorLQorLXZvaWQgYXRzOjphcGk6OkNyZWF0ZUdsb2JhbEhvb2soSG9va1R5
 cGUgaG9vaywgR2xvYmFsSG9va0NhbGxiYWNrIGNhbGxiYWNrKSB7CistCistICBUU0h0dHBIb29r
 SUQgdHNfaG9va19pZCA9IFRTSG9va0lERnJvbUhvb2tUeXBlKGhvb2spOworLSAgVFNDb250IGNv
 bnRwID0gVFNDb250Q3JlYXRlKEdsb2JhbENvbnRpbnVhdGlvbkhhbmRsZXIsIE5VTEwpOworLQor
 LSAgSG9va0NvbnRpbnVhdGlvbkRhdGEgKmRhdGEgPSBuZXcgSG9va0NvbnRpbnVhdGlvbkRhdGEo
 KTsKKy0gIGRhdGEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CistICBkYXRhLT5ob29rdHlwZSA9IGhv
 b2s7CistCistICBUU0NvbnREYXRhU2V0KGNvbnRwLCBzdGF0aWNfY2FzdDx2b2lkKj4oZGF0YSkp
 OworLSAgVFNIdHRwSG9va0FkZCh0c19ob29rX2lkLCBjb250cCk7CistfQorLQorLS8qCistICog
 SGVhZGVyIGNvZGUKKy0gKi8KKy0KKy12b2lkIFNldEhlYWRlcihUU01CdWZmZXIgYnVmcCwgVFNN
 TG9jIGhkcl9sb2MsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorLSAgICBjb25zdCBzdGQ6OnZl
 Y3RvcjxzdGQ6OnN0cmluZz4gJnZhbHVlcykgeworLQorLSAgVFNNTG9jIGZpZWxkX2xvYzsKKy0K
 Ky0gIGZpZWxkX2xvYyA9IFRTTWltZUhkckZpZWxkRmluZChidWZwLCBoZHJfbG9jLCBuYW1lLmNf
 c3RyKCksIG5hbWUubGVuZ3RoKCkpOworLQorLSAgLy8gaWYgdGhlIGZpZWxkIGFscmVhZHkgZXhp
 c3RlZCwgbGV0J3MganVzdCBibG93IGl0IGF3YXkuCistICBpZiAoZmllbGRfbG9jKSB7CistICAg
 IFRTTWltZUhkckZpZWxkRGVzdHJveShidWZwLCBoZHJfbG9jLCBmaWVsZF9sb2MpOworLSAgICBU
 U0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYyk7CistICB9CistCist
 ICAvLyBOb3cgaXQgZGVmaW5pdGVseSBkb2Vzbid0IGV4aXN0LCBzbyBhZGQgaXQuCistICBUU01p
 bWVIZHJGaWVsZENyZWF0ZShidWZwLCBoZHJfbG9jLCAmZmllbGRfbG9jKTsKKy0gIFRTTWltZUhk
 ckZpZWxkTmFtZVNldChidWZwLCBoZHJfbG9jLCBmaWVsZF9sb2MsIG5hbWUuY19zdHIoKSwgbmFt
 ZS5sZW5ndGgoKSk7CistCistICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZhbHVlcy5z
 aXplKCk7ICsraSkgeworLSAgICBUU01pbWVIZHJGaWVsZFZhbHVlU3RyaW5nSW5zZXJ0KGJ1ZnAs
 IGhkcl9sb2MsIGZpZWxkX2xvYywgMCwgdmFsdWVzW2ldLmNfc3RyKCksCistICAgICAgICB2YWx1
 ZXNbaV0ubGVuZ3RoKCkpOworLSAgICBUU01pbWVIZHJGaWVsZEFwcGVuZChidWZwLCBoZHJfbG9j
 LCBmaWVsZF9sb2MpOworLSAgfQorLQorLSAgVFNIYW5kbGVNTG9jUmVsZWFzZShidWZwLCBoZHJf
 bG9jLCBmaWVsZF9sb2MpOworLX0KKy0KKy12b2lkIEFwcGVuZEhlYWRlcihUU01CdWZmZXIgYnVm
 cCwgVFNNTG9jIGhkcl9sb2MsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorLSAgICBjb25zdCBz
 dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnZhbHVlcykgeworLQorLSAgVFNNTG9jIGZpZWxkX2xv
 YzsKKy0KKy0gIFRTTWltZUhkckZpZWxkQ3JlYXRlKGJ1ZnAsIGhkcl9sb2MsICZmaWVsZF9sb2Mp
 OworLSAgVFNNaW1lSGRyRmllbGROYW1lU2V0KGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYywgbmFt
 ZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKTsKKy0KKy0gIGZvciAodW5zaWduZWQgaW50IGkgPSAw
 OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CistICAgIFRTTWltZUhkckZpZWxkVmFsdWVTdHJp
 bmdJbnNlcnQoYnVmcCwgaGRyX2xvYywgZmllbGRfbG9jLCAwLCB2YWx1ZXNbaV0uY19zdHIoKSwK
 Ky0gICAgICAgIHZhbHVlc1tpXS5sZW5ndGgoKSk7CistICAgIFRTTWltZUhkckZpZWxkQXBwZW5k
 KGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYyk7CistICB9CistCistICBUU0hhbmRsZU1Mb2NSZWxl
 YXNlKGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYyk7CistfQorLQorLXZvaWQgRGVsZXRlSGVhZGVy
 KFRTTUJ1ZmZlciBidWZwLCBUU01Mb2MgaGRyX2xvYywgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
 IHsKKy0gIFRTTUxvYyBmaWVsZF9sb2M7CistCistICBmaWVsZF9sb2MgPSBUU01pbWVIZHJGaWVs
 ZEZpbmQoYnVmcCwgaGRyX2xvYywgbmFtZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKTsKKy0KKy0g
 IGlmIChmaWVsZF9sb2MpIHsKKy0gICAgVFNNaW1lSGRyRmllbGREZXN0cm95KGJ1ZnAsIGhkcl9s
 b2MsIGZpZWxkX2xvYyk7CistICAgIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgaGRyX2xvYywg
 ZmllbGRfbG9jKTsKKy0gIH0KKy19CistCistLyoKKy0gKiBPYnZpb3VzbHkgdGhpcyBzaG91bGQg
 YmUgb3B0aW1pemVkIHRvIGVpdGhlciBmaWxsIGluIGEgcGFzc2VkIHZlY3RvcgorLSAqIG9yIGp1
 c3QgcmV0dXJuZWQgYSBzaGFyZWRfcHRyIHRvIHRoZSBidWlsZCB2ZWN0b3IsIHRoaXMgaXMgYW4g
 ZXhlcmNpc2UKKy0gKiBsZWZ0IHRvIHRoZSByZWFkZXIuCistICovCistYXRzOjphcGk6OmhlYWRl
 cnM6OkhlYWRlclZlY3RvciBHZXRIZWFkZXJzKFRTTUJ1ZmZlciBidWZwLCBUU01Mb2MgaGRyX2xv
 YykgeworLQorLSAgVFNNTG9jIGZpZWxkX2xvYzsKKy0KKy0gIGF0czo6YXBpOjpoZWFkZXJzOjpI
 ZWFkZXJWZWN0b3IgaHY7CistCistICBmaWVsZF9sb2MgPSBUU01pbWVIZHJGaWVsZEdldChidWZw
 LCBoZHJfbG9jLCAwKTsKKy0gIHdoaWxlIChmaWVsZF9sb2MpIHsKKy0gICAgLyogY29weSB0aGUg
 aGVhZGVyIHRvIGEgbW9yZSBmcmllZGx5IGRhdGEgc3RydWN0dXJlICovCistICAgIGludCBuYW1l
 X2xlbmd0aDsKKy0gICAgY29uc3QgY2hhciAqZmllbGROYW1lID0gVFNNaW1lSGRyRmllbGROYW1l
 R2V0KGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYywgJm5hbWVfbGVuZ3RoKTsKKy0KKy0gICAgYXRz
 OjphcGk6OmhlYWRlcnM6OkhlYWRlciBoZHI7CistICAgIGhkci5hc3NpZ25OYW1lKGZpZWxkTmFt
 ZSwgbmFtZV9sZW5ndGgpOworLQorLSAgICAvKiBub3cgd2UgaGF2ZSB0byB3YWxrIGFsbCB0aGUg
 dmFsdWVzIGFuZCBhZGQgdGhlbSAqLworLSAgICBpbnQgbnVtVmFsdWVzID0gVFNNaW1lSGRyRmll
 bGRWYWx1ZXNDb3VudChidWZwLCBoZHJfbG9jLCBmaWVsZF9sb2MpOworLSAgICBmb3IgKGludCBp
 bmR4ID0gMDsgaW5keCA8IG51bVZhbHVlczsgKytpbmR4KSB7CistICAgICAgaW50IHZhbF9sZW5n
 dGg7CistICAgICAgY29uc3QgY2hhciAqdmFsdWUgPSBUU01pbWVIZHJGaWVsZFZhbHVlU3RyaW5n
 R2V0KGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYywgaW5keCwgJnZhbF9sZW5ndGgpOworLSAgICAg
 IGhkci5hZGROZXdWYWx1ZSh2YWx1ZSwgdmFsX2xlbmd0aCk7CistICAgIH0KKy0KKy0gICAgaHYu
 cHVzaF9iYWNrKGhkcik7CistCistICAgIC8qIEdldCB0aGUgbmV4dCBmaWVsZCBhbmQgcmVsZWFz
 ZSB0aGUgY3VycmVudCBvbmUgKi8KKy0gICAgVFNNTG9jIG5leHRfZmllbGRfbG9jID0gVFNNaW1l
 SGRyRmllbGROZXh0KGJ1ZnAsIGhkcl9sb2MsIGZpZWxkX2xvYyk7CistICAgIFRTSGFuZGxlTUxv
 Y1JlbGVhc2UoYnVmcCwgaGRyX2xvYywgZmllbGRfbG9jKTsKKy0gICAgZmllbGRfbG9jID0gbmV4
 dF9maWVsZF9sb2M7CistICB9CistCistICByZXR1cm4gaHY7CistfQorLQorLS8qCistICogVE9E
 TzogQWxsIG9mIHRoZXNlIGNhbiBiZSBpbXByb3ZlZCBieSBjYWNoaW5nIGFuZCB0aGVuIGludmFs
 aWRhdGluZyB0aGUKKy0gKiBoZWFkZXIgY2FjaGUgd2hlbiBhIGRlbGV0ZSwgYXBwZW5kLCBvciBz
 ZXQgb2NjdXJzLgorLSAqLworLQorLXZvaWQgYXRzOjphcGk6OmhlYWRlcnM6OkRlbGV0ZUNsaWVu
 dFJlcXVlc3RIZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSB7
 CistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9jOworLQorLSAgaWYgKFRTSHR0
 cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKSAhPSBUU19T
 VUNDRVNTKQorLSAgICByZXR1cm47CistCistICBEZWxldGVIZWFkZXIoYnVmcCwgaGRyX2xvYywg
 bmFtZSk7CistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xv
 Yyk7CistfQorLQorLXZvaWQgYXRzOjphcGk6OmhlYWRlcnM6OkRlbGV0ZUNsaWVudFJlc3BvbnNl
 SGVhZGVyKFRyYW5zYWN0aW9uICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgeworLSAgVFNN
 QnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xvYzsKKy0KKy0gIGlmIChUU0h0dHBUeG5DbGll
 bnRSZXNwR2V0KHQudHNfaHR0cF90eG5fLCAmYnVmcCwgJmhkcl9sb2MpICE9IFRTX1NVQ0NFU1Mp
 CistICAgIHJldHVybjsKKy0KKy0gIERlbGV0ZUhlYWRlcihidWZwLCBoZHJfbG9jLCBuYW1lKTsK
 Ky0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJfbG9jKTsKKy19
 CistCistdm9pZCBhdHM6OmFwaTo6aGVhZGVyczo6RGVsZXRlU2VydmVyUmVzcG9uc2VIZWFkZXIo
 VHJhbnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSB7CistICBUU01CdWZmZXIg
 YnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9jOworLQorLSAgaWYgKFRTSHR0cFR4blNlcnZlclJlc3BH
 ZXQodC50c19odHRwX3R4bl8sICZidWZwLCAmaGRyX2xvYykgIT0gVFNfU1VDQ0VTUykKKy0gICAg
 cmV0dXJuOworLQorLSAgRGVsZXRlSGVhZGVyKGJ1ZnAsIGhkcl9sb2MsIG5hbWUpOworLSAgVFNI
 YW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9sb2MpOworLX0KKy0KKy12
 b2lkIGF0czo6YXBpOjpoZWFkZXJzOjpTZXRDbGllbnRSZXF1ZXN0SGVhZGVyKFRyYW5zYWN0aW9u
 ICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwKKy0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk
 OjpzdHJpbmc+ICZ2YWxzKSB7CistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9j
 OworLQorLSAgaWYgKFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhuXywgJmJ1ZnAs
 ICZoZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1cm47CistCistICBTZXRIZWFkZXIo
 YnVmcCwgaGRyX2xvYywgbmFtZSwgdmFscyk7CistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAs
 IFRTX05VTExfTUxPQywgaGRyX2xvYyk7CistfQorLQorLXZvaWQgYXRzOjphcGk6OmhlYWRlcnM6
 OlNldENsaWVudFJlcXVlc3RIZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5n
 ICZuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFsKSB7CistCistICBzdGQ6OnZlY3RvcjxzdGQ6
 OnN0cmluZz4gdmFsczsKKy0gIHZhbHMucHVzaF9iYWNrKHZhbCk7CistICBTZXRDbGllbnRSZXF1
 ZXN0SGVhZGVyKHQsIG5hbWUsIHZhbHMpOworLX0KKy0KKy12b2lkIGF0czo6YXBpOjpoZWFkZXJz
 OjpTZXRDbGllbnRSZXNwb25zZUhlYWRlcihUcmFuc2FjdGlvbiAmdCwgY29uc3Qgc3RkOjpzdHJp
 bmcgJm5hbWUsCistICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmdmFscykgewor
 LSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01Mb2MgaGRyX2xvYzsKKy0KKy0gIGlmIChUU0h0dHBU
 eG5DbGllbnRSZXNwR2V0KHQudHNfaHR0cF90eG5fLCAmYnVmcCwgJmhkcl9sb2MpICE9IFRTX1NV
 Q0NFU1MpCistICAgIHJldHVybjsKKy0KKy0gIFNldEhlYWRlcihidWZwLCBoZHJfbG9jLCBuYW1l
 LCB2YWxzKTsKKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJf
 bG9jKTsKKy19CistCistdm9pZCBhdHM6OmFwaTo6aGVhZGVyczo6U2V0Q2xpZW50UmVzcG9uc2VI
 ZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBjb25zdCBzdGQ6
 OnN0cmluZyAmdmFsKSB7CistCistICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFsczsKKy0g
 IHZhbHMucHVzaF9iYWNrKHZhbCk7CistICBTZXRDbGllbnRSZXNwb25zZUhlYWRlcih0LCBuYW1l
 LCB2YWxzKTsKKy19CistCistdm9pZCBhdHM6OmFwaTo6aGVhZGVyczo6U2V0U2VydmVyUmVzcG9u
 c2VIZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorLSAgICBj
 b25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnZhbHMpIHsKKy0gIFRTTUJ1ZmZlciBidWZw
 OworLSAgVFNNTG9jIGhkcl9sb2M7CistCistICBpZiAoVFNIdHRwVHhuU2VydmVyUmVzcEdldCh0
 LnRzX2h0dHBfdHhuXywgJmJ1ZnAsICZoZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1
 cm47CistCistICBTZXRIZWFkZXIoYnVmcCwgaGRyX2xvYywgbmFtZSwgdmFscyk7CistICBUU0hh
 bmRsZU1Mb2NSZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xvYyk7CistfQorLQorLXZv
 aWQgYXRzOjphcGk6OmhlYWRlcnM6OlNldFNlcnZlclJlc3BvbnNlSGVhZGVyKFRyYW5zYWN0aW9u
 ICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcgJnZhbCkgewor
 LQorLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZhbHM7CistICB2YWxzLnB1c2hfYmFjayh2
 YWwpOworLSAgU2V0U2VydmVyUmVzcG9uc2VIZWFkZXIodCwgbmFtZSwgdmFscyk7CistfQorLQor
 LXZvaWQgYXRzOjphcGk6OmhlYWRlcnM6OkFwcGVuZFNlcnZlclJlc3BvbnNlSGVhZGVyKFRyYW5z
 YWN0aW9uICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwKKy0gICAgY29uc3Qgc3RkOjp2ZWN0
 b3I8c3RkOjpzdHJpbmc+ICZ2YWxzKSB7CistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBo
 ZHJfbG9jOworLQorLSAgaWYgKFRTSHR0cFR4blNlcnZlclJlc3BHZXQodC50c19odHRwX3R4bl8s
 ICZidWZwLCAmaGRyX2xvYykgIT0gVFNfU1VDQ0VTUykKKy0gICAgcmV0dXJuOworLQorLSAgQXBw
 ZW5kSGVhZGVyKGJ1ZnAsIGhkcl9sb2MsIG5hbWUsIHZhbHMpOworLSAgVFNIYW5kbGVNTG9jUmVs
 ZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9sb2MpOworLX0KKy0KKy12b2lkIGF0czo6YXBp
 OjpoZWFkZXJzOjpBcHBlbmRTZXJ2ZXJSZXNwb25zZUhlYWRlcihUcmFuc2FjdGlvbiAmdCwgY29u
 c3Qgc3RkOjpzdHJpbmcgJm5hbWUsCistICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YWwpIHsKKy0K
 Ky0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2YWxzOworLSAgdmFscy5wdXNoX2JhY2sodmFs
 KTsKKy0gIEFwcGVuZFNlcnZlclJlc3BvbnNlSGVhZGVyKHQsIG5hbWUsIHZhbHMpOworLX0KKy0K
 Ky12b2lkIGF0czo6YXBpOjpoZWFkZXJzOjpBcHBlbmRDbGllbnRSZXF1ZXN0SGVhZGVyKFRyYW5z
 YWN0aW9uICZ0LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwKKy0gICAgY29uc3Qgc3RkOjp2ZWN0
 b3I8c3RkOjpzdHJpbmc+ICZ2YWxzKSB7CistCistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxv
 YyBoZHJfbG9jOworLQorLSAgaWYgKFRTSHR0cFR4bkNsaWVudFJlcUdldCh0LnRzX2h0dHBfdHhu
 XywgJmJ1ZnAsICZoZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1cm47CistCistICBB
 cHBlbmRIZWFkZXIoYnVmcCwgaGRyX2xvYywgbmFtZSwgdmFscyk7CistICBUU0hhbmRsZU1Mb2NS
 ZWxlYXNlKGJ1ZnAsIFRTX05VTExfTUxPQywgaGRyX2xvYyk7CistfQorLQorLXZvaWQgYXRzOjph
 cGk6OmhlYWRlcnM6OkFwcGVuZENsaWVudFJlcXVlc3RIZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNv
 bnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorLSAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFsKSB7Cist
 CistICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFsczsKKy0gIHZhbHMucHVzaF9iYWNrKHZh
 bCk7CistICBBcHBlbmRDbGllbnRSZXF1ZXN0SGVhZGVyKHQsIG5hbWUsIHZhbHMpOworLX0KKy0K
 Ky12b2lkIGF0czo6YXBpOjpoZWFkZXJzOjpBcHBlbmRDbGllbnRSZXNwb25zZUhlYWRlcihUcmFu
 c2FjdGlvbiAmdCwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsCistICAgIGNvbnN0IHN0ZDo6dmVj
 dG9yPHN0ZDo6c3RyaW5nPiAmdmFscykgeworLQorLSAgVFNNQnVmZmVyIGJ1ZnA7CistICBUU01M
 b2MgaGRyX2xvYzsKKy0KKy0gIGlmIChUU0h0dHBUeG5DbGllbnRSZXNwR2V0KHQudHNfaHR0cF90
 eG5fLCAmYnVmcCwgJmhkcl9sb2MpICE9IFRTX1NVQ0NFU1MpCistICAgIHJldHVybjsKKy0KKy0g
 IEFwcGVuZEhlYWRlcihidWZwLCBoZHJfbG9jLCBuYW1lLCB2YWxzKTsKKy0gIFRTSGFuZGxlTUxv
 Y1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9DLCBoZHJfbG9jKTsKKy19CistCistdm9pZCBhdHM6
 OmFwaTo6aGVhZGVyczo6QXBwZW5kQ2xpZW50UmVzcG9uc2VIZWFkZXIoVHJhbnNhY3Rpb24gJnQs
 IGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLAorLSAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFsKSB7
 CistCistICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdmFsczsKKy0gIHZhbHMucHVzaF9iYWNr
 KHZhbCk7CistICBBcHBlbmRDbGllbnRSZXNwb25zZUhlYWRlcih0LCBuYW1lLCB2YWxzKTsKKy19
 CistCistYXRzOjphcGk6OmhlYWRlcnM6OkhlYWRlclZlY3RvciBhdHM6OmFwaTo6aGVhZGVyczo6
 R2V0Q2xpZW50UmVxdWVzdEhlYWRlcnMoVHJhbnNhY3Rpb24gJnQpIHsKKy0gIFRTTUJ1ZmZlciBi
 dWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistCistICBIZWFkZXJWZWN0b3IgaHY7CistCistICBp
 ZiAoVFNIdHRwVHhuQ2xpZW50UmVxR2V0KHQudHNfaHR0cF90eG5fLCAmYnVmcCwgJmhkcl9sb2Mp
 ICE9IFRTX1NVQ0NFU1MpCistICAgIHJldHVybiBodjsKKy0KKy0gIGh2ID0gR2V0SGVhZGVycyhi
 dWZwLCBoZHJfbG9jKTsKKy0gIFRTSGFuZGxlTUxvY1JlbGVhc2UoYnVmcCwgVFNfTlVMTF9NTE9D
 LCBoZHJfbG9jKTsKKy0KKy0gIHJldHVybiBodjsKKy19CistCistYXRzOjphcGk6OmhlYWRlcnM6
 OkhlYWRlclZlY3RvciBhdHM6OmFwaTo6aGVhZGVyczo6R2V0Q2xpZW50UmVzcG9uc2VIZWFkZXJz
 KFRyYW5zYWN0aW9uICZ0KSB7CistICBUU01CdWZmZXIgYnVmcDsKKy0gIFRTTUxvYyBoZHJfbG9j
 OworLQorLSAgSGVhZGVyVmVjdG9yIGh2OworLQorLSAgaWYgKFRTSHR0cFR4bkNsaWVudFJlc3BH
 ZXQodC50c19odHRwX3R4bl8sICZidWZwLCAmaGRyX2xvYykgIT0gVFNfU1VDQ0VTUykKKy0gICAg
 cmV0dXJuIGh2OworLQorLSAgaHYgPSBHZXRIZWFkZXJzKGJ1ZnAsIGhkcl9sb2MpOworLSAgVFNI
 YW5kbGVNTG9jUmVsZWFzZShidWZwLCBUU19OVUxMX01MT0MsIGhkcl9sb2MpOworLQorLSAgcmV0
 dXJuIGh2OworLX0KKy0KKy1hdHM6OmFwaTo6aGVhZGVyczo6SGVhZGVyVmVjdG9yIGF0czo6YXBp
 OjpoZWFkZXJzOjpHZXRTZXJ2ZXJSZXNwb25zZUhlYWRlcnMoVHJhbnNhY3Rpb24gJnQpIHsKKy0g
 IFRTTUJ1ZmZlciBidWZwOworLSAgVFNNTG9jIGhkcl9sb2M7CistCistICBIZWFkZXJWZWN0b3Ig
 aHY7CistCistICBpZiAoVFNIdHRwVHhuU2VydmVyUmVzcEdldCh0LnRzX2h0dHBfdHhuXywgJmJ1
 ZnAsICZoZHJfbG9jKSAhPSBUU19TVUNDRVNTKQorLSAgICByZXR1cm4gaHY7CistCistICBodiA9
 IEdldEhlYWRlcnMoYnVmcCwgaGRyX2xvYyk7CistICBUU0hhbmRsZU1Mb2NSZWxlYXNlKGJ1ZnAs
 IFRTX05VTExfTUxPQywgaGRyX2xvYyk7CistCistICByZXR1cm4gaHY7CistfQorLQorLWlubGlu
 ZSBhdHM6OmFwaTo6aGVhZGVyczo6SGVhZGVyIEdldEhlYWRlcihUcmFuc2FjdGlvbiAmIC8qIHQg
 QVRTX1VOVVNFRCAqLywgY29uc3Qgc3RkOjpzdHJpbmcmIGhkcl9uYW1lLAorLSAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHM6OmFwaTo6aGVhZGVyczo6
 SGVhZGVyVmVjdG9yICZoZHJzKSB7CistCistICBhdHM6OmFwaTo6aGVhZGVyczo6SGVhZGVyIGhk
 cjsKKy0gIGF0czo6YXBpOjpoZWFkZXJzOjpIZWFkZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGlp
 ID0gc3RkOjpmaW5kX2lmKGhkcnMuYmVnaW4oKSwgaGRycy5lbmQoKSwKKy0gICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
 czo6YXBpOjpoZWFkZXJzOjpIZWFkZXJOYW1lKGhkcl9uYW1lKSk7CistCistICBpZiAoaWkgIT0g
 aGRycy5lbmQoKSkgeworLSAgICBoZHIgPSAqaWk7CistICB9CistCistICByZXR1cm4gaGRyOwor
 LX0KKy0KKy1hdHM6OmFwaTo6aGVhZGVyczo6SGVhZGVyIGF0czo6YXBpOjpoZWFkZXJzOjpHZXRD
 bGllbnRSZXF1ZXN0SGVhZGVyKFRyYW5zYWN0aW9uICZ0LCBjb25zdCBzdGQ6OnN0cmluZyYgaGRy
 X25hbWUpIHsKKy0gIHJldHVybiBHZXRIZWFkZXIodCwgaGRyX25hbWUsIEdldENsaWVudFJlcXVl
 c3RIZWFkZXJzKHQpKTsKKy19CistCistYXRzOjphcGk6OmhlYWRlcnM6OkhlYWRlciBhdHM6OmFw
 aTo6aGVhZGVyczo6R2V0Q2xpZW50UmVzcG9uc2VIZWFkZXIoVHJhbnNhY3Rpb24gJnQsIGNvbnN0
 IHN0ZDo6c3RyaW5nJiBoZHJfbmFtZSkgeworLSAgcmV0dXJuIEdldEhlYWRlcih0LCBoZHJfbmFt
 ZSwgR2V0Q2xpZW50UmVzcG9uc2VIZWFkZXJzKHQpKTsKKy19CistCistYXRzOjphcGk6OmhlYWRl
 cnM6OkhlYWRlciBhdHM6OmFwaTo6aGVhZGVyczo6R2V0U2VydmVyUmVzcG9uc2VIZWFkZXIoVHJh
 bnNhY3Rpb24gJnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBoZHJfbmFtZSkgeworLSAgcmV0dXJuIEdl
 dEhlYWRlcih0LCBoZHJfbmFtZSwgR2V0U2VydmVyUmVzcG9uc2VIZWFkZXJzKHQpKTsKKy19Citk
 aWZmIC1ydU4gbGliL2NwcDExYXBpL3RzLWNwcDExLWhlYWRlcnMuaCBsaWIvY3BwMTFhcGkvdHMt
 Y3BwMTEtaGVhZGVycy5oCistLS0gbGliL2NwcDExYXBpL3RzLWNwcDExLWhlYWRlcnMuaAkyMDEz
 LTExLTExIDE0OjAyOjUzLjAwMDAwMDAwMCArMDgwMAorKysrIGxpYi9jcHAxMWFwaS90cy1jcHAx
 MS1oZWFkZXJzLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDEy
 MCArMCwwIEBACistLyoqIEBmaWxlCistIEBzZWN0aW9uIGxpY2Vuc2UgTGljZW5zZQorLQorLSBM
 aWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25l
 CistIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJ
 Q0UgZmlsZQorLSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZv
 cm1hdGlvbgorLSByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5z
 ZXMgdGhpcyBmaWxlCistIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
 Mi4wICh0aGUKKy0gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
 aW4gY29tcGxpYW5jZQorLSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5
 IG9mIHRoZSBMaWNlbnNlIGF0CistCistIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
 SUNFTlNFLTIuMAorLQorLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
 ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCistIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
 bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCistIFdJVEhPVVQgV0FSUkFO
 VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
 LgorLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
 cGVybWlzc2lvbnMgYW5kCistIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLSAqLwor
 LQorLSNpZm5kZWYgVFNfQ1BQMTFfSEVBREVSU19IXworLSNkZWZpbmUgVFNfQ1BQMTFfSEVBREVS
 U19IXworLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgorLSNpbmNsdWRlIDxzdHJpbmc+CistI2luY2x1
 ZGUgPHZlY3Rvcj4KKy0jaW5jbHVkZSA8bWVtb3J5PgorLQorLW5hbWVzcGFjZSBhdHMgeworLW5h
 bWVzcGFjZSBhcGkgeworLW5hbWVzcGFjZSBoZWFkZXJzIHsKKy0KKy1jbGFzcyBIZWFkZXI7Cist
 dHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3RvcjxIZWFkZXI+IEhlYWRlclZlY3RvcjsKKy0KKy1j
 bGFzcyBIZWFkZXIgeworLXByaXZhdGU6CistICBzdGQ6OnN0cmluZyBuYW1lXzsKKy0gIHN0ZDo6
 dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWVsZF92YWx1ZXNfOworLXB1YmxpYzoKKy0gIEhlYWRlcigp
 IHsKKy0gIH0KKy0gIEhlYWRlcihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29uc3Qgc3RkOjpz
 dHJpbmcgJnZhbHVlKSB7CistICAgIG5hbWVfID0gbmFtZTsKKy0gICAgYWRkTmV3VmFsdWUodmFs
 dWUpOworLSAgfQorLQorLSAgSGVhZGVyKHN0ZDo6c3RyaW5nIG5hbWUsIGNvbnN0IHN0ZDo6dmVj
 dG9yPHN0ZDo6c3RyaW5nPiAmIHZhbHVlcykgeworLSAgICBuYW1lXyA9IG5hbWU7CistICAgIGZp
 ZWxkX3ZhbHVlc18gPSB2YWx1ZXM7CistICB9CistCistICB2b2lkIGFzc2lnbk5hbWUoY29uc3Qg
 c3RkOjpzdHJpbmcgJiBuYW1lKSB7CistICAgIG5hbWVfID0gbmFtZTsKKy0gIH0KKy0KKy0gIHZv
 aWQgYXNzaWduTmFtZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pIHsKKy0gICAgbmFtZV8u
 YXNzaWduKGJ1ZiwgbGVuKTsKKy0gIH0KKy0KKy0gIHZvaWQgYWRkTmV3VmFsdWUoY29uc3QgY2hh
 ciAqYnVmLCBzaXplX3QgbGVuKSB7CistICAgIHN0ZDo6c3RyaW5nIG5ld1ZhbChidWYsIGxlbik7
 CistICAgIGZpZWxkX3ZhbHVlc18ucHVzaF9iYWNrKG5ld1ZhbCk7CistICB9CistCistICB2b2lk
 IGFkZE5ld1ZhbHVlKHN0ZDo6c3RyaW5nIHZhbHVlKSB7CistICAgIGZpZWxkX3ZhbHVlc18ucHVz
 aF9iYWNrKHZhbHVlKTsKKy0gIH0KKy0KKy0gIGludCBnZXROdW1WYWx1ZXMoKSBjb25zdCB7Cist
 ICAgIHJldHVybiBmaWVsZF92YWx1ZXNfLnNpemUoKTsKKy0gIH0KKy0KKy0gIHN0ZDo6c3RyaW5n
 IGdldFZhbHVlKGludCB2YWx1ZWluZHgpIGNvbnN0eworLSAgICByZXR1cm4gZmllbGRfdmFsdWVz
 X1t2YWx1ZWluZHhdOworLSAgfQorLQorLSAgc3RkOjpzdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsK
 Ky0gICAgcmV0dXJuIG5hbWVfOworLSAgfQorLQorLSAgc3RkOjpzdHJpbmcgZ2V0Sm9pbmVkVmFs
 dWVzKCkgY29uc3QgeworLSAgICBzdGQ6OnN0cmluZyByZXQ7CistCistICAgIGZvciAoc3RkOjp2
 ZWN0b3I8c3RkOjpzdHJpbmc+OjpzaXplX3R5cGUgaSA9IDA7IGkgPCBmaWVsZF92YWx1ZXNfLnNp
 emUoKTsKKy0gICAgICAgICsraSkgeworLSAgICAgIGlmIChpID4gMCkKKy0gICAgICAgIHJldC5h
 cHBlbmQoIiwiKTsKKy0gICAgICByZXQuYXBwZW5kKGZpZWxkX3ZhbHVlc19baV0pOworLSAgICB9
 CistICAgIHJldHVybiByZXQ7CistICB9CistCistICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
 Z2V0VmFsdWVzKCkgY29uc3QgeworLSAgICByZXR1cm4gZmllbGRfdmFsdWVzXzsKKy0gIH0KKy19
 OworLQorLQorLQorLS8qCistICogIHByZWRpY2F0ZXMKKy0gKi8KKy1jbGFzcyBIZWFkZXJOYW1l
 OiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxIZWFkZXIsIGJvb2w+IHsgLy8gY291bGQgcHJv
 YmFibHkgYmUgcmVwbGFjZWQgd2l0aCBtZW1fcHRyX2Z1bigpLi4KKy1wcml2YXRlOgorLSAgc3Rk
 OjpzdHJpbmcgbmFtZV87CistcHVibGljOgorLSAgSGVhZGVyTmFtZShzdGQ6OnN0cmluZyBuYW1l
 KSA6CistICAgICAgbmFtZV8obmFtZSkgeworLSAgfQorLQorLSAgYm9vbCBvcGVyYXRvcigpKGNv
 bnN0IEhlYWRlciAmZmllbGQpIGNvbnN0IHsKKy0gICAgcmV0dXJuIChmaWVsZC5nZXROYW1lKCkg
 PT0gbmFtZV8pOworLSAgfQorLX07CistCistfQorLX0KKy19CistCistI2VuZGlmIC8qIFRTX0NQ
 UDExX0hFQURFUlNfSF8gKi8KK2RpZmYgLXJ1TiBsaWIvY3BwMTFhcGkvdHMtY3BwMTEuaCBsaWIv
 Y3BwMTFhcGkvdHMtY3BwMTEuaAorLS0tIGxpYi9jcHAxMWFwaS90cy1jcHAxMS5oCTIwMTMtMTEt
 MTEgMTQ6MDI6NTMuMDAwMDAwMDAwICswODAwCisrKysgbGliL2NwcDExYXBpL3RzLWNwcDExLmgJ
 MTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDEyNiArMCwwIEBACist
 LyoqIEBmaWxlCistIEBzZWN0aW9uIGxpY2Vuc2UgTGljZW5zZQorLQorLSBMaWNlbnNlZCB0byB0
 aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCistIG9yIG1vcmUg
 Y29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorLSBk
 aXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorLSBy
 ZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxl
 CistIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKy0g
 IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
 ZQorLSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
 bnNlIGF0CistCistIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
 LQorLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
 aXRpbmcsIHNvZnR3YXJlCistIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
 aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCistIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
 SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLSBTZWUgdGhl
 IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
 YW5kCistIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLSAqLworLQorLSNpZm5kZWYg
 VFNfQ1BQMTFfSF8KKy0jZGVmaW5lIFRTX0NQUDExX0hfCistCistI2lmbmRlZiBfX0dYWF9FWFBF
 UklNRU5UQUxfQ1hYMFhfXworLSNlcnJvciBUaGUgQysrIEFwYWNoZSBUcmFmZmljIFNlcnZlciBB
 UEkgd3JhcHBlciByZXF1aXJlcyBDKysxMSBzdXBwb3J0LgorLSNlbmRpZgorLQorLSNpbmNsdWRl
 IDxmdW5jdGlvbmFsPgorLSNpbmNsdWRlIDxzdHJpbmc+CistI2luY2x1ZGUgPHZlY3Rvcj4KKy0j
 aW5jbHVkZSAidHMtY3BwMTEtaGVhZGVycy5oIgorLQorLW5hbWVzcGFjZSBhdHMgeworLW5hbWVz
 cGFjZSBhcGkgeworLXR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFN0cmluZ1ZlY3Rv
 cjsKKy0KKy1lbnVtIGNsYXNzIEhvb2tUeXBlIHsKKy0gIEhPT0tfUFJFX1JFTUFQID0gMTAwLAor
 LSAgSE9PS19QT1NUX1JFTUFQLAorLSAgSE9PS19SRUFEX1JFU1BPTlNFX0hFQURFUlMsCistICBI
 T09LX1JFQURfUkVRVUVTVF9IRUFERVJTLAorLSAgSE9PS19TRU5EX1JFU1BPTlNFX0hFQURFUlMs
 CistICBIT09LX1RSQU5TQUNUSU9OX1NUQVJULAorLSAgSE9PS19UUkFOU0FDVElPTl9FTkQKKy19
 OworLQorLWVudW0gY2xhc3MgTmV4dFN0YXRlIHsKKy0gIEhUVFBfQ09OVElOVUUgPSAyMDAsIEhU
 VFBfRVJST1IsIEhUVFBfRE9OVF9DT05USU5VRQorLX07CistCistY2xhc3MgVHJhbnNhY3Rpb247
 CistCistLyoKKy0gKiBUaGlzIGlzIHRoZSB0eXBlIG91ciBnbG9iYWwgaG9vayBjYWxsYmFja3Mg
 d2lsbCB0YWtlCistICovCistdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPE5leHRTdGF0ZShUcmFuc2Fj
 dGlvbiAmKT4gR2xvYmFsSG9va0NhbGxiYWNrOworLQorLS8qCistICogQ3JlYXRlIGEgbmV3IGhv
 b2sKKy0gKi8KKy12b2lkIENyZWF0ZUdsb2JhbEhvb2soSG9va1R5cGUsIEdsb2JhbEhvb2tDYWxs
 YmFjayk7Cistdm9pZCBDcmVhdGVUcmFuc2FjdGlvbkhvb2soVHJhbnNhY3Rpb24gJiwgSG9va1R5
 cGUsIEdsb2JhbEhvb2tDYWxsYmFjayk7CistCistc3RkOjpzdHJpbmcgR2V0UmVxdWVzdFVybChU
 cmFuc2FjdGlvbiAmKTsKKy1zdGQ6OnN0cmluZyBHZXRQcmlzdGluZVJlcXVlc3RVcmwoVHJhbnNh
 Y3Rpb24gJik7Cistc3RkOjpzdHJpbmcgR2V0UmVxdWVzdFVybFBhdGgoVHJhbnNhY3Rpb24gJik7
 Cistc3RkOjpzdHJpbmcgR2V0UHJpc3RpbmVSZXF1ZXN0VXJsUGF0aChUcmFuc2FjdGlvbiAmKTsK
 Ky12b2lkIFNldFJlcXVlc3RVcmxQYXRoKFRyYW5zYWN0aW9uICYsIGNvbnN0IHN0ZDo6c3RyaW5n
 ICYpOworLXN0ZDo6c3RyaW5nIEdldFJlcXVlc3RVcmxRdWVyeShUcmFuc2FjdGlvbiAmKTsKKy1z
 dGQ6OnN0cmluZyBHZXRQcmlzdGluZVJlcXVlc3RVcmxRdWVyeShUcmFuc2FjdGlvbiAmKTsKKy12
 b2lkIFNldFJlcXVlc3RVcmxRdWVyeShUcmFuc2FjdGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAm
 KTsKKy1zdGQ6OnN0cmluZyBHZXRSZXF1ZXN0VXJsSG9zdChUcmFuc2FjdGlvbiAmKTsKKy1zdGQ6
 OnN0cmluZyBHZXRQcmlzdGluZVJlcXVlc3RVcmxIb3N0KFRyYW5zYWN0aW9uICYpOworLXZvaWQg
 U2V0UmVxdWVzdFVybEhvc3QoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJik7Cist
 c3RkOjpzdHJpbmcgR2V0UmVxdWVzdFVybFNjaGVtZShUcmFuc2FjdGlvbiAmKTsKKy1zdGQ6OnN0
 cmluZyBHZXRQcmlzdGluZVJlcXVlc3RVcmxTY2hlbWUoVHJhbnNhY3Rpb24gJik7Cistdm9pZCBT
 ZXRSZXF1ZXN0VXJsU2NoZW1lKFRyYW5zYWN0aW9uICYsIGNvbnN0IHN0ZDo6c3RyaW5nICYpOwor
 LXVuc2lnbmVkIGludCBHZXRSZXF1ZXN0VXJsUG9ydChUcmFuc2FjdGlvbiAmKTsKKy11bnNpZ25l
 ZCBpbnQgR2V0UHJpc3RpbmVSZXF1ZXN0VXJsUG9ydChUcmFuc2FjdGlvbiAmKTsKKy12b2lkIFNl
 dFJlcXVlc3RVcmxQb3J0KFRyYW5zYWN0aW9uICYsIHVuc2lnbmVkIGludCk7Cistc3RkOjpzdHJp
 bmcgR2V0Q2xpZW50SVAoVHJhbnNhY3Rpb24gJik7CistdW5zaWduZWQgaW50IEdldENsaWVudFBv
 cnQoVHJhbnNhY3Rpb24gJik7Cistc3RkOjpzdHJpbmcgR2V0U2VydmVySW5jb21pbmdJUChUcmFu
 c2FjdGlvbiAmKTsKKy11bnNpZ25lZCBpbnQgR2V0U2VydmVySW5jb21pbmdQb3J0KFRyYW5zYWN0
 aW9uICYpOworLXN0ZDo6c3RyaW5nIEdldFJlcXVlc3RNZXRob2QoVHJhbnNhY3Rpb24gJnQpOwor
 LXZvaWQgU2V0UmVxdWVzdE1ldGhvZChUcmFuc2FjdGlvbiAmdCwgY29uc3Qgc3RkOjpzdHJpbmcg
 Jik7CistaW50IEdldFNlcnZlclJlc3BvbnNlU3RhdHVzQ29kZShUcmFuc2FjdGlvbiAmdCk7Cist
 Ym9vbCBJc0ludGVybmFsUmVxdWVzdChUcmFuc2FjdGlvbiAmKTsKKy12b2lkKiBHZXRUcmFuc2Fj
 dGlvbklkZW50aWZpZXIoVHJhbnNhY3Rpb24gJik7Cistdm9pZCBSZWVuYWJsZVRyYW5zYWN0aW9u
 KFRyYW5zYWN0aW9uICYsIE5leHRTdGF0ZSk7CistCistLyogaGVhZGVycyAqLworLS8vIFRPRE86
 IFN3aXRjaCB0aGVzZSBvdXQgdG8gZGVhbCB3aXRoIHNoYXJlZF9wdHJzIHRvIGEgSGVhZGVyVmVj
 dG9yCistbmFtZXNwYWNlIGhlYWRlcnMgeworLUhlYWRlclZlY3RvciBHZXRDbGllbnRSZXF1ZXN0
 SGVhZGVycyhUcmFuc2FjdGlvbiAmKTsKKy1IZWFkZXJWZWN0b3IgR2V0Q2xpZW50UmVzcG9uc2VI
 ZWFkZXJzKFRyYW5zYWN0aW9uICYpOworLUhlYWRlclZlY3RvciBHZXRTZXJ2ZXJSZXNwb25zZUhl
 YWRlcnMoVHJhbnNhY3Rpb24gJik7CistSGVhZGVyIEdldENsaWVudFJlcXVlc3RIZWFkZXIoVHJh
 bnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJik7CistSGVhZGVyIEdldENsaWVudFJlc3Bv
 bnNlSGVhZGVyKFRyYW5zYWN0aW9uICYsIGNvbnN0IHN0ZDo6c3RyaW5nICYpOworLUhlYWRlciBH
 ZXRTZXJ2ZXJSZXNwb25zZUhlYWRlcihUcmFuc2FjdGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAm
 KTsKKy12b2lkIERlbGV0ZUNsaWVudFJlcXVlc3RIZWFkZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qg
 c3RkOjpzdHJpbmcgJik7Cistdm9pZCBEZWxldGVDbGllbnRSZXNwb25zZUhlYWRlcihUcmFuc2Fj
 dGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAmKTsKKy12b2lkIERlbGV0ZVNlcnZlclJlc3BvbnNl
 SGVhZGVyKFRyYW5zYWN0aW9uICYsIGNvbnN0IHN0ZDo6c3RyaW5nICYpOworLXZvaWQgU2V0Q2xp
 ZW50UmVxdWVzdEhlYWRlcihUcmFuc2FjdGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25z
 dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJik7Cistdm9pZCBTZXRDbGllbnRSZXNwb25zZUhl
 YWRlcihUcmFuc2FjdGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25zdCBzdGQ6OnZlY3Rv
 cjxzdGQ6OnN0cmluZz4gJik7Cistdm9pZCBTZXRTZXJ2ZXJSZXNwb25zZUhlYWRlcihUcmFuc2Fj
 dGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
 Zz4gJik7Cistdm9pZCBTZXRDbGllbnRSZXF1ZXN0SGVhZGVyKFRyYW5zYWN0aW9uICYsIGNvbnN0
 IHN0ZDo6c3RyaW5nICYsIGNvbnN0IHN0ZDo6c3RyaW5nICYpOworLXZvaWQgU2V0Q2xpZW50UmVz
 cG9uc2VIZWFkZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJiwgY29uc3Qgc3Rk
 OjpzdHJpbmcgJik7Cistdm9pZCBTZXRTZXJ2ZXJSZXNwb25zZUhlYWRlcihUcmFuc2FjdGlvbiAm
 LCBjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25zdCBzdGQ6OnN0cmluZyAmKTsKKy12b2lkIEFwcGVu
 ZENsaWVudFJlcXVlc3RIZWFkZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJiwg
 Y29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICYpOworLXZvaWQgQXBwZW5kQ2xpZW50UmVz
 cG9uc2VIZWFkZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJiwgY29uc3Qgc3Rk
 Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+ICYpOworLXZvaWQgQXBwZW5kU2VydmVyUmVzcG9uc2VIZWFk
 ZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJiwgY29uc3Qgc3RkOjp2ZWN0b3I8
 c3RkOjpzdHJpbmc+ICYpOworLXZvaWQgQXBwZW5kQ2xpZW50UmVxdWVzdEhlYWRlcihUcmFuc2Fj
 dGlvbiAmLCBjb25zdCBzdGQ6OnN0cmluZyAmLCBjb25zdCBzdGQ6OnN0cmluZyAmKTsKKy12b2lk
 IEFwcGVuZENsaWVudFJlc3BvbnNlSGVhZGVyKFRyYW5zYWN0aW9uICYsIGNvbnN0IHN0ZDo6c3Ry
 aW5nICYsIGNvbnN0IHN0ZDo6c3RyaW5nICYpOworLXZvaWQgQXBwZW5kU2VydmVyUmVzcG9uc2VI
 ZWFkZXIoVHJhbnNhY3Rpb24gJiwgY29uc3Qgc3RkOjpzdHJpbmcgJiwgY29uc3Qgc3RkOjpzdHJp
 bmcgJik7CistfSAvKiBoZWFkZXJzICovCistCistfSAvKiBhcGkgKi8KKy19IC8qIGF0cyAqLwor
 LQorLS8qCistICogRXZlcnkgcGx1Z2luIG11c3QgaGF2ZSBhIHNpbXBsZSBlbnRyeSBwb2ludAor
 LSAqLworLXZvaWQgUGx1Z2luUmVnaXN0ZXIoY29uc3QgYXRzOjphcGk6OlN0cmluZ1ZlY3RvciAm
 KTsKKy0KKy0jZW5kaWYgLyogVFNfQ1BQMTFfSF8gKi8KZGlmZiAtcnVOIC91c3IvcG9ydHMvd3d3
 L3RyYWZmaWNzZXJ2ZXIvZmlsZXMvcGF0Y2gtbWdtdF91dGlsc19NYWtlZmlsZS5hbSAuL2ZpbGVz
 L3BhdGNoLW1nbXRfdXRpbHNfTWFrZWZpbGUuYW0KLS0tIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNz
 ZXJ2ZXIvZmlsZXMvcGF0Y2gtbWdtdF91dGlsc19NYWtlZmlsZS5hbQkyMDEzLTEwLTIzIDIwOjEy
 OjQwLjAwMDAwMDAwMCArMDgwMAorKysgLi9maWxlcy9wYXRjaC1tZ210X3V0aWxzX01ha2VmaWxl
 LmFtCTIwMTMtMTEtMjMgMjI6Mjg6NTkuMzE1NDM4NjcyICswODAwCkBAIC0xLDEzICswLDAgQEAK
 LS0tLSBtZ210L3V0aWxzL01ha2VmaWxlLmFtLm9yaWcJMjAxMy0wOC0zMCAwNjowMjoxNy45Nzk4
 ODMyNTAgKzA4MDAKLSsrKyBtZ210L3V0aWxzL01ha2VmaWxlLmFtCTIwMTMtMDgtMzAgMDY6MDI6
 MzYuOTE4MDUyMjEwICswODAwCi1AQCAtNDAsOCArNDAsOCBAQAotIAotIGxpYnV0aWxzX2xtX2Ff
 Q1BQRkxBR1MgPSAkKGlua193aXRoX21vZHVsZXNfbG9jYWwpICQoQU1fQ1BQRkxBR1MpCi0gbGli
 dXRpbHNfbG1fYV9TT1VSQ0VTID0gXAotLSAgJCh0b3Bfc3JjZGlyKS9saWIvdHMvTWF0Y2hlclV0
 aWxzLmNjIFwKLS0gICQodG9wX3NyY2RpcikvcHJveHkvRGlhZ3NDb25maWcuY2MgXAotKyAgLi4v
 Li4vbGliL3RzL01hdGNoZXJVdGlscy5jYyBcCi0rICAuLi8uLi9wcm94eS9EaWFnc0NvbmZpZy5j
 YyBcCi0gICBFbnZCbG9jay5jYyBcCi0gICBFbnZCbG9jay5oIFwKLSAgIEV4cGFuZGluZ0FycmF5
 LmNjIFwKZGlmZiAtcnVOIC91c3IvcG9ydHMvd3d3L3RyYWZmaWNzZXJ2ZXIvZmlsZXMvdHJhZmZp
 Y3NlcnZlci5pbiAuL2ZpbGVzL3RyYWZmaWNzZXJ2ZXIuaW4KLS0tIC91c3IvcG9ydHMvd3d3L3Ry
 YWZmaWNzZXJ2ZXIvZmlsZXMvdHJhZmZpY3NlcnZlci5pbgkyMDEyLTA3LTE0IDIyOjI5OjE4LjAw
 MDAwMDAwMCArMDgwMAorKysgLi9maWxlcy90cmFmZmljc2VydmVyLmluCTIwMTMtMTEtMjMgMjI6
 Mjg6NTkuMzE1NDM4NjcyICswODAwCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAjCi0jICRG
 cmVlQlNEOiB3d3cvdHJhZmZpY3NlcnZlci9maWxlcy90cmFmZmljc2VydmVyLmluIDMwMDg5NyAy
 MDEyLTA3LTE0IDE0OjI5OjE4WiBiZWF0ICQKKyMgJEZyZWVCU0Q6IGhlYWQvd3d3L3RyYWZmaWNz
 ZXJ2ZXIvZmlsZXMvdHJhZmZpY3NlcnZlci5pbiAzMDA4OTcgMjAxMi0wNy0xNCAxNDoyOToxOFog
 YmVhdCAkCiAjCiAKICMgUFJPVklERTogdHJhZmZpY3NlcnZlcgpkaWZmIC1ydU4gL3Vzci9wb3J0
 cy93d3cvdHJhZmZpY3NlcnZlci9wa2ctZGVzY3IgLi9wa2ctZGVzY3IKLS0tIC91c3IvcG9ydHMv
 d3d3L3RyYWZmaWNzZXJ2ZXIvcGtnLWRlc2NyCTIwMTItMDctMTQgMjI6Mjk6MTguMDAwMDAwMDAw
 ICswODAwCisrKyAuL3BrZy1kZXNjcgkyMDEzLTExLTIzIDIyOjI4OjU5LjMxNjQzOTM0NCArMDgw
 MApAQCAtMyw0ICszLDQgQEAKIGJ5IGNhY2hpbmcgZnJlcXVlbnRseS1hY2Nlc3NlZCBpbmZvcm1h
 dGlvbiBhdCB0aGUgZWRnZQogb2YgdGhlIG5ldHdvcmsuIAogCi1XV1c6CWh0dHA6Ly90cmFmZmlj
 c2VydmVyLmFwYWNoZS5vcmcvCitXV1c6IGh0dHA6Ly90cmFmZmljc2VydmVyLmFwYWNoZS5vcmcv
 CmRpZmYgLXJ1TiAvdXNyL3BvcnRzL3d3dy90cmFmZmljc2VydmVyL3BrZy1wbGlzdCAuL3BrZy1w
 bGlzdAotLS0gL3Vzci9wb3J0cy93d3cvdHJhZmZpY3NlcnZlci9wa2ctcGxpc3QJMjAxMy0xMC0y
 MyAyMDoxMjo0MC4wMDAwMDAwMDAgKzA4MDAKKysrIC4vcGtnLXBsaXN0CTIwMTMtMTEtMjMgMjI6
 Mjg6NTkuMzE3NDM5MTY0ICswODAwCkBAIC0xLDUgKzEsNCBAQAotQGNvbW1lbnQgJEZyZWVCU0Q6
 IHd3dy90cmFmZmljc2VydmVyL3BrZy1wbGlzdCAzMzEzNzggMjAxMy0xMC0yMyAxMjoxMjo0MFog
 ZGVja2UgJAotQHVuZXhlYyBpZiBjbXAgJUQvJSVFVENESVIlJS9hZV91YS5jb25maWcgJUQvJSVF
 VENESVIlJS9hZV91YS5jb25maWcuZGVmYXVsdDsgdGhlbiBybSAlRC8lJUVUQ0RJUiUlL2FlX3Vh
 LmNvbmZpZzsgZmkKK0Bjb21tZW50ICRGcmVlQlNEOiBoZWFkL3d3dy90cmFmZmljc2VydmVyL3Br
 Zy1wbGlzdCAzMzEzNzggMjAxMy0xMC0yMyAxMjoxMjo0MFogZGVja2UgJAogQHVuZXhlYyBpZiBj
 bXAgJUQvJSVFVENESVIlJS9jYWNoZS5jb25maWcgJUQvJSVFVENESVIlJS9jYWNoZS5jb25maWcu
 ZGVmYXVsdDsgdGhlbiBybSAlRC8lJUVUQ0RJUiUlL2NhY2hlLmNvbmZpZzsgZmkKIEB1bmV4ZWMg
 aWYgY21wICVELyUlRVRDRElSJSUvY2x1c3Rlci5jb25maWcgJUQvJSVFVENESVIlJS9jbHVzdGVy
 LmNvbmZpZy5kZWZhdWx0OyB0aGVuIHJtICVELyUlRVRDRElSJSUvY2x1c3Rlci5jb25maWc7IGZp
 CiBAdW5leGVjIGlmIGNtcCAlRC8lJUVUQ0RJUiUlL2Nvbmdlc3Rpb24uY29uZmlnICVELyUlRVRD
 RElSJSUvY29uZ2VzdGlvbi5jb25maWcuZGVmYXVsdDsgdGhlbiBybSAlRC8lJUVUQ0RJUiUlL2Nv
 bmdlc3Rpb24uY29uZmlnOyBmaQpAQCAtOCwxMSArNyw5IEBACiBAdW5leGVjIGlmIGNtcCAlRC8l
 JUVUQ0RJUiUlL2lwX2FsbG93LmNvbmZpZyAlRC8lJUVUQ0RJUiUlL2lwX2FsbG93LmNvbmZpZy5k
 ZWZhdWx0OyB0aGVuIHJtICVELyUlRVRDRElSJSUvaXBfYWxsb3cuY29uZmlnOyBmaQogQHVuZXhl
 YyBpZiBjbXAgJUQvJSVFVENESVIlJS9sb2dfaG9zdHMuY29uZmlnICVELyUlRVRDRElSJSUvbG9n
 X2hvc3RzLmNvbmZpZy5kZWZhdWx0OyB0aGVuIHJtICVELyUlRVRDRElSJSUvbG9nX2hvc3RzLmNv
 bmZpZzsgZmkKIEB1bmV4ZWMgaWYgY21wICVELyUlRVRDRElSJSUvbG9nc194bWwuY29uZmlnICVE
 LyUlRVRDRElSJSUvbG9nc194bWwuY29uZmlnLmRlZmF1bHQ7IHRoZW4gcm0gJUQvJSVFVENESVIl
 JS9sb2dzX3htbC5jb25maWc7IGZpCi1AdW5leGVjIGlmIGNtcCAlRC8lJUVUQ0RJUiUlL21nci5j
 bmYgJUQvJSVFVENESVIlJS9tZ3IuY25mLmRlZmF1bHQ7IHRoZW4gcm0gJUQvJSVFVENESVIlJS9t
 Z3IuY25mOyBmaQogQHVuZXhlYyBpZiBjbXAgJUQvJSVFVENESVIlJS9wYXJlbnQuY29uZmlnICVE
 LyUlRVRDRElSJSUvcGFyZW50LmNvbmZpZy5kZWZhdWx0OyB0aGVuIHJtICVELyUlRVRDRElSJSUv
 cGFyZW50LmNvbmZpZzsgZmkKIEB1bmV4ZWMgaWYgY21wICVELyUlRVRDRElSJSUvdm9sdW1lLmNv
 bmZpZyAlRC8lJUVUQ0RJUiUlL3ZvbHVtZS5jb25maWcuZGVmYXVsdDsgdGhlbiBybSAlRC8lJUVU
 Q0RJUiUlL3ZvbHVtZS5jb25maWc7IGZpCiBAdW5leGVjIGlmIGNtcCAlRC8lJUVUQ0RJUiUlL3Bs
 dWdpbi5jb25maWcgJUQvJSVFVENESVIlJS9wbHVnaW4uY29uZmlnLmRlZmF1bHQ7IHRoZW4gcm0g
 JUQvJSVFVENESVIlJS9wbHVnaW4uY29uZmlnOyBmaQotQHVuZXhlYyBpZiBjbXAgJUQvJSVFVENE
 SVIlJS9wbHVnaW4uZGIgJUQvJSVFVENESVIlJS9wbHVnaW4uZGIuZGVmYXVsdDsgdGhlbiBybSAl
 RC8lJUVUQ0RJUiUlL3BsdWdpbi5kYjsgZmkKIEB1bmV4ZWMgaWYgY21wICVELyUlRVRDRElSJSUv
 cmVtYXAuY29uZmlnICVELyUlRVRDRElSJSUvcmVtYXAuY29uZmlnLmRlZmF1bHQ7IHRoZW4gcm0g
 JUQvJSVFVENESVIlJS9yZW1hcC5jb25maWc7IGZpCiBAdW5leGVjIGlmIGNtcCAlRC8lJUVUQ0RJ
 UiUlL3JlY29yZHMuY29uZmlnICVELyUlRVRDRElSJSUvcmVjb3Jkcy5jb25maWcuZGVmYXVsdDsg
 dGhlbiBybSAlRC8lJUVUQ0RJUiUlL3JlY29yZHMuY29uZmlnOyBmaQogQHVuZXhlYyBpZiBjbXAg
 JUQvJSVFVENESVIlJS9zb2Nrcy5jb25maWcgJUQvJSVFVENESVIlJS9zb2Nrcy5jb25maWcuZGVm
 YXVsdDsgdGhlbiBybSAlRC8lJUVUQ0RJUiUlL3NvY2tzLmNvbmZpZzsgZmkKQEAgLTM2LDE0ICsz
 MywxMiBAQAogaW5jbHVkZS90cy9tZ210YXBpLmgKIGluY2x1ZGUvdHMvcmVtYXAuaAogaW5jbHVk
 ZS90cy90cy5oCi1saWIvbGlidHNtZ210LmEKIGxpYi9saWJ0c21nbXQubGEKIGxpYi9saWJ0c21n
 bXQuc28KLWxpYi9saWJ0c21nbXQuc28uNQotbGliL2xpYnRzdXRpbC5hCitsaWIvbGlidHNtZ210
 LnNvLjQKIGxpYi9saWJ0c3V0aWwubGEKIGxpYi9saWJ0c3V0aWwuc28KLWxpYi9saWJ0c3V0aWwu
 c28uNQorbGliL2xpYnRzdXRpbC5zby40CiBsaWJleGVjL3RyYWZmaWNzZXJ2ZXIvY29uZl9yZW1h
 cC5sYQogbGliZXhlYy90cmFmZmljc2VydmVyL2NvbmZfcmVtYXAuc28KIGxpYmV4ZWMvdHJhZmZp
 Y3NlcnZlci9oZWFkZXJfZmlsdGVyLmxhCkBAIC01Myw3ICs0OCw2IEBACiBsaWJleGVjL3RyYWZm
 aWNzZXJ2ZXIvc3RhdHNfb3Zlcl9odHRwLmxhCiBsaWJleGVjL3RyYWZmaWNzZXJ2ZXIvc3RhdHNf
 b3Zlcl9odHRwLnNvCiBtYW4vbWFuMS90cmFmZmljX3NoZWxsLjEuZ3oKLSUlRVRDRElSJSUvYWVf
 dWEuY29uZmlnLmRlZmF1bHQKICUlRVRDRElSJSUvYm9keV9mYWN0b3J5L2RlZmF1bHQvLmJvZHlf
 ZmFjdG9yeV9pbmZvCiAlJUVUQ0RJUiUlL2JvZHlfZmFjdG9yeS9kZWZhdWx0L1JFQURNRQogJSVF
 VENESVIlJS9ib2R5X2ZhY3RvcnkvZGVmYXVsdC9hY2Nlc3MjZGVuaWVkCkBAIC04OCwxMCArODIs
 OCBAQAogJSVFVENESVIlJS9pcF9hbGxvdy5jb25maWcuZGVmYXVsdAogJSVFVENESVIlJS9sb2df
 aG9zdHMuY29uZmlnLmRlZmF1bHQKICUlRVRDRElSJSUvbG9nc194bWwuY29uZmlnLmRlZmF1bHQK
 LSUlRVRDRElSJSUvbWdyLmNuZi5kZWZhdWx0CiAlJUVUQ0RJUiUlL3BhcmVudC5jb25maWcuZGVm
 YXVsdAogJSVFVENESVIlJS9wbHVnaW4uY29uZmlnLmRlZmF1bHQKLSUlRVRDRElSJSUvcGx1Z2lu
 LmRiLmRlZmF1bHQKICUlRVRDRElSJSUvcmVjb3Jkcy5jb25maWcuZGVmYXVsdAogJSVFVENESVIl
 JS9yZW1hcC5jb25maWcuZGVmYXVsdAogJSVFVENESVIlJS9zb2Nrcy5jb25maWcuZGVmYXVsdApA
 QCAtMTAzLDc0ICs5NSw3MSBAQAogJSVFVENESVIlJS91cGRhdGUuY29uZmlnLmRlZmF1bHQKICUl
 RVRDRElSJSUvdmFkZHJzLmNvbmZpZy5kZWZhdWx0CiAlJUVUQ0RJUiUlL3ZvbHVtZS5jb25maWcu
 ZGVmYXVsdAotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL2NvbmZpZ19hbGFy
 bXMuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL2NvbmZpZ19jYWNoZS4x
 Ci1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvY29uZmlnX2Nsb2NrLjEKLXNo
 YXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfZG5zLjEKLXNoYXJlL2Rv
 Yy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfZ2V0LjEKLXNoYXJlL2RvYy90cmFm
 Zmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfaGFyZC1yZXN0YXJ0LjEKLXNoYXJlL2RvYy90
 cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfaG9zdGRiLjEKLXNoYXJlL2RvYy90cmFm
 Zmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfaHR0cC4xCi1zaGFyZS9kb2MvdHJhZmZpY3Nl
 cnZlci90cmFmZmljc2hlbGwvY29uZmlnX2ljcC4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90
 cmFmZmljc2hlbGwvY29uZmlnX2xvZ2dpbmcuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJh
 ZmZpY3NoZWxsL2NvbmZpZ19uYW1lLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNz
 aGVsbC9jb25maWdfbmV0d29yay4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hl
 bGwvY29uZmlnX3BhcmVudC4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwv
 Y29uZmlnX3BvcnQtdHVubmVscy4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hl
 bGwvY29uZmlnX3JlbWFwLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9j
 b25maWdfcmVzZXQtc3RhdHMuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxs
 L2NvbmZpZ19yZXN0YXJ0LjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9j
 b25maWdfcm9vdC4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvY29uZmln
 X3NjaGVkdWxlZC11cGRhdGUuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxs
 L2NvbmZpZ19zZWN1cml0eS4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwv
 Y29uZmlnX3NldC4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvY29uZmln
 X3NvY2tzLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfc3Ns
 LjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfc3RhcnQuMQot
 c2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL2NvbmZpZ19zdG9wLjEKLXNoYXJl
 L2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9jb25maWdfdXBncmFkZS4xCi1zaGFyZS9k
 b2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvY29uZmlnX3ZpcnR1YWwtaXAuMQotc2hhcmUv
 ZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL2Rpc2FibGUuMQotc2hhcmUvZG9jL3RyYWZm
 aWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL2VuYWJsZS4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90
 cmFmZmljc2hlbGwvZXhpdC4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwv
 c2hvd19hbGFybXMuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3df
 Y2FjaGUtc3RhdHMuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3df
 Y2FjaGUuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3dfY2x1c3Rl
 ci4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvc2hvd19kbnMtcmVzb2x2
 ZXIuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3dfZG5zLXN0YXRz
 LjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X2hvc3RkYi1zdGF0
 cy4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvc2hvd19ob3N0ZGIuMQot
 c2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3dfaHR0cC1zdGF0cy4xCi1z
 aGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvc2hvd19odHRwLXRyYW5zLXN0YXRz
 LjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X2h0dHAuMQotc2hh
 cmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3dfaWNwLXN0YXRzLjEKLXNoYXJl
 L2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X2ljcC4xCi1zaGFyZS9kb2MvdHJh
 ZmZpY3NlcnZlci90cmFmZmljc2hlbGwvc2hvd19sb2dnaW5nLXN0YXRzLjEKLXNoYXJlL2RvYy90
 cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X2xvZ2dpbmcuMQotc2hhcmUvZG9jL3RyYWZm
 aWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3Nob3dfbmV0d29yay4xCi1zaGFyZS9kb2MvdHJhZmZpY3Nl
 cnZlci90cmFmZmljc2hlbGwvc2hvd19wYXJlbnQuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIv
 dHJhZmZpY3NoZWxsL3Nob3dfcG9ydC10dW5uZWxzLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVy
 L3RyYWZmaWNzaGVsbC9zaG93X3Byb3h5LXN0YXRzLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVy
 L3RyYWZmaWNzaGVsbC9zaG93X3Byb3h5LjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZm
 aWNzaGVsbC9zaG93X3JlbWFwLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVs
 bC9zaG93X3NjaGVkdWxlZC11cGRhdGUuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZp
 Y3NoZWxsL3Nob3dfc2VjdXJpdHkuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3No
 ZWxsL3Nob3dfc29ja3MuMQotc2hhcmUvZG9jL3RyYWZmaWNzZXJ2ZXIvdHJhZmZpY3NoZWxsL3No
 b3dfc3NsLjEKLXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X3N0YXR1
 cy4xCi1zaGFyZS9kb2MvdHJhZmZpY3NlcnZlci90cmFmZmljc2hlbGwvc2hvd192ZXJzaW9uLjEK
 LXNoYXJlL2RvYy90cmFmZmljc2VydmVyL3RyYWZmaWNzaGVsbC9zaG93X3ZpcnR1YWwtaXAuMQot
 QGRpcnJtIHNoYXJlL3RyYWZmaWNzZXJ2ZXIKLUBkaXJybSBzaGFyZS9kb2MvdHJhZmZpY3NlcnZl
 ci90cmFmZmljc2hlbGwKLUBkaXJybSBzaGFyZS9kb2MvdHJhZmZpY3NlcnZlcgorJSVQT1JURE9D
 UyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19hbGFybXMuMQorJSVQT1JURE9DUyUl
 JSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19jYWNoZS4xCislJVBPUlRET0NTJSUlJURP
 Q1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX2Nsb2NrLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJ
 UiUlL3RyYWZmaWNzaGVsbC9jb25maWdfZG5zLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3Ry
 YWZmaWNzaGVsbC9jb25maWdfZ2V0LjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNz
 aGVsbC9jb25maWdfaGFyZC1yZXN0YXJ0LjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZm
 aWNzaGVsbC9jb25maWdfaG9zdGRiLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNz
 aGVsbC9jb25maWdfaHR0cC4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwv
 Y29uZmlnX2ljcC4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmln
 X2xvZ2dpbmcuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19u
 YW1lLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9jb25maWdfbmV0d29y
 ay4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3BhcmVudC4x
 CislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3BvcnQtdHVubmVs
 cy4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3JlbWFwLjEK
 KyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9jb25maWdfcmVzZXQtc3RhdHMu
 MQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19yZXN0YXJ0LjEK
 KyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9jb25maWdfcm9vdC4xCislJVBP
 UlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3NjaGVkdWxlZC11cGRhdGUu
 MQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19zZWN1cml0eS4x
 CislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3NldC4xCislJVBP
 UlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvY29uZmlnX3NvY2tzLjEKKyUlUE9SVERP
 Q1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9jb25maWdfc3NsLjEKKyUlUE9SVERPQ1MlJSUl
 RE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9jb25maWdfc3RhcnQuMQorJSVQT1JURE9DUyUlJSVET0NT
 RElSJSUvdHJhZmZpY3NoZWxsL2NvbmZpZ19zdG9wLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUl
 L3RyYWZmaWNzaGVsbC9jb25maWdfdXBncmFkZS4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90
 cmFmZmljc2hlbGwvY29uZmlnX3ZpcnR1YWwtaXAuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUv
 dHJhZmZpY3NoZWxsL2Rpc2FibGUuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3No
 ZWxsL2VuYWJsZS4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvZXhpdC4x
 CislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwvc2hvd19hbGFybXMuMQorJSVQ
 T1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfY2FjaGUtc3RhdHMuMQorJSVQ
 T1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfY2FjaGUuMQorJSVQT1JURE9D
 UyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfY2x1c3Rlci4xCislJVBPUlRET0NTJSUl
 JURPQ1NESVIlJS90cmFmZmljc2hlbGwvc2hvd19kbnMtcmVzb2x2ZXIuMQorJSVQT1JURE9DUyUl
 JSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfZG5zLXN0YXRzLjEKKyUlUE9SVERPQ1MlJSUl
 RE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X2hvc3RkYi1zdGF0cy4xCislJVBPUlRET0NTJSUl
 JURPQ1NESVIlJS90cmFmZmljc2hlbGwvc2hvd19ob3N0ZGIuMQorJSVQT1JURE9DUyUlJSVET0NT
 RElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfaHR0cC1zdGF0cy4xCislJVBPUlRET0NTJSUlJURPQ1NE
 SVIlJS90cmFmZmljc2hlbGwvc2hvd19odHRwLXRyYW5zLXN0YXRzLjEKKyUlUE9SVERPQ1MlJSUl
 RE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X2h0dHAuMQorJSVQT1JURE9DUyUlJSVET0NTRElS
 JSUvdHJhZmZpY3NoZWxsL3Nob3dfaWNwLXN0YXRzLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUl
 L3RyYWZmaWNzaGVsbC9zaG93X2ljcC4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmlj
 c2hlbGwvc2hvd19sb2dnaW5nLXN0YXRzLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZm
 aWNzaGVsbC9zaG93X2xvZ2dpbmcuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3No
 ZWxsL3Nob3dfbmV0d29yay4xCislJVBPUlRET0NTJSUlJURPQ1NESVIlJS90cmFmZmljc2hlbGwv
 c2hvd19wYXJlbnQuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3df
 cG9ydC10dW5uZWxzLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93
 X3Byb3h5LXN0YXRzLjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93
 X3Byb3h5LjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X3JlbWFw
 LjEKKyUlUE9SVERPQ1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X3NjaGVkdWxlZC11
 cGRhdGUuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfc2VjdXJp
 dHkuMQorJSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfc29ja3MuMQor
 JSVQT1JURE9DUyUlJSVET0NTRElSJSUvdHJhZmZpY3NoZWxsL3Nob3dfc3NsLjEKKyUlUE9SVERP
 Q1MlJSUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X3N0YXR1cy4xCislJVBPUlRET0NTJSUl
 JURPQ1NESVIlJS90cmFmZmljc2hlbGwvc2hvd192ZXJzaW9uLjEKKyUlUE9SVERPQ1MlJSUlRE9D
 U0RJUiUlL3RyYWZmaWNzaGVsbC9zaG93X3ZpcnR1YWwtaXAuMQorJSVQT1JURE9DUyUlQGRpcnJt
 ICUlRE9DU0RJUiUlL3RyYWZmaWNzaGVsbAorJSVQT1JURE9DUyUlQGRpcnJtICUlRE9DU0RJUiUl
 CiBAZGlycm0gbGliZXhlYy90cmFmZmljc2VydmVyCiBAZGlycm0gaW5jbHVkZS90cwotQGRpcnJt
 ICUlRVRDRElSJSUvaW50ZXJuYWwKIEBkaXJybSAlJUVUQ0RJUiUlL2JvZHlfZmFjdG9yeS9kZWZh
 dWx0CiBAZGlycm0gJSVFVENESVIlJS9ib2R5X2ZhY3RvcnkKIEBkaXJybXRyeSAlJUVUQ0RJUiUl
 Ci1AZXhlYyBpZiBbICEgLWYgJUQvJSVFVENESVIlJS9hZV91YS5jb25maWcgXTsgdGhlbiBjcCAt
 cCAlRC8lJUVUQ0RJUiUlL2FlX3VhLmNvbmZpZy5kZWZhdWx0ICVELyUlRVRDRElSJSUvYWVfdWEu
 Y29uZmlnOyBmaQogQGV4ZWMgaWYgWyAhIC1mICVELyUlRVRDRElSJSUvY2FjaGUuY29uZmlnIF07
 IHRoZW4gY3AgLXAgJUQvJSVFVENESVIlJS9jYWNoZS5jb25maWcuZGVmYXVsdCAlRC8lJUVUQ0RJ
 UiUlL2NhY2hlLmNvbmZpZzsgZmkKIEBleGVjIGlmIFsgISAtZiAlRC8lJUVUQ0RJUiUlL2NsdXN0
 ZXIuY29uZmlnIF07IHRoZW4gY3AgLXAgJUQvJSVFVENESVIlJS9jbHVzdGVyLmNvbmZpZy5kZWZh
 dWx0ICVELyUlRVRDRElSJSUvY2x1c3Rlci5jb25maWc7IGZpCiBAZXhlYyBpZiBbICEgLWYgJUQv
 JSVFVENESVIlJS9jb25nZXN0aW9uLmNvbmZpZyBdOyB0aGVuIGNwIC1wICVELyUlRVRDRElSJSUv
 Y29uZ2VzdGlvbi5jb25maWcuZGVmYXVsdCAlRC8lJUVUQ0RJUiUlL2Nvbmdlc3Rpb24uY29uZmln
 OyBmaQpAQCAtMTc5LDExICsxNjgsOSBAQAogQGV4ZWMgaWYgWyAhIC1mICVELyUlRVRDRElSJSUv
 aXBfYWxsb3cuY29uZmlnIF07IHRoZW4gY3AgLXAgJUQvJSVFVENESVIlJS9pcF9hbGxvdy5jb25m
 aWcuZGVmYXVsdCAlRC8lJUVUQ0RJUiUlL2lwX2FsbG93LmNvbmZpZzsgZmkKIEBleGVjIGlmIFsg
 ISAtZiAlRC8lJUVUQ0RJUiUlL2xvZ19ob3N0cy5jb25maWcgXTsgdGhlbiBjcCAtcCAlRC8lJUVU
 Q0RJUiUlL2xvZ19ob3N0cy5jb25maWcuZGVmYXVsdCAlRC8lJUVUQ0RJUiUlL2xvZ19ob3N0cy5j
 b25maWc7IGZpCiBAZXhlYyBpZiBbICEgLWYgJUQvJSVFVENESVIlJS9sb2dzX3htbC5jb25maWcg
 XTsgdGhlbiBjcCAtcCAlRC8lJUVUQ0RJUiUlL2xvZ3NfeG1sLmNvbmZpZy5kZWZhdWx0ICVELyUl
 RVRDRElSJSUvbG9nc194bWwuY29uZmlnOyBmaQotQGV4ZWMgaWYgWyAhIC1mICVELyUlRVRDRElS
 JSUvbWdyLmNuZiBdOyB0aGVuIGNwIC1wICVELyUlRVRDRElSJSUvbWdyLmNuZi5kZWZhdWx0ICVE
 LyUlRVRDRElSJSUvbWdyLmNuZjsgZmkKIEBleGVjIGlmIFsgISAtZiAlRC8lJUVUQ0RJUiUlL3Bh
 cmVudC5jb25maWcgXTsgdGhlbiBjcCAtcCAlRC8lJUVUQ0RJUiUlL3BhcmVudC5jb25maWcuZGVm
 YXVsdCAlRC8lJUVUQ0RJUiUlL3BhcmVudC5jb25maWc7IGZpCiBAZXhlYyBpZiBbICEgLWYgJUQv
 JSVFVENESVIlJS92b2x1bWUuY29uZmlnIF07IHRoZW4gY3AgLXAgJUQvJSVFVENESVIlJS92b2x1
 bWUuY29uZmlnLmRlZmF1bHQgJUQvJSVFVENESVIlJS92b2x1bWUuY29uZmlnOyBmaQogQGV4ZWMg
 aWYgWyAhIC1mICVELyUlRVRDRElSJSUvcGx1Z2luLmNvbmZpZyBdOyB0aGVuIGNwIC1wICVELyUl
 RVRDRElSJSUvcGx1Z2luLmNvbmZpZy5kZWZhdWx0ICVELyUlRVRDRElSJSUvcGx1Z2luLmNvbmZp
 ZzsgZmkKLUBleGVjIGlmIFsgISAtZiAlRC8lJUVUQ0RJUiUlL3BsdWdpbi5kYiBdOyB0aGVuIGNw
 IC1wICVELyUlRVRDRElSJSUvcGx1Z2luLmRiLmRlZmF1bHQgJUQvJSVFVENESVIlJS9wbHVnaW4u
 ZGI7IGZpCiBAZXhlYyBpZiBbICEgLWYgJUQvJSVFVENESVIlJS9yZWNvcmRzLmNvbmZpZyBdOyB0
 aGVuIGNwIC1wICVELyUlRVRDRElSJSUvcmVjb3Jkcy5jb25maWcuZGVmYXVsdCAlRC8lJUVUQ0RJ
 UiUlL3JlY29yZHMuY29uZmlnOyBmaQogQGV4ZWMgaWYgWyAhIC1mICVELyUlRVRDRElSJSUvcmVt
 YXAuY29uZmlnIF07IHRoZW4gY3AgLXAgJUQvJSVFVENESVIlJS9yZW1hcC5jb25maWcuZGVmYXVs
 dCAlRC8lJUVUQ0RJUiUlL3JlbWFwLmNvbmZpZzsgZmkKIEBleGVjIGlmIFsgISAtZiAlRC8lJUVU
 Q0RJUiUlL3NvY2tzLmNvbmZpZyBdOyB0aGVuIGNwIC1wICVELyUlRVRDRElSJSUvc29ja3MuY29u
 ZmlnLmRlZmF1bHQgJUQvJSVFVENESVIlJS9zb2Nrcy5jb25maWc7IGZpCgo=
 --047d7b5db7beb63c2d04ebd90bf9--

From: Hung-Yi Chen <gaod@hychen.org>
To: freebsd-ports-bugs@freebsd.org, edwin@freebsd.org, 
	Sunpoet Po-Chuan Hsieh <sunpoet@freebsd.org>, bug-followup@freebsd.org, 
	FreeBSD-gnats-submit@freebsd.org
Cc:  
Subject: Re: ports/184160: [PATCH] www/trafficserver: update to 4.0.2, take maintainership
Date: Tue, 24 Dec 2013 05:06:52 +0800

 --047d7b15b045faff8004ee3a021f
 Content-Type: text/plain; charset=ISO-8859-1
 
 Hi,
 
 Could anyone help to submit it?
 
 --047d7b15b045faff8004ee3a021f
 Content-Type: text/html; charset=ISO-8859-1
 
 <div dir="ltr"><div class="gmail_extra">Hi,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Could anyone help to submit it?</div><div class="gmail_extra"><br></div></div>
 
 --047d7b15b045faff8004ee3a021f--

From: Hung-Yi Chen <gaod@hychen.org>
To: freebsd-ports-bugs@freebsd.org, edwin@freebsd.org, 
	Sunpoet Po-Chuan Hsieh <sunpoet@freebsd.org>, bug-followup@freebsd.org, 
	FreeBSD-gnats-submit@freebsd.org
Cc:  
Subject: Re: ports/184160: [PATCH] www/trafficserver: update to 4.0.2, take maintainership
Date: Tue, 24 Dec 2013 05:06:52 +0800

 --047d7b15b045faff8004ee3a021f
 Content-Type: text/plain; charset=ISO-8859-1
 
 Hi,
 
 Could anyone help to submit it?
 
 --047d7b15b045faff8004ee3a021f
 Content-Type: text/html; charset=ISO-8859-1
 
 <div dir="ltr"><div class="gmail_extra">Hi,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Could anyone help to submit it?</div><div class="gmail_extra"><br></div></div>
 
 --047d7b15b045faff8004ee3a021f--
State-Changed-From-To: feedback->closed 
State-Changed-By: lwhsu 
State-Changed-When: Tue May 27 14:14:18 UTC 2014 
State-Changed-Why:  
Already updated to 4.1.2 

http://www.freebsd.org/cgi/query-pr.cgi?pr=184160 
>Unformatted:
