<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>12174</bug_id>
          
          <creation_ts>2007-01-08 18:07:36 -0800</creation_ts>
          <short_desc>improve Unicode use (less WTF::Unicode:: prefix, centralized character names)</short_desc>
          <delta_ts>2007-01-09 07:11:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36165</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-08 18:07:36 -0800</bug_when>
    <thetext>We don&apos;t need to say WTF::Unicode:: every time we use a Unicode feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36166</commentid>
    <comment_count>1</comment_count>
      <attachid>12321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-08 18:08:40 -0800</bug_when>
    <thetext>Created attachment 12321
patch; adds CharacterNames.h header and uses using namespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36167</commentid>
    <comment_count>2</comment_count>
      <attachid>12322</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-08 18:12:23 -0800</bug_when>
    <thetext>Created attachment 12322
complete patch (last version omitted the new source file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36054</commentid>
    <comment_count>3</comment_count>
      <attachid>12321</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-01-09 06:54:33 -0800</bug_when>
    <thetext>Comment on attachment 12321
patch; adds CharacterNames.h header and uses using namespace

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36055</commentid>
    <comment_count>4</comment_count>
      <attachid>12322</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-01-09 06:55:03 -0800</bug_when>
    <thetext>Comment on attachment 12322
complete patch (last version omitted the new source file)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36046</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-09 07:11:31 -0800</bug_when>
    <thetext>Committed revision 18712.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12321</attachid>
            <date>2007-01-08 18:08:40 -0800</date>
            <delta_ts>2007-01-09 06:54:33 -0800</delta_ts>
            <desc>patch; adds CharacterNames.h header and uses using namespace</desc>
            <filename>UnicodePatch.txt</filename>
            <type>text/plain</type>
            <size>114234</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjkwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDctMDEtMDggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gbWFrZSBzb21lIHNtYWxsIGltcHJvdmVtZW50cyB0byB0aGUgVW5p
Y29kZSBmdW5jdGlvbnMKKworICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1Lmg6
IENoYW5nZSBwYXJhbWV0ZXIgYW5kIHJldHVybiB0eXBlcworICAgICAgICB0byBVQ2hhcjMyIGFu
ZCBVQ2hhci4gUmVtb3ZlZCB1bm5lZWRlZCB0eXBlIGNhc3RzIGFuZCBhZGRlZCBzb21lCisgICAg
ICAgIGNvbnN0IHRvIGZ1bmN0aW9ucyB0aGF0IGxhY2tlZCBpdC4gUmVtb3ZlZCBXVEY6OlVuaWNv
ZGU6Om1lbWNtcC4KKyAgICAgICAgKFdURjo6VW5pY29kZTo6dW1lbWNhc2VjbXApOiBSZW5hbWVk
IGZyb20gc3RyY2FzZWNtcCBzaW5jZSB0aGlzCisgICAgICAgIGRvZXNuJ3Qgd29yayBvbiAwLXRl
cm1pbmF0ZWQgc3RyaW5ncyBhcyB0aGUgc3RyIGZ1bmN0aW9ucyBkby4KKyAgICAgICAgKiB3dGYv
dW5pY29kZS9xdDQvVW5pY29kZVF0NC5oOiBEaXR0by4KKworICAgICAgICAtIGdvdCByaWQgb2Yg
bmFtZXNwYWNlIHByZWZpeGVzIGZyb20gbW9zdCB1c2VzIG9mIFdURjo6VW5pY29kZQorCisgICAg
ICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6aXNTdHJXaGl0ZVNwYWNlKToK
KyAgICAgICAgKEtKUzo6ZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmcpOgorICAgICAgICAq
IGtqcy9sZXhlci5jcHA6CisgICAgICAgIChLSlM6OkxleGVyOjppc1doaXRlU3BhY2UpOgorICAg
ICAgICAoS0pTOjpMZXhlcjo6aXNJZGVudFN0YXJ0KToKKyAgICAgICAgKEtKUzo6TGV4ZXI6Omlz
SWRlbnRQYXJ0KToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5jcHA6CisgICAgICAgIChL
SlM6OlN0cmluZ1Byb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgorCiAyMDA3LTAxLTA3ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODY4NykKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDkgQEAKIAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAordXNpbmcgbmFtZXNw
YWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCiBuYW1lc3BhY2UgS0pTIHsKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25JbXAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjkwLDcgKzY5Myw3IEBAIHN0YXRpYyBib29sIGlz
U3RyV2hpdGVTcGFjZSh1bnNpZ25lZCBzaG8KICAgICAgICAgY2FzZSAweDIwMjk6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBX
VEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UoYyk7CisgICAgICAgICAgICByZXR1cm4gaXNT
ZXBhcmF0b3JTcGFjZShjKTsKICAgICB9CiB9CiAKQEAgLTk2NSw3ICs5NjgsNyBAQCBVU3RyaW5n
IGVzY2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKGNvCiAgICAgICAgICAgICBlc2NhcGVkU3Ry
aW5nICs9ICJcXFxcIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaWYgKGMgPCAxMjggJiYgV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIoYykp
CisgICAgICAgICAgICBpZiAoYyA8IDEyOCAmJiBpc1ByaW50YWJsZUNoYXIoYykpCiAgICAgICAg
ICAgICAgICAgZXNjYXBlZFN0cmluZy5hcHBlbmQoYyk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBjaGFyIGhleFZhbHVlWzddOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCShy
ZXZpc2lvbiAxODY4NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEzICszMSwxMiBAQAogI2luY2x1ZGUgIm5vZGVzLmgiCiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCi1zdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChpbnQp
OwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiAvLyB3
ZSBjYW4ndCBzcGVjaWZ5IHRoZSBuYW1lc3BhY2UgaW4geWFjYydzIEMgb3V0cHV0LCBzbyBkbyBp
dCBoZXJlCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCi1zdGF0aWMgTGV4ZXIgKmN1cnJMZXhlciA9
IDA7Ci0KICNpZm5kZWYgS0RFX1VTRV9GSU5BTAogI2luY2x1ZGUgImdyYW1tYXIuaCIKICNlbmRp
ZgpAQCAtNTMsNiArNTIsMTIgQEAgaW50IGtqc3l5bGV4KCkKICAgcmV0dXJuIExleGVyOjpjdXJy
KCktPmxleCgpOwogfQogCituYW1lc3BhY2UgS0pTIHsKKworc3RhdGljIExleGVyKiBjdXJyTGV4
ZXIgPSAwOworCitzdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChpbnQpOworCiBMZXhlcjo6TGV4
ZXIoKQogICA6IHl5bGluZW5vKDEpLAogICAgIHNpemU4KDEyOCksIHNpemUxNigxMjgpLCByZXN0
cktleXdvcmQoZmFsc2UpLApAQCAtNTY1LDcgKzU3MCw3IEBAIGludCBMZXhlcjo6bGV4KCkKIAog
Ym9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNlKCkgY29uc3QKIHsKLSAgcmV0dXJuIGN1cnJlbnQgPT0g
J1x0JyB8fCBjdXJyZW50ID09IDB4MGIgfHwgY3VycmVudCA9PSAweDBjIHx8IFdURjo6VW5pY29k
ZTo6aXNTZXBhcmF0b3JTcGFjZShjdXJyZW50KTsKKyAgcmV0dXJuIGN1cnJlbnQgPT0gJ1x0JyB8
fCBjdXJyZW50ID09IDB4MGIgfHwgY3VycmVudCA9PSAweDBjIHx8IGlzU2VwYXJhdG9yU3BhY2Uo
Y3VycmVudCk7CiB9CiAKIGJvb2wgTGV4ZXI6OmlzTGluZVRlcm1pbmF0b3IoKQpAQCAtNTgxLDI1
ICs1ODYsMTQgQEAgYm9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcigpCiAKIGJvb2wgTGV4ZXI6
OmlzSWRlbnRTdGFydChpbnQgYykKIHsKLSAgcmV0dXJuIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5
KGMpICYgKFdURjo6VW5pY29kZTo6TGV0dGVyX1VwcGVyY2FzZQotICAgICAgICB8IFdURjo6VW5p
Y29kZTo6TGV0dGVyX0xvd2VyY2FzZQotICAgICAgICB8IFdURjo6VW5pY29kZTo6TGV0dGVyX1Rp
dGxlY2FzZQotICAgICAgICB8IFdURjo6VW5pY29kZTo6TGV0dGVyX01vZGlmaWVyCi0gICAgICAg
IHwgV1RGOjpVbmljb2RlOjpMZXR0ZXJfT3RoZXIpKQorICByZXR1cm4gKGNhdGVnb3J5KGMpICYg
KExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVyX1RpdGxlY2FzZSB8
IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcikpCiAgICAgfHwgYyA9PSAnJCcgfHwgYyA9
PSAnXyc7CiB9CiAKIGJvb2wgTGV4ZXI6OmlzSWRlbnRQYXJ0KGludCBjKQogewotICByZXR1cm4g
KFdURjo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoV1RGOjpVbmljb2RlOjpMZXR0ZXJfVXBwZXJj
YXNlCi0gICAgICAgIHwgV1RGOjpVbmljb2RlOjpMZXR0ZXJfTG93ZXJjYXNlCi0gICAgICAgIHwg
V1RGOjpVbmljb2RlOjpMZXR0ZXJfVGl0bGVjYXNlCi0gICAgICAgIHwgV1RGOjpVbmljb2RlOjpM
ZXR0ZXJfTW9kaWZpZXIKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6OkxldHRlcl9PdGhlcgotICAg
ICAgICB8IFdURjo6VW5pY29kZTo6TWFya19Ob25TcGFjaW5nCi0gICAgICAgIHwgV1RGOjpVbmlj
b2RlOjpNYXJrX1NwYWNpbmdDb21iaW5pbmcKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6Ok51bWJl
cl9EZWNpbWFsRGlnaXQKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6OlB1bmN0dWF0aW9uX0Nvbm5l
Y3RvcikpCisgIHJldHVybiAoY2F0ZWdvcnkoYykgJiAoTGV0dGVyX1VwcGVyY2FzZSB8IExldHRl
cl9Mb3dlcmNhc2UgfCBMZXR0ZXJfVGl0bGVjYXNlIHwgTGV0dGVyX01vZGlmaWVyIHwgTGV0dGVy
X090aGVyCisgICAgICAgIHwgTWFya19Ob25TcGFjaW5nIHwgTWFya19TcGFjaW5nQ29tYmluaW5n
IHwgTnVtYmVyX0RlY2ltYWxEaWdpdCB8IFB1bmN0dWF0aW9uX0Nvbm5lY3RvcikpCiAgICAgfHwg
YyA9PSAnJCcgfHwgYyA9PSAnXyc7CiB9CiAKQEAgLTkxMSwzICs5MDUsNSBAQCBVU3RyaW5nICpM
ZXhlcjo6bWFrZVVTdHJpbmcoS0pTOjpVQ2hhciosCiAgIHN0cmluZ3NbbnVtU3RyaW5ncysrXSA9
IHN0cmluZzsKICAgcmV0dXJuIHN0cmluZzsKIH0KKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9z
dHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
c3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAKICNpbmNs
dWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBLSlMgewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gU3RyaW5nSW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CkBAIC02ODMsNyArNjg1LDcgQEAgSlNWYWx1ZSAqU3RyaW5nUHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbgogICAgIHVpbnQxNl90KiBkYXRhUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KHUucmVwKCktPmRhdGEoKSk7CiAgICAgdWludDE2X3QqIGRlc3RJZk5lZWRlZDsKIAotICAgIGlu
dCBsZW4gPSBXVEY6OlVuaWNvZGU6OnRvTG93ZXIoZGF0YVB0ciwgdS5zaXplKCksIGRlc3RJZk5l
ZWRlZCk7CisgICAgaW50IGxlbiA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YVB0ciwgdS5zaXplKCks
IGRlc3RJZk5lZWRlZCk7CiAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICByZXN1bHQgPSBqc1N0
cmluZyhVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIgKj4oZGVzdElmTmVlZGVkID8gZGVz
dElmTmVlZGVkIDogZGF0YVB0ciksIGxlbikpOwogICAgIGVsc2UKQEAgLTY5OSw3ICs3MDEsNyBA
QCBKU1ZhbHVlICpTdHJpbmdQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgdWludDE2X3Qq
IGRhdGFQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4odS5yZXAoKS0+ZGF0YSgpKTsK
ICAgICB1aW50MTZfdCogZGVzdElmTmVlZGVkOwogCi0gICAgaW50IGxlbiA9IFdURjo6VW5pY29k
ZTo6dG9VcHBlcihkYXRhUHRyLCB1LnNpemUoKSwgZGVzdElmTmVlZGVkKTsKKyAgICBpbnQgbGVu
ID0gVW5pY29kZTo6dG9VcHBlcihkYXRhUHRyLCB1LnNpemUoKSwgZGVzdElmTmVlZGVkKTsKICAg
ICBpZiAobGVuID49IDApCiAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKFVTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxVQ2hhciAqPihkZXN0SWZOZWVkZWQgPyBkZXN0SWZOZWVkZWQgOiBkYXRhUHRy
KSwgbGVuKSk7CiAgICAgZWxzZQpAQCAtODI1LDMgKzgyNyw1IEBAIEpTVmFsdWUgKlN0cmluZ09i
amVjdEZ1bmNJbXA6OmNhbGxBc0Z1bmMKIAogICByZXR1cm4ganNTdHJpbmcocyk7CiB9CisKK30K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaAkocmV2
aXNpb24gMTg2ODcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3UvVW5pY29kZUlj
dS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNywzNCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUgPSBVX01BU0soVV9GSU5BTF9QVU5DVFVBVElP
TikKICAgICB9OwogCi0gICAgaW5saW5lIHVpbnQzMl90IGZvbGRDYXNlKHVpbnQzMl90IGMpCisg
ICAgaW5saW5lIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVy
biB1X2ZvbGRDYXNlKGMsIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwogICAgIH0KIAotICAgIGlubGlu
ZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgVUNoYXIqIHNy
YywgaW50IHNyY0xlbmd0aCwgIGJvb2wqIGVycm9yKQorICAgIGlubGluZSBpbnQgZm9sZENhc2Uo
VUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNy
Y0xlbmd0aCwgYm9vbCogZXJyb3IpCiAgICAgewogICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNlKHJl
c3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCwg
JnN0YXR1cyk7CisgICAgICBpbnQgcmVhbExlbmd0aCA9IHVfc3RyRm9sZENhc2UocmVzdWx0LCBy
ZXN1bHRMZW5ndGgsIHNyYywgc3JjTGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVz
KTsKICAgICAgICplcnJvciA9ICFVX1NVQ0NFU1Moc3RhdHVzKTsKICAgICAgIHJldHVybiByZWFs
TGVuZ3RoOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgdG9Mb3dlcih1aW50MTZfdCogc3RyLCBp
bnQgc3RyTGVuZ3RoLCB1aW50MTZfdComIGRlc3RJZk5lZWRlZCkKKyAgICBpbmxpbmUgaW50IHRv
TG93ZXIoVUNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgVUNoYXIqJiBkZXN0SWZOZWVkZWQpCiAg
ICAgewogICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoOwogICAgICAgZGVzdElmTmVlZGVkID0gMDsKIAotICAgICAgcmVzdWx0TGVuZ3Ro
ID0gdV9zdHJUb0xvd2VyKDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBz
dHJMZW5ndGgsICIiLCAmZXJyKTsKKyAgICAgIHJlc3VsdExlbmd0aCA9IHVfc3RyVG9Mb3dlcigw
LCAwLCBzdHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogCiAgICAgICBpZiAocmVzdWx0TGVuZ3Ro
IDw9IHN0ckxlbmd0aCkgewogICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVf
c3RyVG9Mb3dlcihyZWludGVycHJldF9jYXN0PCA6OlVDaGFyKj4oc3RyKSwgcmVzdWx0TGVuZ3Ro
LCByZWludGVycHJldF9jYXN0PCA6OlVDaGFyKj4oc3RyKSwgc3RyTGVuZ3RoLCAiIiwgJmVycik7
CisgICAgICAgIHVfc3RyVG9Mb3dlcihzdHIsIHJlc3VsdExlbmd0aCwgc3RyLCBzdHJMZW5ndGgs
ICIiLCAmZXJyKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsK
LSAgICAgICAgZGVzdElmTmVlZGVkID0gKHVpbnQxNl90KiltYWxsb2MocmVzdWx0TGVuZ3RoICog
c2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgICAgIHVfc3RyVG9Mb3dlcihyZWludGVycHJldF9jYXN0
PCA6OlVDaGFyKj4oZGVzdElmTmVlZGVkKSwgcmVzdWx0TGVuZ3RoLCByZWludGVycHJldF9jYXN0
PCA6OlVDaGFyKj4oc3RyKSwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CisgICAgICAgIGRlc3RJZk5l
ZWRlZCA9IHN0YXRpY19jYXN0PFVDaGFyKj4obWFsbG9jKHJlc3VsdExlbmd0aCAqIHNpemVvZihV
Q2hhcikpKTsKKyAgICAgICAgdV9zdHJUb0xvd2VyKGRlc3RJZk5lZWRlZCwgcmVzdWx0TGVuZ3Ro
LCBzdHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogICAgICAgfQogCiAgICAgICByZXR1cm4gVV9G
QUlMVVJFKGVycikgPyAtMSA6IHJlc3VsdExlbmd0aDsKQEAgLTE1MywzNiArMTUzLDM2IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIGlubGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCAgYm9vbCogZXJyb3IpCiAg
ICAgewogICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICBpbnQz
Ml90IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIocmVzdWx0LCByZXN1bHRMZW5ndGgsIHNyYywg
c3JjTGVuZ3RoLCAiIiwgJnN0YXR1cyk7CisgICAgICBpbnQgcmVhbExlbmd0aCA9IHVfc3RyVG9M
b3dlcihyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgsICIiLCAmc3RhdHVzKTsK
ICAgICAgICplcnJvciA9ICEhVV9GQUlMVVJFKHN0YXR1cyk7CiAgICAgICByZXR1cm4gcmVhbExl
bmd0aDsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCB0b0xvd2VyKGludDMyX3QgYykKKyAg
ICBpbmxpbmUgVUNoYXIzMiB0b0xvd2VyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4g
dV90b2xvd2VyKGMpOwogICAgIH0KIAotICAgIGlubGluZSBpbnQzMl90IHRvVXBwZXIoaW50MzJf
dCBjKQorICAgIGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAg
IHJldHVybiB1X3RvdXBwZXIoYyk7CiAgICAgfQogCi0gICAgaW5saW5lIGludCB0b1VwcGVyKHVp
bnQxNl90KiBzdHIsIGludCBzdHJMZW5ndGgsIHVpbnQxNl90KiYgZGVzdElmTmVlZGVkKQorICAg
IGlubGluZSBpbnQgdG9VcHBlcihVQ2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBVQ2hhciomIGRl
c3RJZk5lZWRlZCkKICAgICB7CiAgICAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsK
ICAgICAgIGludCByZXN1bHRMZW5ndGg7CiAgICAgICBkZXN0SWZOZWVkZWQgPSAwOwogCi0gICAg
ICByZXN1bHRMZW5ndGggPSB1X3N0clRvVXBwZXIoMCwgMCwgcmVpbnRlcnByZXRfY2FzdDwgOjpV
Q2hhcio+KHN0ciksIHN0ckxlbmd0aCwgIiIsICZlcnIpOworICAgICAgcmVzdWx0TGVuZ3RoID0g
dV9zdHJUb1VwcGVyKDAsIDAsIHN0ciwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CiAKICAgICAgIGlm
IChyZXN1bHRMZW5ndGggPD0gc3RyTGVuZ3RoKSB7CiAgICAgICAgIGVyciA9IFVfWkVST19FUlJP
UjsKLSAgICAgICAgdV9zdHJUb1VwcGVyKHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIp
LCByZXN1bHRMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBzdHJMZW5n
dGgsICIiLCAmZXJyKTsKKyAgICAgICAgdV9zdHJUb1VwcGVyKHN0ciwgcmVzdWx0TGVuZ3RoLCBz
dHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyID0g
VV9aRVJPX0VSUk9SOwotICAgICAgICBkZXN0SWZOZWVkZWQgPSAodWludDE2X3QqKW1hbGxvYyhy
ZXN1bHRMZW5ndGggKiBzaXplb2YodWludDE2X3QpKTsKLSAgICAgICAgdV9zdHJUb1VwcGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihkZXN0SWZOZWVkZWQpLCByZXN1bHRMZW5ndGgsIHJl
aW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBzdHJMZW5ndGgsICIiLCAmZXJyKTsKKyAg
ICAgICAgZGVzdElmTmVlZGVkID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihtYWxsb2MocmVzdWx0TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICB1X3N0clRvVXBwZXIoZGVzdElmTmVlZGVk
LCByZXN1bHRMZW5ndGgsIHN0ciwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CiAgICAgICB9CiAKICAg
ICAgIHJldHVybiBVX0ZBSUxVUkUoZXJyKSA/IC0xIDogcmVzdWx0TGVuZ3RoOwpAQCAtMTkxLDY2
ICsxOTEsNjcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFy
KiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsICBi
b29sKiBlcnJvcikKICAgICB7CiAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKLSAgICAgIGludDMyX3QgcmVhbExlbmd0aCA9IHVfc3RyVG9VcHBlcihyZXN1bHQsIHJlc3Vs
dExlbmd0aCwgc3JjLCBzcmNMZW5ndGgsICIiLCAmc3RhdHVzKTsKKyAgICAgIGludCByZWFsTGVu
Z3RoID0gdV9zdHJUb1VwcGVyKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwg
IiIsICZzdGF0dXMpOwogICAgICAgKmVycm9yID0gISFVX0ZBSUxVUkUoc3RhdHVzKTsKICAgICAg
IHJldHVybiByZWFsTGVuZ3RoOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgdG9UaXRsZUNhc2Ug
KHVpbnQzMl90IGMpCisgICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQog
ICAgIHsKICAgICAgIHJldHVybiB1X3RvdGl0bGUoYyk7CiAgICAgfQogCi0gICAgaW5saW5lIGJv
b2wgaXNGb3JtYXRDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIo
VUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiB1X2NoYXJUeXBlKGMpID09IFVfRk9STUFU
X0NIQVI7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCiAgICAgewog
ICAgICAgcmV0dXJuIHVfY2hhclR5cGUoYykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7CiAgICAgfQog
Ci0gICAgaW5saW5lIGJvb2wgaXNQcmludGFibGVDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUg
Ym9vbCBpc1ByaW50YWJsZUNoYXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiAhIXVf
aXNwcmludChjKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGJvb2wgaXNEaWdpdChpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNEaWdpdChVQ2hhcjMyIGMpCiAgICAgewogICAgICAgcmV0
dXJuICEhdV9pc2RpZ2l0KGMpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzUHVuY3QoaW50
MzJfdCBjKQorICAgIGlubGluZSBib29sIGlzUHVuY3QoVUNoYXIzMiBjKQogICAgIHsKICAgICAg
IHJldHVybiAhIXVfaXNwdW5jdChjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCBtaXJy
b3JlZENoYXIoaW50MzJfdCBjKQorICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hh
cjMyIGMpCiAgICAgewogICAgICAgcmV0dXJuIHVfY2hhck1pcnJvcihjKTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgQ2hhckNhdGVnb3J5IGNhdGVnb3J5KGludDMyX3QgYykKKyAgICBpbmxpbmUgQ2hh
ckNhdGVnb3J5IGNhdGVnb3J5KFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q2hhckNhdGVnb3J5PihVX0dFVF9HQ19NQVNLKGMpKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgRGlyZWN0aW9uIGRpcmVjdGlvbihpbnQgYykgewotICAgICAgcmV0dXJuIChEaXJlY3Rpb24p
dV9jaGFyRGlyZWN0aW9uKGMpOworICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKFVDaGFy
MzIgYykKKyAgICB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGlyZWN0aW9uPih1X2NoYXJE
aXJlY3Rpb24oYykpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzTG93ZXIoaW50MzJfdCBj
KQorICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVy
biAhIXVfaXNsb3dlcihjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBpc1VwcGVyKGludDMy
X3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc1VwcGVyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICBy
ZXR1cm4gISF1X2lzVVVwcGVyY2FzZShjKTsKICAgICAgIH0KIAotICAgIGlubGluZSBpbnQgZGln
aXRWYWx1ZShpbnQzMl90IGMpCisgICAgaW5saW5lIGludCBkaWdpdFZhbHVlKFVDaGFyMzIgYykK
ICAgICB7CiAgICAgICByZXR1cm4gdV9jaGFyRGlnaXRWYWx1ZShjKTsKICAgICB9CkBAIC0yNjUs
MTUgKzI2NiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
ZWNvbXBvc2l0aW9uVHlwZT4odV9nZXRJbnRQcm9wZXJ0eVZhbHVlKGMsIFVDSEFSX0RFQ09NUE9T
SVRJT05fVFlQRSkpOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgc3RyY2FzZWNtcChjb25zdCBV
Q2hhciAqYSwgY29uc3QgVUNoYXIgKmIsIGludCBsZW4pCisgICAgaW5saW5lIGludCB1bWVtY2Fz
ZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW4pCiAgICAgewogICAg
ICAgcmV0dXJuIHVfbWVtY2FzZWNtcChhLCBiLCBsZW4sIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwog
ICAgIH0KIAotICAgIGlubGluZSB2b2lkIG1lbXNldChVQ2hhciogZGVzdCwgVUNoYXIgY2gsIGlu
dDMyX3QgY291bnQpCi0gICAgewotICAgICAgdV9tZW1zZXQoZGVzdCwgY2gsIGNvdW50KTsKLSAg
ICB9CiAgIH0KIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvcXQ0L1VuaWNv
ZGVRdDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9xdDQvVW5p
Y29kZVF0NC5oCShyZXZpc2lvbiAxODY4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L3F0NC9Vbmljb2RlUXQ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgIFN5bWJvbF9PdGhlciA9IFVfTUFTSyhRQ2hhcjo6U3ltYm9sX090
aGVyKSwKICAgICB9OwogCi0gICAgaW5saW5lIGludCB0b0xvd2VyKHVpbnQxNl90KiBzdHIsIGlu
dCBzdHJMZW5ndGgsIHVpbnQxNl90KiYgZGVzdElmTmVlZGVkKQorICAgIGlubGluZSBpbnQgdG9M
b3dlcihVQ2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBVQ2hhciomIGRlc3RJZk5lZWRlZCkKICAg
ICB7CiAgICAgICBkZXN0SWZOZWVkZWQgPSAwOwogCkBAIC0xNTIsMTIgKzE1MiwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgIHJldHVybiBzdHJMZW5ndGg7CiAgICAgfQogCi0gICAgaW5saW5l
IHVpbnQxNl90IHRvTG93ZXIodWludDE2X3QgY2gpCisgICAgaW5saW5lIFVDaGFyMzIgdG9Mb3dl
cihVQ2hhcjMyIGNoKQogICAgIHsKLSAgICAgIHJldHVybiBRQ2hhcihjaCkudG9Mb3dlcigpLnVu
aWNvZGUoKTsKKyAgICAgIGlmIChjaCA+IDB4ZmZmZikKKyAgICAgICAgcmV0dXJuIGNoOworICAg
ICAgcmV0dXJuIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljaCkudG9Mb3dlcigpLnVuaWNvZGUoKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3Vs
dExlbmd0aCwgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgIGJvb2wqIGVycm9yKQorICAgIGlu
bGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBV
Q2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCAgYm9vbCogZXJyb3IpCiAgICAgewogICAgICAgKmVy
cm9yID0gZmFsc2U7CiAgICAgICBpZiAocmVzdWx0TGVuZ3RoIDwgc3JjTGVuZ3RoKSB7CkBAIC0x
NjgsNyArMTcwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJlc3VsdFtpXSA9IFFDaGFy
KHNyY1tpXSkudG9Mb3dlcigpLnVuaWNvZGUoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50IHRv
VXBwZXIodWludDE2X3QqIHN0ciwgaW50IHN0ckxlbmd0aCwgdWludDE2X3QqJiBkZXN0SWZOZWVk
ZWQpCisgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFyKiBzdHIsIGludCBzdHJMZW5ndGgsIFVD
aGFyKiYgZGVzdElmTmVlZGVkKQogICAgIHsKICAgICAgIGRlc3RJZk5lZWRlZCA9IDA7CiAKQEAg
LTE3OCw5ICsxODAsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICByZXR1cm4gc3RyTGVuZ3Ro
OwogICAgIH0KIAotICAgIGlubGluZSB1aW50MTZfdCB0b1VwcGVyKHVpbnQxNl90IGNoKQorICAg
IGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjaCkKICAgICB7Ci0gICAgICByZXR1cm4g
UUNoYXIoY2gpLnRvVXBwZXIoKS51bmljb2RlKCk7CisgICAgICBpZiAoY2ggPiAweGZmZmYpCisg
ICAgICAgIHJldHVybiBjaDsKKyAgICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpY2gp
LnRvVXBwZXIoKS51bmljb2RlKCk7CiAgICAgfQogCiAgICAgaW5saW5lIGludCB0b1VwcGVyKFVD
aGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgs
ICBib29sKiBlcnJvcikKQEAgLTE5NCwxOCArMTk4LDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICByZXN1bHRbaV0gPSBRQ2hhcihzcmNbaV0pLnRvVXBwZXIoKS51bmljb2RlKCk7CiAgICAg
fQogCi0gICAgaW5saW5lIGludCB0b1RpdGxlQ2FzZSAodWludDMyX3QgYykKKyAgICBpbmxpbmUg
aW50IHRvVGl0bGVDYXNlKFVDaGFyMzIgYykKICAgICB7CiAgICAgICBpZiAoYyA+IDB4ZmZmZikK
ICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICByZXR1cm4gUUNoYXIoYykudG9VcHBlcigpLnVuaWNv
ZGUoKTsKKyAgICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpYykudG9VcHBlcigpLnVu
aWNvZGUoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdWludDMyX3QgZm9sZENhc2UodWludDMyX3Qg
YykKKyAgICBpbmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGMpCiAgICAgewogICAgICAg
aWYgKGMgPiAweGZmZmYpCiAgICAgICAgIHJldHVybiBjOwotICAgICAgcmV0dXJuIFFDaGFyKGMp
LnRvTG93ZXIoKS51bmljb2RlKCk7CisgICAgICByZXR1cm4gUUNoYXIoKHVuc2lnbmVkIHNob3J0
KWMpLnRvTG93ZXIoKS51bmljb2RlKCk7CiAgICAgfQogCiAgICAgaW5saW5lIGludCBmb2xkQ2Fz
ZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBVQ2hhciogc3JjLCBpbnQgc3JjTGVu
Z3RoLCAgYm9vbCogZXJyb3IpCkBAIC0yMTMsNTAgKzIxNyw1MiBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgIHJldHVybiB0b0xvd2VyKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0
aCwgZXJyb3IpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzRm9ybWF0Q2hhcihpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNGb3JtYXRDaGFyKFVDaGFyMzIgYykKICAgICB7CiAgICAg
ICByZXR1cm4gKGMgJiAweGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydClj
KS5jYXRlZ29yeSgpID09IFFDaGFyOjpPdGhlcl9Gb3JtYXQ7CiAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgaXNQcmludGFibGVDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc1ByaW50
YWJsZUNoYXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiAoYyAmIDB4ZmZmZjAwMDAp
ID09IDAgJiYgUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLmlzUHJpbnQoKTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgYm9vbCBpc1NlcGFyYXRvclNwYWNlKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9v
bCBpc1NlcGFyYXRvclNwYWNlKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gKGMgJiAw
eGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljKS5jYXRlZ29yeSgpID09
IFFDaGFyOjpTZXBhcmF0b3JfU3BhY2U7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNQdW5j
dChpbnQzMl90IGMpCisgICAgaW5saW5lIGJvb2wgaXNQdW5jdChVQ2hhcjMyIGMpCiAgICAgewog
ICAgICAgcmV0dXJuIChjICYgMHhmZmZmMDAwMCkgPT0gMCAmJiBRQ2hhcigodW5zaWduZWQgc2hv
cnQpYykuaXNQdW5jdCgpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzRGlnaXQoaW50MzJf
dCBjKQorICAgIGlubGluZSBib29sIGlzRGlnaXQoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJl
dHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLmlz
RGlnaXQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBpc0xvd2VyKGludDMyX3QgYykKKyAg
ICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gKGMg
JiAweGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljKS5jYXRlZ29yeSgp
ID09IFFDaGFyOjpMZXR0ZXJfTG93ZXJjYXNlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlz
VXBwZXIoaW50MzJfdCBjKQorICAgIGlubGluZSBib29sIGlzVXBwZXIoVUNoYXIzMiBjKQogICAg
IHsKICAgICAgIHJldHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIoKHVuc2lnbmVk
IHNob3J0KWMpLmNhdGVnb3J5KCkgPT0gUUNoYXI6OkxldHRlcl9VcHBlcmNhc2U7CiAgICAgfQog
Ci0gICAgaW5saW5lIGludCBkaWdpdFZhbHVlKGludDMyX3QgYykKKyAgICBpbmxpbmUgaW50IGRp
Z2l0VmFsdWUoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIGlmIChjID4gMHhmZmZmKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAgIHJldHVybiBRQ2hhcihjKS5kaWdpdFZhbHVlKCk7CiAgICAgfQog
Ci0gICAgaW5saW5lIHVpbnQxNl90IG1pcnJvcmVkQ2hhcih1aW50MTZfdCBjKQorICAgIGlubGlu
ZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyIGMpCiAgICAgeworICAgICAgaWYgKGMgPiAw
eGZmZmYpCisgICAgICAgIHJldHVybiBjOwogICAgICAgcmV0dXJuIFFDaGFyKGMpLm1pcnJvcmVk
Q2hhcigpLnVuaWNvZGUoKTsKICAgICB9CiAKQEAgLTI3NCw4ICsyODAsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgIHJldHVybiAoRGVjb21wb3NpdGlvblR5cGUpUUNoYXIoYykuZGVjb21wb3Np
dGlvblRhZygpOwogICAgIH0KIAotCi0gICAgaW5saW5lIGludCBzdHJjYXNlY21wKGNvbnN0IFVD
aGFyICphLCBjb25zdCBVQ2hhciAqYiwgaW50IGxlbikKKyAgICBpbmxpbmUgaW50IHVtZW1jYXNl
Y21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKICAgICB7CiAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIFFDaGFyIGMxID0gUUNo
YXIoYVtpXSkudG9Mb3dlcigpOwpAQCAtMjg2LDI0ICsyOTEsMTggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBtZW1zZXQoVUNoYXIq
IGRlc3QsIFVDaGFyIGNoLCBpbnQzMl90IGNvdW50KQotICAgIHsKLSAgICAgIFVDaGFyICplbmQg
PSBkZXN0ICsgY291bnQ7Ci0gICAgICB3aGlsZSAoZGVzdCA8IGVuZCkKLSAgICAgICAgKmRlc3Qr
KyA9IGNoOwotICAgIH0KLQotICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKGludCBjKSB7
CisgICAgaW5saW5lIERpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKSB7CiAgICAgICBpZiAo
YyA+IDB4ZmZmZikKICAgICAgICAgcmV0dXJuIExlZnRUb1JpZ2h0OwogICAgICAgcmV0dXJuIChE
aXJlY3Rpb24pUUNoYXIoYykuZGlyZWN0aW9uKCk7CiAgICAgfQogCi0gICAgaW5saW5lIENoYXJD
YXRlZ29yeSBjYXRlZ29yeShpbnQgYykgeworICAgIGlubGluZSBDaGFyQ2F0ZWdvcnkgY2F0ZWdv
cnkoVUNoYXIzMiBjKSB7CiAgICAgICBpZiAoYyA+IDB4ZmZmZikKICAgICAgICAgcmV0dXJuIChD
aGFyQ2F0ZWdvcnkpIFVfTUFTSyhRQ2hhcjo6TGV0dGVyX090aGVyKTsKICAgICAgIHJldHVybiAo
Q2hhckNhdGVnb3J5KSBVX01BU0soUUNoYXIoYykuY2F0ZWdvcnkoKSk7CiAgICAgfQorCiAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE4NjkwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMDMgQEAKKzIwMDctMDEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0gZ290IHJpZCBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgZnJvbSBtb3N0IHVzZXMgb2YgV1RGOjpV
bmljb2RlCisKKyAgICAgICAgLSB1cGRhdGVkIGZvciByZW1vdmFsIG9mIFdURjo6VW5pY29kZTo6
bWVtY21wCisgICAgICAgIC0gdXBkYXRlZCBmb3IgcmVuYW1pbmcgb2YgV1RGOjpVbmljb2RlOjpz
dHJjYXNlY21wIHRvIHVtZW1jYXNlY21wLgorCisgICAgICAgIC0gdW5pZmllZCBjb25zdGFudHMg
Zm9yIHNwZWNpYWwgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGEgbmV3CisgICAgICAgICAgQ2hhcmFj
dGVyTmFtZXMuaCBoZWFkZXIKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhcnNlU3RyaW5nOjpsb3dlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzVmFsaWROYW1lU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZE5hbWVQYXJ0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGVz
cGFjZSk6CisgICAgICAgICogZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwOgorICAgICAgICAq
IGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNpcmN1bGFyU2Vh
cmNoQnVmZmVyOjpDaXJjdWxhclNlYXJjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDaXJj
dWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpub25CcmVha2luZ1NwYWNlU3RyaW5nKToKKyAgICAgICAgKiBl
ZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VGb250U2l6ZU51bWJlcik6CisgICAgICAgICogaHRt
bC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhhbmRsZUVy
cm9yKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0cmlwTGVhZGluZ1doaXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpub3JtYWxpemVWb2ljaW5nTWFya3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL0dseXBoTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoTWFwOjps
b2NhdGVQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NaW1lVHlwZVJlZ2lzdHJ5Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU3RyaW5nSGFzaC5oOgorICAgICAgICAqIHBsYXRmb3JtL1N0cmluZ0lt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdJbXBsOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5zZXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRydW5jYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZ0ltcGw6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppc0xvd2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZ0ltcGw6Omxvd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6
OnVwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNlY3VyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmb2xkQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpjYXBpdGFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvSW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAgICAqIHBsYXRmb3JtL1RleHRCb3VuZGFyaWVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vVGV4dEJyZWFrSXRlcmF0b3IuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9UZXh0Q29kZWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0Q29kZWNMYXRpbjEu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL1RleHRFbmNvZGluZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RleHRDb2RlY01hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNNYWM6OmRlY29kZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bGlzdE1hcmtlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnNldEludGVybmFsU3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZUFuZEVzY2FwZU5vblByaW50YWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcmVuZGVyaW5n
L2JpZGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVN0YXRlOjpCaWRpU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlkaUNvbnRleHQ6OkJpZGlDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJpZGlOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmJpZGlGaXJzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaWRpSXRlcmF0b3I6OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6c2tpcE5vbkJyZWFr
aW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
ZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtf
bGluZXMuaDoKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OmNoYXJDYXQpOgorCiAyMDA3LTAxLTA4ICBCZXRoIERha2luICA8YmRha2luQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI1LDYgKzE1MjUsNyBAQAogCQk5M0MwOUE3RjBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5k
bGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNDMDlBN0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSAqLzsgfTsKIAkJ
OTNDMDlBODEwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MwOUE4MDBCMDY0RjAwMDA1QUJE
NEQgLyogRXZlbnRIYW5kbGVyLmNwcCAqLzsgfTsKIAkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDRE
IC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0MwOUM4NTBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5M0M3QjVGNDBCNTJE
ODkxMDBCNTQ3N0UgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzdCNUYzMEI1MkQ4OTEwMEI1NDc3RSAvKiBDaGFyYWN0
ZXJOYW1lcy5oICovOyB9OwogCQk5M0M4NDFGODA5Q0U4NTVDMDBERkY1RTUgLyogRE9NSW1wbGVt
ZW50YXRpb25Gcm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNDODQxRjcwOUNFODU1QzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9uRnJvbnQu
aCAqLzsgfTsKIAkJOTNDODQxRkYwOUNFODU4MzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9u
RnJvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNDODQxRkUwOUNFODU4MzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwICov
OyB9OwogCQk5M0NDRjAyNzBBRjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDQ0YwMjYwQUY2
QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDU0MSw2ICs0NTQyLDcgQEAKIAkJOTNDMDlB
N0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50SGFuZGxlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNDMDlBODAwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudEhhbmRsZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUM4NTBCMDY1N0FBMDA1QUJE
NEQgLyogU2Nyb2xsVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNDN0I1RjMwQjUyRDg5
MTAwQjU0NzdFIC8qIENoYXJhY3Rlck5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoYXJhY3Rlck5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
Qzg0MUY3MDlDRTg1NUMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uRnJvbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDODQxRkUwOUNFODU4MzAwREZGNUU1IC8qIERP
TUltcGxlbWVudGF0aW9uRnJvbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRE9NSW1wbGVtZW50YXRpb25Gcm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQ0E0Qzk5MDlERjkzRkEwMERGODY3NyAvKiBodG1sNC5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gaHRtbDQuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkx
MCw2ICs4OTEyLDcgQEAKIAkJCQlFMTFENTE5MTBCMkU3QTVGMDA1NkMxODggLyogQmFzZTY0Lmgg
Ki8sCiAJCQkJRTExRDUxOTIwQjJFN0E1RjAwNTZDMTg4IC8qIEJhc2U2NC5jcHAgKi8sCiAJCQkJ
NjVGNTM4MjAwOUIyQjU1NzAwRjNEQzRBIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLywKKwkJCQk5
M0M3QjVGMzBCNTJEODkxMDBCNTQ3N0UgLyogQ2hhcmFjdGVyTmFtZXMuaCAqLywKIAkJCQk5MzI2
REMwQTA5REFENUJFMDBBRkM4NDcgLyogQ2hhcnNldERhdGEuaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTkzQjZBMEU3MEIwQkNB
NjcwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8sCkBAIC0xMDk2MCw2ICsxMDk2Myw3IEBA
CiAJCQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3IC8qIFRva2VuaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUE4ODJCMzAwQjRFRjVFQjAwNkQyNkQxIC8qIFBvaW50ZXJFdmVudHNI
aXRSdWxlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNDN0I1RjQwQjUyRDg5MTAwQjU0NzdFIC8q
IENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvY3NzL2Nzc3Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvY3NzcGFyc2VyLmNwcAkocmV2aXNp
b24gMTg2ODcpCisrKyBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCw3IEBAIGV4dGVybiBpbnQgY3NzeXlkZWJ1ZzsKIGV4dGVybiBpbnQgY3NzeXlw
YXJzZSh2b2lkKiBwYXJzZXIpOwogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTUsNyArMTU2LDcgQEAgdm9p
ZCBQYXJzZVN0cmluZzo6bG93ZXIoKQogICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcnNbaV07CiAg
ICAgaWYgKG9yZWQgJiB+MHg3RikKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykKLSAgICAgICAgICAgIGNoYXJhY3RlcnNbaV0gPSBXVEY6OlVuaWNvZGU6OnRvTG93ZXIo
Y2hhcmFjdGVyc1tpXSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gVW5pY29kZTo6dG9M
b3dlcihjaGFyYWN0ZXJzW2ldKTsKICAgICBlbHNlCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdG9sb3dlcihjaGFy
YWN0ZXJzW2ldKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAKICNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMSwxMCArMTMz
LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAvLyBUaGlzIGFtb3VudCBvZiB0aW1l
IG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3aWxsIGV2ZW4gY29uc2lkZXIgc2NoZWR1bGlu
ZyBhIGxheW91dCB3aXRob3V0IGEgZGVsYXkuCiAvLyBGSVhNRTogRm9yIGZhc3RlciBtYWNoaW5l
cyB0aGlzIHZhbHVlIGNhbiByZWFsbHkgYmUgbG93ZXJlZCB0byAyMDAuICAyNTAgaXMgYWRlcXVh
dGUsIGJ1dCBhIGxpdHRsZSBoaWdoCiAvLyBmb3IgZHVhbCBHNXMuIDopCi1jb25zdCBpbnQgY0xh
eW91dFNjaGVkdWxlVGhyZXNob2xkID0gMjUwOworc3RhdGljIGNvbnN0IGludCBjTGF5b3V0U2No
ZWR1bGVUaHJlc2hvbGQgPSAyNTA7CiAKIC8vIFVzZSAxIHRvIHJlcHJlc2VudCB0aGUgZG9jdW1l
bnQncyBkZWZhdWx0IGZvcm0uCi1IVE1MRm9ybUVsZW1lbnQqIGNvbnN0IGRlZmF1bHRGb3JtID0g
KEhUTUxGb3JtRWxlbWVudCopIDE7CitzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBjb25zdCBkZWZh
dWx0Rm9ybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oMSk7CiAKIC8vIEdv
bGRlbiByYXRpbyAtIGFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAw
J3MgdG8gYWxsIDAncwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOwpA
QCAtMTY1LDEyICsxNjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVTdGFydChV
Q2hhCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gcnVsZXMgKGEpIGFuZCAoZikgYWJv
dmUKLSAgICBjb25zdCB1aW50MzJfdCBuYW1lU3RhcnRNYXNrID0gV1RGOjpVbmljb2RlOjpMZXR0
ZXJfTG93ZXJjYXNlIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpV
bmljb2RlOjpMZXR0ZXJfVXBwZXJjYXNlIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV1RGOjpVbmljb2RlOjpMZXR0ZXJfT3RoZXIgfAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9UaXRsZWNhc2UgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok51bWJlcl9MZXR0ZXI7Ci0g
ICAgaWYgKCEoV1RGOjpVbmljb2RlOjpjYXRlZ29yeShjKSAmIG5hbWVTdGFydE1hc2spKQorICAg
IGNvbnN0IHVpbnQzMl90IG5hbWVTdGFydE1hc2sgPSBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVy
X1VwcGVyY2FzZSB8IExldHRlcl9PdGhlciB8IExldHRlcl9UaXRsZWNhc2UgfCBOdW1iZXJfTGV0
dGVyOworICAgIGlmICghKFVuaWNvZGU6OmNhdGVnb3J5KGMpICYgbmFtZVN0YXJ0TWFzaykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIHJ1bGUgKGMpIGFib3ZlCkBAIC0xNzgsOCAr
MTc2LDggQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWROYW1lU3RhcnQoVUNoYQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBydWxlIChkKSBhYm92ZQotICAgIFdURjo6VW5pY29k
ZTo6RGVjb21wb3NpdGlvblR5cGUgZGVjb21wVHlwZSA9IFdURjo6VW5pY29kZTo6ZGVjb21wb3Np
dGlvblR5cGUoYyk7Ci0gICAgaWYgKGRlY29tcFR5cGUgPT0gV1RGOjpVbmljb2RlOjpEZWNvbXBv
c2l0aW9uRm9udCB8fCBkZWNvbXBUeXBlID09IFdURjo6VW5pY29kZTo6RGVjb21wb3NpdGlvbkNv
bXBhdCkKKyAgICBEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBUeXBlID0gZGVjb21wb3NpdGlvblR5
cGUoYyk7CisgICAgaWYgKGRlY29tcFR5cGUgPT0gRGVjb21wb3NpdGlvbkZvbnQgfHwgZGVjb21w
VHlwZSA9PSBEZWNvbXBvc2l0aW9uQ29tcGF0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIwMCwxMiArMTk4LDggQEAgc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWROYW1lUGFydChVQ2hhcgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIHJ1bGVz
IChiKSBhbmQgKGYpIGFib3ZlCi0gICAgY29uc3QgdWludDMyX3Qgb3RoZXJOYW1lUGFydE1hc2sg
PSBXVEY6OlVuaWNvZGU6Ok1hcmtfTm9uU3BhY2luZyB8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok1hcmtfRW5jbG9zaW5nIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TWFya19TcGFjaW5n
Q29tYmluaW5nIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6
VW5pY29kZTo6TGV0dGVyX01vZGlmaWVyIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdURjo6VW5pY29kZTo6TnVtYmVyX0RlY2ltYWxEaWdpdDsKLSAgICBpZiAoIShX
VEY6OlVuaWNvZGU6OmNhdGVnb3J5KGMpICYgb3RoZXJOYW1lUGFydE1hc2spKQorICAgIGNvbnN0
IHVpbnQzMl90IG90aGVyTmFtZVBhcnRNYXNrID0gTWFya19Ob25TcGFjaW5nIHwgTWFya19FbmNs
b3NpbmcgfCBNYXJrX1NwYWNpbmdDb21iaW5pbmcgfCBMZXR0ZXJfTW9kaWZpZXIgfCBOdW1iZXJf
RGVjaW1hbERpZ2l0OworICAgIGlmICghKFVuaWNvZGU6OmNhdGVnb3J5KGMpICYgb3RoZXJOYW1l
UGFydE1hc2spKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBydWxlIChjKSBhYm92
ZQpAQCAtMjEzLDggKzIwNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkTmFtZVBhcnQo
VUNoYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcnVsZSAoZCkgYWJvdmUKLSAg
ICBXVEY6OlVuaWNvZGU6OkRlY29tcG9zaXRpb25UeXBlIGRlY29tcFR5cGUgPSBXVEY6OlVuaWNv
ZGU6OmRlY29tcG9zaXRpb25UeXBlKGMpOwotICAgIGlmIChkZWNvbXBUeXBlID09IFdURjo6VW5p
Y29kZTo6RGVjb21wb3NpdGlvbkZvbnQgfHwgZGVjb21wVHlwZSA9PSBXVEY6OlVuaWNvZGU6OkRl
Y29tcG9zaXRpb25Db21wYXQpCisgICAgRGVjb21wb3NpdGlvblR5cGUgZGVjb21wVHlwZSA9IGRl
Y29tcG9zaXRpb25UeXBlKGMpOworICAgIGlmIChkZWNvbXBUeXBlID09IERlY29tcG9zaXRpb25G
b250IHx8IGRlY29tcFR5cGUgPT0gRGVjb21wb3NpdGlvbkNvbXBhdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiAxODY4
NykKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAKKyNp
bmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQwLDggKzQxLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1jb25zdCBV
Q2hhciBub25CcmVha2luZ1NwYWNlID0gMHhhMDsKLQogc3RhdGljIE5vZGUgKm5leHRSZW5kZXJl
ZEVkaXRhYmxlKE5vZGUgKm5vZGUpCiB7CiAgICAgd2hpbGUgKDEpIHsKQEAgLTYxNiw3ICs2MTUs
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpCiAgICAgaWYgKHBy
ZXYgIT0gKnRoaXMgJiYgcHJldi5ub2RlKCktPmluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3dFbGVt
ZW50KG5vZGUoKSkgJiYgcHJldi5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBTdHJp
bmcgc3RyaW5nID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihwcmV2Lm5vZGUoKSktPmRhdGEoKTsKICAg
ICAgICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2Lm9mZnNldCgpXTsKLSAgICAgICAgaWYgKGNvbnNp
ZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8gKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2Uo
KSB8fCBjID09IG5vbkJyZWFraW5nU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykp
CisgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChEZXByZWNh
dGVkQ2hhcihjKS5pc1NwYWNlKCkgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICB9CiAKQEAgLTYz
Myw3ICs2MzIsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zCiAg
ICAgICAgIGlmIChvZmZzZXQoKSA8IChpbnQpdGV4dE5vZGUtPmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgc3RyaW5nID0gdGV4dE5vZGUtPmRhdGEoKTsKICAgICAgICAgICAgIFVDaGFy
IGMgPSBzdHJpbmdbb2Zmc2V0KCldOwotICAgICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFw
c2libGVXaGl0ZXNwYWNlID8gKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSB8fCBjID09IG5v
bkJyZWFraW5nU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCisgICAgICAgICAg
ICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAoRGVwcmVjYXRlZENoYXIo
YykuaXNTcGFjZSgpIHx8IGMgPT0gbm9CcmVha1NwYWNlKSA6IGlzQ29sbGFwc2libGVXaGl0ZXNw
YWNlKGMpKQogICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbigpOwogICAgICAgICB9CkBAIC02NDYsNyArNjQ1LDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvcwogICAgIGlmIChuZXh0ICE9ICp0aGlzICYmIG5l
eHQubm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkpICYmIG5l
eHQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRp
Y19jYXN0PFRleHQqPihuZXh0Lm5vZGUoKSktPmRhdGEoKTsKICAgICAgICAgVUNoYXIgYyA9IHN0
cmluZ1swXTsKLSAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8g
KERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSB8fCBjID09IG5vbkJyZWFraW5nU3BhY2UpIDog
aXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCisgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxh
cHNpYmxlV2hpdGVzcGFjZSA/IChEZXByZWNhdGVkQ2hhcihjKS5pc1NwYWNlKCkgfHwgYyA9PSBu
b0JyZWFrU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICBy
ZXR1cm4gbmV4dDsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIkluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogI2luY2x1ZGUg
IkpvaW5UZXh0Tm9kZXNDb21tYW5kLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAi
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oIgpAQCAtNTcsNiArNTcsNyBAQAogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldyYXBDb250ZW50c0luRHVtbXlTcGFu
Q29tbWFuZC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgi
CiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAt
MzI4LDcgKzMyOSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWIK
IAogc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQogewotICAgIHJldHVy
biBjID09IE5PTl9CUkVBS0lOR19TUEFDRSB8fCBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9
PSAnXHQnOworICAgIHJldHVybiBjID09IG5vQnJlYWtTcGFjZSB8fCBjID09ICcgJyB8fCBjID09
ICdcbicgfHwgYyA9PSAnXHQnOwogfQogCiAvLyBGSVhNRTogRG9lc24ndCBnbyBpbnRvIHRleHQg
bm9kZXMgdGhhdCBjb250cmlidXRlIGFkamFjZW50IHRleHQgKHNpYmxpbmdzLCBjb3VzaW5zLCBl
dGMpLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAJKHJldmlzaW9uIDE4Njg3
KQorKysgV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MSW50
ZXJjaGFuZ2UuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKIApAQCAtNDAsNyArNDEsNyBAQCBE
ZXByZWNhdGVkU3RyaW5nIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkgCiAgICAgICAgIGNvbnZlcnRl
ZFNwYWNlU3RyaW5nID0gIjxzcGFuIGNsYXNzPVwiIjsKICAgICAgICAgY29udmVydGVkU3BhY2VT
dHJpbmcgKz0gQXBwbGVDb252ZXJ0ZWRTcGFjZTsKICAgICAgICAgY29udmVydGVkU3BhY2VTdHJp
bmcgKz0gIlwiPiI7Ci0gICAgICAgIGNvbnZlcnRlZFNwYWNlU3RyaW5nICs9IERlcHJlY2F0ZWRD
aGFyKDB4YTApOworICAgICAgICBjb252ZXJ0ZWRTcGFjZVN0cmluZyArPSBEZXByZWNhdGVkQ2hh
cihub0JyZWFrU3BhY2UpOwogICAgICAgICBjb252ZXJ0ZWRTcGFjZVN0cmluZyArPSAiPC9zcGFu
PiI7CiAgICAgfQogICAgIHJldHVybiBjb252ZXJ0ZWRTcGFjZVN0cmluZzsKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJDaGFy
YWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMzgsMTMgKzM5LDEyIEBACiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY6OlVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotY29uc3QgVUNoYXIgbm9uQnJlYWtpbmdTcGFjZSA9IDB4QTA7Ci0KIC8v
IEJ1ZmZlciB0aGF0IGtub3dzIGhvdyB0byBjb21wYXJlIHdpdGggYSBzZWFyY2ggdGFyZ2V0Lgog
Ly8gS2VlcHMgZW5vdWdoIG9mIHRoZSBwcmV2aW91cyB0ZXh0IHRvIGJlIGFibGUgdG8gc2VhcmNo
IGluIHRoZSBmdXR1cmUsCiAvLyBidXQgbm8gbW9yZS4KQEAgLTk1NSw3ICs5NTUsNyBAQCBDaXJj
dWxhclNlYXJjaEJ1ZmZlcjo6Q2lyY3VsYXJTZWFyY2hCdWZmCiAKICAgICBpZiAoIWlzQ2FzZVNl
bnNpdGl2ZSkKICAgICAgICAgbV90YXJnZXQgPSBzLmZvbGRDYXNlKCk7Ci0gICAgbV90YXJnZXQu
cmVwbGFjZShub25CcmVha2luZ1NwYWNlLCAnICcpOworICAgIG1fdGFyZ2V0LnJlcGxhY2Uobm9C
cmVha1NwYWNlLCAnICcpOwogICAgIG1faXNDYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZl
OwogCiAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Mocy5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcikpKTsKQEAgLTk2Niw5ICs5NjYsOSBAQCBDaXJjdWxhclNlYXJj
aEJ1ZmZlcjo6Q2lyY3VsYXJTZWFyY2hCdWZmCiB2b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjph
cHBlbmQoVUNoYXIgYykKIHsKICAgICBpZiAobV9pc0Nhc2VTZW5zaXRpdmUpCi0gICAgICAgICpt
X2N1cnNvcisrID0gYyA9PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogYzsKKyAgICAgICAgKm1f
Y3Vyc29yKysgPSBjID09IG5vQnJlYWtTcGFjZSA/ICcgJyA6IGM7CiAgICAgZWxzZQotICAgICAg
ICAqbV9jdXJzb3IrKyA9IGMgPT0gbm9uQnJlYWtpbmdTcGFjZSA/ICcgJyA6IFdURjo6VW5pY29k
ZTo6Zm9sZENhc2UoYyk7CisgICAgICAgICptX2N1cnNvcisrID0gYyA9PSBub0JyZWFrU3BhY2Ug
PyAnICcgOiBmb2xkQ2FzZShjKTsKICAgICBpZiAobV9jdXJzb3IgPT0gbV9idWZmZXIgKyBsZW5n
dGgoKSkgewogICAgICAgICBtX2N1cnNvciA9IG1fYnVmZmVyOwogICAgICAgICBtX2J1ZmZlckZ1
bGwgPSB0cnVlOwpAQCAtOTg4LDEyICs5ODgsMTIgQEAgdm9pZCBDaXJjdWxhclNlYXJjaEJ1ZmZl
cjo6YXBwZW5kKGludCBjbwogICAgIGlmIChtX2lzQ2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBVQ2hhciBjID0g
Y2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYyA9PSBub25CcmVha2lu
Z1NwYWNlID8gJyAnIDogYzsKKyAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYyA9PSBub0JyZWFr
U3BhY2UgPyAnICcgOiBjOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewogICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJh
Y3RlcnNbaV07Ci0gICAgICAgICAgICBtX2N1cnNvcltpXSA9IGMgPT0gbm9uQnJlYWtpbmdTcGFj
ZSA/ICcgJyA6IFdURjo6VW5pY29kZTo6Zm9sZENhc2UoYyk7CisgICAgICAgICAgICBtX2N1cnNv
cltpXSA9IGMgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogZm9sZENhc2UoYyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKGNvdW50IDwgdGFpbFNwYWNlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTM2Miw3ICszNjMsNyBAQCBTdHJpbmcgc3RyaW5nV2l0aFJl
YmFsYW5jZWRXaGl0ZXNwYWNlKGNvCiAKICAgICBEZXByZWNhdGVkU3RyaW5nIHJlYmFsYW5jZWRT
dHJpbmcgPSBzdHJpbmcuY29weSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAotICAgIHJlYmFsYW5j
ZWRTdHJpbmcucmVwbGFjZShOT05fQlJFQUtJTkdfU1BBQ0UsICcgJyk7CisgICAgcmViYWxhbmNl
ZFN0cmluZy5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5n
LnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5nLnJlcGxhY2UoJ1x0Jywg
JyAnKTsKICAgICAKQEAgLTM4NSw3ICszODYsNyBAQCBib29sIGlzVGFibGVTdHJ1Y3R1cmVOb2Rl
KGNvbnN0IE5vZGUgKm5vCiAKIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
CiB7Ci0gICAgc3RhdGljIFN0cmluZyBub25CcmVha2luZ1NwYWNlU3RyaW5nID0gRGVwcmVjYXRl
ZFN0cmluZyhEZXByZWNhdGVkQ2hhcihOT05fQlJFQUtJTkdfU1BBQ0UpKTsKKyAgICBzdGF0aWMg
U3RyaW5nIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBTdHJpbmcoJm5vQnJlYWtTcGFjZSwgMSk7
CiAgICAgcmV0dXJuIG5vbkJyZWFraW5nU3BhY2VTdHJpbmc7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw2IEBAIGNsYXNzIFBvc2l0aW9uOwogY2xh
c3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCi1jb25zdCBVQ2hhciBOT05fQlJF
QUtJTkdfU1BBQ0UgPSAweGEwOwotCiBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
Y29uc3QgUG9zaXRpb24mKTsKIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKIGludCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLworCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAKQEAgLTI4LDYg
KzI5LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTY0LDEyICs2NywxMiBAQCBzdGF0aWMgYm9v
bCBwYXJzZUZvbnRTaXplTnVtYmVyKGNvbnN0IFN0CiAgICAgfQogICAgIAogICAgIC8vIFBhcnNl
IGEgc2luZ2xlIGRpZ2l0LgotICAgIGlmICghV1RGOjpVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkp
CisgICAgaWYgKCFVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbnQgbnVtID0gV1RGOjpVbmljb2RlOjpkaWdpdFZhbHVlKHNbcG9zKytdKTsKKyAg
ICBpbnQgbnVtID0gVW5pY29kZTo6ZGlnaXRWYWx1ZShzW3BvcysrXSk7CiAgICAgCiAgICAgLy8g
Q2hlY2sgZm9yIGFuIGFkZGl0aW9uYWwgZGlnaXQuCi0gICAgaWYgKFdURjo6VW5pY29kZTo6aXNE
aWdpdChzW3Bvc10pKQorICAgIGlmIChVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkpCiAgICAgICAg
IG51bSA9IDEwOwogICAgIAogICAgIGlmIChzYXdQbHVzKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkhUTUxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJDb21tZW50LmgiCkBAIC01NSw4ICs1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotY29uc3QgVUNoYXIgbm9uQnJlYWtpbmdTcGFj
ZSA9IDB4YTA7Ci0KIC8qKgogICogQGludGVybmFsCiAgKi8KQEAgLTUwNCw3ICs1MDMsNyBAQCBi
b29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwgKmkg
PSB0LT5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBpLT5sZW5ndGgoKSAmJiAoKCppKVtw
b3NdID09ICcgJyB8fCAoKmkpW3Bvc10gPT0gbm9uQnJlYWtpbmdTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChwb3MgPCBpLT5sZW5ndGgoKSAmJiAoKCppKVtwb3NdID09ICcgJyB8
fCAoKmkpW3Bvc10gPT0gbm9CcmVha1NwYWNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cysrOwogICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09IGktPmxlbmd0aCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zc2libHlNb3ZlU3RyYXlDb250ZW50ID0gZmFsc2U7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50Lmgi
CiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC01Mywx
MiArNTQsMTYgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAorY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOworCiBIVE1M
U2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiBmKQogICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudChzZWxlY3RUYWcsIGRvYywg
ZikKICAgICAsIG1fbWlud2lkdGgoMCkKQEAgLTgxOSwxOSArODI0LDE2IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgKIAogc3RhdGljIFN0cmluZyBzdHJpcExlYWRp
bmdXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyIG5v
bkJyZWFraW5nU3BhY2UgPSAweEEwOwotCiAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
IGlmIChzdHJpbmdbaV0gIT0gbm9uQnJlYWtpbmdTcGFjZSAmJgotICAgICAgICAgICAgKHN0cmlu
Z1tpXSA8PSAweDdGID8gIWlzc3BhY2Uoc3RyaW5nW2ldKSA6IChXVEY6OlVuaWNvZGU6OmRpcmVj
dGlvbihzdHJpbmdbaV0pICE9IFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWwpKSkKKyAg
ICAgICAgaWYgKHN0cmluZ1tpXSAhPSBub0JyZWFrU3BhY2UgJiYKKyAgICAgICAgICAgIChzdHJp
bmdbaV0gPD0gMHg3RiA/ICFpc3NwYWNlKHN0cmluZ1tpXSkgOiAoZGlyZWN0aW9uKHN0cmluZ1tp
XSkgIT0gV2hpdGVTcGFjZU5ldXRyYWwpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgcmV0
dXJuIHN0cmluZy5zdWJzdHJpbmcoaSwgbGVuZ3RoIC0gaSk7CiB9CiAKLWNvbnN0IERPTVRpbWVT
dGFtcCB0eXBlQWhlYWRUaW1lb3V0ID0gMTAwMDsKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5
cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50aW1l
U3RhbXAoKSA8IG1fbGFzdENoYXJUaW1lKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuY3BwCShyZXZpc2lvbiAxODY4
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEw
ICszMywxNCBAQAogI2luY2x1ZGUgIlRleHRTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCiAjaWYgVVNFKElDVV9V
TklDT0RFKQogI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNlbmRpZgogCit1c2luZyBuYW1l
c3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURB
VEEvVUNELmh0bWwjQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzc19WYWx1ZXMKQEAgLTE3MywxMSAr
MTc3LDExIEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2Zmc2V0LCAKIAogICAg
ICAgICBpZiAobmVlZENoYXJUcmFuc2Zvcm0pIHsKICAgICAgICAgICAgIGlmIChydGwpCi0gICAg
ICAgICAgICAgICAgYyA9IFdURjo6VW5pY29kZTo6bWlycm9yZWRDaGFyKGMpOworICAgICAgICAg
ICAgICAgIGMgPSBtaXJyb3JlZENoYXIoYyk7CiAKICAgICAgICAgICAgIC8vIElmIHNtYWxsLWNh
cHMsIGNvbnZlcnQgbG93ZXJjYXNlIHRvIHVwcGVyLgotICAgICAgICAgICAgaWYgKG1fZm9udC0+
aXNTbWFsbENhcHMoKSAmJiAhV1RGOjpVbmljb2RlOjppc1VwcGVyKGMpKSB7Ci0gICAgICAgICAg
ICAgICAgVUNoYXIzMiB1cHBlckMgPSBXVEY6OlVuaWNvZGU6OnRvVXBwZXIoYyk7CisgICAgICAg
ICAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmICFVbmljb2RlOjppc1VwcGVyKGMpKSB7
CisgICAgICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSBVbmljb2RlOjp0b1VwcGVyKGMpOwog
ICAgICAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewogICAgICAgICAgICAgICAgICAgICBj
ID0gdXBwZXJDOwogICAgICAgICAgICAgICAgICAgICBmb250RGF0YSA9IGZvbnREYXRhLT5zbWFs
bENhcHNGb250RGF0YShtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpKTsKQEAgLTI5OSw3ICszMDMs
NyBAQCBib29sIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0ZXIoCiBVQ2hhcjMyIFdp
ZHRoSXRlcmF0b3I6Om5vcm1hbGl6ZVZvaWNpbmdNYXJrcyhpbnQgY3VycmVudENoYXJhY3RlcikK
IHsKICAgICBpZiAoY3VycmVudENoYXJhY3RlciArIDEgPCBtX2VuZCkgewotICAgICAgICBpZiAo
V1RGOjpVbmljb2RlOjpjb21iaW5pbmdDbGFzcyhtX3J1bltjdXJyZW50Q2hhcmFjdGVyICsgMV0p
ID09IGhpcmFnYW5hS2F0YWthbmFWb2ljaW5nTWFya3NDb21iaW5pbmdDbGFzcykgeworICAgICAg
ICBpZiAoY29tYmluaW5nQ2xhc3MobV9ydW5bY3VycmVudENoYXJhY3RlciArIDFdKSA9PSBoaXJh
Z2FuYUthdGFrYW5hVm9pY2luZ01hcmtzQ29tYmluaW5nQ2xhc3MpIHsKICNpZiBVU0UoSUNVX1VO
SUNPREUpCiAgICAgICAgICAgICAvLyBOb3JtYWxpemUgaW50byBjb21wb3NlZCBmb3JtIHVzaW5n
IDMuMiBydWxlcy4KICAgICAgICAgICAgIFVDaGFyIG5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzJdID0g
eyAwLCAwIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTQgKzI5
LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2x5cGhNYXAuaCIKIAorI2lu
Y2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3Qg
VUNoYXIgbm9uQnJlYWtpbmdTcGFjZSA9IDB4MDBBMDsKLWNvbnN0IFVDaGFyIHplcm9XaWR0aFNw
YWNlID0gMHgyMDBCOwotCiBHbHlwaERhdGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKIHsKICAgICB1bnNpZ25lZCBw
YWdlTnVtYmVyID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOwpAQCAtOTIsNyArOTAsNyBAQCBpbmxp
bmUgR2x5cGhNYXA6OkdseXBoUGFnZSogR2x5cGhNYXA6OmxvCiAgICAgICAgICAgICAvLyBcbiwg
XHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBhIHNwYWNlLgogICAgICAg
ICAgICAgYnVmZmVyWyhpbnQpJ1xuJ10gPSAnICc7CiAgICAgICAgICAgICBidWZmZXJbKGludCkn
XHQnXSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlcltub25CcmVha2luZ1NwYWNlXSA9ICcgJzsK
KyAgICAgICAgICAgIGJ1ZmZlcltub0JyZWFrU3BhY2VdID0gJyAnOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vTWltZVR5cGVSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vTWltZVR5cGVSZWdpc3RyeS5oCShyZXZpc2lvbiAxODY4NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vTWltZVR5cGVSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywz
MSArMjcsMzAgQEAKICNkZWZpbmUgTWltZVR5cGVSZWdpc3RyeV9oCiAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgInd0Zi9IYXNoU2V0LmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIAot
eworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNaW1lVHlwZVJlZ2lzdHJ5IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgU3RyaW5nIGdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyAmZXh0KTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgZXh0KTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBtaW1lIHR5cGUg
aXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBpbmxpbmUgYXMgYW4KICAgICAvLyBpbWFnZSAo
ZS5nLiwgPGltZz4gdGFncykuCi0gICAgc3RhdGljIGJvb2wgIGlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZShjb25zdCBTdHJpbmcgJm1pbWVUeXBlKTsgICAKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7ICAgCiAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgYSBtaW1lIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBh
cyBhbiBpbWFnZQogICAgIC8vIGRvY3VtZW50IGluIGEgZnJhbWUuCi0gICAgc3RhdGljIGJvb2wg
IGlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0IFN0cmluZyAmbWltZVR5cGUp
OyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsgICAgCiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBu
b24taW1hZ2UgbWltZSB0eXBlIGlzIHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgYXMgYQogICAg
IC8vIGRvY3VtZW50IGluIGEgZnJhbWUuCi0gICAgc3RhdGljIGJvb2wgIGlzU3VwcG9ydGVkTm9u
SW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcgJm1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBp
c1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+ICZnZXRTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
cygpOwotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4gJmdldFN1cHBvcnRlZEltYWdl
UmVzb3VyY2VNSU1FVHlwZXMoKTsKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+ICZn
ZXRTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlcygpOworICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGdldFN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKCk7CisgICAgc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgZ2V0U3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlcygpOwor
ICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdldFN1cHBvcnRlZE5vbkltYWdlTUlN
RVR5cGVzKCk7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0hhc2guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0hhc2guaAkocmV2aXNpb24gMTg2
ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0hhc2guaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDcgKzE4Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobGVuZ3RoICE9IGItPmxlbmd0aCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBXVEY6
OlVuaWNvZGU6OnN0cmNhc2VjbXAoYS0+Y2hhcmFjdGVycygpLCBiLT5jaGFyYWN0ZXJzKCksIGxl
bmd0aCkgPT0gMDsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlVuaWNvZGU6OnVtZW1jYXNlY21w
KGEtPmNoYXJhY3RlcnMoKSwgYi0+Y2hhcmFjdGVycygpLCBsZW5ndGgpID09IDA7CiAgICAgICAg
IH0KICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDE4Njg3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksMzEgKzI5LDMwIEBACiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8a2pzL2R0b2EuaD4KICNp
bmNsdWRlIDxranMvaWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIHVzaW5nIEtK
Uzo6SWRlbnRpZmllcjsKIHVzaW5nIEtKUzo6VVN0cmluZzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jb25zdCBVQ2hhciBub25CcmVha2luZ1NwYWNlID0gMHhBMDsKLQogc3RhdGljIGlubGlu
ZSBib29sIGlzU3BhY2UoVUNoYXIgYykKIHsKICAgICAvLyBVc2UgaXNzcGFjZSgpIGZvciBiYXNp
YyBMYXRpbi0xLgogICAgIC8vIFRoaXMgd2lsbCBpbmNsdWRlIG5ld2xpbmVzLCB3aGljaCBhcmVu
J3QgaW5jbHVkZWQgaW4gdW5pY29kZSBEaXJXUy4KLSAgICByZXR1cm4gYyA8PSAweDdGID8gaXNz
cGFjZShjKSA6IFVuaWNvZGU6OmRpcmVjdGlvbihjKSA9PSBVbmljb2RlOjpXaGl0ZVNwYWNlTmV1
dHJhbDsKKyAgICByZXR1cm4gYyA8PSAweDdGID8gaXNzcGFjZShjKSA6IGRpcmVjdGlvbihjKSA9
PSBXaGl0ZVNwYWNlTmV1dHJhbDsKIH0gICAgCiAgICAgCiBzdGF0aWMgaW5saW5lIFVDaGFyKiBu
ZXdVQ2hhclZlY3Rvcih1bnNpZ25lZCBuKQpAQCAtMTc1LDcgKzE3NCw3IEBAIHZvaWQgU3RyaW5n
SW1wbDo6YXBwZW5kKGNoYXIgYykKIAogdm9pZCBTdHJpbmdJbXBsOjphcHBlbmQoVUNoYXIgYykK
IHsKLSAgICBhc3NlcnQoIW1faW5UYWJsZSk7CisgICAgQVNTRVJUKCFtX2luVGFibGUpOwogICAg
IFVDaGFyKiBuYyA9IG5ld1VDaGFyVmVjdG9yKG1fbGVuZ3RoICsgMSk7CiAgICAgbWVtY3B5KG5j
LCBtX2RhdGEsIG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgbmNbbV9sZW5ndGhdID0g
YzsKQEAgLTE4Nyw3ICsxODYsNyBAQCB2b2lkIFN0cmluZ0ltcGw6OmFwcGVuZChVQ2hhciBjKQog
CiB2b2lkIFN0cmluZ0ltcGw6Omluc2VydChjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHBvcykKIHsKLSAgICBhc3NlcnQoIW1faW5UYWJsZSk7CisgICAgQVNTRVJU
KCFtX2luVGFibGUpOwogICAgIGlmIChwb3MgPj0gbV9sZW5ndGgpIHsKICAgICAgICAgYXBwZW5k
KHN0ciwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQg
U3RyaW5nSW1wbDo6aW5zZXJ0KGNvbnN0IFN0cmluZ0ltcGwKIAogdm9pZCBTdHJpbmdJbXBsOjp0
cnVuY2F0ZShpbnQgbGVuKQogewotICAgIGFzc2VydCghbV9pblRhYmxlKTsKKyAgICBBU1NFUlQo
IW1faW5UYWJsZSk7CiAgICAgaWYgKGxlbiA+PSAoaW50KW1fbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAgICAgaW50IG5sID0gbGVuIDwgMSA/IDEgOiBsZW47CkBAIC0yMjgsNyArMjI3LDcgQEAg
dm9pZCBTdHJpbmdJbXBsOjp0cnVuY2F0ZShpbnQgbGVuKQogCiB2b2lkIFN0cmluZ0ltcGw6OnJl
bW92ZSh1bnNpZ25lZCBwb3MsIGludCBsZW4pCiB7Ci0gICAgYXNzZXJ0KCFtX2luVGFibGUpOwor
ICAgIEFTU0VSVCghbV9pblRhYmxlKTsKICAgICBpZiAobGVuIDw9IDApCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAocG9zID49IG1fbGVuZ3RoKQpAQCAtMjgzLDE0ICsyODIsMTQgQEAgc3RhdGlj
IExlbmd0aCBwYXJzZUxlbmd0aChjb25zdCBVQ2hhciogbQogICAgICAgICArK2k7CiAgICAgaWYg
KGkgPCBtX2xlbmd0aCAmJiAobV9kYXRhW2ldID09ICcrJyB8fCBtX2RhdGFbaV0gPT0gJy0nKSkK
ICAgICAgICAgKytpOwotICAgIHdoaWxlIChpIDwgbV9sZW5ndGggJiYgV1RGOjpVbmljb2RlOjpp
c0RpZ2l0KG1fZGF0YVtpXSkpCisgICAgd2hpbGUgKGkgPCBtX2xlbmd0aCAmJiBVbmljb2RlOjpp
c0RpZ2l0KG1fZGF0YVtpXSkpCiAgICAgICAgICsraTsKIAogICAgIGJvb2wgb2s7CiAgICAgaW50
IHIgPSBEZXByZWNhdGVkQ29uc3RTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNh
dGVkQ2hhcio+KG1fZGF0YSksIGkpLnN0cmluZygpLnRvSW50KCZvayk7CiAKICAgICAvKiBTa2lw
IG92ZXIgYW55IHJlbWFpbmluZyBkaWdpdHMsIHdlIGFyZSBub3QgdGhhdCBhY2N1cmF0ZSAoNS41
JSA9PiA1JSkgKi8KLSAgICB3aGlsZSAoaSA8IG1fbGVuZ3RoICYmIChXVEY6OlVuaWNvZGU6Omlz
RGlnaXQobV9kYXRhW2ldKSB8fCBtX2RhdGFbaV0gPT0gJy4nKSkKKyAgICB3aGlsZSAoaSA8IG1f
bGVuZ3RoICYmIChVbmljb2RlOjppc0RpZ2l0KG1fZGF0YVtpXSkgfHwgbV9kYXRhW2ldID09ICcu
JykpCiAgICAgICAgICsraTsKIAogICAgIC8qIElFIFF1aXJrOiBTa2lwIGFueSB3aGl0ZXNwYWNl
ICgyMCAlID0+IDIwJSkgKi8KQEAgLTQwMCw3ICszOTksNyBAQCBib29sIFN0cmluZ0ltcGw6Omlz
TG93ZXIoKSBjb25zdAogICAgIC8vIERvIGEgc2xvd2VyIGNoZWNrIGZvciB0aGUgb3RoZXIgY2Fz
ZXMuCiAgICAgYm9vbCBhbGxMb3dlcjIgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2xlbmd0aDsgaSsrKQotICAgICAgICBhbGxMb3dlcjIgJj0gV1RGOjpVbmljb2RlOjpp
c0xvd2VyKG1fZGF0YVtpXSk7CisgICAgICAgIGFsbExvd2VyMiAmPSBVbmljb2RlOjppc0xvd2Vy
KG1fZGF0YVtpXSk7CiAgICAgcmV0dXJuIGFsbExvd2VyMjsKIH0KIApAQCAtNDI3LDcgKzQyNiw3
IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6Omxvd2VyKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IGM7CiAKICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFdURjo6VW5p
Y29kZTo6dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Cisg
ICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1f
ZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09
IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGM7CiAKQEAgLTQ0MCw3ICs0MzksNyBAQCBTdHJpbmdJ
bXBsKiBTdHJpbmdJbXBsOjpsb3dlcigpIGNvbnN0CiAgICAgYy0+bV9kYXRhID0gZGF0YTsKICAg
ICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKIAotICAgIFdURjo6VW5pY29kZTo6dG9Mb3dlcihkYXRh
LCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgVW5pY29kZTo6dG9Mb3dl
cihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgIGMtPnJlZigpOwogICAgICAgICBjLT5kZXJlZigpOwpAQCAtNDU1LDEwICs0
NTQsMTAgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6dXBwZXIoKSBjb25zdAogICAgIGlmICgh
bV9sZW5ndGgpCiAgICAgICAgIHJldHVybiBjOwogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJf
dCBsZW5ndGggPSBXVEY6OlVuaWNvZGU6OnRvVXBwZXIoMCwgMCwgbV9kYXRhLCBtX2xlbmd0aCwg
JmVycm9yKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoMCwgMCwgbV9k
YXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBjLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3Rvcihs
ZW5ndGgpOwogICAgIGMtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIFdURjo6VW5pY29kZTo6dG9V
cHBlcihjLT5tX2RhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBV
bmljb2RlOjp0b1VwcGVyKGMtPm1fZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJy
b3IpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBjLT5yZWYoKTsKICAgICAgICAgYy0+ZGVy
ZWYoKTsKQEAgLTQ2OSwxMSArNDY4LDE0IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnVwcGVy
KCkgY29uc3QKIAogU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c2VjdXJlKFVDaGFyIGFDaGFyKSBj
b25zdAogewotICAgIFN0cmluZ0ltcGwqIGM9IG5ldyBTdHJpbmdJbXBsOwotICAgIGMtPm1fZGF0
YSA9IG5ld1VDaGFyVmVjdG9yKGMtPm1fbGVuZ3RoPSBtX2xlbmd0aCk7Ci0gICAgCi0gICAgV1RG
OjpVbmljb2RlOjptZW1zZXQoYy0+bV9kYXRhLCBhQ2hhciwgbV9sZW5ndGgpOwotICAgIAorICAg
IGludCBsZW5ndGggPSBtX2xlbmd0aDsKKyAgICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9y
KGxlbmd0aCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAg
ZGF0YVtpXSA9IGFDaGFyOworCisgICAgU3RyaW5nSW1wbCogYyA9IG5ldyBTdHJpbmdJbXBsOwor
ICAgIGMtPm1fZGF0YSA9IGRhdGE7CisgICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7CiAgICAgcmV0
dXJuIGM7CiB9CiAKQEAgLTQ4MywxMCArNDg1LDEwIEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6
OmZvbGRDYXNlKCkgY29uc3QKICAgICBpZiAoIW1fbGVuZ3RoKQogICAgICAgICByZXR1cm4gYzsK
ICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgbGVuZ3RoID0gV1RGOjpVbmljb2RlOjpmb2xk
Q2FzZSgwLCAwLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgbGVuZ3Ro
ID0gVW5pY29kZTo6Zm9sZENhc2UoMCwgMCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAg
ICBjLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwogICAgIGMtPm1fbGVuZ3RoID0g
bGVuZ3RoOwotICAgIFdURjo6VW5pY29kZTo6Zm9sZENhc2UoYy0+bV9kYXRhLCBsZW5ndGgsIG1f
ZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgVW5pY29kZTo6Zm9sZENhc2UoYy0+bV9kYXRh
LCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgIGMtPnJlZigpOwogICAgICAgICBjLT5kZXJlZigpOwpAQCAtNTYzLDEwICs1NjUsMTAg
QEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6Y2FwaXRhbGl6ZShVQ2hhcgogICAgICAgICByZXR1
cm4gY2FwaXRhbGl6ZWRTdHJpbmc7CiAKICAgICBVQ2hhciogc3RyaW5nV2l0aFByZXZpb3VzID0g
bmV3VUNoYXJWZWN0b3IobV9sZW5ndGggKyAxKTsKLSAgICBzdHJpbmdXaXRoUHJldmlvdXNbMF0g
PSBwcmV2aW91cyA9PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogcHJldmlvdXM7CisgICAgc3Ry
aW5nV2l0aFByZXZpb3VzWzBdID0gcHJldmlvdXMgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogcHJl
dmlvdXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fbGVuZ3RoICsgMTsgaSsrKSB7
CiAgICAgICAgIC8vIFJlcGxhY2UgJm5ic3Agd2l0aCBhIHJlYWwgc3BhY2Ugc2luY2UgSUNVIG5v
IGxvbmdlciB0cmVhdHMgJm5ic3AgYXMgYSB3b3JkIHNlcGFyYXRvci4KLSAgICAgICAgaWYgKG1f
ZGF0YVtpIC0gMV0gPT0gbm9uQnJlYWtpbmdTcGFjZSkKKyAgICAgICAgaWYgKG1fZGF0YVtpIC0g
MV0gPT0gbm9CcmVha1NwYWNlKQogICAgICAgICAgICAgc3RyaW5nV2l0aFByZXZpb3VzW2ldID0g
JyAnOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHJpbmdXaXRoUHJldmlvdXNbaV0gPSBt
X2RhdGFbaSAtIDFdOwpAQCAtNTg1LDcgKzU4Nyw3IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6
OmNhcGl0YWxpemUoVUNoYXIKICAgICBpbnQzMl90IHN0YXJ0T2ZXb3JkID0gdGV4dEJyZWFrRmly
c3QoYm91bmRhcnkpOwogICAgIGZvciAoZW5kT2ZXb3JkID0gdGV4dEJyZWFrTmV4dChib3VuZGFy
eSk7IGVuZE9mV29yZCAhPSBUZXh0QnJlYWtEb25lOyBzdGFydE9mV29yZCA9IGVuZE9mV29yZCwg
ZW5kT2ZXb3JkID0gdGV4dEJyZWFrTmV4dChib3VuZGFyeSkpIHsKICAgICAgICAgaWYgKHN0YXJ0
T2ZXb3JkICE9IDApIC8vIElnbm9yZSBmaXJzdCBjaGFyIG9mIHByZXZpb3VzIHN0cmluZwotICAg
ICAgICAgICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fZGF0YVtzdGFydE9mV29yZCAtIDFdID0gbV9k
YXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPT0gbm9uQnJlYWtpbmdTcGFjZSA/IG5vbkJyZWFraW5nU3Bh
Y2UgOiBXVEY6OlVuaWNvZGU6OnRvVGl0bGVDYXNlKHN0cmluZ1dpdGhQcmV2aW91c1tzdGFydE9m
V29yZF0pOworICAgICAgICAgICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fZGF0YVtzdGFydE9mV29y
ZCAtIDFdID0gbV9kYXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPT0gbm9CcmVha1NwYWNlID8gbm9CcmVh
a1NwYWNlIDogdG9UaXRsZUNhc2Uoc3RyaW5nV2l0aFByZXZpb3VzW3N0YXJ0T2ZXb3JkXSk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSBzdGFydE9mV29yZCArIDE7IGkgPCBlbmRPZldvcmQ7IGkrKykK
ICAgICAgICAgICAgIGNhcGl0YWxpemVkU3RyaW5nLT5tX2RhdGFbaSAtIDFdID0gbV9kYXRhW2kg
LSAxXTsKICAgICB9CkBAIC02MTAsNyArNjEyLDcgQEAgaW50IFN0cmluZ0ltcGw6OnRvSW50KGJv
b2wqIG9rKSBjb25zdAogICAgIAogICAgIC8vIEFsbG93IGRpZ2l0cy4KICAgICBmb3IgKDsgaSAh
PSBtX2xlbmd0aDsgKytpKQotICAgICAgICBpZiAoIVdURjo6VW5pY29kZTo6aXNEaWdpdChtX2Rh
dGFbaV0pKQorICAgICAgICBpZiAoIVVuaWNvZGU6OmlzRGlnaXQobV9kYXRhW2ldKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIAogICAgIHJldHVybiBEZXByZWNhdGVkQ29uc3RTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KG1fZGF0YSksIGkpLnN0cmluZygp
LnRvSW50KG9rKTsKQEAgLTY0Nyw3ICs2NDksNyBAQCBzdGF0aWMgYm9vbCBlcXVhbElnbm9yaW5n
Q2FzZShjb25zdCBVQ2hhCiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICB3aGlsZSAobGVu
Z3RoLS0pIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9ICpiKys7Ci0gICAgICAgIGlmIChX
VEY6OlVuaWNvZGU6OmZvbGRDYXNlKCphKyspICE9IFdURjo6VW5pY29kZTo6Zm9sZENhc2UoYmMp
KQorICAgICAgICBpZiAoZm9sZENhc2UoKmErKykgIT0gZm9sZENhc2UoYmMpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1Niw3ICs2NTgs
NyBAQCBzdGF0aWMgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhCiBzdGF0aWMgaW5s
aW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBi
LCBpbnQgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7Ci0gICAgcmV0dXJuIFdU
Rjo6VW5pY29kZTo6c3RyY2FzZWNtcChhLCBiLCBsZW5ndGgpID09IDA7CisgICAgcmV0dXJuIHVt
ZW1jYXNlY21wKGEsIGIsIGxlbmd0aCkgPT0gMDsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSwgZXZlcnkgbGl0dGxlIGJpdCBoZWxwcy4KQEAgLTY4
OSwxMCArNjkxLDkgQEAgaW50IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogY2hzLCBpbgog
ICAgICAgICAgICAgICAgIHJldHVybiBtX2xlbmd0aCAtIGNoc0xlbmd0aCAtIG4gKyAxOwogICAg
ICAgICB9IHdoaWxlICgtLW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyIGxjID0gV1RG
OjpVbmljb2RlOjpmb2xkQ2FzZSgqY2hzKTsKKyAgICAgICAgVUNoYXIgbGMgPSBVbmljb2RlOjpm
b2xkQ2FzZSgqY2hzKTsKICAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKFdURjo6VW5pY29k
ZTo6Zm9sZENhc2UoKisrcHRyKSA9PSBsYwotICAgICAgICAgICAgICAgICAgICAmJiBlcXVhbEln
bm9yaW5nQ2FzZShwdHIgKyAxLCBjaHNQbHVzT25lLCBjaHNMZW5ndGhNaW51c09uZSkpCisgICAg
ICAgICAgICBpZiAoVW5pY29kZTo6Zm9sZENhc2UoKisrcHRyKSA9PSBsYyAmJiBlcXVhbElnbm9y
aW5nQ2FzZShwdHIgKyAxLCBjaHNQbHVzT25lLCBjaHNMZW5ndGhNaW51c09uZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fbGVuZ3RoIC0gY2hzTGVuZ3RoIC0gbiArIDE7CiAgICAgICAgIH0g
d2hpbGUgKC0tbik7CiAgICAgfQpAQCAtOTkzLDcgKzk5NCw3IEBAIGJvb2wgZXF1YWxJZ25vcmlu
Z0Nhc2UoY29uc3QgU3RyaW5nSW1wbCoKICAgICAgICAgZXF1YWwgPSB0cnVlOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGJjID0gYltpXTsKLSAgICAgICAgICAgIGVxdWFsICY9IFdURjo6VW5pY29kZTo6
Zm9sZENhc2UoYXNbaV0pID09IFdURjo6VW5pY29kZTo6Zm9sZENhc2UoYmMpOworICAgICAgICAg
ICAgZXF1YWwgJj0gZm9sZENhc2UoYXNbaV0pID09IGZvbGRDYXNlKGJjKTsKICAgICAgICAgfQog
ICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0Qm91bmRhcmllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEJvdW5kYXJpZXMuaAkocmV2aXNpb24gMTg2ODcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1RleHRCb3VuZGFyaWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgVGV4dEJvdW5kYXJpZXNfaAogI2RlZmluZSBUZXh0Qm91
bmRhcmllc19oCiAKLSNpbmNsdWRlICJ3dGYvdW5pY29kZS9Vbmljb2RlLmgiCisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxOSAr
MjIsMjAgQEAKICNpZm5kZWYgVGV4dEJyZWFrSXRlcmF0b3JfaAogI2RlZmluZSBUZXh0QnJlYWtJ
dGVyYXRvcl9oCiAKLSNpbmNsdWRlICJ3dGYvdW5pY29kZS9Vbmljb2RlLmgiCisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUg
PHVuaWNvZGUvdWJyay5oPgotdHlwZWRlZiBVQnJlYWtJdGVyYXRvciBUZXh0QnJlYWtJdGVyYXRv
cjsKLSNlbGlmIFVTRShRVDRfVU5JQ09ERSkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBVU0UoSUNVX1VOSUNPREUpCisgICAgdHlwZWRlZiBVQnJlYWtJdGVyYXRvciBUZXh0
QnJlYWtJdGVyYXRvcjsKKyNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICAgICBjbGFzcyBUZXh0QnJl
YWtJdGVyYXRvcjsKLX0KICNlbmRpZgogCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBUZXh0
QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50
IGxlbmd0aCk7CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0b3Io
Y29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCk7CiAKQEAgLTQ1LDQgKzQ2LDUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRl
cmF0b3IqLCBpbnQpOwogICAgIGVudW0geyBUZXh0QnJlYWtEb25lID0gLTEgfTsKIH0KKwogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRDb2RlYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vVGV4dENvZGVjLmgJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9UZXh0Q29kZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAj
aWZuZGVmIFRleHRDb2RlY19oCiAjZGVmaW5lIFRleHRDb2RlY19oCiAKLSNpbmNsdWRlICJ3dGYv
dW5pY29kZS9Vbmljb2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0Q29kZWNMYXRpbjEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
VGV4dENvZGVjTGF0aW4xLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1RleHRDb2RlY0xhdGluMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgInd0Zi91bmljb2RlL1VuaWNvZGUuaCIKIAogdXNpbmcgc3RkOjphdXRvX3B0cjsKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL1RleHRFbmNvZGluZy5oCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vVGV4dEVuY29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgVGV4dEVuY29kaW5nX2gKICNkZWZpbmUgVGV4dEVuY29kaW5nX2gKIAotI2luY2x1ZGUg
Ind0Zi91bmljb2RlL1VuaWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29k
aW5nUmVnaXN0cnkuaAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5k
ZWYgVGV4dEVuY29kaW5nUmVnaXN0cnlfaAogI2RlZmluZSBUZXh0RW5jb2RpbmdSZWdpc3RyeV9o
CiAKLSNpbmNsdWRlICJ3dGYvdW5pY29kZS9Vbmljb2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgor
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDE4Njg3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQYXN0ZWJv
YXJkLmgiCiAKKyNpbXBvcnQgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW1wb3J0ICJET01SYW5nZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW1wb3J0ICJFZGl0b3Iu
aCIKQEAgLTEzMSw4ICsxMzIsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJh
bmdlKiBzCiAgICAgICAgIHRleHQucmVwbGFjZSgnXFwnLCBmcmFtZS0+YmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbCgpKTsKICAgICAgICAgTlNNdXRhYmxlU3RyaW5nICpzID0gW1tbKE5TU3RyaW5n
Kil0ZXh0IGNvcHldIGF1dG9yZWxlYXNlXSBtdXRhYmxlQ29weV07CiAgICAgICAgIAotICAgICAg
ICBjb25zdCB1bmljaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwotICAgICAg
ICBOU1N0cmluZyAqTm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Q2hhcmFjdGVyczomTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07CisgICAgICAg
IE5TU3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhD
aGFyYWN0ZXJzOiZub0JyZWFrU3BhY2UgbGVuZ3RoOjFdOwogICAgICAgICBbcyByZXBsYWNlT2Nj
dXJyZW5jZXNPZlN0cmluZzpOb25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBv
cHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwogICAgICAgICBbbV9w
YXN0ZWJvYXJkIHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKICAgICAg
ICAgW3MgcmVsZWFzZV07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9UZXh0Q29kZWNNYWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RleHRDb2RlY01hYy5jcHAJ
KHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGV4dENvZGVjTWFjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRleHRDb2RlY01hYy5oIgogCi0jaW5jbHVkZSAiQ2hhcnNldERhdGEuaCIKICNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRl
ICJDaGFyc2V0RGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtMjYwLDcgKzI2MSw3IEBAIFN0cmluZyBUZXh0Q29kZWNN
YWM6OmRlY29kZShjb25zdCBjaGFyKiAKICAgICAvLyBCdXQgR0IxODAzMCBkZWNvZGVzIGl0IHRv
IFUrRTVFNSwgd2hpY2ggaXMgY29ycmVjdCBpbiB0aGVvcnkgYnV0IG5vdCBpbiBwcmFjdGljZS4K
ICAgICAvLyBUbyB3b3JrIGFyb3VuZCwganVzdCBjaGFuZ2UgYWxsIG9jY3VyZW5jZXMgb2YgVStF
NUU1IHRvIFUrMzAwMCAoaWRlb2dyYXBoaWMgc3BhY2UpLgogICAgIGlmIChtX2VuY29kaW5nID09
IGtDRlN0cmluZ0VuY29kaW5nR0JfMTgwMzBfMjAwMCkKLSAgICAgICAgcmVzdWx0U3RyaW5nLnJl
cGxhY2UoMHhFNUU1LCAweDMwMDApOworICAgICAgICByZXN1bHRTdHJpbmcucmVwbGFjZSgweEU1
RTUsIGlkZW9ncmFwaGljU3BhY2UpOwogICAgIAogICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiB9
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiAr
NDAsOCBAQAogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNTU3LDcgKzM1NTksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1
cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gMDsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gYWNjb3VudCBmb3IgbGVhZGluZyBzcGFjZXMg
YW5kIHB1bmN0dWF0aW9uCi0gICAgICAgICAgICB3aGlsZSAobGVuZ3RoIDwgb2xkVGV4dC0+bGVu
Z3RoKCkgJiYgKERlcHJlY2F0ZWRDaGFyKCgqb2xkVGV4dClbbGVuZ3RoXSkuaXNTcGFjZSgpIHx8
IFdURjo6VW5pY29kZTo6aXNQdW5jdCgoKm9sZFRleHQpW2xlbmd0aF0pKSkKKyAgICAgICAgICAg
IHdoaWxlIChsZW5ndGggPCBvbGRUZXh0LT5sZW5ndGgoKSAmJiAoRGVwcmVjYXRlZENoYXIoKCpv
bGRUZXh0KVtsZW5ndGhdKS5pc1NwYWNlKCkgfHwgVW5pY29kZTo6aXNQdW5jdCgoKm9sZFRleHQp
W2xlbmd0aF0pKSkKICAgICAgICAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gYWNjb3VudCBmb3IgZmlyc3QgbGV0dGVyCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxpc3RNYXJrZXJCb3guaCIK
QEAgLTM1LDcgKzM2LDggQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci1uYW1lc3BhY2UgVW5pY29kZSA9IFdURjo6VW5pY29kZTsKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zMzUsMjAgKzMzNywxNCBAQCBTdHJpbmcgbGlzdE1hcmtlclRleHQoRUxpc3RTdHls
ZVR5cGUgdHlwCiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSBzYW1lIGNoYXJhY3RlcnMgZm9yIHRl
eHQgc2VjdXJpdHkuCiAgICAgICAgIC8vIFNlZSBSZW5kZXJUZXh0OjpzZXRJbnRlcm5hbFN0cmlu
Zy4KLSAgICAgICAgY2FzZSBDSVJDTEU6IHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyIHdoaXRl
QnVsbGV0ID0gMHgyNUU2OworICAgICAgICBjYXNlIENJUkNMRToKICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoJndoaXRlQnVsbGV0LCAxKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERJU0M6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyIGJ1bGxldCA9IDB4MjAyMjsKKyAgICAgICAgY2Fz
ZSBESVNDOgogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygmYnVsbGV0LCAxKTsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFNRVUFSRTogeworICAgICAgICBjYXNlIFNRVUFSRToKICAgICAgICAg
ICAgIC8vIFRoZSBDU1MgMi4xIHRlc3Qgc3VpdGUgdXNlcyBVKzI1RUUgQkxBQ0sgTUVESVVNIFNN
QUxMIFNRVUFSRQogICAgICAgICAgICAgLy8gaW5zdGVhZCwgYnV0IEkgdGhpbmsgdGhpcyBsb29r
cyBiZXR0ZXIuCi0gICAgICAgICAgICBjb25zdCBVQ2hhciBibGFja1NxdWFyZSA9IDB4MjVBMDsK
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoJmJsYWNrU3F1YXJlLCAxKTsKLSAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgTERFQ0lNQUw6CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1i
ZXIodmFsdWUpOwpAQCAtNjE4LDcgKzYxNCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFp
bnQoUGFpbnRJbmZvJiAKIAogICAgIC8vIFRleHQgaXMgbm90IGFyYml0cmFyeS4gV2UgY2FuIGp1
ZGdlIHdoZXRoZXIgaXQncyBSVEwgZnJvbSB0aGUgZmlyc3QgY2hhcmFjdGVyLAogICAgIC8vIGFu
ZCB3ZSBvbmx5IG5lZWQgdG8gaGFuZGxlIHRoZSBkaXJlY3Rpb24gUmlnaHRUb0xlZnQgZm9yIG5v
dy4KLSAgICBib29sIHRleHROZWVkc1JldmVyc2luZyA9IFVuaWNvZGU6OmRpcmVjdGlvbihtX3Rl
eHRbMF0pID09IFVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgIGJvb2wgdGV4dE5lZWRzUmV2ZXJz
aW5nID0gZGlyZWN0aW9uKG1fdGV4dFswXSkgPT0gUmlnaHRUb0xlZnQ7CiAgICAgVmVjdG9yPFVD
aGFyPiByZXZlcnNlZFRleHQ7CiAgICAgaWYgKHRleHROZWVkc1JldmVyc2luZykgewogICAgICAg
ICBpbnQgbGVuZ3RoID0gbV90ZXh0Lmxlbmd0aCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgog
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lu
bGluZS5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3Vz
aW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyNCw4
ICs0MjcsOCBAQCBBTFdBWVNfSU5MSU5FIGludCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DCiAgICAg
ICAgIGludCB3ID0gMDsKICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGxlbjsg
aSsrKSB7CiAgICAgICAgICAgICBVQ2hhciBjID0gKCptX3N0cilbaV07Ci0gICAgICAgICAgICBX
VEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkaXIgPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihjKTsK
LSAgICAgICAgICAgIGlmIChkaXIgIT0gV1RGOjpVbmljb2RlOjpOb25TcGFjaW5nTWFyayAmJiBk
aXIgIT0gV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWwpIHsKKyAgICAgICAgICAgIERpcmVj
dGlvbiBkaXIgPSBkaXJlY3Rpb24oYyk7CisgICAgICAgICAgICBpZiAoZGlyICE9IE5vblNwYWNp
bmdNYXJrICYmIGRpciAhPSBCb3VuZGFyeU5ldXRyYWwpIHsKICAgICAgICAgICAgICAgICBpZiAo
YyA9PSAnXHQnICYmIHRhYldpZHRoKQogICAgICAgICAgICAgICAgICAgICB3ICs9IHRhYldpZHRo
IC0gKCh4UG9zICsgdykgJSB0YWJXaWR0aCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtNTI4
LDcgKzUzMSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKCkKIAogaW5saW5l
IGJvb2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIgYywgUmVuZGVyU3R5bGUqIHN0eWxl
KQogewotICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSAweGEwICYmIHN0eWxlLT5uYnNwTW9k
ZSgpID09IFNQQUNFKTsKKyAgICByZXR1cm4gYyA9PSAnICcgfHwgKGMgPT0gbm9CcmVha1NwYWNl
ICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Ojpj
YWxjTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCkKQEAgLTg3NiwyMSArODc5LDE0IEBAIHZvaWQg
UmVuZGVyVGV4dDo6c2V0SW50ZXJuYWxTdHJpbmcoUGFzc1IKICAgICAgICAgICAgIHN3aXRjaCAo
c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFRTTk9ORToK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUU0NJUkNM
RTogewotICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciB3aGl0ZUJ1bGxldCA9IDB4MjVF
NjsKKyAgICAgICAgICAgICAgICBjYXNlIFRTQ0lSQ0xFOgogICAgICAgICAgICAgICAgICAgICBt
X3N0ciA9IG1fc3RyLT5zZWN1cmUod2hpdGVCdWxsZXQpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBUU0RJU0M6IHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgYnVsbGV0ID0gMHgyMDIyOworICAgICAg
ICAgICAgICAgIGNhc2UgVFNESVNDOgogICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1fc3Ry
LT5zZWN1cmUoYnVsbGV0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgVFNTUVVBUkU6IHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVUNoYXIgYmxhY2tTcXVhcmUgPSAweDI1QTA7CisgICAgICAgICAgICAgICAg
Y2FzZSBUU1NRVUFSRToKICAgICAgICAgICAgICAgICAgICAgbV9zdHIgPSBtX3N0ci0+c2VjdXJl
KGJsYWNrU3F1YXJlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAK
KyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTE0MCw3ICsxNDEsNyBA
QCBzdGF0aWMgU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlCiAgICAgICAgIH0gZWxz
ZSBpZiAoYyA9PSAnIicpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyk7CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4n
IHx8IGMgPT0gMHgwMEEwKQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyB8fCBjID09IG5v
QnJlYWtTcGFjZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoYyA+PSAweDIwICYmIGMgPCAweDdGKQpAQCAtMjc4LDEzICsy
NzksMTMgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAg
ICAgICAgICAgIHRleHQgPSBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXModGV4dCk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRbMF0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAweDIwMjI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgYnVs
bGV0OgogICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJidWxsZXQiOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNUEwOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIGJsYWNrU3F1YXJlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dCA9ICJibGFjayBzcXVhcmUiOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNUU2OgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIHdoaXRlQnVsbGV0OgogICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJ3aGl0
ZSBidWxsZXQiOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImJpZGkuaCIKIAorI2luY2x1ZGUgIkNo
YXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0zNiw2ICszNyw4IEBACiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdU
RjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ5LDcgKzUyLDcgQEAgc3RydWN0IEJpZGlJdGVyYXRvciB7CiAgICAgYm9vbCBhdEVuZCgpIGNv
bnN0OwogICAgIAogICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdDsKLSAgICBXVEY6OlVuaWNvZGU6
OkRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKKyAgICBEaXJlY3Rpb24gZGlyZWN0aW9uKCkg
Y29uc3Q7CiAKICAgICBSZW5kZXJCbG9jayogYmxvY2s7CiAgICAgUmVuZGVyT2JqZWN0KiBvYmo7
CkBAIC01Nyw3ICs2MCw3IEBAIHN0cnVjdCBCaWRpSXRlcmF0b3IgewogfTsKIAogc3RydWN0IEJp
ZGlTdGF0ZSB7Ci0gICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0KDApLCBkaXIoV1RGOjpVbmljb2Rl
OjpPdGhlck5ldXRyYWwpLCBhZGp1c3RFbWJlZGRpbmcoZmFsc2UpLCByZWFjaGVkRW5kT2ZMaW5l
KGZhbHNlKSB7fQorICAgIEJpZGlTdGF0ZSgpIDogY29udGV4dCgwKSwgZGlyKE90aGVyTmV1dHJh
bCksIGFkanVzdEVtYmVkZGluZyhmYWxzZSksIHJlYWNoZWRFbmRPZkxpbmUoZmFsc2UpIHt9CiAg
ICAgCiAgICAgQmlkaUl0ZXJhdG9yIHNvcjsKICAgICBCaWRpSXRlcmF0b3IgZW9yOwpAQCAtNjUs
NyArNjgsNyBAQCBzdHJ1Y3QgQmlkaVN0YXRlIHsKICAgICBCaWRpSXRlcmF0b3IgY3VycmVudDsK
ICAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IGNvbnRleHQ7CiAgICAgQmlkaVN0YXR1cyBzdGF0dXM7
Ci0gICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGlyOworICAgIERpcmVjdGlvbiBkaXI7CiAg
ICAgYm9vbCBhZGp1c3RFbWJlZGRpbmc7CiAgICAgQmlkaUl0ZXJhdG9yIGVuZE9mTGluZTsKICAg
ICBib29sIHJlYWNoZWRFbmRPZkxpbmU7CkBAIC0xMDUsNyArMTA4LDcgQEAgc3RhdGljIGJvb2wg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdAogc3RhdGljIGJvb2wgZW1wdHlSdW4gPSB0cnVl
Owogc3RhdGljIGludCBudW1TcGFjZXM7CiAKLXN0YXRpYyB2b2lkIGVtYmVkKFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uLCBCaWRpU3RhdGUmKTsKK3N0YXRpYyB2b2lkIGVtYmVkKERpcmVjdGlvbiwg
QmlkaVN0YXRlJik7CiBzdGF0aWMgdm9pZCBhcHBlbmRSdW4oQmlkaVN0YXRlJik7CiAKIHN0YXRp
YyBpbnQgZ2V0QlBNV2lkdGgoaW50IGNoaWxkVmFsdWUsIExlbmd0aCBjc3NVbml0KQpAQCAtMjAw
LDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIGRlbGV0ZUJpZGlSdW5zKFJlbmRlckFyZW5hKiAKICAg
IEVhY2ggbGluZSBvZiB0ZXh0IGNhY2hlcyB0aGUgZW1iZWRkaW5nIGxldmVsIGF0IHRoZSBzdGFy
dCBvZiB0aGUgbGluZSBmb3IgZmFzdGVyCiAgICByZWxheW91dGluZwogKi8KLUJpZGlDb250ZXh0
OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGwsIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGUs
IEJpZGlDb250ZXh0ICpwLCBib29sIG8pCitCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWdu
ZWQgY2hhciBsLCBEaXJlY3Rpb24gZSwgQmlkaUNvbnRleHQgKnAsIGJvb2wgbykKICAgICA6IGxl
dmVsKGwpLCBvdmVycmlkZShvKSwgbV9kaXIoZSkKIHsKICAgICBwYXJlbnQgPSBwOwpAQCAtMjc4
LDkgKzI4MSw5IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpTmV4dChSZW4KICAg
ICAgICAgICAgICAgICBFVW5pY29kZUJpZGkgdWIgPSBuZXh0LT5zdHlsZSgpLT51bmljb2RlQmlk
aSgpOwogICAgICAgICAgICAgICAgIGlmICh1YiAhPSBVQk5vcm1hbCkgewogICAgICAgICAgICAg
ICAgICAgICBUZXh0RGlyZWN0aW9uIGRpciA9IG5leHQtPnN0eWxlKCktPmRpcmVjdGlvbigpOwot
ICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkID0gKHViID09IEVt
YmVkCi0gICAgICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gV1RGOjpVbmljb2Rl
OjpSaWdodFRvTGVmdEVtYmVkZGluZyA6IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRp
bmcpCi0gICAgICAgICAgICAgICAgICAgICAgICA6IChkaXIgPT0gUlRMID8gV1RGOjpVbmljb2Rl
OjpSaWdodFRvTGVmdE92ZXJyaWRlIDogV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodE92ZXJyaWRl
KSk7CisgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiBkID0gKHViID09IEVtYmVkCisgICAg
ICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gUmlnaHRUb0xlZnRFbWJlZGRpbmcg
OiBMZWZ0VG9SaWdodEVtYmVkZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIDogKGRpciA9
PSBSVEwgPyBSaWdodFRvTGVmdE92ZXJyaWRlIDogTGVmdFRvUmlnaHRPdmVycmlkZSkpOwogICAg
ICAgICAgICAgICAgICAgICBlbWJlZChkLCBiaWRpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yOTYsNyArMjk5LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3Qq
IGJpZGlOZXh0KFJlbgogCiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9
IGJsb2NrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJpZGkuYWRqdXN0RW1iZWRkaW5nICYmIGN1
cnJlbnQtPmlzSW5saW5lRmxvdygpICYmIGN1cnJlbnQtPnN0eWxlKCktPnVuaWNvZGVCaWRpKCkg
IT0gVUJOb3JtYWwpCi0gICAgICAgICAgICAgICAgICAgIGVtYmVkKFdURjo6VW5pY29kZTo6UG9w
RGlyZWN0aW9uYWxGb3JtYXQsIGJpZGkpOworICAgICAgICAgICAgICAgICAgICBlbWJlZChQb3BE
aXJlY3Rpb25hbEZvcm1hdCwgYmlkaSk7CiAKICAgICAgICAgICAgICAgICBuZXh0ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAobmV4dCkgewpAQCAtMzA0LDkg
KzMwNyw5IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBiaWRpTmV4dChSZW4KICAgICAg
ICAgICAgICAgICAgICAgICAgIEVVbmljb2RlQmlkaSB1YiA9IG5leHQtPnN0eWxlKCktPnVuaWNv
ZGVCaWRpKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWIgIT0gVUJOb3JtYWwpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRpciA9IG5leHQtPnN0
eWxlKCktPmRpcmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VW5p
Y29kZTo6RGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyAoZGlyID09IFJUTCA/IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRFbWJlZGRp
bmc6IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKGRpciA9PSBSVEwgPyBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0
T3ZlcnJpZGUgOiBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0T3ZlcnJpZGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEaXJlY3Rpb24gZCA9ICh1YiA9PSBFbWJlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gUmlnaHRUb0xlZnRFbWJlZGRp
bmc6IExlZnRUb1JpZ2h0RW1iZWRkaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IChkaXIgPT0gUlRMID8gUmlnaHRUb0xlZnRPdmVycmlkZSA6IExlZnRUb1JpZ2h0T3ZlcnJp
ZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZChkLCBiaWRpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzQ2LDkgKzM0
OSw5IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGJpZGlGaXJzdChSZW5kZXJCbG8KICAgICAgICAg
ICAgIEVVbmljb2RlQmlkaSB1YiA9IG8tPnN0eWxlKCktPnVuaWNvZGVCaWRpKCk7CiAgICAgICAg
ICAgICBpZiAodWIgIT0gVUJOb3JtYWwpIHsKICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9u
IGRpciA9IG8tPnN0eWxlKCktPmRpcmVjdGlvbigpOwotICAgICAgICAgICAgICAgIFdURjo6VW5p
Y29kZTo6RGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQKLSAgICAgICAgICAgICAgICAgICAgPyAo
ZGlyID09IFJUTCA/IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRFbWJlZGRpbmcgOiBXVEY6OlVu
aWNvZGU6OkxlZnRUb1JpZ2h0RW1iZWRkaW5nKQotICAgICAgICAgICAgICAgICAgICA6IChkaXIg
PT0gUlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRlIDogV1RGOjpVbmljb2Rl
OjpMZWZ0VG9SaWdodE92ZXJyaWRlKSk7CisgICAgICAgICAgICAgICAgRGlyZWN0aW9uIGQgPSAo
dWIgPT0gRW1iZWQKKyAgICAgICAgICAgICAgICAgICAgPyAoZGlyID09IFJUTCA/IFJpZ2h0VG9M
ZWZ0RW1iZWRkaW5nIDogTGVmdFRvUmlnaHRFbWJlZGRpbmcpCisgICAgICAgICAgICAgICAgICAg
IDogKGRpciA9PSBSVEwgPyBSaWdodFRvTGVmdE92ZXJyaWRlIDogTGVmdFRvUmlnaHRPdmVycmlk
ZSkpOwogICAgICAgICAgICAgICAgIGVtYmVkKGQsIGJpZGkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0zOTYsMTggKzM5OSwxOCBAQCBVQ2hhciBCaWRpSXRlcmF0b3I6OmN1cnJlbnQo
KSBjb25zdAogICAgIHJldHVybiB0ZXh0LT50ZXh0KClbcG9zXTsKIH0KIAotQUxXQVlTX0lOTElO
RSBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBCaWRpSXRlcmF0b3I6OmRpcmVjdGlvbigpIGNvbnN0
CitBTFdBWVNfSU5MSU5FIERpcmVjdGlvbiBCaWRpSXRlcmF0b3I6OmRpcmVjdGlvbigpIGNvbnN0
CiB7CiAgICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1
dHJhbDsKKyAgICAgICAgcmV0dXJuIE90aGVyTmV1dHJhbDsKICAgICBpZiAob2JqLT5pc0xpc3RN
YXJrZXIoKSkKLSAgICAgICAgcmV0dXJuIG9iai0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRS
ID8gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCA6IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ7
CisgICAgICAgIHJldHVybiBvYmotPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IExlZnRU
b1JpZ2h0IDogUmlnaHRUb0xlZnQ7CiAgICAgaWYgKCFvYmotPmlzVGV4dCgpKQotICAgICAgICBy
ZXR1cm4gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw7CisgICAgICAgIHJldHVybiBPdGhlck5l
dXRyYWw7CiAgICAgUmVuZGVyVGV4dCogcmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCo+KG9iaik7CiAgICAgaWYgKHBvcyA+PSByZW5kZXJUeHQtPnN0cmluZ0xlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw7Ci0gICAgcmV0dXJuIFdURjo6
VW5pY29kZTo6ZGlyZWN0aW9uKHJlbmRlclR4dC0+dGV4dCgpW3Bvc10pOworICAgICAgICByZXR1
cm4gT3RoZXJOZXV0cmFsOworICAgIHJldHVybiBVbmljb2RlOjpkaXJlY3Rpb24ocmVuZGVyVHh0
LT50ZXh0KClbcG9zXSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTYyMCw0NCArNjIzLDQ0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bihCaWRp
U3RhdGUgJmJpZGkpCiAgICAgCiAgICAgYmlkaS5lb3IuaW5jcmVtZW50KGJpZGkpOwogICAgIGJp
ZGkuc29yID0gYmlkaS5lb3I7Ci0gICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1
dHJhbDsKLSAgICBiaWRpLnN0YXR1cy5lb3IgPSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDsK
KyAgICBiaWRpLmRpciA9IE90aGVyTmV1dHJhbDsKKyAgICBiaWRpLnN0YXR1cy5lb3IgPSBPdGhl
ck5ldXRyYWw7CiAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBiOwogfQogCi1zdGF0aWMgdm9p
ZCBlbWJlZChXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkLCBCaWRpU3RhdGUmIGJpZGkpCitzdGF0
aWMgdm9pZCBlbWJlZChEaXJlY3Rpb24gZCwgQmlkaVN0YXRlJiBiaWRpKQogewogICAgIGJvb2wg
YiA9IGJpZGkuYWRqdXN0RW1iZWRkaW5nOwogICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gZmFs
c2U7Ci0gICAgaWYgKGQgPT0gV1RGOjpVbmljb2RlOjpQb3BEaXJlY3Rpb25hbEZvcm1hdCkgewor
ICAgIGlmIChkID09IFBvcERpcmVjdGlvbmFsRm9ybWF0KSB7CiAgICAgICAgIEJpZGlDb250ZXh0
ICpjID0gYmlkaS5jb250ZXh0LT5wYXJlbnQ7CiAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAg
ICBpZiAoIWVtcHR5UnVuICYmIGJpZGkuZW9yICE9IGJpZGkubGFzdCkgewotICAgICAgICAgICAg
ICAgIGFzc2VydChiaWRpLnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwp
OworICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5lb3IgIT0gT3RoZXJOZXV0cmFs
KTsKICAgICAgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFz
dCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5k
IGl0IHRocm91Z2ggYmlkaS5sYXN0Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVz
Lmxhc3QgPT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcgotICAgICAgICAg
ICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6RXVyb3BlYW5O
dW1iZXJUZXJtaW5hdG9yCi0gICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3Qg
PT0gV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAg
ICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbAot
ICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6
QmxvY2tTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9
PSBXVEY6OlVuaWNvZGU6OlNlZ21lbnRTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwg
YmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsCi0gICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpPdGhl
ck5ldXRyYWwpOwotICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBXVEY6OlVuaWNvZGU6
Ok90aGVyTmV1dHJhbCkKKyAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMubGFzdCA9
PSBFdXJvcGVhbk51bWJlclNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0
YXR1cy5sYXN0ID09IEV1cm9wZWFuTnVtYmVyVGVybWluYXRvcgorICAgICAgICAgICAgICAgICAg
ICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IENvbW1vbk51bWJlclNlcGFyYXRvcgorICAgICAgICAg
ICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IEJvdW5kYXJ5TmV1dHJhbAorICAgICAg
ICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IEJsb2NrU2VwYXJhdG9yCisgICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gU2VnbWVudFNlcGFyYXRvcgor
ICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdoaXRlU3BhY2VOZXV0
cmFsCisgICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gT3RoZXJOZXV0
cmFsKTsKKyAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gT3RoZXJOZXV0cmFsKQogICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuY29udGV4dC0+ZGlyKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9S
aWdodCkgeworICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpID09IExlZnRU
b1JpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAu
Li4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9
PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6
OkV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9y
ID09IEV1cm9wZWFuTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5z
dGF0dXMubGFzdFN0cm9uZyAhPSBMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZGlyID0gRXVyb3BlYW5OdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBXVEY6OlVuaWNvZGU6
OkFyYWJpY051bWJlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6
OlVuaWNvZGU6OkFyYWJpY051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChi
aWRpLnN0YXR1cy5lb3IgPT0gQXJhYmljTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmRpciA9IEFyYWJpY051bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5l
b3IgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gTGVmdFRvUmlnaHQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRp
LnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5l
b3IgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYykKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5l
b3IgIT0gUmlnaHRUb0xlZnRBcmFiaWMpCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihi
aWRpKTsKICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAgICAg
IH0KQEAgLTY3MSwxNSArNjc0LDE1IEBAIHN0YXRpYyB2b2lkIGVtYmVkKFdURjo6VW5pY29kZTo6
RGlyZWN0aW8KICAgICAgICAgICAgIGJpZGkuZW9yLm9iaiA9IDA7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBydW5EaXI7Ci0gICAgICAg
IGlmIChkID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRFbWJlZGRpbmcgfHwgZCA9PSBXVEY6
OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGUpCi0gICAgICAgICAgICBydW5EaXIgPSBXVEY6
OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICBEaXJlY3Rpb24gcnVuRGlyOworICAgICAg
ICBpZiAoZCA9PSBSaWdodFRvTGVmdEVtYmVkZGluZyB8fCBkID09IFJpZ2h0VG9MZWZ0T3ZlcnJp
ZGUpCisgICAgICAgICAgICBydW5EaXIgPSBSaWdodFRvTGVmdDsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcnVuRGlyID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKLSAgICAgICAgYm9v
bCBvdmVycmlkZSA9IGQgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodE92ZXJyaWRlIHx8IGQg
PT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRlOworICAgICAgICAgICAgcnVuRGly
ID0gTGVmdFRvUmlnaHQ7CisgICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBkID09IExlZnRUb1JpZ2h0
T3ZlcnJpZGUgfHwgZCA9PSBSaWdodFRvTGVmdE92ZXJyaWRlOwogCiAgICAgICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWwgPSBiaWRpLmNvbnRleHQtPmxldmVsOwotICAgICAgICBpZiAocnVuRGlyID09
IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQpIHsKKyAgICAgICAgaWYgKHJ1bkRpciA9PSBSaWdo
dFRvTGVmdCkgewogICAgICAgICAgICAgaWYgKGxldmVsJTIpIC8vIHdlIGhhdmUgYW4gb2RkIGxl
dmVsCiAgICAgICAgICAgICAgICAgbGV2ZWwgKz0gMjsKICAgICAgICAgICAgIGVsc2UKQEAgLTY5
Myw0NyArNjk2LDQ3IEBAIHN0YXRpYyB2b2lkIGVtYmVkKFdURjo6VW5pY29kZTo6RGlyZWN0aW8K
IAogICAgICAgICBpZiAobGV2ZWwgPCA2MSkgewogICAgICAgICAgICAgaWYgKCFlbXB0eVJ1biAm
JiBiaWRpLmVvciAhPSBiaWRpLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5z
dGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQoYmlkaS5zdGF0dXMuZW9yICE9IE90aGVyTmV1dHJhbCk7CiAgICAgICAgICAgICAg
ICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgZW9yOyBuZWVkIHRvIGFw
cGVuZCB0aGUgYmlkaS5zb3ItYmlkaS5lb3IgcnVuIG9yIGV4dGVuZCBpdCB0aHJvdWdoIGJpZGku
bGFzdAotICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5p
Y29kZTo6RXVyb3BlYW5OdW1iZXJTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwgYmlk
aS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyVGVybWluYXRvcgot
ICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6
Q29tbW9uTnVtYmVyU2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVz
Lmxhc3QgPT0gV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWwKLSAgICAgICAgICAgICAgICAg
ICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OkJsb2NrU2VwYXJhdG9yCi0g
ICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpT
ZWdtZW50U2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3Qg
PT0gV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNlTmV1dHJhbAotICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsKTsKLSAgICAg
ICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpCisg
ICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmxhc3QgPT0gRXVyb3BlYW5OdW1iZXJT
ZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBFdXJv
cGVhbk51bWJlclRlcm1pbmF0b3IKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMu
bGFzdCA9PSBDb21tb25OdW1iZXJTZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlk
aS5zdGF0dXMubGFzdCA9PSBCb3VuZGFyeU5ldXRyYWwKKyAgICAgICAgICAgICAgICAgICAgfHwg
YmlkaS5zdGF0dXMubGFzdCA9PSBCbG9ja1NlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFNlZ21lbnRTZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAg
ICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBXaGl0ZVNwYWNlTmV1dHJhbAorICAgICAgICAgICAg
ICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IE90aGVyTmV1dHJhbCk7CisgICAgICAgICAg
ICAgICAgaWYgKGJpZGkuZGlyID09IE90aGVyTmV1dHJhbCkKICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBydW5EaXI7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1bkRpciA9PSBXVEY6OlVu
aWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJ1bkRpciA9PSBMZWZ0
VG9SaWdodCkgewogICAgICAgICAgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3Ig
Li4uIGJpZGkubGFzdCBMCi0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3Ig
PT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdo
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2Rl
OjpFdXJvcGVhbk51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVv
ciA9PSBFdXJvcGVhbk51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGku
c3RhdHVzLmxhc3RTdHJvbmcgIT0gTGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmRpciA9IEV1cm9wZWFuTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YmlkaS5jb250ZXh0LT5kaXIoKSAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6UmlnaHRU
b0xlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGly
KCkgIT0gTGVmdFRvUmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdURjo6VW5pY29kZTo6QXJh
YmljTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5p
Y29kZTo6QXJhYmljTnVtYmVyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGku
c3RhdHVzLmVvciA9PSBBcmFiaWNOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyID0gQXJhYmljTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkg
IT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgIT0gTGVmdFRvUmlnaHQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBSaWdodFRvTGVmdDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFdURjo6
VW5pY29kZTo6TGVmdFRvUmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRp
LmNvbnRleHQtPmRpcigpID09IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQgfHwgYmlkaS5zdGF0
dXMubGFzdFN0cm9uZyA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KQorICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBMZWZ0VG9SaWdodCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0gTGVmdFRvUmln
aHQgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBMZWZ0VG9SaWdodCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNv
ZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0g
UmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0ICYmIGJp
ZGkuc3RhdHVzLmVvciAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKSB7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUmlnaHRUb0xlZnQgJiYg
YmlkaS5zdGF0dXMuZW9yICE9IFJpZ2h0VG9MZWZ0QXJhYmljKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IFI7IGJpZGkuZW9yPUwv
RU4vQU47IEVOLEFOIGJlaGF2ZSBsaWtlIFIgKHJ1bGUgTjEpCi0gICAgICAgICAgICAgICAgICAg
IGlmIChiaWRpLmNvbnRleHQtPmRpcigpID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgfHwg
YmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0IHx8IGJp
ZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYykK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0gUmlnaHRUb0xl
ZnQgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBSaWdodFRvTGVmdCB8fCBiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nID09IFJpZ2h0VG9MZWZ0QXJhYmljKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IExlZnRUb1JpZ2h0OwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAgICAg
IH0KQEAgLTEwMTMsNyArMTAxNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGlu
ZShjb25zdCAKICAgICBzTGFzdEJpZGlSdW4gPSAwOwogICAgIHNCaWRpUnVuQ291bnQgPSAwOwog
Ci0gICAgYXNzZXJ0KGJpZGkuZGlyID09IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsKTsKKyAg
ICBhc3NlcnQoYmlkaS5kaXIgPT0gT3RoZXJOZXV0cmFsKTsKIAogICAgIGVtcHR5UnVuID0gdHJ1
ZTsKIApAQCAtMTAyNyw3ICsxMDMwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJM
aW5lKGNvbnN0IAogICAgIEJpZGlTdGF0ZSBzdGF0ZUF0RW5kOwogCiAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGlyQ3VycmVudDsKKyAgICAgICAg
RGlyZWN0aW9uIGRpckN1cnJlbnQ7CiAgICAgICAgIGlmIChwYXN0RW5kICYmIChwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkgfHwgYmlkaS5jdXJyZW50LmF0RW5kKCkpKSB7CiAgICAgICAgICAgICBC
aWRpQ29udGV4dCAqYyA9IGJpZGkuY29udGV4dC5nZXQoKTsKICAgICAgICAgICAgIHdoaWxlIChj
LT5wYXJlbnQpCkBAIC0xMDQ0LDc1ICsxMDQ3LDc1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlS
ZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRpckN1cnJl
bnQgPSBiaWRpLmN1cnJlbnQuZGlyZWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoYmlkaS5jb250
ZXh0LT5vdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFdURjo6
VW5pY29kZTo6UmlnaHRUb0xlZnRFbWJlZGRpbmcKLSAgICAgICAgICAgICAgICAgICAgJiYgZGly
Q3VycmVudCAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0RW1iZWRkaW5nCi0gICAgICAgICAg
ICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJy
aWRlCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gV1RGOjpVbmljb2RlOjpM
ZWZ0VG9SaWdodE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0g
V1RGOjpVbmljb2RlOjpQb3BEaXJlY3Rpb25hbEZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAg
JiYgZGlyQ3VycmVudCAhPSBSaWdodFRvTGVmdEVtYmVkZGluZworICAgICAgICAgICAgICAgICAg
ICAmJiBkaXJDdXJyZW50ICE9IExlZnRUb1JpZ2h0RW1iZWRkaW5nCisgICAgICAgICAgICAgICAg
ICAgICYmIGRpckN1cnJlbnQgIT0gUmlnaHRUb0xlZnRPdmVycmlkZQorICAgICAgICAgICAgICAg
ICAgICAmJiBkaXJDdXJyZW50ICE9IExlZnRUb1JpZ2h0T3ZlcnJpZGUKKyAgICAgICAgICAgICAg
ICAgICAgJiYgZGlyQ3VycmVudCAhPSBQb3BEaXJlY3Rpb25hbEZvcm1hdCkKICAgICAgICAgICAg
ICAgICBkaXJDdXJyZW50ID0gYmlkaS5jb250ZXh0LT5kaXIoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGRpckN1cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpOb25TcGFjaW5nTWFyaykKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGRpckN1cnJlbnQgPT0gTm9uU3BhY2luZ01hcmspCiAgICAgICAgICAgICAg
ICAgZGlyQ3VycmVudCA9IGJpZGkuc3RhdHVzLmxhc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBh
c3NlcnQoYmlkaS5zdGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsKTsKKyAg
ICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmVvciAhPSBPdGhlck5ldXRyYWwpOwogICAgICAgICBz
d2l0Y2ggKGRpckN1cnJlbnQpIHsKIAogICAgICAgICAvLyBlbWJlZGRpbmcgYW5kIG92ZXJyaWRl
cyAoWDEtWDkgaW4gdGhlIEJpZGkgc3BlY3MpCi0gICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpS
aWdodFRvTGVmdEVtYmVkZGluZzoKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkxlZnRUb1Jp
Z2h0RW1iZWRkaW5nOgotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVy
cmlkZToKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0T3ZlcnJpZGU6Ci0g
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpQb3BEaXJlY3Rpb25hbEZvcm1hdDoKKyAgICAgICAg
Y2FzZSBSaWdodFRvTGVmdEVtYmVkZGluZzoKKyAgICAgICAgY2FzZSBMZWZ0VG9SaWdodEVtYmVk
ZGluZzoKKyAgICAgICAgY2FzZSBSaWdodFRvTGVmdE92ZXJyaWRlOgorICAgICAgICBjYXNlIExl
ZnRUb1JpZ2h0T3ZlcnJpZGU6CisgICAgICAgIGNhc2UgUG9wRGlyZWN0aW9uYWxGb3JtYXQ6CiAg
ICAgICAgICAgICBlbWJlZChkaXJDdXJyZW50LCBiaWRpKTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICAvLyBzdHJvbmcgdHlwZXMKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6
OkxlZnRUb1JpZ2h0OgorICAgICAgICBjYXNlIExlZnRUb1JpZ2h0OgogICAgICAgICAgICAgc3dp
dGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29k
ZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0QXJhYmljOgotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVh
bk51bWJlcjoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6QXJhYmljTnVtYmVy
OgotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBXVEY6OlVuaWNv
ZGU6OkV1cm9wZWFuTnVtYmVyIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gV1RGOjpVbmlj
b2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgICAgICAgICBjYXNlIFJpZ2h0VG9MZWZ0OgorICAg
ICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnRBcmFiaWM6CisgICAgICAgICAgICAgICAgY2Fz
ZSBFdXJvcGVhbk51bWJlcjoKKyAgICAgICAgICAgICAgICBjYXNlIEFyYWJpY051bWJlcjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3QgIT0gRXVyb3BlYW5OdW1iZXIg
fHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBMZWZ0VG9SaWdodCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICAg
ICAgICAgIGNhc2UgTGVmdFRvUmlnaHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcjoK
LSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5h
dG9yOgotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBh
cmF0b3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJh
bDoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6QmxvY2tTZXBhcmF0b3I6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlNlZ21lbnRTZXBhcmF0b3I6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOgotICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJl
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
IT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgIGNhc2UgRXVy
b3BlYW5OdW1iZXJTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVhbk51bWJl
clRlcm1pbmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBDb21tb25OdW1iZXJTZXBhcmF0b3I6
CisgICAgICAgICAgICAgICAgY2FzZSBCb3VuZGFyeU5ldXRyYWw6CisgICAgICAgICAgICAgICAg
Y2FzZSBCbG9ja1NlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIFNlZ21lbnRTZXBhcmF0
b3I6CisgICAgICAgICAgICAgICAgY2FzZSBXaGl0ZVNwYWNlTmV1dHJhbDoKKyAgICAgICAgICAg
ICAgICBjYXNlIE90aGVyTmV1dHJhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3Rh
dHVzLmVvciA9PSBFdXJvcGVhbk51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gTGVmdFRvUmlnaHQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgbnVtYmVycyBuZWVkIHRvIGJlIG9uIGEgaGlnaGVyIGVtYmVk
ZGluZyBsZXZlbCwgc28gbGV0J3MgY2xvc2UgdGhhdCBydW4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBFdXJvcGVhbk51bWJlcjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9S
aWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRp
cigpICE9IExlZnRUb1JpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLCB3aGljaCBpcyBSCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6Umln
aHRUb0xlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUmln
aHRUb0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdU
Rjo6VW5pY29kZTo6QXJhYmljTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYmlkaS5zdGF0dXMuZW9yID09IEFyYWJpY051bWJlcikgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXJhYmljIG51bWJlcnMgYXJlIGFsd2F5cyBvbiBhIGhpZ2hlciBlbWJlZGRpbmcg
bGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLmRpciA9IFdURjo6VW5pY29kZTo6QXJhYmljTnVtYmVyOworICAgICAgICAgICAgICAgICAg
ICAgICAgYmlkaS5kaXIgPSBBcmFiaWNOdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0
LT5kaXIoKSAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBMZWZ0VG9SaWdodCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcg
ZGlyZWN0aW9uLCB3aGljaCBpcyBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBX
VEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyID0gUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYoYmlkaS5zdGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGJpZGkuc3RhdHVzLmVvciAhPSBMZWZ0
VG9SaWdodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRha2VzIGVt
YmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRp
cigpICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBMZWZ0VG9SaWdodCAmJiBiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nICE9IExlZnRUb1JpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5lb3IgPSBiaWRpLmxhc3Q7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpLmRpciA9IFJpZ2h0VG9MZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOyAKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTEyMCwzNCArMTEyMywzNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVv
cmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICBiaWRp
LnN0YXR1cy5lb3IgPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OwotICAgICAgICAgICAgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7Ci0gICAgICAg
ICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICBi
aWRpLnN0YXR1cy5lb3IgPSBMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxh
c3RTdHJvbmcgPSBMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIGJpZGkuZGlyID0gTGVmdFRvUmln
aHQ7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0QXJhYmljOgotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ6Cisg
ICAgICAgIGNhc2UgUmlnaHRUb0xlZnRBcmFiaWM6CisgICAgICAgIGNhc2UgUmlnaHRUb0xlZnQ6
CiAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBX
VEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOgotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpV
bmljb2RlOjpBcmFiaWNOdW1iZXI6CisgICAgICAgICAgICAgICAgY2FzZSBMZWZ0VG9SaWdodDoK
KyAgICAgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyOgorICAgICAgICAgICAgICAgIGNh
c2UgQXJhYmljTnVtYmVyOgogICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OgotICAgICAgICAg
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYzoKKyAgICAgICAgICAg
ICAgICBjYXNlIFJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnRB
cmFiaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAgICAgICAgICBj
YXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgotICAgICAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBhcmF0b3I6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbDoKLSAgICAgICAgICAgICAg
ICBjYXNlIFdURjo6VW5pY29kZTo6QmxvY2tTZXBhcmF0b3I6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBXVEY6OlVuaWNvZGU6OlNlZ21lbnRTZXBhcmF0b3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBX
VEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOgotICAgICAgICAgICAgICAgIGNhc2UgV1RG
OjpVbmljb2RlOjpPdGhlck5ldXRyYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0
YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5lb3Ig
IT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYykgeworICAgICAgICAgICAgICAgIGNh
c2UgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVh
bk51bWJlclRlcm1pbmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBDb21tb25OdW1iZXJTZXBh
cmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBCb3VuZGFyeU5ldXRyYWw6CisgICAgICAgICAg
ICAgICAgY2FzZSBCbG9ja1NlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIFNlZ21lbnRT
ZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBXaGl0ZVNwYWNlTmV1dHJhbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIE90aGVyTmV1dHJhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJp
ZGkuc3RhdHVzLmVvciAhPSBSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gUmlnaHRU
b0xlZnRBcmFiaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGFzdCBzdHVmZiB0YWtl
cyBlbWJlZGRpbmcgZGlyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0
LT5kaXIoKSAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0ICYmIGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRv
TGVmdEFyYWJpYykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+
ZGlyKCkgIT0gUmlnaHRUb0xlZnQgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBSaWdodFRv
TGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJv
bmcgIT0gUmlnaHRUb0xlZnRBcmFiaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRp
ciA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5kaXIgPSBMZWZ0VG9SaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMTE1NSw5OSArMTE1OCw5OSBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRl
ckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgYmlkaS5z
dGF0dXMuZW9yID0gUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpS
aWdodFRvTGVmdDsKKyAgICAgICAgICAgIGJpZGkuZGlyID0gUmlnaHRUb0xlZnQ7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gd2VhayB0eXBlczoKIAotICAgICAgICBjYXNl
IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXI6Ci0gICAgICAgICAgICBpZiAoYmlkaS5zdGF0
dXMubGFzdFN0cm9uZyAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKSB7CisgICAg
ICAgIGNhc2UgRXVyb3BlYW5OdW1iZXI6CisgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFz
dFN0cm9uZyAhPSBSaWdodFRvTGVmdEFyYWJpYykgewogICAgICAgICAgICAgICAgIC8vIGlmIGxh
c3Qgc3Ryb25nIHdhcyBBTCBjaGFuZ2UgRU4gdG8gQU4KICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNv
ZGU6OkV1cm9wZWFuTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29k
ZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5OdW1iZXI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGVmdFRvUmlnaHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJp
Z2h0VG9MZWZ0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRU
b0xlZnRBcmFiaWM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpBcmFi
aWNOdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnRBcmFiaWM6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJhYmljTnVtYmVyOgogICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBi
aWRpLmxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1i
ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IEV1cm9wZWFuTnVtYmVyOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBXVEY6OlVuaWNvZGU6OkNvbW1vbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpVbmljb2RlOjpFdXJvcGVh
bk51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVhbk51bWJlclNlcGFyYXRv
cjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb21tb25OdW1iZXJTZXBhcmF0b3I6CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IEV1cm9wZWFuTnVtYmVy
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Qm91bmRhcnlOZXV0cmFsOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6QmxvY2tTZXBhcmF0b3I6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpTZWdtZW50U2VwYXJhdG9yOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWw6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdURjo6VW5pY29kZTo6UmlnaHRU
b0xlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVhbk51bWJlclRlcm1pbmF0
b3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQm91bmRhcnlOZXV0cmFsOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJsb2NrU2VwYXJhdG9yOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IFNlZ21lbnRTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgV2hpdGVTcGFjZU5l
dXRyYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgT3RoZXJOZXV0cmFsOgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBSaWdodFRvTGVmdCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldXRyYWxzIGdvIHRvIFIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmlj
b2RlOjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IgPyBiaWRpLmxhc3RCZWZvcmVFVCA6IGJpZGku
bGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuc3RhdHVz
Lmxhc3QgPT0gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yID8gYmlkaS5sYXN0QmVmb3JlRVQgOiBi
aWRpLmxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpFdXJv
cGVhbk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0
dXMuZW9yICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChiaWRpLnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpFdXJvcGVh
bk51bWJlciB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFdURjo6VW5pY29kZTo6TGVmdFRv
UmlnaHQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciAhPSBX
VEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBFdXJvcGVhbk51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IExlZnRUb1JpZ2h0ICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYmlkaS5zdGF0dXMuZW9yICE9IEV1cm9wZWFuTnVtYmVyIHx8IGJp
ZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gTGVmdFRvUmlnaHQpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciAhPSBMZWZ0VG9SaWdodCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG51bWJlcnMgb24gYm90aCBzaWRlcywgbmV1dHJhbHMgZ2V0IHJp
Z2h0IHRvIGxlZnQgZGlyZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5z
dGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyVGVybWluYXRvciA/IGJp
ZGkubGFzdEJlZm9yZUVUIDogYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuc3RhdHVzLmxhc3QgPT0gRXVyb3BlYW5OdW1iZXJU
ZXJtaW5hdG9yID8gYmlkaS5sYXN0QmVmb3JlRVQgOiBiaWRpLmxhc3Q7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBSaWdodFRvTGVmdDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gRXVyb3BlYW5OdW1iZXI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gV1RG
OjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjsKLSAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIg
PT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpCi0gICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBFdXJvcGVhbk51bWJlcjsKKyAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIg
PT0gT3RoZXJOZXV0cmFsKQorICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IExlZnRUb1Jp
Z2h0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICBjYXNl
IFdURjo6VW5pY29kZTo6QXJhYmljTnVtYmVyOgotICAgICAgICAgICAgZGlyQ3VycmVudCA9IFdU
Rjo6VW5pY29kZTo6QXJhYmljTnVtYmVyOworICAgICAgICBjYXNlIEFyYWJpY051bWJlcjoKKyAg
ICAgICAgICAgIGRpckN1cnJlbnQgPSBBcmFiaWNOdW1iZXI7CiAgICAgICAgICAgICBzd2l0Y2gg
KGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6
TGVmdFRvUmlnaHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigp
ID09IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgICAgICAgICAgY2FzZSBMZWZ0
VG9SaWdodDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0g
TGVmdFRvUmlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmlj
b2RlOjpBcmFiaWNOdW1iZXI6CisgICAgICAgICAgICAgICAgY2FzZSBBcmFiaWNOdW1iZXI6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmlj
b2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Umln
aHRUb0xlZnRBcmFiaWM6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9w
ZWFuTnVtYmVyOgorICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAgICAg
ICAgICAgY2FzZSBSaWdodFRvTGVmdEFyYWJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIEV1cm9w
ZWFuTnVtYmVyOgogICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Q29tbW9uTnVtYmVyU2Vw
YXJhdG9yOgotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdURjo6
VW5pY29kZTo6QXJhYmljTnVtYmVyKQorICAgICAgICAgICAgICAgIGNhc2UgQ29tbW9uTnVtYmVy
U2VwYXJhdG9yOgorICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IEFy
YWJpY051bWJlcikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAg
ICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgotICAg
ICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWw6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkJsb2NrU2VwYXJhdG9yOgotICAgICAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpTZWdtZW50U2VwYXJhdG9yOgotICAgICAgICAgICAgICAg
IGNhc2UgV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNlTmV1dHJhbDoKLSAgICAgICAgICAgICAgICBj
YXNlIFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsOgotICAgICAgICAgICAgICAgICAgICBpZiAo
YmlkaS5zdGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgJiYgYmlkaS5zdGF0
dXMuZW9yICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRBcmFiaWMpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgorICAgICAgICAgICAgICAgIGNhc2Ug
RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgorICAgICAgICAgICAgICAgIGNhc2UgQm91bmRhcnlO
ZXV0cmFsOgorICAgICAgICAgICAgICAgIGNhc2UgQmxvY2tTZXBhcmF0b3I6CisgICAgICAgICAg
ICAgICAgY2FzZSBTZWdtZW50U2VwYXJhdG9yOgorICAgICAgICAgICAgICAgIGNhc2UgV2hpdGVT
cGFjZU5ldXRyYWw6CisgICAgICAgICAgICAgICAgY2FzZSBPdGhlck5ldXRyYWw6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUmlnaHRUb0xlZnQgJiYgYmlkaS5z
dGF0dXMuZW9yICE9IFJpZ2h0VG9MZWZ0QXJhYmljKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBydW4gb2YgTCBiZWZvcmUgbmV1dHJhbHMsIG5ldXRyYWxzIHRha2UgZW1iZWRkaW5nIGRp
ciAoTjIpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9
PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0IHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0g
V1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJp
YykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0g
UmlnaHRUb0xlZnQgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBSaWdodFRvTGVmdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUmln
aHRUb0xlZnRBcmFiaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZW1i
ZWRkaW5nIGRpcmVjdGlvbiBpcyBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xv
c2UgdGhlIEwgcnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldXRyYWxzIGJlY29tZSBhbiBSIHJ1
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpS
aWdodFRvTGVmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFJpZ2h0
VG9MZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiBpcyBMCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXBwZW5kIG5ldXRyYWxzIHRvIHRoZSBMIHJ1biBhbmQgY2xv
c2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29k
ZTo6TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBM
ZWZ0VG9SaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKQEAgLTEyNTYs
MzcgKzEyNTksMzcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gV1RG
OjpVbmljb2RlOjpBcmFiaWNOdW1iZXI7Ci0gICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gV1RG
OjpVbmljb2RlOjpPdGhlck5ldXRyYWwpCi0gICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6
OlVuaWNvZGU6OkFyYWJpY051bWJlcjsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IEFy
YWJpY051bWJlcjsKKyAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBPdGhlck5ldXRyYWwpCisg
ICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBBcmFiaWNOdW1iZXI7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgot
ICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Q29tbW9uTnVtYmVyU2VwYXJhdG9yOgorICAgICAg
ICBjYXNlIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgorICAgICAgICBjYXNlIENvbW1vbk51bWJl
clNlcGFyYXRvcjoKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdURjo6VW5pY29k
ZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgotICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVz
Lmxhc3QgPT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcikgewotICAgICAgICAgICAgICAg
IGRpckN1cnJlbnQgPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOworICAgICAgICBjYXNl
IEV1cm9wZWFuTnVtYmVyVGVybWluYXRvcjoKKyAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5s
YXN0ID09IEV1cm9wZWFuTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IEV1
cm9wZWFuTnVtYmVyOwogICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50Owog
ICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmxhc3QgIT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51
bWJlclRlcm1pbmF0b3IpCisgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmxhc3Qg
IT0gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yKQogICAgICAgICAgICAgICAgIGJpZGkubGFzdEJl
Zm9yZUVUID0gZW1wdHlSdW4gPyBiaWRpLmVvciA6IGJpZGkubGFzdDsKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIC8vIGJvdW5kYXJ5IG5ldXRyYWxzIHNob3VsZCBiZSBpZ25vcmVkCi0g
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWw6CisgICAgICAgIGNhc2Ug
Qm91bmRhcnlOZXV0cmFsOgogICAgICAgICAgICAgaWYgKGJpZGkuZW9yID09IGJpZGkubGFzdCkK
ICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgLy8gbmV1dHJhbHMKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6
OkJsb2NrU2VwYXJhdG9yOgorICAgICAgICBjYXNlIEJsb2NrU2VwYXJhdG9yOgogICAgICAgICAg
ICAgLy8gIyMjIHdoYXQgZG8gd2UgZG8gd2l0aCBuZXdsaW5lIGFuZCBwYXJhZ3JhcGggc2VwZXJh
dG9ycyB0aGF0IGNvbWUgdG8gaGVyZT8KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdURjo6VW5pY29kZTo6U2VnbWVudFNlcGFyYXRvcjoKKyAgICAgICAgY2FzZSBTZWdtZW50U2Vw
YXJhdG9yOgogICAgICAgICAgICAgLy8gIyMjIGltcGxlbWVudCBydWxlIEwxCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOgor
ICAgICAgICBjYXNlIFdoaXRlU3BhY2VOZXV0cmFsOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw6CisgICAgICAgIGNhc2UgT3RoZXJO
ZXV0cmFsOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEyOTcsMTMgKzEzMDAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJl
b3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAgIGlmICghYmlkaS5yZWFjaGVkRW5kT2ZM
aW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5lbmRPZkxpbmU7CiAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMuZW9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6QXJhYmljTnVtYmVyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBMZWZ0VG9SaWdodDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFyYWJpY051
bWJlcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVz
LmVvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gV1RG
OjpVbmljb2RlOjpMZWZ0VG9SaWdodCA/IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQgOiBXVEY6
OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
dXJvcGVhbk51bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJp
ZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gTGVmdFRvUmlnaHQgPyBMZWZ0VG9SaWdodCA6IEV1cm9w
ZWFuTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQoZmFsc2UpOwpAQCAtMTMxMSw0NCArMTMxNCw0NCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRp
UmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmlkaSA9IHN0YXRlQXRFbmQ7Ci0g
ICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDsKKyAg
ICAgICAgICAgICAgICBiaWRpLmRpciA9IE90aGVyTmV1dHJhbDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIHNldCBzdGF0dXMu
bGFzdCBhcyBuZWVkZWQuCiAgICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewotICAgICAgICAg
ICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyVGVybWluYXRvcjoKLSAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVt
YmVyKQotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gV1RGOjpVbmljb2Rl
OjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I7CisgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVt
YmVyVGVybWluYXRvcjoKKyAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBF
dXJvcGVhbk51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IEV1
cm9wZWFuTnVtYmVyVGVybWluYXRvcjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBhcmF0b3I6Ci0gICAgICAgICAg
ICBjYXNlIFdURjo6VW5pY29kZTo6U2VnbWVudFNlcGFyYXRvcjoKLSAgICAgICAgICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNlTmV1dHJhbDoKLSAgICAgICAgICAgIGNhc2UgV1RGOjpV
bmljb2RlOjpPdGhlck5ldXRyYWw6CisgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyU2Vw
YXJhdG9yOgorICAgICAgICAgICAgY2FzZSBDb21tb25OdW1iZXJTZXBhcmF0b3I6CisgICAgICAg
ICAgICBjYXNlIFNlZ21lbnRTZXBhcmF0b3I6CisgICAgICAgICAgICBjYXNlIFdoaXRlU3BhY2VO
ZXV0cmFsOgorICAgICAgICAgICAgY2FzZSBPdGhlck5ldXRyYWw6CiAgICAgICAgICAgICAgICAg
c3dpdGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6
OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5p
Y29kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2Rl
OjpSaWdodFRvTGVmdEFyYWJpYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNv
ZGU6OkV1cm9wZWFuTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29k
ZTo6QXJhYmljTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIExlZnRUb1JpZ2h0Ogor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFJpZ2h0VG9MZWZ0QXJhYmljOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEV1cm9w
ZWFuTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyYWJpY051bWJlcjoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gV1RGOjpVbmljb2RlOjpP
dGhlck5ldXRyYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0g
T3RoZXJOZXV0cmFsOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Tm9uU3BhY2luZ01hcms6Ci0gICAg
ICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Qm91bmRhcnlOZXV0cmFsOgotICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0RW1iZWRkaW5nOgotICAgICAgICAgICAgY2Fz
ZSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0RW1iZWRkaW5nOgotICAgICAgICAgICAgY2FzZSBX
VEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGU6Ci0gICAgICAgICAgICBjYXNlIFdURjo6
VW5pY29kZTo6TGVmdFRvUmlnaHRPdmVycmlkZToKLSAgICAgICAgICAgIGNhc2UgV1RGOjpVbmlj
b2RlOjpQb3BEaXJlY3Rpb25hbEZvcm1hdDoKKyAgICAgICAgICAgIGNhc2UgTm9uU3BhY2luZ01h
cms6CisgICAgICAgICAgICBjYXNlIEJvdW5kYXJ5TmV1dHJhbDoKKyAgICAgICAgICAgIGNhc2Ug
UmlnaHRUb0xlZnRFbWJlZGRpbmc6CisgICAgICAgICAgICBjYXNlIExlZnRUb1JpZ2h0RW1iZWRk
aW5nOgorICAgICAgICAgICAgY2FzZSBSaWdodFRvTGVmdE92ZXJyaWRlOgorICAgICAgICAgICAg
Y2FzZSBMZWZ0VG9SaWdodE92ZXJyaWRlOgorICAgICAgICAgICAgY2FzZSBQb3BEaXJlY3Rpb25h
bEZvcm1hdDoKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhlc2UKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjoK
KyAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5OdW1iZXI6CiAgICAgICAgICAgICAgICAgLy8gZmFs
bCB0aHJvdWdoCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJpZGkuc3Rh
dHVzLmxhc3QgPSBkaXJDdXJyZW50OwpAQCAtMTM1NiwxMSArMTM1OSwxMSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAKICAgICAgICAgYmlkaS5sYXN0ID0gYmlk
aS5jdXJyZW50OwogCi0gICAgICAgIGlmIChlbXB0eVJ1biAmJiAhKGRpckN1cnJlbnQgPT0gV1RG
OjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZwotICAgICAgICAgICAgICAgIHx8IGRpckN1
cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodEVtYmVkZGluZwotICAgICAgICAgICAg
ICAgIHx8IGRpckN1cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRlCi0g
ICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0
T3ZlcnJpZGUKLSAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFdURjo6VW5pY29kZTo6
UG9wRGlyZWN0aW9uYWxGb3JtYXQpKSB7CisgICAgICAgIGlmIChlbXB0eVJ1biAmJiAhKGRpckN1
cnJlbnQgPT0gUmlnaHRUb0xlZnRFbWJlZGRpbmcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJy
ZW50ID09IExlZnRUb1JpZ2h0RW1iZWRkaW5nCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVu
dCA9PSBSaWdodFRvTGVmdE92ZXJyaWRlCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9
PSBMZWZ0VG9SaWdodE92ZXJyaWRlCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBQ
b3BEaXJlY3Rpb25hbEZvcm1hdCkpIHsKICAgICAgICAgICAgIGJpZGkuc29yID0gYmlkaS5jdXJy
ZW50OwogICAgICAgICAgICAgZW1wdHlSdW4gPSBmYWxzZTsKICAgICAgICAgfQpAQCAtMTM3MCwx
MSArMTM3MywxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAg
ICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsKICAgICAgICAgYmlkaS5jdXJyZW50
LmluY3JlbWVudChiaWRpKTsKICAgICAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsK
LSAgICAgICAgaWYgKGVtcHR5UnVuICYmIChkaXJDdXJyZW50ID09IFdURjo6VW5pY29kZTo6Umln
aHRUb0xlZnRFbWJlZGRpbmcKLSAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFdURjo6
VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmcKLSAgICAgICAgICAgICAgICB8fCBkaXJDdXJy
ZW50ID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVycmlkZQotICAgICAgICAgICAgICAg
IHx8IGRpckN1cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodE92ZXJyaWRlCi0gICAg
ICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBXVEY6OlVuaWNvZGU6OlBvcERpcmVjdGlvbmFs
Rm9ybWF0KSkgeworICAgICAgICBpZiAoZW1wdHlSdW4gJiYgKGRpckN1cnJlbnQgPT0gUmlnaHRU
b0xlZnRFbWJlZGRpbmcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IExlZnRUb1Jp
Z2h0RW1iZWRkaW5nCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBSaWdodFRvTGVm
dE92ZXJyaWRlCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBMZWZ0VG9SaWdodE92
ZXJyaWRlCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBQb3BEaXJlY3Rpb25hbEZv
cm1hdCkpIHsKICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgdGhlIGVtYmVkZGluZyBjaGFyIGl0c2Vs
ZiBmcm9tIHRoZSBuZXcgcnVuIHNvIHRoYXQgQVRTVUkgd2lsbCBuZXZlciBzZWUgaXQKICAgICAg
ICAgICAgIGJpZGkuZW9yLm9iaiA9IDA7CiAgICAgICAgICAgICBiaWRpLmxhc3QgPSBiaWRpLmN1
cnJlbnQ7CkBAIC0xNTU3LDE4ICsxNTYwLDE4IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmUKIAogICAgICAgICBCaWRpQ29udGV4dCAqc3RhcnRFbWJlZDsKICAgICAg
ICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgc3RhcnRF
bWJlZCA9IG5ldyBCaWRpQ29udGV4dCggMCwgV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCwgTlVM
TCwgc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSApOwotICAgICAgICAgICAgYmlk
aS5zdGF0dXMuZW9yID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIHN0
YXJ0RW1iZWQgPSBuZXcgQmlkaUNvbnRleHQoMCwgTGVmdFRvUmlnaHQsIE5VTEwsIHN0eWxlKCkt
PnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUpOworICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9y
ID0gTGVmdFRvUmlnaHQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGFydEVtYmVk
ID0gbmV3IEJpZGlDb250ZXh0KCAxLCBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0LCBOVUxMLCBz
dHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlICk7Ci0gICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgc3RhcnRF
bWJlZCA9IG5ldyBCaWRpQ29udGV4dCgxLCBSaWdodFRvTGVmdCwgTlVMTCwgc3R5bGUoKS0+dW5p
Y29kZUJpZGkoKSA9PSBPdmVycmlkZSk7CisgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBS
aWdodFRvTGVmdDsKICAgICAgICAgfQogCiAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
PSBzdGFydEVtYmVkLT5kaXIoKTsKICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IHN0YXJ0RW1i
ZWQtPmRpcigpOwogICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBzdGFydEVtYmVkLT5kaXIoKTsK
ICAgICAgICAgYmlkaS5jb250ZXh0ID0gc3RhcnRFbWJlZDsKLSAgICAgICAgYmlkaS5kaXIgPSBX
VEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDsKKyAgICAgICAgYmlkaS5kaXIgPSBPdGhlck5ldXRy
YWw7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNtaWRwb2ludHMpCiAgICAgICAgICAgICBzbWlk
cG9pbnRzID0gbmV3IFZlY3RvcjxCaWRpSXRlcmF0b3I+KCk7CkBAIC0xODkwLDExICsxODkzLDkg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgQgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vbkJyZWFraW5nU3BhY2Ug
PSAweGEwOwotCiBzdGF0aWMgaW5saW5lIGJvb2wgc2tpcE5vbkJyZWFraW5nU3BhY2UoQmlkaUl0
ZXJhdG9yICZpdCkKIHsKLSAgICBpZiAoaXQub2JqLT5zdHlsZSgpLT5uYnNwTW9kZSgpICE9IFNQ
QUNFIHx8IGl0LmN1cnJlbnQoKSAhPSBub25CcmVha2luZ1NwYWNlKQorICAgIGlmIChpdC5vYmot
PnN0eWxlKCktPm5ic3BNb2RlKCkgIT0gU1BBQ0UgfHwgaXQuY3VycmVudCgpICE9IG5vQnJlYWtT
cGFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGJh
ZC4gIEl0IG1ha2VzIG5ic3AgaW5jb25zaXN0ZW50IHdpdGggc3BhY2UgYW5kIHdvbid0IHdvcmsg
Y29ycmVjdGx5CkBAIC0yMjAxLDcgKzIyMDIsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6
OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgbG9v
a3Mgc3VzcGljaW91cy4gV2h5IGRvZXMgdyBoYXZlIHRvIGJlIDA/ICAKICAgICAgICAgICAgICAg
ICBib29sIGJyZWFrV29yZHMgPSBvLT5zdHlsZSgpLT53b3JkV3JhcCgpID09IEJSRUFLX1dPUkQg
JiYgKChhbGxvd0JyZWFrICYmIHcgPT0gMCkgfHwgby0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpID09
IFBSRSk7CiAKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVySXNXUyA9IGN1cnJlbnRD
aGFyYWN0ZXJJc1NwYWNlIHx8IChicmVha05CU1AgJiYgYyA9PSBub25CcmVha2luZ1NwYWNlKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlIHx8IChicmVha05CU1AgJiYgYyA9PSBub0JyZWFrU3BhY2UpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKGJyZWFrV29yZHMpCiAgICAgICAgICAgICAgICAgICAgIHdyYXBXICs9IHQtPndp
ZHRoKHBvcywgMSwgZiwgdyt3cmFwVyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9icmVha19s
aW5lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3Bw
CShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQ0LDEwICs0NSwx
MCBAQCBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IFVDaGFyKiBzCiAgICAgbGFzdENo
ID0gcG9zID4gMCA/IHN0cltwb3MgLSAxXSA6IDA7CiAgICAgZm9yIChpID0gcG9zOyBpIDwgbGVu
OyBpKyspIHsKICAgICAgICAgY2ggPSBzdHJbaV07Ci0gICAgICAgIGlmIChjaCA9PSAnICcgfHwg
Y2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IChicmVha05CU1AgJiYgY2ggPT0gMHhhMCkpCisg
ICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IChicmVh
a05CU1AgJiYgY2ggPT0gbm9CcmVha1NwYWNlKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAvLyBNYXRjaCBXaW5JRSdzIGJyZWFraW5nIHN0cmF0ZWd5LCB3aGljaCBpcyB0byBhbHdheXMg
YWxsb3cgYnJlYWtzIGFmdGVyIGh5cGhlbnMgYW5kIHF1ZXN0aW9uIG1hcmtzLgotICAgICAgICBp
ZiAobGFzdENoID09ICctJyB8fCBsYXN0Q2ggPT0gJz8nIHx8IGxhc3RDaCA9PSBTT0ZUX0hZUEhF
TikKKyAgICAgICAgaWYgKGxhc3RDaCA9PSAnLScgfHwgbGFzdENoID09ICc/JyB8fCBsYXN0Q2gg
PT0gc29mdEh5cGhlbikKICAgICAgICAgICAgIGJyZWFrOwogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAgICAgLy8gRklYTUU6IFJld3JpdGUgYnJlYWsgbG9jYXRpb24gdXNpbmcgSUNVLgpAQCAtNTUs
MTQgKzU2LDE0IEBAIGludCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgVUNoYXIqIHMKICAg
ICAgICAgLy8gdXNlIHRoZSBVQyBsaW5lIGJyZWFrIGxvY2F0b3IuICBVQ0ZpbmRUZXh0QnJlYWsg
d2lsbCByZXBvcnQgZmFsc2UgaWYgd2UKICAgICAgICAgLy8gaGF2ZSBhIHNlcXVlbmNlIG9mIDB4
YTAgMHgyMCAobmJzcCwgc3ApLCBzbyB3ZSBleHBsaWNpdHkgY2hlY2sgZm9yIHRoYXQKICAgICAg
ICAgLy8gY2FzZS4KLSAgICAgICAgaWYgKChjaCA+IDB4N2YgJiYgY2ggIT0gMHhhMCkgfHwgKGxh
c3RDaCA+IDB4N2YgJiYgbGFzdENoICE9IDB4YTApKSB7CisgICAgICAgIGlmICgoY2ggPiAweDdm
ICYmIGNoICE9IG5vQnJlYWtTcGFjZSkgfHwgKGxhc3RDaCA+IDB4N2YgJiYgbGFzdENoICE9IG5v
QnJlYWtTcGFjZSkpIHsKICAgICAgICAgICAgIGlmIChuZXh0VUNCcmVhayA8IGkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIWJyZWFrTG9jYXRvcikKICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gVUNDcmVhdGVUZXh0QnJlYWtMb2NhdG9yKE5VTEwsIDAsIGtVQ1RleHRCcmVha0xpbmVNYXNr
LCAmYnJlYWtMb2NhdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApCiAgICAg
ICAgICAgICAgICAgICAgIGZpbmRTdGF0dXMgPSBVQ0ZpbmRUZXh0QnJlYWsoYnJlYWtMb2NhdG9y
LCBrVUNUZXh0QnJlYWtMaW5lTWFzaywgMCwgKGNvbnN0IFVuaUNoYXIgKilzdHIsIGxlbiwgaSwg
KFVuaUNoYXJBcnJheU9mZnNldCAqKSZuZXh0VUNCcmVhayk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZmluZFN0YXR1cyA9PSAwICYmIGkgPT0gbmV4dFVDQnJlYWsgJiYgIShsYXN0
Q2ggPT0gJyAnIHx8IGxhc3RDaCA9PSAnXG4nIHx8IGxhc3RDaCA9PSAnXHQnIHx8IChicmVha05C
U1AgJiYgbGFzdENoID09IDB4YTApKSkKKyAgICAgICAgICAgIGlmIChmaW5kU3RhdHVzID09IDAg
JiYgaSA9PSBuZXh0VUNCcmVhayAmJiAhKGxhc3RDaCA9PSAnICcgfHwgbGFzdENoID09ICdcbicg
fHwgbGFzdENoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBsYXN0Q2ggPT0gbm9CcmVha1NwYWNl
KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9icmVha19saW5lcy5oCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L2JyZWFrX2xpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpZm5kZWYg
YnJlYWtfbGluZXNfaAogI2RlZmluZSBicmVha19saW5lc19oCiAKLSNpbmNsdWRlICJ3dGYvdW5p
Y29kZS9Vbmljb2RlLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDE4Njg3KQor
KysgV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw5IEBACiAKIGludCB4cGF0aHl5cGFyc2Uodm9pZCopOwogCit1c2luZyBuYW1lc3BhY2UgV1RG
OwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBYUGF0aCB7CiAKQEAgLTU3LDE4ICs2MCwxMCBAQCBzdGF0aWMgWE1MQ2F0IGNoYXJDYXQo
VUNoYXIgYUNoYXIpCiAKICAgICBpZiAoYUNoYXIgPT0gJy4nIHx8IGFDaGFyID09ICctJykKICAg
ICAgICAgcmV0dXJuIE5hbWVDb250OwotICAgIHVuc2lnbmVkIGNhdGVnb3J5ID0gV1RGOjpVbmlj
b2RlOjpjYXRlZ29yeShhQ2hhcik7Ci0gICAgaWYgKGNhdGVnb3J5ICYgKFdURjo6VW5pY29kZTo6
TGV0dGVyX1VwcGVyY2FzZXwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpMZXR0
ZXJfTG93ZXJjYXNlfAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9P
dGhlcnwKLSAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpMZXR0ZXJfVGl0bGVjYXNl
fAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok51bWJlcl9MZXR0ZXIpKQorICAg
IENoYXJDYXRlZ29yeSBjYXRlZ29yeSA9IFVuaWNvZGU6OmNhdGVnb3J5KGFDaGFyKTsKKyAgICBp
ZiAoY2F0ZWdvcnkgJiAoTGV0dGVyX1VwcGVyY2FzZSB8IExldHRlcl9Mb3dlcmNhc2UgfCBMZXR0
ZXJfT3RoZXIgfCBMZXR0ZXJfVGl0bGVjYXNlIHwgTnVtYmVyX0xldHRlcikpCiAgICAgICAgIHJl
dHVybiBOYW1lU3RhcnQ7Ci0gICAgaWYgKGNhdGVnb3J5ICYgKFdURjo6VW5pY29kZTo6TWFya19O
b25TcGFjaW5nfAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok1hcmtfU3BhY2lu
Z0NvbWJpbmluZ3wKLSAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpNYXJrX0VuY2xv
c2luZ3wKLSAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpMZXR0ZXJfTW9kaWZpZXJ8
Ci0gICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TnVtYmVyX0RlY2ltYWxEaWdpdCkp
CisgICAgaWYgKGNhdGVnb3J5ICYgKE1hcmtfTm9uU3BhY2luZyB8IE1hcmtfU3BhY2luZ0NvbWJp
bmluZyB8IE1hcmtfRW5jbG9zaW5nIHwgTGV0dGVyX01vZGlmaWVyIHwgTnVtYmVyX0RlY2ltYWxE
aWdpdCkpCiAgICAgICAgIHJldHVybiBOYW1lQ29udDsKICAgICByZXR1cm4gTm90UGFydE9mTmFt
ZTsKIH0K
</data>
<flag name="review"
          id="4613"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12322</attachid>
            <date>2007-01-08 18:12:23 -0800</date>
            <delta_ts>2007-01-09 06:55:03 -0800</delta_ts>
            <desc>complete patch (last version omitted the new source file)</desc>
            <filename>UnicodePatch.txt</filename>
            <type>text/plain</type>
            <size>116624</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjkwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDctMDEtMDggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gbWFrZSBzb21lIHNtYWxsIGltcHJvdmVtZW50cyB0byB0aGUgVW5p
Y29kZSBmdW5jdGlvbnMKKworICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1Lmg6
IENoYW5nZSBwYXJhbWV0ZXIgYW5kIHJldHVybiB0eXBlcworICAgICAgICB0byBVQ2hhcjMyIGFu
ZCBVQ2hhci4gUmVtb3ZlZCB1bm5lZWRlZCB0eXBlIGNhc3RzIGFuZCBhZGRlZCBzb21lCisgICAg
ICAgIGNvbnN0IHRvIGZ1bmN0aW9ucyB0aGF0IGxhY2tlZCBpdC4gUmVtb3ZlZCBXVEY6OlVuaWNv
ZGU6Om1lbWNtcC4KKyAgICAgICAgKFdURjo6VW5pY29kZTo6dW1lbWNhc2VjbXApOiBSZW5hbWVk
IGZyb20gc3RyY2FzZWNtcCBzaW5jZSB0aGlzCisgICAgICAgIGRvZXNuJ3Qgd29yayBvbiAwLXRl
cm1pbmF0ZWQgc3RyaW5ncyBhcyB0aGUgc3RyIGZ1bmN0aW9ucyBkby4KKyAgICAgICAgKiB3dGYv
dW5pY29kZS9xdDQvVW5pY29kZVF0NC5oOiBEaXR0by4KKworICAgICAgICAtIGdvdCByaWQgb2Yg
bmFtZXNwYWNlIHByZWZpeGVzIGZyb20gbW9zdCB1c2VzIG9mIFdURjo6VW5pY29kZQorCisgICAg
ICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6aXNTdHJXaGl0ZVNwYWNlKToK
KyAgICAgICAgKEtKUzo6ZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmcpOgorICAgICAgICAq
IGtqcy9sZXhlci5jcHA6CisgICAgICAgIChLSlM6OkxleGVyOjppc1doaXRlU3BhY2UpOgorICAg
ICAgICAoS0pTOjpMZXhlcjo6aXNJZGVudFN0YXJ0KToKKyAgICAgICAgKEtKUzo6TGV4ZXI6Omlz
SWRlbnRQYXJ0KToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5jcHA6CisgICAgICAgIChL
SlM6OlN0cmluZ1Byb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgorCiAyMDA3LTAxLTA3ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODY4NykKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDkgQEAKIAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAordXNpbmcgbmFtZXNw
YWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCiBuYW1lc3BhY2UgS0pTIHsKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25JbXAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjkwLDcgKzY5Myw3IEBAIHN0YXRpYyBib29sIGlz
U3RyV2hpdGVTcGFjZSh1bnNpZ25lZCBzaG8KICAgICAgICAgY2FzZSAweDIwMjk6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBX
VEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UoYyk7CisgICAgICAgICAgICByZXR1cm4gaXNT
ZXBhcmF0b3JTcGFjZShjKTsKICAgICB9CiB9CiAKQEAgLTk2NSw3ICs5NjgsNyBAQCBVU3RyaW5n
IGVzY2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKGNvCiAgICAgICAgICAgICBlc2NhcGVkU3Ry
aW5nICs9ICJcXFxcIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgaWYgKGMgPCAxMjggJiYgV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIoYykp
CisgICAgICAgICAgICBpZiAoYyA8IDEyOCAmJiBpc1ByaW50YWJsZUNoYXIoYykpCiAgICAgICAg
ICAgICAgICAgZXNjYXBlZFN0cmluZy5hcHBlbmQoYyk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBjaGFyIGhleFZhbHVlWzddOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbGV4ZXIuY3BwCShy
ZXZpc2lvbiAxODY4NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sZXhlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEzICszMSwxMiBAQAogI2luY2x1ZGUgIm5vZGVzLmgiCiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCi1zdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChpbnQp
OwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiAvLyB3
ZSBjYW4ndCBzcGVjaWZ5IHRoZSBuYW1lc3BhY2UgaW4geWFjYydzIEMgb3V0cHV0LCBzbyBkbyBp
dCBoZXJlCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCi1zdGF0aWMgTGV4ZXIgKmN1cnJMZXhlciA9
IDA7Ci0KICNpZm5kZWYgS0RFX1VTRV9GSU5BTAogI2luY2x1ZGUgImdyYW1tYXIuaCIKICNlbmRp
ZgpAQCAtNTMsNiArNTIsMTIgQEAgaW50IGtqc3l5bGV4KCkKICAgcmV0dXJuIExleGVyOjpjdXJy
KCktPmxleCgpOwogfQogCituYW1lc3BhY2UgS0pTIHsKKworc3RhdGljIExleGVyKiBjdXJyTGV4
ZXIgPSAwOworCitzdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChpbnQpOworCiBMZXhlcjo6TGV4
ZXIoKQogICA6IHl5bGluZW5vKDEpLAogICAgIHNpemU4KDEyOCksIHNpemUxNigxMjgpLCByZXN0
cktleXdvcmQoZmFsc2UpLApAQCAtNTY1LDcgKzU3MCw3IEBAIGludCBMZXhlcjo6bGV4KCkKIAog
Ym9vbCBMZXhlcjo6aXNXaGl0ZVNwYWNlKCkgY29uc3QKIHsKLSAgcmV0dXJuIGN1cnJlbnQgPT0g
J1x0JyB8fCBjdXJyZW50ID09IDB4MGIgfHwgY3VycmVudCA9PSAweDBjIHx8IFdURjo6VW5pY29k
ZTo6aXNTZXBhcmF0b3JTcGFjZShjdXJyZW50KTsKKyAgcmV0dXJuIGN1cnJlbnQgPT0gJ1x0JyB8
fCBjdXJyZW50ID09IDB4MGIgfHwgY3VycmVudCA9PSAweDBjIHx8IGlzU2VwYXJhdG9yU3BhY2Uo
Y3VycmVudCk7CiB9CiAKIGJvb2wgTGV4ZXI6OmlzTGluZVRlcm1pbmF0b3IoKQpAQCAtNTgxLDI1
ICs1ODYsMTQgQEAgYm9vbCBMZXhlcjo6aXNMaW5lVGVybWluYXRvcigpCiAKIGJvb2wgTGV4ZXI6
OmlzSWRlbnRTdGFydChpbnQgYykKIHsKLSAgcmV0dXJuIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5
KGMpICYgKFdURjo6VW5pY29kZTo6TGV0dGVyX1VwcGVyY2FzZQotICAgICAgICB8IFdURjo6VW5p
Y29kZTo6TGV0dGVyX0xvd2VyY2FzZQotICAgICAgICB8IFdURjo6VW5pY29kZTo6TGV0dGVyX1Rp
dGxlY2FzZQotICAgICAgICB8IFdURjo6VW5pY29kZTo6TGV0dGVyX01vZGlmaWVyCi0gICAgICAg
IHwgV1RGOjpVbmljb2RlOjpMZXR0ZXJfT3RoZXIpKQorICByZXR1cm4gKGNhdGVnb3J5KGMpICYg
KExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVyX1RpdGxlY2FzZSB8
IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcikpCiAgICAgfHwgYyA9PSAnJCcgfHwgYyA9
PSAnXyc7CiB9CiAKIGJvb2wgTGV4ZXI6OmlzSWRlbnRQYXJ0KGludCBjKQogewotICByZXR1cm4g
KFdURjo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoV1RGOjpVbmljb2RlOjpMZXR0ZXJfVXBwZXJj
YXNlCi0gICAgICAgIHwgV1RGOjpVbmljb2RlOjpMZXR0ZXJfTG93ZXJjYXNlCi0gICAgICAgIHwg
V1RGOjpVbmljb2RlOjpMZXR0ZXJfVGl0bGVjYXNlCi0gICAgICAgIHwgV1RGOjpVbmljb2RlOjpM
ZXR0ZXJfTW9kaWZpZXIKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6OkxldHRlcl9PdGhlcgotICAg
ICAgICB8IFdURjo6VW5pY29kZTo6TWFya19Ob25TcGFjaW5nCi0gICAgICAgIHwgV1RGOjpVbmlj
b2RlOjpNYXJrX1NwYWNpbmdDb21iaW5pbmcKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6Ok51bWJl
cl9EZWNpbWFsRGlnaXQKLSAgICAgICAgfCBXVEY6OlVuaWNvZGU6OlB1bmN0dWF0aW9uX0Nvbm5l
Y3RvcikpCisgIHJldHVybiAoY2F0ZWdvcnkoYykgJiAoTGV0dGVyX1VwcGVyY2FzZSB8IExldHRl
cl9Mb3dlcmNhc2UgfCBMZXR0ZXJfVGl0bGVjYXNlIHwgTGV0dGVyX01vZGlmaWVyIHwgTGV0dGVy
X090aGVyCisgICAgICAgIHwgTWFya19Ob25TcGFjaW5nIHwgTWFya19TcGFjaW5nQ29tYmluaW5n
IHwgTnVtYmVyX0RlY2ltYWxEaWdpdCB8IFB1bmN0dWF0aW9uX0Nvbm5lY3RvcikpCiAgICAgfHwg
YyA9PSAnJCcgfHwgYyA9PSAnXyc7CiB9CiAKQEAgLTkxMSwzICs5MDUsNSBAQCBVU3RyaW5nICpM
ZXhlcjo6bWFrZVVTdHJpbmcoS0pTOjpVQ2hhciosCiAgIHN0cmluZ3NbbnVtU3RyaW5ncysrXSA9
IHN0cmluZzsKICAgcmV0dXJuIHN0cmluZzsKIH0KKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9z
dHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
c3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAKICNpbmNs
dWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBLSlMgewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gU3RyaW5nSW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CkBAIC02ODMsNyArNjg1LDcgQEAgSlNWYWx1ZSAqU3RyaW5nUHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbgogICAgIHVpbnQxNl90KiBkYXRhUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KHUucmVwKCktPmRhdGEoKSk7CiAgICAgdWludDE2X3QqIGRlc3RJZk5lZWRlZDsKIAotICAgIGlu
dCBsZW4gPSBXVEY6OlVuaWNvZGU6OnRvTG93ZXIoZGF0YVB0ciwgdS5zaXplKCksIGRlc3RJZk5l
ZWRlZCk7CisgICAgaW50IGxlbiA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YVB0ciwgdS5zaXplKCks
IGRlc3RJZk5lZWRlZCk7CiAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICByZXN1bHQgPSBqc1N0
cmluZyhVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIgKj4oZGVzdElmTmVlZGVkID8gZGVz
dElmTmVlZGVkIDogZGF0YVB0ciksIGxlbikpOwogICAgIGVsc2UKQEAgLTY5OSw3ICs3MDEsNyBA
QCBKU1ZhbHVlICpTdHJpbmdQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgdWludDE2X3Qq
IGRhdGFQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4odS5yZXAoKS0+ZGF0YSgpKTsK
ICAgICB1aW50MTZfdCogZGVzdElmTmVlZGVkOwogCi0gICAgaW50IGxlbiA9IFdURjo6VW5pY29k
ZTo6dG9VcHBlcihkYXRhUHRyLCB1LnNpemUoKSwgZGVzdElmTmVlZGVkKTsKKyAgICBpbnQgbGVu
ID0gVW5pY29kZTo6dG9VcHBlcihkYXRhUHRyLCB1LnNpemUoKSwgZGVzdElmTmVlZGVkKTsKICAg
ICBpZiAobGVuID49IDApCiAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKFVTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxVQ2hhciAqPihkZXN0SWZOZWVkZWQgPyBkZXN0SWZOZWVkZWQgOiBkYXRhUHRy
KSwgbGVuKSk7CiAgICAgZWxzZQpAQCAtODI1LDMgKzgyNyw1IEBAIEpTVmFsdWUgKlN0cmluZ09i
amVjdEZ1bmNJbXA6OmNhbGxBc0Z1bmMKIAogICByZXR1cm4ganNTdHJpbmcocyk7CiB9CisKK30K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaAkocmV2
aXNpb24gMTg2ODcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3UvVW5pY29kZUlj
dS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNywzNCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUgPSBVX01BU0soVV9GSU5BTF9QVU5DVFVBVElP
TikKICAgICB9OwogCi0gICAgaW5saW5lIHVpbnQzMl90IGZvbGRDYXNlKHVpbnQzMl90IGMpCisg
ICAgaW5saW5lIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVy
biB1X2ZvbGRDYXNlKGMsIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwogICAgIH0KIAotICAgIGlubGlu
ZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgVUNoYXIqIHNy
YywgaW50IHNyY0xlbmd0aCwgIGJvb2wqIGVycm9yKQorICAgIGlubGluZSBpbnQgZm9sZENhc2Uo
VUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNy
Y0xlbmd0aCwgYm9vbCogZXJyb3IpCiAgICAgewogICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0ckZvbGRDYXNlKHJl
c3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCwg
JnN0YXR1cyk7CisgICAgICBpbnQgcmVhbExlbmd0aCA9IHVfc3RyRm9sZENhc2UocmVzdWx0LCBy
ZXN1bHRMZW5ndGgsIHNyYywgc3JjTGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVz
KTsKICAgICAgICplcnJvciA9ICFVX1NVQ0NFU1Moc3RhdHVzKTsKICAgICAgIHJldHVybiByZWFs
TGVuZ3RoOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgdG9Mb3dlcih1aW50MTZfdCogc3RyLCBp
bnQgc3RyTGVuZ3RoLCB1aW50MTZfdComIGRlc3RJZk5lZWRlZCkKKyAgICBpbmxpbmUgaW50IHRv
TG93ZXIoVUNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgVUNoYXIqJiBkZXN0SWZOZWVkZWQpCiAg
ICAgewogICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7CiAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoOwogICAgICAgZGVzdElmTmVlZGVkID0gMDsKIAotICAgICAgcmVzdWx0TGVuZ3Ro
ID0gdV9zdHJUb0xvd2VyKDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBz
dHJMZW5ndGgsICIiLCAmZXJyKTsKKyAgICAgIHJlc3VsdExlbmd0aCA9IHVfc3RyVG9Mb3dlcigw
LCAwLCBzdHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogCiAgICAgICBpZiAocmVzdWx0TGVuZ3Ro
IDw9IHN0ckxlbmd0aCkgewogICAgICAgICBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVf
c3RyVG9Mb3dlcihyZWludGVycHJldF9jYXN0PCA6OlVDaGFyKj4oc3RyKSwgcmVzdWx0TGVuZ3Ro
LCByZWludGVycHJldF9jYXN0PCA6OlVDaGFyKj4oc3RyKSwgc3RyTGVuZ3RoLCAiIiwgJmVycik7
CisgICAgICAgIHVfc3RyVG9Mb3dlcihzdHIsIHJlc3VsdExlbmd0aCwgc3RyLCBzdHJMZW5ndGgs
ICIiLCAmZXJyKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGVyciA9IFVfWkVST19FUlJPUjsK
LSAgICAgICAgZGVzdElmTmVlZGVkID0gKHVpbnQxNl90KiltYWxsb2MocmVzdWx0TGVuZ3RoICog
c2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgICAgIHVfc3RyVG9Mb3dlcihyZWludGVycHJldF9jYXN0
PCA6OlVDaGFyKj4oZGVzdElmTmVlZGVkKSwgcmVzdWx0TGVuZ3RoLCByZWludGVycHJldF9jYXN0
PCA6OlVDaGFyKj4oc3RyKSwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CisgICAgICAgIGRlc3RJZk5l
ZWRlZCA9IHN0YXRpY19jYXN0PFVDaGFyKj4obWFsbG9jKHJlc3VsdExlbmd0aCAqIHNpemVvZihV
Q2hhcikpKTsKKyAgICAgICAgdV9zdHJUb0xvd2VyKGRlc3RJZk5lZWRlZCwgcmVzdWx0TGVuZ3Ro
LCBzdHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogICAgICAgfQogCiAgICAgICByZXR1cm4gVV9G
QUlMVVJFKGVycikgPyAtMSA6IHJlc3VsdExlbmd0aDsKQEAgLTE1MywzNiArMTUzLDM2IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIGlubGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCAgYm9vbCogZXJyb3IpCiAg
ICAgewogICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICBpbnQz
Ml90IHJlYWxMZW5ndGggPSB1X3N0clRvTG93ZXIocmVzdWx0LCByZXN1bHRMZW5ndGgsIHNyYywg
c3JjTGVuZ3RoLCAiIiwgJnN0YXR1cyk7CisgICAgICBpbnQgcmVhbExlbmd0aCA9IHVfc3RyVG9M
b3dlcihyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgsICIiLCAmc3RhdHVzKTsK
ICAgICAgICplcnJvciA9ICEhVV9GQUlMVVJFKHN0YXR1cyk7CiAgICAgICByZXR1cm4gcmVhbExl
bmd0aDsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCB0b0xvd2VyKGludDMyX3QgYykKKyAg
ICBpbmxpbmUgVUNoYXIzMiB0b0xvd2VyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4g
dV90b2xvd2VyKGMpOwogICAgIH0KIAotICAgIGlubGluZSBpbnQzMl90IHRvVXBwZXIoaW50MzJf
dCBjKQorICAgIGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAg
IHJldHVybiB1X3RvdXBwZXIoYyk7CiAgICAgfQogCi0gICAgaW5saW5lIGludCB0b1VwcGVyKHVp
bnQxNl90KiBzdHIsIGludCBzdHJMZW5ndGgsIHVpbnQxNl90KiYgZGVzdElmTmVlZGVkKQorICAg
IGlubGluZSBpbnQgdG9VcHBlcihVQ2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBVQ2hhciomIGRl
c3RJZk5lZWRlZCkKICAgICB7CiAgICAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsK
ICAgICAgIGludCByZXN1bHRMZW5ndGg7CiAgICAgICBkZXN0SWZOZWVkZWQgPSAwOwogCi0gICAg
ICByZXN1bHRMZW5ndGggPSB1X3N0clRvVXBwZXIoMCwgMCwgcmVpbnRlcnByZXRfY2FzdDwgOjpV
Q2hhcio+KHN0ciksIHN0ckxlbmd0aCwgIiIsICZlcnIpOworICAgICAgcmVzdWx0TGVuZ3RoID0g
dV9zdHJUb1VwcGVyKDAsIDAsIHN0ciwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CiAKICAgICAgIGlm
IChyZXN1bHRMZW5ndGggPD0gc3RyTGVuZ3RoKSB7CiAgICAgICAgIGVyciA9IFVfWkVST19FUlJP
UjsKLSAgICAgICAgdV9zdHJUb1VwcGVyKHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIp
LCByZXN1bHRMZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBzdHJMZW5n
dGgsICIiLCAmZXJyKTsKKyAgICAgICAgdV9zdHJUb1VwcGVyKHN0ciwgcmVzdWx0TGVuZ3RoLCBz
dHIsIHN0ckxlbmd0aCwgIiIsICZlcnIpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyID0g
VV9aRVJPX0VSUk9SOwotICAgICAgICBkZXN0SWZOZWVkZWQgPSAodWludDE2X3QqKW1hbGxvYyhy
ZXN1bHRMZW5ndGggKiBzaXplb2YodWludDE2X3QpKTsKLSAgICAgICAgdV9zdHJUb1VwcGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihkZXN0SWZOZWVkZWQpLCByZXN1bHRMZW5ndGgsIHJl
aW50ZXJwcmV0X2Nhc3Q8IDo6VUNoYXIqPihzdHIpLCBzdHJMZW5ndGgsICIiLCAmZXJyKTsKKyAg
ICAgICAgZGVzdElmTmVlZGVkID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihtYWxsb2MocmVzdWx0TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICB1X3N0clRvVXBwZXIoZGVzdElmTmVlZGVk
LCByZXN1bHRMZW5ndGgsIHN0ciwgc3RyTGVuZ3RoLCAiIiwgJmVycik7CiAgICAgICB9CiAKICAg
ICAgIHJldHVybiBVX0ZBSUxVUkUoZXJyKSA/IC0xIDogcmVzdWx0TGVuZ3RoOwpAQCAtMTkxLDY2
ICsxOTEsNjcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFy
KiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsICBi
b29sKiBlcnJvcikKICAgICB7CiAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKLSAgICAgIGludDMyX3QgcmVhbExlbmd0aCA9IHVfc3RyVG9VcHBlcihyZXN1bHQsIHJlc3Vs
dExlbmd0aCwgc3JjLCBzcmNMZW5ndGgsICIiLCAmc3RhdHVzKTsKKyAgICAgIGludCByZWFsTGVu
Z3RoID0gdV9zdHJUb1VwcGVyKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwg
IiIsICZzdGF0dXMpOwogICAgICAgKmVycm9yID0gISFVX0ZBSUxVUkUoc3RhdHVzKTsKICAgICAg
IHJldHVybiByZWFsTGVuZ3RoOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgdG9UaXRsZUNhc2Ug
KHVpbnQzMl90IGMpCisgICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQog
ICAgIHsKICAgICAgIHJldHVybiB1X3RvdGl0bGUoYyk7CiAgICAgfQogCi0gICAgaW5saW5lIGJv
b2wgaXNGb3JtYXRDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIo
VUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiB1X2NoYXJUeXBlKGMpID09IFVfRk9STUFU
X0NIQVI7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCiAgICAgewog
ICAgICAgcmV0dXJuIHVfY2hhclR5cGUoYykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7CiAgICAgfQog
Ci0gICAgaW5saW5lIGJvb2wgaXNQcmludGFibGVDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUg
Ym9vbCBpc1ByaW50YWJsZUNoYXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiAhIXVf
aXNwcmludChjKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIGJvb2wgaXNEaWdpdChpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNEaWdpdChVQ2hhcjMyIGMpCiAgICAgewogICAgICAgcmV0
dXJuICEhdV9pc2RpZ2l0KGMpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzUHVuY3QoaW50
MzJfdCBjKQorICAgIGlubGluZSBib29sIGlzUHVuY3QoVUNoYXIzMiBjKQogICAgIHsKICAgICAg
IHJldHVybiAhIXVfaXNwdW5jdChjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50MzJfdCBtaXJy
b3JlZENoYXIoaW50MzJfdCBjKQorICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hh
cjMyIGMpCiAgICAgewogICAgICAgcmV0dXJuIHVfY2hhck1pcnJvcihjKTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgQ2hhckNhdGVnb3J5IGNhdGVnb3J5KGludDMyX3QgYykKKyAgICBpbmxpbmUgQ2hh
ckNhdGVnb3J5IGNhdGVnb3J5KFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q2hhckNhdGVnb3J5PihVX0dFVF9HQ19NQVNLKGMpKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgRGlyZWN0aW9uIGRpcmVjdGlvbihpbnQgYykgewotICAgICAgcmV0dXJuIChEaXJlY3Rpb24p
dV9jaGFyRGlyZWN0aW9uKGMpOworICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKFVDaGFy
MzIgYykKKyAgICB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGlyZWN0aW9uPih1X2NoYXJE
aXJlY3Rpb24oYykpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzTG93ZXIoaW50MzJfdCBj
KQorICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVy
biAhIXVfaXNsb3dlcihjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBpc1VwcGVyKGludDMy
X3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc1VwcGVyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICBy
ZXR1cm4gISF1X2lzVVVwcGVyY2FzZShjKTsKICAgICAgIH0KIAotICAgIGlubGluZSBpbnQgZGln
aXRWYWx1ZShpbnQzMl90IGMpCisgICAgaW5saW5lIGludCBkaWdpdFZhbHVlKFVDaGFyMzIgYykK
ICAgICB7CiAgICAgICByZXR1cm4gdV9jaGFyRGlnaXRWYWx1ZShjKTsKICAgICB9CkBAIC0yNjUs
MTUgKzI2NiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
ZWNvbXBvc2l0aW9uVHlwZT4odV9nZXRJbnRQcm9wZXJ0eVZhbHVlKGMsIFVDSEFSX0RFQ09NUE9T
SVRJT05fVFlQRSkpOwogICAgIH0KIAotICAgIGlubGluZSBpbnQgc3RyY2FzZWNtcChjb25zdCBV
Q2hhciAqYSwgY29uc3QgVUNoYXIgKmIsIGludCBsZW4pCisgICAgaW5saW5lIGludCB1bWVtY2Fz
ZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW4pCiAgICAgewogICAg
ICAgcmV0dXJuIHVfbWVtY2FzZWNtcChhLCBiLCBsZW4sIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwog
ICAgIH0KIAotICAgIGlubGluZSB2b2lkIG1lbXNldChVQ2hhciogZGVzdCwgVUNoYXIgY2gsIGlu
dDMyX3QgY291bnQpCi0gICAgewotICAgICAgdV9tZW1zZXQoZGVzdCwgY2gsIGNvdW50KTsKLSAg
ICB9CiAgIH0KIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvcXQ0L1VuaWNv
ZGVRdDQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9xdDQvVW5p
Y29kZVF0NC5oCShyZXZpc2lvbiAxODY4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L3F0NC9Vbmljb2RlUXQ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgIFN5bWJvbF9PdGhlciA9IFVfTUFTSyhRQ2hhcjo6U3ltYm9sX090
aGVyKSwKICAgICB9OwogCi0gICAgaW5saW5lIGludCB0b0xvd2VyKHVpbnQxNl90KiBzdHIsIGlu
dCBzdHJMZW5ndGgsIHVpbnQxNl90KiYgZGVzdElmTmVlZGVkKQorICAgIGlubGluZSBpbnQgdG9M
b3dlcihVQ2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBVQ2hhciomIGRlc3RJZk5lZWRlZCkKICAg
ICB7CiAgICAgICBkZXN0SWZOZWVkZWQgPSAwOwogCkBAIC0xNTIsMTIgKzE1MiwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgIHJldHVybiBzdHJMZW5ndGg7CiAgICAgfQogCi0gICAgaW5saW5l
IHVpbnQxNl90IHRvTG93ZXIodWludDE2X3QgY2gpCisgICAgaW5saW5lIFVDaGFyMzIgdG9Mb3dl
cihVQ2hhcjMyIGNoKQogICAgIHsKLSAgICAgIHJldHVybiBRQ2hhcihjaCkudG9Mb3dlcigpLnVu
aWNvZGUoKTsKKyAgICAgIGlmIChjaCA+IDB4ZmZmZikKKyAgICAgICAgcmV0dXJuIGNoOworICAg
ICAgcmV0dXJuIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljaCkudG9Mb3dlcigpLnVuaWNvZGUoKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3Vs
dExlbmd0aCwgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgIGJvb2wqIGVycm9yKQorICAgIGlu
bGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBV
Q2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCAgYm9vbCogZXJyb3IpCiAgICAgewogICAgICAgKmVy
cm9yID0gZmFsc2U7CiAgICAgICBpZiAocmVzdWx0TGVuZ3RoIDwgc3JjTGVuZ3RoKSB7CkBAIC0x
NjgsNyArMTcwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJlc3VsdFtpXSA9IFFDaGFy
KHNyY1tpXSkudG9Mb3dlcigpLnVuaWNvZGUoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgaW50IHRv
VXBwZXIodWludDE2X3QqIHN0ciwgaW50IHN0ckxlbmd0aCwgdWludDE2X3QqJiBkZXN0SWZOZWVk
ZWQpCisgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFyKiBzdHIsIGludCBzdHJMZW5ndGgsIFVD
aGFyKiYgZGVzdElmTmVlZGVkKQogICAgIHsKICAgICAgIGRlc3RJZk5lZWRlZCA9IDA7CiAKQEAg
LTE3OCw5ICsxODAsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICByZXR1cm4gc3RyTGVuZ3Ro
OwogICAgIH0KIAotICAgIGlubGluZSB1aW50MTZfdCB0b1VwcGVyKHVpbnQxNl90IGNoKQorICAg
IGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjaCkKICAgICB7Ci0gICAgICByZXR1cm4g
UUNoYXIoY2gpLnRvVXBwZXIoKS51bmljb2RlKCk7CisgICAgICBpZiAoY2ggPiAweGZmZmYpCisg
ICAgICAgIHJldHVybiBjaDsKKyAgICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpY2gp
LnRvVXBwZXIoKS51bmljb2RlKCk7CiAgICAgfQogCiAgICAgaW5saW5lIGludCB0b1VwcGVyKFVD
aGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgs
ICBib29sKiBlcnJvcikKQEAgLTE5NCwxOCArMTk4LDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICByZXN1bHRbaV0gPSBRQ2hhcihzcmNbaV0pLnRvVXBwZXIoKS51bmljb2RlKCk7CiAgICAg
fQogCi0gICAgaW5saW5lIGludCB0b1RpdGxlQ2FzZSAodWludDMyX3QgYykKKyAgICBpbmxpbmUg
aW50IHRvVGl0bGVDYXNlKFVDaGFyMzIgYykKICAgICB7CiAgICAgICBpZiAoYyA+IDB4ZmZmZikK
ICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICByZXR1cm4gUUNoYXIoYykudG9VcHBlcigpLnVuaWNv
ZGUoKTsKKyAgICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpYykudG9VcHBlcigpLnVu
aWNvZGUoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdWludDMyX3QgZm9sZENhc2UodWludDMyX3Qg
YykKKyAgICBpbmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGMpCiAgICAgewogICAgICAg
aWYgKGMgPiAweGZmZmYpCiAgICAgICAgIHJldHVybiBjOwotICAgICAgcmV0dXJuIFFDaGFyKGMp
LnRvTG93ZXIoKS51bmljb2RlKCk7CisgICAgICByZXR1cm4gUUNoYXIoKHVuc2lnbmVkIHNob3J0
KWMpLnRvTG93ZXIoKS51bmljb2RlKCk7CiAgICAgfQogCiAgICAgaW5saW5lIGludCBmb2xkQ2Fz
ZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBVQ2hhciogc3JjLCBpbnQgc3JjTGVu
Z3RoLCAgYm9vbCogZXJyb3IpCkBAIC0yMTMsNTAgKzIxNyw1MiBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgIHJldHVybiB0b0xvd2VyKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0
aCwgZXJyb3IpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzRm9ybWF0Q2hhcihpbnQzMl90
IGMpCisgICAgaW5saW5lIGJvb2wgaXNGb3JtYXRDaGFyKFVDaGFyMzIgYykKICAgICB7CiAgICAg
ICByZXR1cm4gKGMgJiAweGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydClj
KS5jYXRlZ29yeSgpID09IFFDaGFyOjpPdGhlcl9Gb3JtYXQ7CiAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgaXNQcmludGFibGVDaGFyKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9vbCBpc1ByaW50
YWJsZUNoYXIoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJldHVybiAoYyAmIDB4ZmZmZjAwMDAp
ID09IDAgJiYgUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLmlzUHJpbnQoKTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgYm9vbCBpc1NlcGFyYXRvclNwYWNlKGludDMyX3QgYykKKyAgICBpbmxpbmUgYm9v
bCBpc1NlcGFyYXRvclNwYWNlKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gKGMgJiAw
eGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljKS5jYXRlZ29yeSgpID09
IFFDaGFyOjpTZXBhcmF0b3JfU3BhY2U7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNQdW5j
dChpbnQzMl90IGMpCisgICAgaW5saW5lIGJvb2wgaXNQdW5jdChVQ2hhcjMyIGMpCiAgICAgewog
ICAgICAgcmV0dXJuIChjICYgMHhmZmZmMDAwMCkgPT0gMCAmJiBRQ2hhcigodW5zaWduZWQgc2hv
cnQpYykuaXNQdW5jdCgpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzRGlnaXQoaW50MzJf
dCBjKQorICAgIGlubGluZSBib29sIGlzRGlnaXQoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIHJl
dHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLmlz
RGlnaXQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBpc0xvd2VyKGludDMyX3QgYykKKyAg
ICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKICAgICB7CiAgICAgICByZXR1cm4gKGMg
JiAweGZmZmYwMDAwKSA9PSAwICYmIFFDaGFyKCh1bnNpZ25lZCBzaG9ydCljKS5jYXRlZ29yeSgp
ID09IFFDaGFyOjpMZXR0ZXJfTG93ZXJjYXNlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlz
VXBwZXIoaW50MzJfdCBjKQorICAgIGlubGluZSBib29sIGlzVXBwZXIoVUNoYXIzMiBjKQogICAg
IHsKICAgICAgIHJldHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIoKHVuc2lnbmVk
IHNob3J0KWMpLmNhdGVnb3J5KCkgPT0gUUNoYXI6OkxldHRlcl9VcHBlcmNhc2U7CiAgICAgfQog
Ci0gICAgaW5saW5lIGludCBkaWdpdFZhbHVlKGludDMyX3QgYykKKyAgICBpbmxpbmUgaW50IGRp
Z2l0VmFsdWUoVUNoYXIzMiBjKQogICAgIHsKICAgICAgIGlmIChjID4gMHhmZmZmKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAgIHJldHVybiBRQ2hhcihjKS5kaWdpdFZhbHVlKCk7CiAgICAgfQog
Ci0gICAgaW5saW5lIHVpbnQxNl90IG1pcnJvcmVkQ2hhcih1aW50MTZfdCBjKQorICAgIGlubGlu
ZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyIGMpCiAgICAgeworICAgICAgaWYgKGMgPiAw
eGZmZmYpCisgICAgICAgIHJldHVybiBjOwogICAgICAgcmV0dXJuIFFDaGFyKGMpLm1pcnJvcmVk
Q2hhcigpLnVuaWNvZGUoKTsKICAgICB9CiAKQEAgLTI3NCw4ICsyODAsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgIHJldHVybiAoRGVjb21wb3NpdGlvblR5cGUpUUNoYXIoYykuZGVjb21wb3Np
dGlvblRhZygpOwogICAgIH0KIAotCi0gICAgaW5saW5lIGludCBzdHJjYXNlY21wKGNvbnN0IFVD
aGFyICphLCBjb25zdCBVQ2hhciAqYiwgaW50IGxlbikKKyAgICBpbmxpbmUgaW50IHVtZW1jYXNl
Y21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKICAgICB7CiAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIFFDaGFyIGMxID0gUUNo
YXIoYVtpXSkudG9Mb3dlcigpOwpAQCAtMjg2LDI0ICsyOTEsMTggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBtZW1zZXQoVUNoYXIq
IGRlc3QsIFVDaGFyIGNoLCBpbnQzMl90IGNvdW50KQotICAgIHsKLSAgICAgIFVDaGFyICplbmQg
PSBkZXN0ICsgY291bnQ7Ci0gICAgICB3aGlsZSAoZGVzdCA8IGVuZCkKLSAgICAgICAgKmRlc3Qr
KyA9IGNoOwotICAgIH0KLQotICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKGludCBjKSB7
CisgICAgaW5saW5lIERpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKSB7CiAgICAgICBpZiAo
YyA+IDB4ZmZmZikKICAgICAgICAgcmV0dXJuIExlZnRUb1JpZ2h0OwogICAgICAgcmV0dXJuIChE
aXJlY3Rpb24pUUNoYXIoYykuZGlyZWN0aW9uKCk7CiAgICAgfQogCi0gICAgaW5saW5lIENoYXJD
YXRlZ29yeSBjYXRlZ29yeShpbnQgYykgeworICAgIGlubGluZSBDaGFyQ2F0ZWdvcnkgY2F0ZWdv
cnkoVUNoYXIzMiBjKSB7CiAgICAgICBpZiAoYyA+IDB4ZmZmZikKICAgICAgICAgcmV0dXJuIChD
aGFyQ2F0ZWdvcnkpIFVfTUFTSyhRQ2hhcjo6TGV0dGVyX090aGVyKTsKICAgICAgIHJldHVybiAo
Q2hhckNhdGVnb3J5KSBVX01BU0soUUNoYXIoYykuY2F0ZWdvcnkoKSk7CiAgICAgfQorCiAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE4NjkwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMDMgQEAKKzIwMDctMDEtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0gZ290IHJpZCBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgZnJvbSBtb3N0IHVzZXMgb2YgV1RGOjpV
bmljb2RlCisKKyAgICAgICAgLSB1cGRhdGVkIGZvciByZW1vdmFsIG9mIFdURjo6VW5pY29kZTo6
bWVtY21wCisgICAgICAgIC0gdXBkYXRlZCBmb3IgcmVuYW1pbmcgb2YgV1RGOjpVbmljb2RlOjpz
dHJjYXNlY21wIHRvIHVtZW1jYXNlY21wLgorCisgICAgICAgIC0gdW5pZmllZCBjb25zdGFudHMg
Zm9yIHNwZWNpYWwgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGEgbmV3CisgICAgICAgICAgQ2hhcmFj
dGVyTmFtZXMuaCBoZWFkZXIKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhcnNlU3RyaW5nOjpsb3dlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzVmFsaWROYW1lU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZE5hbWVQYXJ0KToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzV2hpdGVz
cGFjZSk6CisgICAgICAgICogZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwOgorICAgICAgICAq
IGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNpcmN1bGFyU2Vh
cmNoQnVmZmVyOjpDaXJjdWxhclNlYXJjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDaXJj
dWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ1dpdGhSZWJhbGFuY2VkV2hpdGVzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpub25CcmVha2luZ1NwYWNlU3RyaW5nKToKKyAgICAgICAgKiBl
ZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9udEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VGb250U2l6ZU51bWJlcik6CisgICAgICAgICogaHRt
bC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhhbmRsZUVy
cm9yKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0cmlwTGVhZGluZ1doaXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpub3JtYWxpemVWb2ljaW5nTWFya3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL0dseXBoTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoTWFwOjps
b2NhdGVQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NaW1lVHlwZVJlZ2lzdHJ5Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU3RyaW5nSGFzaC5oOgorICAgICAgICAqIHBsYXRmb3JtL1N0cmluZ0lt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdJbXBsOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5zZXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRydW5jYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZ0ltcGw6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppc0xvd2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZ0ltcGw6Omxvd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6
OnVwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNlY3VyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmb2xkQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpjYXBpdGFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvSW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAgICAqIHBsYXRmb3JtL1RleHRCb3VuZGFyaWVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vVGV4dEJyZWFrSXRlcmF0b3IuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9UZXh0Q29kZWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0Q29kZWNMYXRpbjEu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL1RleHRFbmNvZGluZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL1RleHRFbmNvZGluZ1JlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RleHRDb2RlY01hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNNYWM6OmRlY29kZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bGlzdE1hcmtlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnNldEludGVybmFsU3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpxdW90ZUFuZEVzY2FwZU5vblByaW50YWJs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcmVuZGVyaW5n
L2JpZGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVN0YXRlOjpCaWRpU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlkaUNvbnRleHQ6OkJpZGlDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJpZGlOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmJpZGlGaXJzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaWRpSXRlcmF0b3I6OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6c2tpcE5vbkJyZWFr
aW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
ZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtf
bGluZXMuaDoKKyAgICAgICAgKiB4bWwvWFBhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OmNoYXJDYXQpOgorCiAyMDA3LTAxLTA4ICBCZXRoIERha2luICA8YmRha2luQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI1LDYgKzE1MjUsNyBAQAogCQk5M0MwOUE3RjBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5k
bGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNDMDlBN0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSAqLzsgfTsKIAkJ
OTNDMDlBODEwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MwOUE4MDBCMDY0RjAwMDA1QUJE
NEQgLyogRXZlbnRIYW5kbGVyLmNwcCAqLzsgfTsKIAkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDRE
IC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0MwOUM4NTBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5M0M3QjVGNDBCNTJE
ODkxMDBCNTQ3N0UgLyogQ2hhcmFjdGVyTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzdCNUYzMEI1MkQ4OTEwMEI1NDc3RSAvKiBDaGFyYWN0
ZXJOYW1lcy5oICovOyB9OwogCQk5M0M4NDFGODA5Q0U4NTVDMDBERkY1RTUgLyogRE9NSW1wbGVt
ZW50YXRpb25Gcm9udC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNDODQxRjcwOUNFODU1QzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9uRnJvbnQu
aCAqLzsgfTsKIAkJOTNDODQxRkYwOUNFODU4MzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9u
RnJvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNDODQxRkUwOUNFODU4MzAwREZGNUU1IC8qIERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwICov
OyB9OwogCQk5M0NDRjAyNzBBRjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDQ0YwMjYwQUY2
QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25BY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDU0MSw2ICs0NTQyLDcgQEAKIAkJOTNDMDlB
N0UwQjA2NEVFRjAwNUFCRDREIC8qIEV2ZW50SGFuZGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50SGFuZGxlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNDMDlBODAwQjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudEhhbmRsZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUM4NTBCMDY1N0FBMDA1QUJE
NEQgLyogU2Nyb2xsVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNDN0I1RjMwQjUyRDg5
MTAwQjU0NzdFIC8qIENoYXJhY3Rlck5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoYXJhY3Rlck5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
Qzg0MUY3MDlDRTg1NUMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uRnJvbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDODQxRkUwOUNFODU4MzAwREZGNUU1IC8qIERP
TUltcGxlbWVudGF0aW9uRnJvbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRE9NSW1wbGVtZW50YXRpb25Gcm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQ0E0Qzk5MDlERjkzRkEwMERGODY3NyAvKiBodG1sNC5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gaHRtbDQuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODkx
MCw2ICs4OTEyLDcgQEAKIAkJCQlFMTFENTE5MTBCMkU3QTVGMDA1NkMxODggLyogQmFzZTY0Lmgg
Ki8sCiAJCQkJRTExRDUxOTIwQjJFN0E1RjAwNTZDMTg4IC8qIEJhc2U2NC5jcHAgKi8sCiAJCQkJ
NjVGNTM4MjAwOUIyQjU1NzAwRjNEQzRBIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLywKKwkJCQk5
M0M3QjVGMzBCNTJEODkxMDBCNTQ3N0UgLyogQ2hhcmFjdGVyTmFtZXMuaCAqLywKIAkJCQk5MzI2
REMwQTA5REFENUJFMDBBRkM4NDcgLyogQ2hhcnNldERhdGEuaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTkzQjZBMEU3MEIwQkNB
NjcwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8sCkBAIC0xMDk2MCw2ICsxMDk2Myw3IEBA
CiAJCQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3IC8qIFRva2VuaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUE4ODJCMzAwQjRFRjVFQjAwNkQyNkQxIC8qIFBvaW50ZXJFdmVudHNI
aXRSdWxlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNDN0I1RjQwQjUyRDg5MTAwQjU0NzdFIC8q
IENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvY3NzL2Nzc3Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvY3NzcGFyc2VyLmNwcAkocmV2aXNp
b24gMTg2ODcpCisrKyBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCw3IEBAIGV4dGVybiBpbnQgY3NzeXlkZWJ1ZzsKIGV4dGVybiBpbnQgY3NzeXlw
YXJzZSh2b2lkKiBwYXJzZXIpOwogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTUsNyArMTU2LDcgQEAgdm9p
ZCBQYXJzZVN0cmluZzo6bG93ZXIoKQogICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcnNbaV07CiAg
ICAgaWYgKG9yZWQgJiB+MHg3RikKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykKLSAgICAgICAgICAgIGNoYXJhY3RlcnNbaV0gPSBXVEY6OlVuaWNvZGU6OnRvTG93ZXIo
Y2hhcmFjdGVyc1tpXSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gVW5pY29kZTo6dG9M
b3dlcihjaGFyYWN0ZXJzW2ldKTsKICAgICBlbHNlCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdG9sb3dlcihjaGFy
YWN0ZXJzW2ldKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAKICNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5h
bWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMSwxMCArMTMz
LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAvLyBUaGlzIGFtb3VudCBvZiB0aW1l
IG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3aWxsIGV2ZW4gY29uc2lkZXIgc2NoZWR1bGlu
ZyBhIGxheW91dCB3aXRob3V0IGEgZGVsYXkuCiAvLyBGSVhNRTogRm9yIGZhc3RlciBtYWNoaW5l
cyB0aGlzIHZhbHVlIGNhbiByZWFsbHkgYmUgbG93ZXJlZCB0byAyMDAuICAyNTAgaXMgYWRlcXVh
dGUsIGJ1dCBhIGxpdHRsZSBoaWdoCiAvLyBmb3IgZHVhbCBHNXMuIDopCi1jb25zdCBpbnQgY0xh
eW91dFNjaGVkdWxlVGhyZXNob2xkID0gMjUwOworc3RhdGljIGNvbnN0IGludCBjTGF5b3V0U2No
ZWR1bGVUaHJlc2hvbGQgPSAyNTA7CiAKIC8vIFVzZSAxIHRvIHJlcHJlc2VudCB0aGUgZG9jdW1l
bnQncyBkZWZhdWx0IGZvcm0uCi1IVE1MRm9ybUVsZW1lbnQqIGNvbnN0IGRlZmF1bHRGb3JtID0g
KEhUTUxGb3JtRWxlbWVudCopIDE7CitzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBjb25zdCBkZWZh
dWx0Rm9ybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oMSk7CiAKIC8vIEdv
bGRlbiByYXRpbyAtIGFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAw
J3MgdG8gYWxsIDAncwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOwpA
QCAtMTY1LDEyICsxNjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVTdGFydChV
Q2hhCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gcnVsZXMgKGEpIGFuZCAoZikgYWJv
dmUKLSAgICBjb25zdCB1aW50MzJfdCBuYW1lU3RhcnRNYXNrID0gV1RGOjpVbmljb2RlOjpMZXR0
ZXJfTG93ZXJjYXNlIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpV
bmljb2RlOjpMZXR0ZXJfVXBwZXJjYXNlIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV1RGOjpVbmljb2RlOjpMZXR0ZXJfT3RoZXIgfAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9UaXRsZWNhc2UgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok51bWJlcl9MZXR0ZXI7Ci0g
ICAgaWYgKCEoV1RGOjpVbmljb2RlOjpjYXRlZ29yeShjKSAmIG5hbWVTdGFydE1hc2spKQorICAg
IGNvbnN0IHVpbnQzMl90IG5hbWVTdGFydE1hc2sgPSBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVy
X1VwcGVyY2FzZSB8IExldHRlcl9PdGhlciB8IExldHRlcl9UaXRsZWNhc2UgfCBOdW1iZXJfTGV0
dGVyOworICAgIGlmICghKFVuaWNvZGU6OmNhdGVnb3J5KGMpICYgbmFtZVN0YXJ0TWFzaykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIHJ1bGUgKGMpIGFib3ZlCkBAIC0xNzgsOCAr
MTc2LDggQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWROYW1lU3RhcnQoVUNoYQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBydWxlIChkKSBhYm92ZQotICAgIFdURjo6VW5pY29k
ZTo6RGVjb21wb3NpdGlvblR5cGUgZGVjb21wVHlwZSA9IFdURjo6VW5pY29kZTo6ZGVjb21wb3Np
dGlvblR5cGUoYyk7Ci0gICAgaWYgKGRlY29tcFR5cGUgPT0gV1RGOjpVbmljb2RlOjpEZWNvbXBv
c2l0aW9uRm9udCB8fCBkZWNvbXBUeXBlID09IFdURjo6VW5pY29kZTo6RGVjb21wb3NpdGlvbkNv
bXBhdCkKKyAgICBEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBUeXBlID0gZGVjb21wb3NpdGlvblR5
cGUoYyk7CisgICAgaWYgKGRlY29tcFR5cGUgPT0gRGVjb21wb3NpdGlvbkZvbnQgfHwgZGVjb21w
VHlwZSA9PSBEZWNvbXBvc2l0aW9uQ29tcGF0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTIwMCwxMiArMTk4LDggQEAgc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWROYW1lUGFydChVQ2hhcgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIHJ1bGVz
IChiKSBhbmQgKGYpIGFib3ZlCi0gICAgY29uc3QgdWludDMyX3Qgb3RoZXJOYW1lUGFydE1hc2sg
PSBXVEY6OlVuaWNvZGU6Ok1hcmtfTm9uU3BhY2luZyB8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok1hcmtfRW5jbG9zaW5nIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TWFya19TcGFjaW5n
Q29tYmluaW5nIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdURjo6
VW5pY29kZTo6TGV0dGVyX01vZGlmaWVyIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdURjo6VW5pY29kZTo6TnVtYmVyX0RlY2ltYWxEaWdpdDsKLSAgICBpZiAoIShX
VEY6OlVuaWNvZGU6OmNhdGVnb3J5KGMpICYgb3RoZXJOYW1lUGFydE1hc2spKQorICAgIGNvbnN0
IHVpbnQzMl90IG90aGVyTmFtZVBhcnRNYXNrID0gTWFya19Ob25TcGFjaW5nIHwgTWFya19FbmNs
b3NpbmcgfCBNYXJrX1NwYWNpbmdDb21iaW5pbmcgfCBMZXR0ZXJfTW9kaWZpZXIgfCBOdW1iZXJf
RGVjaW1hbERpZ2l0OworICAgIGlmICghKFVuaWNvZGU6OmNhdGVnb3J5KGMpICYgb3RoZXJOYW1l
UGFydE1hc2spKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBydWxlIChjKSBhYm92
ZQpAQCAtMjEzLDggKzIwNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkTmFtZVBhcnQo
VUNoYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcnVsZSAoZCkgYWJvdmUKLSAg
ICBXVEY6OlVuaWNvZGU6OkRlY29tcG9zaXRpb25UeXBlIGRlY29tcFR5cGUgPSBXVEY6OlVuaWNv
ZGU6OmRlY29tcG9zaXRpb25UeXBlKGMpOwotICAgIGlmIChkZWNvbXBUeXBlID09IFdURjo6VW5p
Y29kZTo6RGVjb21wb3NpdGlvbkZvbnQgfHwgZGVjb21wVHlwZSA9PSBXVEY6OlVuaWNvZGU6OkRl
Y29tcG9zaXRpb25Db21wYXQpCisgICAgRGVjb21wb3NpdGlvblR5cGUgZGVjb21wVHlwZSA9IGRl
Y29tcG9zaXRpb25UeXBlKGMpOworICAgIGlmIChkZWNvbXBUeXBlID09IERlY29tcG9zaXRpb25G
b250IHx8IGRlY29tcFR5cGUgPT0gRGVjb21wb3NpdGlvbkNvbXBhdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiAxODY4
NykKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAKKyNp
bmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQwLDggKzQxLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1jb25zdCBV
Q2hhciBub25CcmVha2luZ1NwYWNlID0gMHhhMDsKLQogc3RhdGljIE5vZGUgKm5leHRSZW5kZXJl
ZEVkaXRhYmxlKE5vZGUgKm5vZGUpCiB7CiAgICAgd2hpbGUgKDEpIHsKQEAgLTYxNiw3ICs2MTUs
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpCiAgICAgaWYgKHBy
ZXYgIT0gKnRoaXMgJiYgcHJldi5ub2RlKCktPmluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3dFbGVt
ZW50KG5vZGUoKSkgJiYgcHJldi5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBTdHJp
bmcgc3RyaW5nID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihwcmV2Lm5vZGUoKSktPmRhdGEoKTsKICAg
ICAgICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2Lm9mZnNldCgpXTsKLSAgICAgICAgaWYgKGNvbnNp
ZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8gKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2Uo
KSB8fCBjID09IG5vbkJyZWFraW5nU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykp
CisgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChEZXByZWNh
dGVkQ2hhcihjKS5pc1NwYWNlKCkgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICB9CiAKQEAgLTYz
Myw3ICs2MzIsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zCiAg
ICAgICAgIGlmIChvZmZzZXQoKSA8IChpbnQpdGV4dE5vZGUtPmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgc3RyaW5nID0gdGV4dE5vZGUtPmRhdGEoKTsKICAgICAgICAgICAgIFVDaGFy
IGMgPSBzdHJpbmdbb2Zmc2V0KCldOwotICAgICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFw
c2libGVXaGl0ZXNwYWNlID8gKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSB8fCBjID09IG5v
bkJyZWFraW5nU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCisgICAgICAgICAg
ICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAoRGVwcmVjYXRlZENoYXIo
YykuaXNTcGFjZSgpIHx8IGMgPT0gbm9CcmVha1NwYWNlKSA6IGlzQ29sbGFwc2libGVXaGl0ZXNw
YWNlKGMpKQogICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbigpOwogICAgICAgICB9CkBAIC02NDYsNyArNjQ1LDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvcwogICAgIGlmIChuZXh0ICE9ICp0aGlzICYmIG5l
eHQubm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkpICYmIG5l
eHQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRp
Y19jYXN0PFRleHQqPihuZXh0Lm5vZGUoKSktPmRhdGEoKTsKICAgICAgICAgVUNoYXIgYyA9IHN0
cmluZ1swXTsKLSAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8g
KERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSB8fCBjID09IG5vbkJyZWFraW5nU3BhY2UpIDog
aXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCisgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxh
cHNpYmxlV2hpdGVzcGFjZSA/IChEZXByZWNhdGVkQ2hhcihjKS5pc1NwYWNlKCkgfHwgYyA9PSBu
b0JyZWFrU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICBy
ZXR1cm4gbmV4dDsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIkluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogI2luY2x1ZGUg
IkpvaW5UZXh0Tm9kZXNDb21tYW5kLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAi
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oIgpAQCAtNTcsNiArNTcsNyBAQAogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldyYXBDb250ZW50c0luRHVtbXlTcGFu
Q29tbWFuZC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgi
CiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAt
MzI4LDcgKzMyOSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWIK
IAogc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQogewotICAgIHJldHVy
biBjID09IE5PTl9CUkVBS0lOR19TUEFDRSB8fCBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9
PSAnXHQnOworICAgIHJldHVybiBjID09IG5vQnJlYWtTcGFjZSB8fCBjID09ICcgJyB8fCBjID09
ICdcbicgfHwgYyA9PSAnXHQnOwogfQogCiAvLyBGSVhNRTogRG9lc24ndCBnbyBpbnRvIHRleHQg
bm9kZXMgdGhhdCBjb250cmlidXRlIGFkamFjZW50IHRleHQgKHNpYmxpbmdzLCBjb3VzaW5zLCBl
dGMpLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAJKHJldmlzaW9uIDE4Njg3
KQorKysgV2ViQ29yZS9lZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MSW50
ZXJjaGFuZ2UuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKIApAQCAtNDAsNyArNDEsNyBAQCBE
ZXByZWNhdGVkU3RyaW5nIGNvbnZlcnRlZFNwYWNlU3RyaW5nKCkgCiAgICAgICAgIGNvbnZlcnRl
ZFNwYWNlU3RyaW5nID0gIjxzcGFuIGNsYXNzPVwiIjsKICAgICAgICAgY29udmVydGVkU3BhY2VT
dHJpbmcgKz0gQXBwbGVDb252ZXJ0ZWRTcGFjZTsKICAgICAgICAgY29udmVydGVkU3BhY2VTdHJp
bmcgKz0gIlwiPiI7Ci0gICAgICAgIGNvbnZlcnRlZFNwYWNlU3RyaW5nICs9IERlcHJlY2F0ZWRD
aGFyKDB4YTApOworICAgICAgICBjb252ZXJ0ZWRTcGFjZVN0cmluZyArPSBEZXByZWNhdGVkQ2hh
cihub0JyZWFrU3BhY2UpOwogICAgICAgICBjb252ZXJ0ZWRTcGFjZVN0cmluZyArPSAiPC9zcGFu
PiI7CiAgICAgfQogICAgIHJldHVybiBjb252ZXJ0ZWRTcGFjZVN0cmluZzsKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJDaGFy
YWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMzgsMTMgKzM5LDEyIEBACiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY6OlVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotY29uc3QgVUNoYXIgbm9uQnJlYWtpbmdTcGFjZSA9IDB4QTA7Ci0KIC8v
IEJ1ZmZlciB0aGF0IGtub3dzIGhvdyB0byBjb21wYXJlIHdpdGggYSBzZWFyY2ggdGFyZ2V0Lgog
Ly8gS2VlcHMgZW5vdWdoIG9mIHRoZSBwcmV2aW91cyB0ZXh0IHRvIGJlIGFibGUgdG8gc2VhcmNo
IGluIHRoZSBmdXR1cmUsCiAvLyBidXQgbm8gbW9yZS4KQEAgLTk1NSw3ICs5NTUsNyBAQCBDaXJj
dWxhclNlYXJjaEJ1ZmZlcjo6Q2lyY3VsYXJTZWFyY2hCdWZmCiAKICAgICBpZiAoIWlzQ2FzZVNl
bnNpdGl2ZSkKICAgICAgICAgbV90YXJnZXQgPSBzLmZvbGRDYXNlKCk7Ci0gICAgbV90YXJnZXQu
cmVwbGFjZShub25CcmVha2luZ1NwYWNlLCAnICcpOworICAgIG1fdGFyZ2V0LnJlcGxhY2Uobm9C
cmVha1NwYWNlLCAnICcpOwogICAgIG1faXNDYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZl
OwogCiAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Mocy5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcikpKTsKQEAgLTk2Niw5ICs5NjYsOSBAQCBDaXJjdWxhclNlYXJj
aEJ1ZmZlcjo6Q2lyY3VsYXJTZWFyY2hCdWZmCiB2b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjph
cHBlbmQoVUNoYXIgYykKIHsKICAgICBpZiAobV9pc0Nhc2VTZW5zaXRpdmUpCi0gICAgICAgICpt
X2N1cnNvcisrID0gYyA9PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogYzsKKyAgICAgICAgKm1f
Y3Vyc29yKysgPSBjID09IG5vQnJlYWtTcGFjZSA/ICcgJyA6IGM7CiAgICAgZWxzZQotICAgICAg
ICAqbV9jdXJzb3IrKyA9IGMgPT0gbm9uQnJlYWtpbmdTcGFjZSA/ICcgJyA6IFdURjo6VW5pY29k
ZTo6Zm9sZENhc2UoYyk7CisgICAgICAgICptX2N1cnNvcisrID0gYyA9PSBub0JyZWFrU3BhY2Ug
PyAnICcgOiBmb2xkQ2FzZShjKTsKICAgICBpZiAobV9jdXJzb3IgPT0gbV9idWZmZXIgKyBsZW5n
dGgoKSkgewogICAgICAgICBtX2N1cnNvciA9IG1fYnVmZmVyOwogICAgICAgICBtX2J1ZmZlckZ1
bGwgPSB0cnVlOwpAQCAtOTg4LDEyICs5ODgsMTIgQEAgdm9pZCBDaXJjdWxhclNlYXJjaEJ1ZmZl
cjo6YXBwZW5kKGludCBjbwogICAgIGlmIChtX2lzQ2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBVQ2hhciBjID0g
Y2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYyA9PSBub25CcmVha2lu
Z1NwYWNlID8gJyAnIDogYzsKKyAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYyA9PSBub0JyZWFr
U3BhY2UgPyAnICcgOiBjOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewogICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJh
Y3RlcnNbaV07Ci0gICAgICAgICAgICBtX2N1cnNvcltpXSA9IGMgPT0gbm9uQnJlYWtpbmdTcGFj
ZSA/ICcgJyA6IFdURjo6VW5pY29kZTo6Zm9sZENhc2UoYyk7CisgICAgICAgICAgICBtX2N1cnNv
cltpXSA9IGMgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogZm9sZENhc2UoYyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKGNvdW50IDwgdGFpbFNwYWNlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTM2Miw3ICszNjMsNyBAQCBTdHJpbmcgc3RyaW5nV2l0aFJl
YmFsYW5jZWRXaGl0ZXNwYWNlKGNvCiAKICAgICBEZXByZWNhdGVkU3RyaW5nIHJlYmFsYW5jZWRT
dHJpbmcgPSBzdHJpbmcuY29weSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAotICAgIHJlYmFsYW5j
ZWRTdHJpbmcucmVwbGFjZShOT05fQlJFQUtJTkdfU1BBQ0UsICcgJyk7CisgICAgcmViYWxhbmNl
ZFN0cmluZy5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5n
LnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5nLnJlcGxhY2UoJ1x0Jywg
JyAnKTsKICAgICAKQEAgLTM4NSw3ICszODYsNyBAQCBib29sIGlzVGFibGVTdHJ1Y3R1cmVOb2Rl
KGNvbnN0IE5vZGUgKm5vCiAKIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
CiB7Ci0gICAgc3RhdGljIFN0cmluZyBub25CcmVha2luZ1NwYWNlU3RyaW5nID0gRGVwcmVjYXRl
ZFN0cmluZyhEZXByZWNhdGVkQ2hhcihOT05fQlJFQUtJTkdfU1BBQ0UpKTsKKyAgICBzdGF0aWMg
U3RyaW5nIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBTdHJpbmcoJm5vQnJlYWtTcGFjZSwgMSk7
CiAgICAgcmV0dXJuIG5vbkJyZWFraW5nU3BhY2VTdHJpbmc7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw2IEBAIGNsYXNzIFBvc2l0aW9uOwogY2xh
c3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCi1jb25zdCBVQ2hhciBOT05fQlJF
QUtJTkdfU1BBQ0UgPSAweGEwOwotCiBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
Y29uc3QgUG9zaXRpb24mKTsKIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKIGludCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLworCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAKQEAgLTI4LDYg
KzI5LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTY0LDEyICs2NywxMiBAQCBzdGF0aWMgYm9v
bCBwYXJzZUZvbnRTaXplTnVtYmVyKGNvbnN0IFN0CiAgICAgfQogICAgIAogICAgIC8vIFBhcnNl
IGEgc2luZ2xlIGRpZ2l0LgotICAgIGlmICghV1RGOjpVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkp
CisgICAgaWYgKCFVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbnQgbnVtID0gV1RGOjpVbmljb2RlOjpkaWdpdFZhbHVlKHNbcG9zKytdKTsKKyAg
ICBpbnQgbnVtID0gVW5pY29kZTo6ZGlnaXRWYWx1ZShzW3BvcysrXSk7CiAgICAgCiAgICAgLy8g
Q2hlY2sgZm9yIGFuIGFkZGl0aW9uYWwgZGlnaXQuCi0gICAgaWYgKFdURjo6VW5pY29kZTo6aXNE
aWdpdChzW3Bvc10pKQorICAgIGlmIChVbmljb2RlOjppc0RpZ2l0KHNbcG9zXSkpCiAgICAgICAg
IG51bSA9IDEwOwogICAgIAogICAgIGlmIChzYXdQbHVzKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkhUTUxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJDb21tZW50LmgiCkBAIC01NSw4ICs1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotY29uc3QgVUNoYXIgbm9uQnJlYWtpbmdTcGFj
ZSA9IDB4YTA7Ci0KIC8qKgogICogQGludGVybmFsCiAgKi8KQEAgLTUwNCw3ICs1MDMsNyBAQCBi
b29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwgKmkg
PSB0LT5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBpLT5sZW5ndGgoKSAmJiAoKCppKVtw
b3NdID09ICcgJyB8fCAoKmkpW3Bvc10gPT0gbm9uQnJlYWtpbmdTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChwb3MgPCBpLT5sZW5ndGgoKSAmJiAoKCppKVtwb3NdID09ICcgJyB8
fCAoKmkpW3Bvc10gPT0gbm9CcmVha1NwYWNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cysrOwogICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09IGktPmxlbmd0aCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zc2libHlNb3ZlU3RyYXlDb250ZW50ID0gZmFsc2U7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50Lmgi
CiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC01Mywx
MiArNTQsMTYgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAorY29uc3QgRE9NVGltZVN0YW1wIHR5cGVBaGVhZFRpbWVvdXQgPSAxMDAwOworCiBIVE1M
U2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiBmKQogICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudChzZWxlY3RUYWcsIGRvYywg
ZikKICAgICAsIG1fbWlud2lkdGgoMCkKQEAgLTgxOSwxOSArODI0LDE2IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgKIAogc3RhdGljIFN0cmluZyBzdHJpcExlYWRp
bmdXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyIG5v
bkJyZWFraW5nU3BhY2UgPSAweEEwOwotCiAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgo
KTsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
IGlmIChzdHJpbmdbaV0gIT0gbm9uQnJlYWtpbmdTcGFjZSAmJgotICAgICAgICAgICAgKHN0cmlu
Z1tpXSA8PSAweDdGID8gIWlzc3BhY2Uoc3RyaW5nW2ldKSA6IChXVEY6OlVuaWNvZGU6OmRpcmVj
dGlvbihzdHJpbmdbaV0pICE9IFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWwpKSkKKyAg
ICAgICAgaWYgKHN0cmluZ1tpXSAhPSBub0JyZWFrU3BhY2UgJiYKKyAgICAgICAgICAgIChzdHJp
bmdbaV0gPD0gMHg3RiA/ICFpc3NwYWNlKHN0cmluZ1tpXSkgOiAoZGlyZWN0aW9uKHN0cmluZ1tp
XSkgIT0gV2hpdGVTcGFjZU5ldXRyYWwpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgcmV0
dXJuIHN0cmluZy5zdWJzdHJpbmcoaSwgbGVuZ3RoIC0gaSk7CiB9CiAKLWNvbnN0IERPTVRpbWVT
dGFtcCB0eXBlQWhlYWRUaW1lb3V0ID0gMTAwMDsKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5
cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50aW1l
U3RhbXAoKSA8IG1fbGFzdENoYXJUaW1lKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9DaGFyYWN0
ZXJOYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ2hhcmFjdGVyTmFtZXMu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ2hhcmFjdGVyTmFtZXMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENo
YXJhY3Rlck5hbWVzX2gKKyNkZWZpbmUgQ2hhcmFjdGVyTmFtZXNfaAorCisjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBOYW1l
cyBoZXJlIGFyZSB0YWtlbiBmcm9tIHRoZSBVbmljb2RlIHN0YW5kYXJkLgorCisgICAgLy8gTm90
ZSwgdGhlc2UgYXJlIFVDaGFyIGNvbnN0YW50cywgbm90IFVDaGFyMzIsIHdoaWNoIG1ha2VzIHRo
ZW0KKyAgICAvLyBtb3JlIGNvbnZlbmllbnQgZm9yIG91ciBjb2RlIHRoYXQgbW9zdGx5IHVzZXMg
VVRGLTE2LgorCisgICAgY29uc3QgVUNoYXIgaWRlb2dyYXBoaWNTcGFjZSA9IDB4MzAwMDsKKyAg
ICBjb25zdCBVQ2hhciBub0JyZWFrU3BhY2UgPSAweDAwQTA7CisgICAgY29uc3QgVUNoYXIgYnVs
bGV0ID0gMHgyMDIyOworICAgIGNvbnN0IFVDaGFyIGJsYWNrU3F1YXJlID0gMHgyNUEwOworICAg
IGNvbnN0IFVDaGFyIHdoaXRlQnVsbGV0ID0gMHgyNUU2OworICAgIGNvbnN0IFVDaGFyIHNvZnRI
eXBoZW4gPSAweDAwQUQ7CisgICAgY29uc3QgVUNoYXIgemVyb1dpZHRoU3BhY2UgPSAweDIwMEI7
CisKK30KKworI2VuZGlmIC8vIENoYXJhY3Rlck5hbWVzX2gKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvcGxhdGZvcm0vQ2hhcmFjdGVyTmFtZXMuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAJKHJldmlzaW9uIDE4Njg3KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMz
LDE0IEBACiAjaW5jbHVkZSAiVGV4dFN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKICNpZiBVU0UoSUNVX1VOSUNP
REUpCiAjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgogI2VuZGlmCiAKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9V
Q0QuaHRtbCNDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzX1ZhbHVlcwpAQCAtMTczLDExICsxNzcs
MTEgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogCiAgICAgICAg
IGlmIChuZWVkQ2hhclRyYW5zZm9ybSkgewogICAgICAgICAgICAgaWYgKHJ0bCkKLSAgICAgICAg
ICAgICAgICBjID0gV1RGOjpVbmljb2RlOjptaXJyb3JlZENoYXIoYyk7CisgICAgICAgICAgICAg
ICAgYyA9IG1pcnJvcmVkQ2hhcihjKTsKIAogICAgICAgICAgICAgLy8gSWYgc21hbGwtY2Fwcywg
Y29udmVydCBsb3dlcmNhc2UgdG8gdXBwZXIuCi0gICAgICAgICAgICBpZiAobV9mb250LT5pc1Nt
YWxsQ2FwcygpICYmICFXVEY6OlVuaWNvZGU6OmlzVXBwZXIoYykpIHsKLSAgICAgICAgICAgICAg
ICBVQ2hhcjMyIHVwcGVyQyA9IFdURjo6VW5pY29kZTo6dG9VcHBlcihjKTsKKyAgICAgICAgICAg
IGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgIVVuaWNvZGU6OmlzVXBwZXIoYykpIHsKKyAg
ICAgICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IFVuaWNvZGU6OnRvVXBwZXIoYyk7CiAgICAg
ICAgICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7CiAgICAgICAgICAgICAgICAgICAgIGMgPSB1
cHBlckM7CiAgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0gZm9udERhdGEtPnNtYWxsQ2Fw
c0ZvbnREYXRhKG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCkpOwpAQCAtMjk5LDcgKzMwMyw3IEBA
IGJvb2wgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcigKIFVDaGFyMzIgV2lkdGhJ
dGVyYXRvcjo6bm9ybWFsaXplVm9pY2luZ01hcmtzKGludCBjdXJyZW50Q2hhcmFjdGVyKQogewog
ICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICsgMSA8IG1fZW5kKSB7Ci0gICAgICAgIGlmIChXVEY6
OlVuaWNvZGU6OmNvbWJpbmluZ0NsYXNzKG1fcnVuW2N1cnJlbnRDaGFyYWN0ZXIgKyAxXSkgPT0g
aGlyYWdhbmFLYXRha2FuYVZvaWNpbmdNYXJrc0NvbWJpbmluZ0NsYXNzKSB7CisgICAgICAgIGlm
IChjb21iaW5pbmdDbGFzcyhtX3J1bltjdXJyZW50Q2hhcmFjdGVyICsgMV0pID09IGhpcmFnYW5h
S2F0YWthbmFWb2ljaW5nTWFya3NDb21iaW5pbmdDbGFzcykgewogI2lmIFVTRShJQ1VfVU5JQ09E
RSkKICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBpbnRvIGNvbXBvc2VkIGZvcm0gdXNpbmcgMy4y
IHJ1bGVzLgogICAgICAgICAgICAgVUNoYXIgbm9ybWFsaXplZENoYXJhY3RlcnNbMl0gPSB7IDAs
IDAgfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTIg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHbHlwaE1hcC5oIgogCisjaW5jbHVk
ZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBVQ2hh
ciBub25CcmVha2luZ1NwYWNlID0gMHgwMEEwOwotY29uc3QgVUNoYXIgemVyb1dpZHRoU3BhY2Ug
PSAweDIwMEI7Ci0KIEdseXBoRGF0YSBHbHlwaE1hcDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYywgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogewogICAgIHVuc2lnbmVkIHBhZ2VO
dW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CkBAIC05Miw3ICs5MCw3IEBAIGlubGluZSBH
bHlwaE1hcDo6R2x5cGhQYWdlKiBHbHlwaE1hcDo6bG8KICAgICAgICAgICAgIC8vIFxuLCBcdCwg
YW5kIG5vbmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCiAgICAgICAgICAg
ICBidWZmZXJbKGludCknXG4nXSA9ICcgJzsKICAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcdCdd
ID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyW25vbkJyZWFraW5nU3BhY2VdID0gJyAnOworICAg
ICAgICAgICAgYnVmZmVyW25vQnJlYWtTcGFjZV0gPSAnICc7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9NaW1lVHlwZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9NaW1lVHlwZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9NaW1lVHlwZVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMxICsy
NywzMCBAQAogI2RlZmluZSBNaW1lVHlwZVJlZ2lzdHJ5X2gKIAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAid3RmL0hhc2hTZXQuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgCi17Citu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1pbWVUeXBlUmVnaXN0cnkgewogcHVibGljOgot
ICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZl
eHQpOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHQpOwogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBz
dWl0YWJsZSBmb3IgYmVpbmcgbG9hZGVkIGlubGluZSBhcyBhbgogICAgIC8vIGltYWdlIChlLmcu
LCA8aW1nPiB0YWdzKS4KLSAgICBzdGF0aWMgYm9vbCAgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
KGNvbnN0IFN0cmluZyAmbWltZVR5cGUpOyAgIAorICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsgICAKIAogICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcgbG9hZGVkIGFzIGFu
IGltYWdlCiAgICAgLy8gZG9jdW1lbnQgaW4gYSBmcmFtZS4KLSAgICBzdGF0aWMgYm9vbCAgaXNT
dXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoY29uc3QgU3RyaW5nICZtaW1lVHlwZSk7ICAg
IAorICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOyAgICAKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG5vbi1p
bWFnZSBtaW1lIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBhcyBhCiAgICAgLy8g
ZG9jdW1lbnQgaW4gYSBmcmFtZS4KLSAgICBzdGF0aWMgYm9vbCAgaXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKGNvbnN0IFN0cmluZyAmbWltZVR5cGUpOworICAgIHN0YXRpYyBib29sIGlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAotICAgIHN0
YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4gJmdldFN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKCk7
Ci0gICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiAmZ2V0U3VwcG9ydGVkSW1hZ2VSZXNv
dXJjZU1JTUVUeXBlcygpOwotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4gJmdldFN1
cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzKCk7CisgICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgZ2V0U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBnZXRTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGVzKCk7CisgICAg
c3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2V0U3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlw
ZXMoKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSGFzaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSGFzaC5oCShyZXZpc2lvbiAxODY4NykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NyArMTgzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGlmIChsZW5ndGggIT0gYi0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6VW5p
Y29kZTo6c3RyY2FzZWNtcChhLT5jaGFyYWN0ZXJzKCksIGItPmNoYXJhY3RlcnMoKSwgbGVuZ3Ro
KSA9PSAwOworICAgICAgICAgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6dW1lbWNhc2VjbXAoYS0+
Y2hhcmFjdGVycygpLCBiLT5jaGFyYWN0ZXJzKCksIGxlbmd0aCkgPT0gMDsKICAgICAgICAgfQog
ICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTg2ODcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwz
MSArMjksMzAgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0j
aW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDxranMvZHRvYS5oPgogI2luY2x1
ZGUgPGtqcy9pZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogdXNpbmcgS0pTOjpJ
ZGVudGlmaWVyOwogdXNpbmcgS0pTOjpVU3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNvbnN0IFVDaGFyIG5vbkJyZWFraW5nU3BhY2UgPSAweEEwOwotCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNTcGFjZShVQ2hhciBjKQogewogICAgIC8vIFVzZSBpc3NwYWNlKCkgZm9yIGJhc2ljIExh
dGluLTEuCiAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgbmV3bGluZXMsIHdoaWNoIGFyZW4ndCBp
bmNsdWRlZCBpbiB1bmljb2RlIERpcldTLgotICAgIHJldHVybiBjIDw9IDB4N0YgPyBpc3NwYWNl
KGMpIDogVW5pY29kZTo6ZGlyZWN0aW9uKGMpID09IFVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFs
OworICAgIHJldHVybiBjIDw9IDB4N0YgPyBpc3NwYWNlKGMpIDogZGlyZWN0aW9uKGMpID09IFdo
aXRlU3BhY2VOZXV0cmFsOwogfSAgICAKICAgICAKIHN0YXRpYyBpbmxpbmUgVUNoYXIqIG5ld1VD
aGFyVmVjdG9yKHVuc2lnbmVkIG4pCkBAIC0xNzUsNyArMTc0LDcgQEAgdm9pZCBTdHJpbmdJbXBs
OjphcHBlbmQoY2hhciBjKQogCiB2b2lkIFN0cmluZ0ltcGw6OmFwcGVuZChVQ2hhciBjKQogewot
ICAgIGFzc2VydCghbV9pblRhYmxlKTsKKyAgICBBU1NFUlQoIW1faW5UYWJsZSk7CiAgICAgVUNo
YXIqIG5jID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGggKyAxKTsKICAgICBtZW1jcHkobmMsIG1f
ZGF0YSwgbV9sZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICBuY1ttX2xlbmd0aF0gPSBjOwpA
QCAtMTg3LDcgKzE4Niw3IEBAIHZvaWQgU3RyaW5nSW1wbDo6YXBwZW5kKFVDaGFyIGMpCiAKIHZv
aWQgU3RyaW5nSW1wbDo6aW5zZXJ0KGNvbnN0IFVDaGFyKiBzdHIsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgcG9zKQogewotICAgIGFzc2VydCghbV9pblRhYmxlKTsKKyAgICBBU1NFUlQoIW1f
aW5UYWJsZSk7CiAgICAgaWYgKHBvcyA+PSBtX2xlbmd0aCkgewogICAgICAgICBhcHBlbmQoc3Ry
LCBsZW5ndGgpOwogICAgICAgICByZXR1cm47CkBAIC0yMTQsNyArMjEzLDcgQEAgdm9pZCBTdHJp
bmdJbXBsOjppbnNlcnQoY29uc3QgU3RyaW5nSW1wbAogCiB2b2lkIFN0cmluZ0ltcGw6OnRydW5j
YXRlKGludCBsZW4pCiB7Ci0gICAgYXNzZXJ0KCFtX2luVGFibGUpOworICAgIEFTU0VSVCghbV9p
blRhYmxlKTsKICAgICBpZiAobGVuID49IChpbnQpbV9sZW5ndGgpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbnQgbmwgPSBsZW4gPCAxID8gMSA6IGxlbjsKQEAgLTIyOCw3ICsyMjcsNyBAQCB2b2lk
IFN0cmluZ0ltcGw6OnRydW5jYXRlKGludCBsZW4pCiAKIHZvaWQgU3RyaW5nSW1wbDo6cmVtb3Zl
KHVuc2lnbmVkIHBvcywgaW50IGxlbikKIHsKLSAgICBhc3NlcnQoIW1faW5UYWJsZSk7CisgICAg
QVNTRVJUKCFtX2luVGFibGUpOwogICAgIGlmIChsZW4gPD0gMCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChwb3MgPj0gbV9sZW5ndGgpCkBAIC0yODMsMTQgKzI4MiwxNCBAQCBzdGF0aWMgTGVu
Z3RoIHBhcnNlTGVuZ3RoKGNvbnN0IFVDaGFyKiBtCiAgICAgICAgICsraTsKICAgICBpZiAoaSA8
IG1fbGVuZ3RoICYmIChtX2RhdGFbaV0gPT0gJysnIHx8IG1fZGF0YVtpXSA9PSAnLScpKQogICAg
ICAgICArK2k7Ci0gICAgd2hpbGUgKGkgPCBtX2xlbmd0aCAmJiBXVEY6OlVuaWNvZGU6OmlzRGln
aXQobV9kYXRhW2ldKSkKKyAgICB3aGlsZSAoaSA8IG1fbGVuZ3RoICYmIFVuaWNvZGU6OmlzRGln
aXQobV9kYXRhW2ldKSkKICAgICAgICAgKytpOwogCiAgICAgYm9vbCBvazsKICAgICBpbnQgciA9
IERlcHJlY2F0ZWRDb25zdFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRD
aGFyKj4obV9kYXRhKSwgaSkuc3RyaW5nKCkudG9JbnQoJm9rKTsKIAogICAgIC8qIFNraXAgb3Zl
ciBhbnkgcmVtYWluaW5nIGRpZ2l0cywgd2UgYXJlIG5vdCB0aGF0IGFjY3VyYXRlICg1LjUlID0+
IDUlKSAqLwotICAgIHdoaWxlIChpIDwgbV9sZW5ndGggJiYgKFdURjo6VW5pY29kZTo6aXNEaWdp
dChtX2RhdGFbaV0pIHx8IG1fZGF0YVtpXSA9PSAnLicpKQorICAgIHdoaWxlIChpIDwgbV9sZW5n
dGggJiYgKFVuaWNvZGU6OmlzRGlnaXQobV9kYXRhW2ldKSB8fCBtX2RhdGFbaV0gPT0gJy4nKSkK
ICAgICAgICAgKytpOwogCiAgICAgLyogSUUgUXVpcms6IFNraXAgYW55IHdoaXRlc3BhY2UgKDIw
ICUgPT4gMjAlKSAqLwpAQCAtNDAwLDcgKzM5OSw3IEBAIGJvb2wgU3RyaW5nSW1wbDo6aXNMb3dl
cigpIGNvbnN0CiAgICAgLy8gRG8gYSBzbG93ZXIgY2hlY2sgZm9yIHRoZSBvdGhlciBjYXNlcy4K
ICAgICBib29sIGFsbExvd2VyMiA9IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyBpKyspCi0gICAgICAgIGFsbExvd2VyMiAmPSBXVEY6OlVuaWNvZGU6OmlzTG93
ZXIobV9kYXRhW2ldKTsKKyAgICAgICAgYWxsTG93ZXIyICY9IFVuaWNvZGU6OmlzTG93ZXIobV9k
YXRhW2ldKTsKICAgICByZXR1cm4gYWxsTG93ZXIyOwogfQogCkBAIC00MjcsNyArNDI2LDcgQEAg
U3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6bG93ZXIoKSBjb25zdAogICAgICAgICByZXR1cm4gYzsK
IAogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gV1RGOjpVbmljb2Rl
Ojp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRh
LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVu
Z3RoKQogICAgICAgICByZXR1cm4gYzsKIApAQCAtNDQwLDcgKzQzOSw3IEBAIFN0cmluZ0ltcGwq
IFN0cmluZ0ltcGw6Omxvd2VyKCkgY29uc3QKICAgICBjLT5tX2RhdGEgPSBkYXRhOwogICAgIGMt
Pm1fbGVuZ3RoID0gbGVuZ3RoOwogCi0gICAgV1RGOjpVbmljb2RlOjp0b0xvd2VyKGRhdGEsIGxl
bmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBVbmljb2RlOjp0b0xvd2VyKGRh
dGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpIHsK
ICAgICAgICAgYy0+cmVmKCk7CiAgICAgICAgIGMtPmRlcmVmKCk7CkBAIC00NTUsMTAgKzQ1NCwx
MCBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjp1cHBlcigpIGNvbnN0CiAgICAgaWYgKCFtX2xl
bmd0aCkKICAgICAgICAgcmV0dXJuIGM7CiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IGxl
bmd0aCA9IFdURjo6VW5pY29kZTo6dG9VcHBlcigwLCAwLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJy
b3IpOworICAgIGludDMyX3QgbGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcigwLCAwLCBtX2RhdGEs
IG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGMtPm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbmd0
aCk7CiAgICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgV1RGOjpVbmljb2RlOjp0b1VwcGVy
KGMtPm1fZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIFVuaWNv
ZGU6OnRvVXBwZXIoYy0+bV9kYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7
CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIGMtPnJlZigpOwogICAgICAgICBjLT5kZXJlZigp
OwpAQCAtNDY5LDExICs0NjgsMTQgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6dXBwZXIoKSBj
b25zdAogCiBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpzZWN1cmUoVUNoYXIgYUNoYXIpIGNvbnN0
CiB7Ci0gICAgU3RyaW5nSW1wbCogYz0gbmV3IFN0cmluZ0ltcGw7Ci0gICAgYy0+bV9kYXRhID0g
bmV3VUNoYXJWZWN0b3IoYy0+bV9sZW5ndGg9IG1fbGVuZ3RoKTsKLSAgICAKLSAgICBXVEY6OlVu
aWNvZGU6Om1lbXNldChjLT5tX2RhdGEsIGFDaGFyLCBtX2xlbmd0aCk7Ci0gICAgCisgICAgaW50
IGxlbmd0aCA9IG1fbGVuZ3RoOworICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVu
Z3RoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBkYXRh
W2ldID0gYUNoYXI7CisKKyAgICBTdHJpbmdJbXBsKiBjID0gbmV3IFN0cmluZ0ltcGw7CisgICAg
Yy0+bV9kYXRhID0gZGF0YTsKKyAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKICAgICByZXR1cm4g
YzsKIH0KIApAQCAtNDgzLDEwICs0ODUsMTAgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6Zm9s
ZENhc2UoKSBjb25zdAogICAgIGlmICghbV9sZW5ndGgpCiAgICAgICAgIHJldHVybiBjOwogICAg
IGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBXVEY6OlVuaWNvZGU6OmZvbGRDYXNl
KDAsIDAsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50MzJfdCBsZW5ndGggPSBV
bmljb2RlOjpmb2xkQ2FzZSgwLCAwLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGMt
Pm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbmd0aCk7CiAgICAgYy0+bV9sZW5ndGggPSBsZW5n
dGg7Ci0gICAgV1RGOjpVbmljb2RlOjpmb2xkQ2FzZShjLT5tX2RhdGEsIGxlbmd0aCwgbV9kYXRh
LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBVbmljb2RlOjpmb2xkQ2FzZShjLT5tX2RhdGEsIGxl
bmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAg
ICAgYy0+cmVmKCk7CiAgICAgICAgIGMtPmRlcmVmKCk7CkBAIC01NjMsMTAgKzU2NSwxMCBAQCBT
dHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpjYXBpdGFsaXplKFVDaGFyCiAgICAgICAgIHJldHVybiBj
YXBpdGFsaXplZFN0cmluZzsKIAogICAgIFVDaGFyKiBzdHJpbmdXaXRoUHJldmlvdXMgPSBuZXdV
Q2hhclZlY3RvcihtX2xlbmd0aCArIDEpOwotICAgIHN0cmluZ1dpdGhQcmV2aW91c1swXSA9IHBy
ZXZpb3VzID09IG5vbkJyZWFraW5nU3BhY2UgPyAnICcgOiBwcmV2aW91czsKKyAgICBzdHJpbmdX
aXRoUHJldmlvdXNbMF0gPSBwcmV2aW91cyA9PSBub0JyZWFrU3BhY2UgPyAnICcgOiBwcmV2aW91
czsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9sZW5ndGggKyAxOyBpKyspIHsKICAg
ICAgICAgLy8gUmVwbGFjZSAmbmJzcCB3aXRoIGEgcmVhbCBzcGFjZSBzaW5jZSBJQ1Ugbm8gbG9u
Z2VyIHRyZWF0cyAmbmJzcCBhcyBhIHdvcmQgc2VwYXJhdG9yLgotICAgICAgICBpZiAobV9kYXRh
W2kgLSAxXSA9PSBub25CcmVha2luZ1NwYWNlKQorICAgICAgICBpZiAobV9kYXRhW2kgLSAxXSA9
PSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBzdHJpbmdXaXRoUHJldmlvdXNbaV0gPSAnICc7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tpXSA9IG1fZGF0
YVtpIC0gMV07CkBAIC01ODUsNyArNTg3LDcgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6Y2Fw
aXRhbGl6ZShVQ2hhcgogICAgIGludDMyX3Qgc3RhcnRPZldvcmQgPSB0ZXh0QnJlYWtGaXJzdChi
b3VuZGFyeSk7CiAgICAgZm9yIChlbmRPZldvcmQgPSB0ZXh0QnJlYWtOZXh0KGJvdW5kYXJ5KTsg
ZW5kT2ZXb3JkICE9IFRleHRCcmVha0RvbmU7IHN0YXJ0T2ZXb3JkID0gZW5kT2ZXb3JkLCBlbmRP
ZldvcmQgPSB0ZXh0QnJlYWtOZXh0KGJvdW5kYXJ5KSkgewogICAgICAgICBpZiAoc3RhcnRPZldv
cmQgIT0gMCkgLy8gSWdub3JlIGZpcnN0IGNoYXIgb2YgcHJldmlvdXMgc3RyaW5nCi0gICAgICAg
ICAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9kYXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPSBtX2RhdGFb
c3RhcnRPZldvcmQgLSAxXSA9PSBub25CcmVha2luZ1NwYWNlID8gbm9uQnJlYWtpbmdTcGFjZSA6
IFdURjo6VW5pY29kZTo6dG9UaXRsZUNhc2Uoc3RyaW5nV2l0aFByZXZpb3VzW3N0YXJ0T2ZXb3Jk
XSk7CisgICAgICAgICAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9kYXRhW3N0YXJ0T2ZXb3JkIC0g
MV0gPSBtX2RhdGFbc3RhcnRPZldvcmQgLSAxXSA9PSBub0JyZWFrU3BhY2UgPyBub0JyZWFrU3Bh
Y2UgOiB0b1RpdGxlQ2FzZShzdHJpbmdXaXRoUHJldmlvdXNbc3RhcnRPZldvcmRdKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IHN0YXJ0T2ZXb3JkICsgMTsgaSA8IGVuZE9mV29yZDsgaSsrKQogICAg
ICAgICAgICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fZGF0YVtpIC0gMV0gPSBtX2RhdGFbaSAtIDFd
OwogICAgIH0KQEAgLTYxMCw3ICs2MTIsNyBAQCBpbnQgU3RyaW5nSW1wbDo6dG9JbnQoYm9vbCog
b2spIGNvbnN0CiAgICAgCiAgICAgLy8gQWxsb3cgZGlnaXRzLgogICAgIGZvciAoOyBpICE9IG1f
bGVuZ3RoOyArK2kpCi0gICAgICAgIGlmICghV1RGOjpVbmljb2RlOjppc0RpZ2l0KG1fZGF0YVtp
XSkpCisgICAgICAgIGlmICghVW5pY29kZTo6aXNEaWdpdChtX2RhdGFbaV0pKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgCiAgICAgcmV0dXJuIERlcHJlY2F0ZWRDb25zdFN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4obV9kYXRhKSwgaSkuc3RyaW5nKCkudG9J
bnQob2spOwpAQCAtNjQ3LDcgKzY0OSw3IEBAIHN0YXRpYyBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IFVDaGEKICAgICBBU1NFUlQobGVuZ3RoID49IDApOwogICAgIHdoaWxlIChsZW5ndGgt
LSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gKmIrKzsKLSAgICAgICAgaWYgKFdURjo6
VW5pY29kZTo6Zm9sZENhc2UoKmErKykgIT0gV1RGOjpVbmljb2RlOjpmb2xkQ2FzZShiYykpCisg
ICAgICAgIGlmIChmb2xkQ2FzZSgqYSsrKSAhPSBmb2xkQ2FzZShiYykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNjU2LDcgKzY1OCw3IEBA
IHN0YXRpYyBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGEKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGlu
dCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKLSAgICByZXR1cm4gV1RGOjpV
bmljb2RlOjpzdHJjYXNlY21wKGEsIGIsIGxlbmd0aCkgPT0gMDsKKyAgICByZXR1cm4gdW1lbWNh
c2VjbXAoYSwgYiwgbGVuZ3RoKSA9PSAwOwogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBi
ZSBhcyBmYXN0IGFzIHBvc3NpYmxlLCBldmVyeSBsaXR0bGUgYml0IGhlbHBzLgpAQCAtNjg5LDEw
ICs2OTEsOSBAQCBpbnQgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBjaGFyKiBjaHMsIGluCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fbGVuZ3RoIC0gY2hzTGVuZ3RoIC0gbiArIDE7CiAgICAgICAg
IH0gd2hpbGUgKC0tbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVUNoYXIgbGMgPSBXVEY6OlVu
aWNvZGU6OmZvbGRDYXNlKCpjaHMpOworICAgICAgICBVQ2hhciBsYyA9IFVuaWNvZGU6OmZvbGRD
YXNlKCpjaHMpOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoV1RGOjpVbmljb2RlOjpm
b2xkQ2FzZSgqKytwdHIpID09IGxjCi0gICAgICAgICAgICAgICAgICAgICYmIGVxdWFsSWdub3Jp
bmdDYXNlKHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkKKyAgICAgICAg
ICAgIGlmIChVbmljb2RlOjpmb2xkQ2FzZSgqKytwdHIpID09IGxjICYmIGVxdWFsSWdub3JpbmdD
YXNlKHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9sZW5ndGggLSBjaHNMZW5ndGggLSBuICsgMTsKICAgICAgICAgfSB3aGls
ZSAoLS1uKTsKICAgICB9CkBAIC05OTMsNyArOTk0LDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdCBTdHJpbmdJbXBsKgogICAgICAgICBlcXVhbCA9IHRydWU7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYmMgPSBiW2ldOwotICAgICAgICAgICAgZXF1YWwgJj0gV1RGOjpVbmljb2RlOjpmb2xk
Q2FzZShhc1tpXSkgPT0gV1RGOjpVbmljb2RlOjpmb2xkQ2FzZShiYyk7CisgICAgICAgICAgICBl
cXVhbCAmPSBmb2xkQ2FzZShhc1tpXSkgPT0gZm9sZENhc2UoYmMpOwogICAgICAgICB9CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRCb3VuZGFyaWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0Qm91bmRhcmllcy5oCShyZXZpc2lvbiAxODY4NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vVGV4dEJvdW5kYXJpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2lmbmRlZiBUZXh0Qm91bmRhcmllc19oCiAjZGVmaW5lIFRleHRCb3VuZGFy
aWVzX2gKIAotI2luY2x1ZGUgInd0Zi91bmljb2RlL1VuaWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vVGV4dEJyZWFrSXRlcmF0b3IuaAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE5ICsyMiwy
MCBAQAogI2lmbmRlZiBUZXh0QnJlYWtJdGVyYXRvcl9oCiAjZGVmaW5lIFRleHRCcmVha0l0ZXJh
dG9yX2gKIAotI2luY2x1ZGUgInd0Zi91bmljb2RlL1VuaWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9Vbmljb2RlLmg+CiAKICNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSA8dW5p
Y29kZS91YnJrLmg+Ci10eXBlZGVmIFVCcmVha0l0ZXJhdG9yIFRleHRCcmVha0l0ZXJhdG9yOwot
I2VsaWYgVVNFKFFUNF9VTklDT0RFKQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIFVTRShJQ1VfVU5JQ09ERSkKKyAgICB0eXBlZGVmIFVCcmVha0l0ZXJhdG9yIFRleHRCcmVh
a0l0ZXJhdG9yOworI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogICAgIGNsYXNzIFRleHRCcmVha0l0
ZXJhdG9yOwotfQogI2VuZGlmCiAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVu
Z3RoKTsKICAgICBUZXh0QnJlYWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25z
dCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKTsKIApAQCAtNDUsNCArNDYsNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRv
ciosIGludCk7CiAgICAgZW51bSB7IFRleHRCcmVha0RvbmUgPSAtMSB9OwogfQorCiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGV4dENvZGVjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0Q29kZWMuaAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1RleHRDb2RlYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTAgQEAKICNpZm5k
ZWYgVGV4dENvZGVjX2gKICNkZWZpbmUgVGV4dENvZGVjX2gKIAotI2luY2x1ZGUgInd0Zi91bmlj
b2RlL1VuaWNvZGUuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1Vu
aWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1RleHRDb2RlY0xhdGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
Q29kZWNMYXRpbjEuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4
dENvZGVjTGF0aW4xLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5j
bHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAi
d3RmL3VuaWNvZGUvVW5pY29kZS5oIgogCiB1c2luZyBzdGQ6OmF1dG9fcHRyOwogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vVGV4dEVuY29kaW5nLmgJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0RW5jb2RpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBUZXh0RW5jb2RpbmdfaAogI2RlZmluZSBUZXh0RW5jb2RpbmdfaAogCi0jaW5jbHVkZSAid3Rm
L3VuaWNvZGUvVW5pY29kZS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5oCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29k
aW5nUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBU
ZXh0RW5jb2RpbmdSZWdpc3RyeV9oCiAjZGVmaW5lIFRleHRFbmNvZGluZ1JlZ2lzdHJ5X2gKIAot
I2luY2x1ZGUgInd0Zi91bmljb2RlL1VuaWNvZGUuaCIKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNpb24gMTg2ODcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQu
aCIKIAorI2ltcG9ydCAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkVkaXRvci5oIgpA
QCAtMTMxLDggKzEzMiw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2Uq
IHMKICAgICAgICAgdGV4dC5yZXBsYWNlKCdcXCcsIGZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sKCkpOwogICAgICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW1soTlNTdHJpbmcqKXRl
eHQgY29weV0gYXV0b3JlbGVhc2VdIG11dGFibGVDb3B5XTsKICAgICAgICAgCi0gICAgICAgIGNv
bnN0IHVuaWNoYXIgTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciA9IDB4QTA7Ci0gICAgICAgIE5T
U3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFy
YWN0ZXJzOiZOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyIGxlbmd0aDoxXTsKKyAgICAgICAgTlNT
dHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJh
Y3RlcnM6Jm5vQnJlYWtTcGFjZSBsZW5ndGg6MV07CiAgICAgICAgIFtzIHJlcGxhY2VPY2N1cnJl
bmNlc09mU3RyaW5nOk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgd2l0aFN0cmluZzpAIiAiIG9wdGlv
bnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbcyBsZW5ndGhdKV07CiAgICAgICAgIFttX3Bhc3Rl
Ym9hcmQgc2V0U3RyaW5nOnMgZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOwogICAgICAgICBb
cyByZWxlYXNlXTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RleHRDb2RlY01hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGV4dENvZGVjTWFjLmNwcAkocmV2
aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9UZXh0Q29kZWNNYWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGV4dENvZGVjTWFjLmgiCiAKLSNpbmNsdWRlICJDaGFyc2V0RGF0YS5oIgogI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIkNo
YXJzZXREYXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogCkBAIC0yNjAsNyArMjYxLDcgQEAgU3RyaW5nIFRleHRDb2RlY01hYzo6
ZGVjb2RlKGNvbnN0IGNoYXIqIAogICAgIC8vIEJ1dCBHQjE4MDMwIGRlY29kZXMgaXQgdG8gVStF
NUU1LCB3aGljaCBpcyBjb3JyZWN0IGluIHRoZW9yeSBidXQgbm90IGluIHByYWN0aWNlLgogICAg
IC8vIFRvIHdvcmsgYXJvdW5kLCBqdXN0IGNoYW5nZSBhbGwgb2NjdXJlbmNlcyBvZiBVK0U1RTUg
dG8gVSszMDAwIChpZGVvZ3JhcGhpYyBzcGFjZSkuCiAgICAgaWYgKG1fZW5jb2RpbmcgPT0ga0NG
U3RyaW5nRW5jb2RpbmdHQl8xODAzMF8yMDAwKQotICAgICAgICByZXN1bHRTdHJpbmcucmVwbGFj
ZSgweEU1RTUsIDB4MzAwMCk7CisgICAgICAgIHJlc3VsdFN0cmluZy5yZXBsYWNlKDB4RTVFNSwg
aWRlb2dyYXBoaWNTcGFjZSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4
IEBACiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTM1NTcsNyArMzU1OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0
ZUZpcnN0TGV0dGVyKCkKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBhY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlcyBhbmQg
cHVuY3R1YXRpb24KLSAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPCBvbGRUZXh0LT5sZW5ndGgo
KSAmJiAoRGVwcmVjYXRlZENoYXIoKCpvbGRUZXh0KVtsZW5ndGhdKS5pc1NwYWNlKCkgfHwgV1RG
OjpVbmljb2RlOjppc1B1bmN0KCgqb2xkVGV4dClbbGVuZ3RoXSkpKQorICAgICAgICAgICAgd2hp
bGUgKGxlbmd0aCA8IG9sZFRleHQtPmxlbmd0aCgpICYmIChEZXByZWNhdGVkQ2hhcigoKm9sZFRl
eHQpW2xlbmd0aF0pLmlzU3BhY2UoKSB8fCBVbmljb2RlOjppc1B1bmN0KCgqb2xkVGV4dClbbGVu
Z3RoXSkpKQogICAgICAgICAgICAgICAgIGxlbmd0aCsrOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBhY2NvdW50IGZvciBmaXJzdCBsZXR0ZXIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
KyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGlzdE1hcmtlckJveC5oIgpAQCAt
MzUsNyArMzYsOCBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLW5hbWVzcGFjZSBVbmljb2RlID0gV1RGOjpVbmljb2RlOwordXNpbmcgbmFtZXNwYWNl
IFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTMzNSwyMCArMzM3LDE0IEBAIFN0cmluZyBsaXN0TWFya2VyVGV4dChFTGlzdFN0eWxlVHlw
ZSB0eXAKIAogICAgICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgY2hhcmFjdGVycyBmb3IgdGV4dCBz
ZWN1cml0eS4KICAgICAgICAgLy8gU2VlIFJlbmRlclRleHQ6OnNldEludGVybmFsU3RyaW5nLgot
ICAgICAgICBjYXNlIENJUkNMRTogewotICAgICAgICAgICAgY29uc3QgVUNoYXIgd2hpdGVCdWxs
ZXQgPSAweDI1RTY7CisgICAgICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygmd2hpdGVCdWxsZXQsIDEpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRElTQzogewot
ICAgICAgICAgICAgY29uc3QgVUNoYXIgYnVsbGV0ID0gMHgyMDIyOworICAgICAgICBjYXNlIERJ
U0M6CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCZidWxsZXQsIDEpOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgU1FVQVJFOiB7CisgICAgICAgIGNhc2UgU1FVQVJFOgogICAgICAgICAgICAg
Ly8gVGhlIENTUyAyLjEgdGVzdCBzdWl0ZSB1c2VzIFUrMjVFRSBCTEFDSyBNRURJVU0gU01BTEwg
U1FVQVJFCiAgICAgICAgICAgICAvLyBpbnN0ZWFkLCBidXQgSSB0aGluayB0aGlzIGxvb2tzIGJl
dHRlci4KLSAgICAgICAgICAgIGNvbnN0IFVDaGFyIGJsYWNrU3F1YXJlID0gMHgyNUEwOwogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygmYmxhY2tTcXVhcmUsIDEpOwotICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBMREVDSU1BTDoKICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcih2
YWx1ZSk7CkBAIC02MTgsNyArNjE0LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIAogCiAgICAgLy8gVGV4dCBpcyBub3QgYXJiaXRyYXJ5LiBXZSBjYW4ganVkZ2Ug
d2hldGhlciBpdCdzIFJUTCBmcm9tIHRoZSBmaXJzdCBjaGFyYWN0ZXIsCiAgICAgLy8gYW5kIHdl
IG9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGRpcmVjdGlvbiBSaWdodFRvTGVmdCBmb3Igbm93Lgot
ICAgIGJvb2wgdGV4dE5lZWRzUmV2ZXJzaW5nID0gVW5pY29kZTo6ZGlyZWN0aW9uKG1fdGV4dFsw
XSkgPT0gVW5pY29kZTo6UmlnaHRUb0xlZnQ7CisgICAgYm9vbCB0ZXh0TmVlZHNSZXZlcnNpbmcg
PSBkaXJlY3Rpb24obV90ZXh0WzBdKSA9PSBSaWdodFRvTGVmdDsKICAgICBWZWN0b3I8VUNoYXI+
IHJldmVyc2VkVGV4dDsKICAgICBpZiAodGV4dE5lZWRzUmV2ZXJzaW5nKSB7CiAgICAgICAgIGlu
dCBsZW5ndGggPSBtX3RleHQubGVuZ3RoKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5j
bHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQXJlbmEuaCIKQEAgLTM4LDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5l
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcg
bmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDI0LDggKzQy
Nyw4IEBAIEFMV0FZU19JTkxJTkUgaW50IFJlbmRlclRleHQ6OndpZHRoRnJvbUMKICAgICAgICAg
aW50IHcgPSAwOwogICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKysp
IHsKICAgICAgICAgICAgIFVDaGFyIGMgPSAoKm1fc3RyKVtpXTsKLSAgICAgICAgICAgIFdURjo6
VW5pY29kZTo6RGlyZWN0aW9uIGRpciA9IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpOwotICAg
ICAgICAgICAgaWYgKGRpciAhPSBXVEY6OlVuaWNvZGU6Ok5vblNwYWNpbmdNYXJrICYmIGRpciAh
PSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbCkgeworICAgICAgICAgICAgRGlyZWN0aW9u
IGRpciA9IGRpcmVjdGlvbihjKTsKKyAgICAgICAgICAgIGlmIChkaXIgIT0gTm9uU3BhY2luZ01h
cmsgJiYgZGlyICE9IEJvdW5kYXJ5TmV1dHJhbCkgewogICAgICAgICAgICAgICAgIGlmIChjID09
ICdcdCcgJiYgdGFiV2lkdGgpCiAgICAgICAgICAgICAgICAgICAgIHcgKz0gdGFiV2lkdGggLSAo
KHhQb3MgKyB3KSAlIHRhYldpZHRoKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC01MjgsNyAr
NTMxLDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoKQogCiBpbmxpbmUgYm9v
bCBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShVQ2hhciBjLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
Ci0gICAgcmV0dXJuIGMgPT0gJyAnIHx8IChjID09IDB4YTAgJiYgc3R5bGUtPm5ic3BNb2RlKCkg
PT0gU1BBQ0UpOworICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYg
c3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOwogfQogCiB2b2lkIFJlbmRlclRleHQ6OmNhbGNN
aW5NYXhXaWR0aChpbnQgbGVhZFdpZHRoKQpAQCAtODc2LDIxICs4NzksMTQgQEAgdm9pZCBSZW5k
ZXJUZXh0OjpzZXRJbnRlcm5hbFN0cmluZyhQYXNzUgogICAgICAgICAgICAgc3dpdGNoIChzdHls
ZSgpLT50ZXh0U2VjdXJpdHkoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgVFNOT05FOgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFRTQ0lSQ0xFOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHdoaXRlQnVsbGV0ID0gMHgyNUU2Owor
ICAgICAgICAgICAgICAgIGNhc2UgVFNDSVJDTEU6CiAgICAgICAgICAgICAgICAgICAgIG1fc3Ry
ID0gbV9zdHItPnNlY3VyZSh3aGl0ZUJ1bGxldCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFRTRElTQzogewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciBidWxsZXQgPSAweDIwMjI7CisgICAgICAgICAg
ICAgICAgY2FzZSBUU0RJU0M6CiAgICAgICAgICAgICAgICAgICAgIG1fc3RyID0gbV9zdHItPnNl
Y3VyZShidWxsZXQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBUU1NRVUFSRTogewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciBibGFja1NxdWFyZSA9IDB4MjVBMDsKKyAgICAgICAgICAgICAgICBjYXNl
IFRTU1FVQVJFOgogICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1fc3RyLT5zZWN1cmUoYmxh
Y2tTcXVhcmUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKIAorI2lu
Y2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTQwLDcgKzE0MSw3IEBAIHN0
YXRpYyBTdHJpbmcgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGUKICAgICAgICAgfSBlbHNlIGlm
IChjID09ICciJykgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXFwnKTsKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgfHwg
YyA9PSAweDAwQTApCisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gbm9CcmVh
a1NwYWNlKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChjID49IDB4MjAgJiYgYyA8IDB4N0YpCkBAIC0yNzgsMTMgKzI3OSwx
MyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgICAg
ICAgICAgdGV4dCA9IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyh0ZXh0KTsKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dFswXSkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDB4MjAyMjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBidWxsZXQ6
CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gImJ1bGxldCI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAweDI1QTA6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgYmxhY2tTcXVhcmU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0ID0gImJsYWNrIHNxdWFyZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAweDI1RTY6CisgICAgICAgICAgICAgICAgICAgIGNh
c2Ugd2hpdGVCdWxsZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gIndoaXRlIGJ1
bGxldCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCShyZXZpc2lvbiAxODY4NykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL2JpZGkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiYmlkaS5oIgogCisjaW5jbHVkZSAiQ2hhcmFj
dGVyTmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM2LDYgKzM3LDggQEAKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwor
dXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDks
NyArNTIsNyBAQCBzdHJ1Y3QgQmlkaUl0ZXJhdG9yIHsKICAgICBib29sIGF0RW5kKCkgY29uc3Q7
CiAgICAgCiAgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0OwotICAgIFdURjo6VW5pY29kZTo6RGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OworICAgIERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dDsKIAogICAgIFJlbmRlckJsb2NrKiBibG9jazsKICAgICBSZW5kZXJPYmplY3QqIG9iajsKQEAg
LTU3LDcgKzYwLDcgQEAgc3RydWN0IEJpZGlJdGVyYXRvciB7CiB9OwogCiBzdHJ1Y3QgQmlkaVN0
YXRlIHsKLSAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihXVEY6OlVuaWNvZGU6Ok90
aGVyTmV1dHJhbCksIGFkanVzdEVtYmVkZGluZyhmYWxzZSksIHJlYWNoZWRFbmRPZkxpbmUoZmFs
c2UpIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0KDApLCBkaXIoT3RoZXJOZXV0cmFsKSwg
YWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hlZEVuZE9mTGluZShmYWxzZSkge30KICAgICAK
ICAgICBCaWRpSXRlcmF0b3Igc29yOwogICAgIEJpZGlJdGVyYXRvciBlb3I7CkBAIC02NSw3ICs2
OCw3IEBAIHN0cnVjdCBCaWRpU3RhdGUgewogICAgIEJpZGlJdGVyYXRvciBjdXJyZW50OwogICAg
IFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4dDsKICAgICBCaWRpU3RhdHVzIHN0YXR1czsKLSAg
ICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkaXI7CisgICAgRGlyZWN0aW9uIGRpcjsKICAgICBi
b29sIGFkanVzdEVtYmVkZGluZzsKICAgICBCaWRpSXRlcmF0b3IgZW5kT2ZMaW5lOwogICAgIGJv
b2wgcmVhY2hlZEVuZE9mTGluZTsKQEAgLTEwNSw3ICsxMDgsNyBAQCBzdGF0aWMgYm9vbCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0CiBzdGF0aWMgYm9vbCBlbXB0eVJ1biA9IHRydWU7CiBz
dGF0aWMgaW50IG51bVNwYWNlczsKIAotc3RhdGljIHZvaWQgZW1iZWQoV1RGOjpVbmljb2RlOjpE
aXJlY3Rpb24sIEJpZGlTdGF0ZSYpOworc3RhdGljIHZvaWQgZW1iZWQoRGlyZWN0aW9uLCBCaWRp
U3RhdGUmKTsKIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bihCaWRpU3RhdGUmKTsKIAogc3RhdGljIGlu
dCBnZXRCUE1XaWR0aChpbnQgY2hpbGRWYWx1ZSwgTGVuZ3RoIGNzc1VuaXQpCkBAIC0yMDAsNyAr
MjAzLDcgQEAgc3RhdGljIHZvaWQgZGVsZXRlQmlkaVJ1bnMoUmVuZGVyQXJlbmEqIAogICAgRWFj
aCBsaW5lIG9mIHRleHQgY2FjaGVzIHRoZSBlbWJlZGRpbmcgbGV2ZWwgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBsaW5lIGZvciBmYXN0ZXIKICAgIHJlbGF5b3V0aW5nCiAqLwotQmlkaUNvbnRleHQ6OkJp
ZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIgbCwgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZSwgQmlk
aUNvbnRleHQgKnAsIGJvb2wgbykKK0JpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBj
aGFyIGwsIERpcmVjdGlvbiBlLCBCaWRpQ29udGV4dCAqcCwgYm9vbCBvKQogICAgIDogbGV2ZWwo
bCksIG92ZXJyaWRlKG8pLCBtX2RpcihlKQogewogICAgIHBhcmVudCA9IHA7CkBAIC0yNzgsOSAr
MjgxLDkgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0KFJlbgogICAgICAg
ICAgICAgICAgIEVVbmljb2RlQmlkaSB1YiA9IG5leHQtPnN0eWxlKCktPnVuaWNvZGVCaWRpKCk7
CiAgICAgICAgICAgICAgICAgaWYgKHViICE9IFVCTm9ybWFsKSB7CiAgICAgICAgICAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gZGlyID0gbmV4dC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQK
LSAgICAgICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwgPyBXVEY6OlVuaWNvZGU6OlJp
Z2h0VG9MZWZ0RW1iZWRkaW5nIDogV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodEVtYmVkZGluZykK
LSAgICAgICAgICAgICAgICAgICAgICAgIDogKGRpciA9PSBSVEwgPyBXVEY6OlVuaWNvZGU6OlJp
Z2h0VG9MZWZ0T3ZlcnJpZGUgOiBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0T3ZlcnJpZGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwgPyBSaWdodFRvTGVmdEVtYmVkZGluZyA6IExl
ZnRUb1JpZ2h0RW1iZWRkaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgOiAoZGlyID09IFJU
TCA/IFJpZ2h0VG9MZWZ0T3ZlcnJpZGUgOiBMZWZ0VG9SaWdodE92ZXJyaWRlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVtYmVkKGQsIGJpZGkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTI5Niw3ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogYmlk
aU5leHQoUmVuCiAKICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gYmxv
Y2spIHsKICAgICAgICAgICAgICAgICBpZiAoYmlkaS5hZGp1c3RFbWJlZGRpbmcgJiYgY3VycmVu
dC0+aXNJbmxpbmVGbG93KCkgJiYgY3VycmVudC0+c3R5bGUoKS0+dW5pY29kZUJpZGkoKSAhPSBV
Qk5vcm1hbCkKLSAgICAgICAgICAgICAgICAgICAgZW1iZWQoV1RGOjpVbmljb2RlOjpQb3BEaXJl
Y3Rpb25hbEZvcm1hdCwgYmlkaSk7CisgICAgICAgICAgICAgICAgICAgIGVtYmVkKFBvcERpcmVj
dGlvbmFsRm9ybWF0LCBiaWRpKTsKIAogICAgICAgICAgICAgICAgIG5leHQgPSBjdXJyZW50LT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7CkBAIC0zMDQsOSArMzA3
LDkgQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGJpZGlOZXh0KFJlbgogICAgICAgICAg
ICAgICAgICAgICAgICAgRVVuaWNvZGVCaWRpIHViID0gbmV4dC0+c3R5bGUoKS0+dW5pY29kZUJp
ZGkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1YiAhPSBVQk5vcm1hbCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyID0gbmV4dC0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2Rl
OjpEaXJlY3Rpb24gZCA9ICh1YiA9PSBFbWJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IChkaXIgPT0gUlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZzog
V1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodEVtYmVkZGluZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAoZGlyID09IFJUTCA/IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVy
cmlkZSA6IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRPdmVycmlkZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpcmVjdGlvbiBkID0gKHViID09IEVtYmVkCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwgPyBSaWdodFRvTGVmdEVtYmVkZGluZzog
TGVmdFRvUmlnaHRFbWJlZGRpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
KGRpciA9PSBSVEwgPyBSaWdodFRvTGVmdE92ZXJyaWRlIDogTGVmdFRvUmlnaHRPdmVycmlkZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkKGQsIGJpZGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zNDYsOSArMzQ5LDkg
QEAgc3RhdGljIFJlbmRlck9iamVjdCogYmlkaUZpcnN0KFJlbmRlckJsbwogICAgICAgICAgICAg
RVVuaWNvZGVCaWRpIHViID0gby0+c3R5bGUoKS0+dW5pY29kZUJpZGkoKTsKICAgICAgICAgICAg
IGlmICh1YiAhPSBVQk5vcm1hbCkgewogICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGly
ID0gby0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgV1RGOjpVbmljb2Rl
OjpEaXJlY3Rpb24gZCA9ICh1YiA9PSBFbWJlZAotICAgICAgICAgICAgICAgICAgICA/IChkaXIg
PT0gUlRMID8gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZyA6IFdURjo6VW5pY29k
ZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmcpCi0gICAgICAgICAgICAgICAgICAgIDogKGRpciA9PSBS
VEwgPyBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGUgOiBXVEY6OlVuaWNvZGU6Okxl
ZnRUb1JpZ2h0T3ZlcnJpZGUpKTsKKyAgICAgICAgICAgICAgICBEaXJlY3Rpb24gZCA9ICh1YiA9
PSBFbWJlZAorICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gUmlnaHRUb0xlZnRF
bWJlZGRpbmcgOiBMZWZ0VG9SaWdodEVtYmVkZGluZykKKyAgICAgICAgICAgICAgICAgICAgOiAo
ZGlyID09IFJUTCA/IFJpZ2h0VG9MZWZ0T3ZlcnJpZGUgOiBMZWZ0VG9SaWdodE92ZXJyaWRlKSk7
CiAgICAgICAgICAgICAgICAgZW1iZWQoZCwgYmlkaSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTM5NiwxOCArMzk5LDE4IEBAIFVDaGFyIEJpZGlJdGVyYXRvcjo6Y3VycmVudCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRleHQtPnRleHQoKVtwb3NdOwogfQogCi1BTFdBWVNfSU5MSU5FIFdU
Rjo6VW5pY29kZTo6RGlyZWN0aW9uIEJpZGlJdGVyYXRvcjo6ZGlyZWN0aW9uKCkgY29uc3QKK0FM
V0FZU19JTkxJTkUgRGlyZWN0aW9uIEJpZGlJdGVyYXRvcjo6ZGlyZWN0aW9uKCkgY29uc3QKIHsK
ICAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFs
OworICAgICAgICByZXR1cm4gT3RoZXJOZXV0cmFsOwogICAgIGlmIChvYmotPmlzTGlzdE1hcmtl
cigpKQotICAgICAgICByZXR1cm4gb2JqLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBX
VEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0IDogV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAg
ICAgICAgcmV0dXJuIG9iai0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gTGVmdFRvUmln
aHQgOiBSaWdodFRvTGVmdDsKICAgICBpZiAoIW9iai0+aXNUZXh0KCkpCi0gICAgICAgIHJldHVy
biBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDsKKyAgICAgICAgcmV0dXJuIE90aGVyTmV1dHJh
bDsKICAgICBSZW5kZXJUZXh0KiByZW5kZXJUeHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4o
b2JqKTsKICAgICBpZiAocG9zID49IHJlbmRlclR4dC0+c3RyaW5nTGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDsKLSAgICByZXR1cm4gV1RGOjpVbmlj
b2RlOjpkaXJlY3Rpb24ocmVuZGVyVHh0LT50ZXh0KClbcG9zXSk7CisgICAgICAgIHJldHVybiBP
dGhlck5ldXRyYWw7CisgICAgcmV0dXJuIFVuaWNvZGU6OmRpcmVjdGlvbihyZW5kZXJUeHQtPnRl
eHQoKVtwb3NdKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtNjIwLDQ0ICs2MjMsNDQgQEAgc3RhdGljIHZvaWQgYXBwZW5kUnVuKEJpZGlTdGF0
ZSAmYmlkaSkKICAgICAKICAgICBiaWRpLmVvci5pbmNyZW1lbnQoYmlkaSk7CiAgICAgYmlkaS5z
b3IgPSBiaWRpLmVvcjsKLSAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFs
OwotICAgIGJpZGkuc3RhdHVzLmVvciA9IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsOworICAg
IGJpZGkuZGlyID0gT3RoZXJOZXV0cmFsOworICAgIGJpZGkuc3RhdHVzLmVvciA9IE90aGVyTmV1
dHJhbDsKICAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IGI7CiB9CiAKLXN0YXRpYyB2b2lkIGVt
YmVkKFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGQsIEJpZGlTdGF0ZSYgYmlkaSkKK3N0YXRpYyB2
b2lkIGVtYmVkKERpcmVjdGlvbiBkLCBCaWRpU3RhdGUmIGJpZGkpCiB7CiAgICAgYm9vbCBiID0g
YmlkaS5hZGp1c3RFbWJlZGRpbmc7CiAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsK
LSAgICBpZiAoZCA9PSBXVEY6OlVuaWNvZGU6OlBvcERpcmVjdGlvbmFsRm9ybWF0KSB7CisgICAg
aWYgKGQgPT0gUG9wRGlyZWN0aW9uYWxGb3JtYXQpIHsKICAgICAgICAgQmlkaUNvbnRleHQgKmMg
PSBiaWRpLmNvbnRleHQtPnBhcmVudDsKICAgICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgIGlm
ICghZW1wdHlSdW4gJiYgYmlkaS5lb3IgIT0gYmlkaS5sYXN0KSB7Ci0gICAgICAgICAgICAgICAg
YXNzZXJ0KGJpZGkuc3RhdHVzLmVvciAhPSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbCk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmVvciAhPSBPdGhlck5ldXRyYWwpOwog
ICAgICAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVv
cjsgbmVlZCB0byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQg
dGhyb3VnaCBiaWRpLmxhc3QKLSAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMubGFz
dCA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yCi0gICAgICAgICAgICAg
ICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJl
clRlcm1pbmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBX
VEY6OlVuaWNvZGU6OkNvbW1vbk51bWJlclNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6Qm91bmRhcnlOZXV0cmFsCi0gICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpCbG9j
a1NlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdU
Rjo6VW5pY29kZTo6U2VnbWVudFNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgICB8fCBiaWRp
LnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWwKLSAgICAgICAg
ICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1
dHJhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IFdURjo6VW5pY29kZTo6T3Ro
ZXJOZXV0cmFsKQorICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5sYXN0ID09IEV1
cm9wZWFuTnVtYmVyU2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVz
Lmxhc3QgPT0gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yCisgICAgICAgICAgICAgICAgICAgIHx8
IGJpZGkuc3RhdHVzLmxhc3QgPT0gQ29tbW9uTnVtYmVyU2VwYXJhdG9yCisgICAgICAgICAgICAg
ICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gQm91bmRhcnlOZXV0cmFsCisgICAgICAgICAg
ICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gQmxvY2tTZXBhcmF0b3IKKyAgICAgICAg
ICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBTZWdtZW50U2VwYXJhdG9yCisgICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV2hpdGVTcGFjZU5ldXRyYWwK
KyAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBPdGhlck5ldXRyYWwp
OworICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBPdGhlck5ldXRyYWwpCiAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5jb250ZXh0LT5kaXIoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0gTGVmdFRvUmln
aHQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBi
aWRpLmxhc3QgTAotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdU
Rjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6RXVy
b3BlYW5OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0g
RXVyb3BlYW5OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nICE9IExlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5kaXIgPSBFdXJvcGVhbk51bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFdURjo6VW5pY29kZTo6QXJh
YmljTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5p
Y29kZTo6QXJhYmljTnVtYmVyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGku
c3RhdHVzLmVvciA9PSBBcmFiaWNOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyID0gQXJhYmljTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAh
PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGJpZGkuc3RhdHVzLmVvciAhPSBMZWZ0VG9SaWdodCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3Rh
dHVzLmVvciAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0ICYmIGJpZGkuc3RhdHVzLmVvciAh
PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFJpZ2h0VG9MZWZ0ICYmIGJpZGkuc3RhdHVzLmVvciAh
PSBSaWdodFRvTGVmdEFyYWJpYykKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkp
OwogICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAgICAgfQpA
QCAtNjcxLDE1ICs2NzQsMTUgQEAgc3RhdGljIHZvaWQgZW1iZWQoV1RGOjpVbmljb2RlOjpEaXJl
Y3RpbwogICAgICAgICAgICAgYmlkaS5lb3Iub2JqID0gMDsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIHJ1bkRpcjsKLSAgICAgICAgaWYg
KGQgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZyB8fCBkID09IFdURjo6VW5p
Y29kZTo6UmlnaHRUb0xlZnRPdmVycmlkZSkKLSAgICAgICAgICAgIHJ1bkRpciA9IFdURjo6VW5p
Y29kZTo6UmlnaHRUb0xlZnQ7CisgICAgICAgIERpcmVjdGlvbiBydW5EaXI7CisgICAgICAgIGlm
IChkID09IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nIHx8IGQgPT0gUmlnaHRUb0xlZnRPdmVycmlkZSkK
KyAgICAgICAgICAgIHJ1bkRpciA9IFJpZ2h0VG9MZWZ0OwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBydW5EaXIgPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OwotICAgICAgICBib29sIG92
ZXJyaWRlID0gZCA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0T3ZlcnJpZGUgfHwgZCA9PSBX
VEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGU7CisgICAgICAgICAgICBydW5EaXIgPSBM
ZWZ0VG9SaWdodDsKKyAgICAgICAgYm9vbCBvdmVycmlkZSA9IGQgPT0gTGVmdFRvUmlnaHRPdmVy
cmlkZSB8fCBkID09IFJpZ2h0VG9MZWZ0T3ZlcnJpZGU7CiAKICAgICAgICAgdW5zaWduZWQgY2hh
ciBsZXZlbCA9IGJpZGkuY29udGV4dC0+bGV2ZWw7Ci0gICAgICAgIGlmIChydW5EaXIgPT0gV1RG
OjpVbmljb2RlOjpSaWdodFRvTGVmdCkgeworICAgICAgICBpZiAocnVuRGlyID09IFJpZ2h0VG9M
ZWZ0KSB7CiAgICAgICAgICAgICBpZiAobGV2ZWwlMikgLy8gd2UgaGF2ZSBhbiBvZGQgbGV2ZWwK
ICAgICAgICAgICAgICAgICBsZXZlbCArPSAyOwogICAgICAgICAgICAgZWxzZQpAQCAtNjkzLDQ3
ICs2OTYsNDcgQEAgc3RhdGljIHZvaWQgZW1iZWQoV1RGOjpVbmljb2RlOjpEaXJlY3RpbwogCiAg
ICAgICAgIGlmIChsZXZlbCA8IDYxKSB7CiAgICAgICAgICAgICBpZiAoIWVtcHR5UnVuICYmIGJp
ZGkuZW9yICE9IGJpZGkubGFzdCkgewotICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1
cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpOworICAgICAgICAgICAgICAgIGFz
c2VydChiaWRpLnN0YXR1cy5lb3IgIT0gT3RoZXJOZXV0cmFsKTsKICAgICAgICAgICAgICAgICAv
LyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5k
IHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2Rl
OjpFdXJvcGVhbk51bWJlclNlcGFyYXRvcgotICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0
YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yCi0gICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpDb21t
b25OdW1iZXJTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFz
dCA9PSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbAotICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdURjo6VW5pY29kZTo6QmxvY2tTZXBhcmF0b3IKLSAgICAg
ICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6OlNlZ21l
bnRTZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBX
VEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsCi0gICAgICAgICAgICAgICAgICAgIHx8IGJp
ZGkuc3RhdHVzLmxhc3QgPT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpOwotICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmRpciA9PSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbCkKKyAgICAg
ICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMubGFzdCA9PSBFdXJvcGVhbk51bWJlclNlcGFy
YXRvcgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IEV1cm9wZWFu
TnVtYmVyVGVybWluYXRvcgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0
ID09IENvbW1vbk51bWJlclNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0
YXR1cy5sYXN0ID09IEJvdW5kYXJ5TmV1dHJhbAorICAgICAgICAgICAgICAgICAgICB8fCBiaWRp
LnN0YXR1cy5sYXN0ID09IEJsb2NrU2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgIHx8IGJp
ZGkuc3RhdHVzLmxhc3QgPT0gU2VnbWVudFNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFdoaXRlU3BhY2VOZXV0cmFsCisgICAgICAgICAgICAgICAg
ICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gT3RoZXJOZXV0cmFsKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYmlkaS5kaXIgPT0gT3RoZXJOZXV0cmFsKQogICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IHJ1bkRpcjsKLSAgICAgICAgICAgICAgICBpZiAocnVuRGlyID09IFdURjo6VW5pY29k
ZTo6TGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocnVuRGlyID09IExlZnRUb1Jp
Z2h0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4g
YmlkaS5sYXN0IEwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBX
VEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6OkV1
cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09
IEV1cm9wZWFuTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0
dXMubGFzdFN0cm9uZyAhPSBMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gRXVyb3BlYW5OdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRp
LmNvbnRleHQtPmRpcigpICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVm
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAh
PSBMZWZ0VG9SaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBSaWdodFRvTGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpVbmljb2RlOjpBcmFiaWNO
dW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2Rl
OjpBcmFiaWNOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0
dXMuZW9yID09IEFyYWJpY051bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBBcmFiaWNOdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlk
aSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBX
VEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YmlkaS5jb250ZXh0LT5kaXIoKSAhPSBMZWZ0VG9SaWdodCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLmRpciA9IFJpZ2h0VG9MZWZ0OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gV1RGOjpVbmlj
b2RlOjpMZWZ0VG9SaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29u
dGV4dC0+ZGlyKCkgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCB8fCBiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nID09IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IExlZnRUb1JpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBMZWZ0VG9SaWdodCB8
fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IExlZnRUb1JpZ2h0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6
UmlnaHRUb0xlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBSaWdo
dFRvTGVmdDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYmlkaS5zdGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgJiYgYmlkaS5z
dGF0dXMuZW9yICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRBcmFiaWMpIHsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBSaWdodFRvTGVmdCAmJiBiaWRp
LnN0YXR1cy5lb3IgIT0gUmlnaHRUb0xlZnRBcmFiaWMpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgUjsgYmlkaS5lb3I9TC9FTi9B
TjsgRU4sQU4gYmVoYXZlIGxpa2UgUiAocnVsZSBOMSkKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuY29udGV4dC0+ZGlyKCkgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCB8fCBiaWRp
LnN0YXR1cy5sYXN0U3Ryb25nID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgfHwgYmlkaS5z
dGF0dXMubGFzdFN0cm9uZyA9PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBSaWdodFRvTGVmdCB8
fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFJpZ2h0VG9MZWZ0IHx8IGJpZGkuc3RhdHVzLmxh
c3RTdHJvbmcgPT0gUmlnaHRUb0xlZnRBcmFiaWMpCiAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gTGVmdFRvUmlnaHQ7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAgICAgfQpA
QCAtMTAxMyw3ICsxMDE2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNv
bnN0IAogICAgIHNMYXN0QmlkaVJ1biA9IDA7CiAgICAgc0JpZGlSdW5Db3VudCA9IDA7CiAKLSAg
ICBhc3NlcnQoYmlkaS5kaXIgPT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpOworICAgIGFz
c2VydChiaWRpLmRpciA9PSBPdGhlck5ldXRyYWwpOwogCiAgICAgZW1wdHlSdW4gPSB0cnVlOwog
CkBAIC0xMDI3LDcgKzEwMzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUo
Y29uc3QgCiAgICAgQmlkaVN0YXRlIHN0YXRlQXRFbmQ7CiAKICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkaXJDdXJyZW50OworICAgICAgICBEaXJl
Y3Rpb24gZGlyQ3VycmVudDsKICAgICAgICAgaWYgKHBhc3RFbmQgJiYgKHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSB8fCBiaWRpLmN1cnJlbnQuYXRFbmQoKSkpIHsKICAgICAgICAgICAgIEJpZGlD
b250ZXh0ICpjID0gYmlkaS5jb250ZXh0LmdldCgpOwogICAgICAgICAgICAgd2hpbGUgKGMtPnBh
cmVudCkKQEAgLTEwNDQsNzUgKzEwNDcsNzUgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3Jk
ZXJMaW5lKGNvbnN0IAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGlyQ3VycmVudCA9
IGJpZGkuY3VycmVudC5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQt
Pm92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gV1RGOjpVbmlj
b2RlOjpSaWdodFRvTGVmdEVtYmVkZGluZwotICAgICAgICAgICAgICAgICAgICAmJiBkaXJDdXJy
ZW50ICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmcKLSAgICAgICAgICAgICAg
ICAgICAgJiYgZGlyQ3VycmVudCAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGUK
LSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBXVEY6OlVuaWNvZGU6OkxlZnRU
b1JpZ2h0T3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBXVEY6
OlVuaWNvZGU6OlBvcERpcmVjdGlvbmFsRm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAmJiBk
aXJDdXJyZW50ICE9IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nCisgICAgICAgICAgICAgICAgICAgICYm
IGRpckN1cnJlbnQgIT0gTGVmdFRvUmlnaHRFbWJlZGRpbmcKKyAgICAgICAgICAgICAgICAgICAg
JiYgZGlyQ3VycmVudCAhPSBSaWdodFRvTGVmdE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAg
ICYmIGRpckN1cnJlbnQgIT0gTGVmdFRvUmlnaHRPdmVycmlkZQorICAgICAgICAgICAgICAgICAg
ICAmJiBkaXJDdXJyZW50ICE9IFBvcERpcmVjdGlvbmFsRm9ybWF0KQogICAgICAgICAgICAgICAg
IGRpckN1cnJlbnQgPSBiaWRpLmNvbnRleHQtPmRpcigpOwotICAgICAgICAgICAgZWxzZSBpZiAo
ZGlyQ3VycmVudCA9PSBXVEY6OlVuaWNvZGU6Ok5vblNwYWNpbmdNYXJrKQorICAgICAgICAgICAg
ZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBOb25TcGFjaW5nTWFyaykKICAgICAgICAgICAgICAgICBk
aXJDdXJyZW50ID0gYmlkaS5zdGF0dXMubGFzdDsKICAgICAgICAgfQogCi0gICAgICAgIGFzc2Vy
dChiaWRpLnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWwpOworICAgICAg
ICBhc3NlcnQoYmlkaS5zdGF0dXMuZW9yICE9IE90aGVyTmV1dHJhbCk7CiAgICAgICAgIHN3aXRj
aCAoZGlyQ3VycmVudCkgewogCiAgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChY
MS1YOSBpbiB0aGUgQmlkaSBzcGVjcykKLSAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0RW1iZWRkaW5nOgotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRF
bWJlZGRpbmc6Ci0gICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRl
OgotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRPdmVycmlkZToKLSAgICAg
ICAgY2FzZSBXVEY6OlVuaWNvZGU6OlBvcERpcmVjdGlvbmFsRm9ybWF0OgorICAgICAgICBjYXNl
IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nOgorICAgICAgICBjYXNlIExlZnRUb1JpZ2h0RW1iZWRkaW5n
OgorICAgICAgICBjYXNlIFJpZ2h0VG9MZWZ0T3ZlcnJpZGU6CisgICAgICAgIGNhc2UgTGVmdFRv
UmlnaHRPdmVycmlkZToKKyAgICAgICAgY2FzZSBQb3BEaXJlY3Rpb25hbEZvcm1hdDoKICAgICAg
ICAgICAgIGVtYmVkKGRpckN1cnJlbnQsIGJpZGkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIC8vIHN0cm9uZyB0eXBlcwotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6TGVm
dFRvUmlnaHQ6CisgICAgICAgIGNhc2UgTGVmdFRvUmlnaHQ6CiAgICAgICAgICAgICBzd2l0Y2go
YmlkaS5zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpS
aWdodFRvTGVmdDoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xl
ZnRBcmFiaWM6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVt
YmVyOgotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpBcmFiaWNOdW1iZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0ICE9IFdURjo6VW5pY29kZTo6
RXVyb3BlYW5OdW1iZXIgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBXVEY6OlVuaWNvZGU6
OkxlZnRUb1JpZ2h0KQorICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAg
ICAgICAgICAgY2FzZSBSaWdodFRvTGVmdEFyYWJpYzoKKyAgICAgICAgICAgICAgICBjYXNlIEV1
cm9wZWFuTnVtYmVyOgorICAgICAgICAgICAgICAgIGNhc2UgQXJhYmljTnVtYmVyOgorICAgICAg
ICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBFdXJvcGVhbk51bWJlciB8fCBi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IExlZnRUb1JpZ2h0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBMZWZ0VG9SaWdodDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgotICAg
ICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I6
Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkNvbW1vbk51bWJlclNlcGFyYXRv
cjoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Qm91bmRhcnlOZXV0cmFsOgot
ICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCbG9ja1NlcGFyYXRvcjoKLSAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6U2VnbWVudFNlcGFyYXRvcjoKLSAgICAgICAg
ICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWw6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBX
VEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVh
bk51bWJlclNlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyVGVy
bWluYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIENvbW1vbk51bWJlclNlcGFyYXRvcjoKKyAg
ICAgICAgICAgICAgICBjYXNlIEJvdW5kYXJ5TmV1dHJhbDoKKyAgICAgICAgICAgICAgICBjYXNl
IEJsb2NrU2VwYXJhdG9yOgorICAgICAgICAgICAgICAgIGNhc2UgU2VnbWVudFNlcGFyYXRvcjoK
KyAgICAgICAgICAgICAgICBjYXNlIFdoaXRlU3BhY2VOZXV0cmFsOgorICAgICAgICAgICAgICAg
IGNhc2UgT3RoZXJOZXV0cmFsOgorICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMu
ZW9yID09IEV1cm9wZWFuTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyAhPSBMZWZ0VG9SaWdodCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBudW1iZXJzIG5lZWQgdG8gYmUgb24gYSBoaWdoZXIgZW1iZWRkaW5n
IGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IEV1cm9wZWFuTnVtYmVyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkg
IT0gTGVmdFRvUmlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpSaWdodFRv
TGVmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBSaWdodFRv
TGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpV
bmljb2RlOjpBcmFiaWNOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChi
aWRpLnN0YXR1cy5lb3IgPT0gQXJhYmljTnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBcmFiaWMgbnVtYmVycyBhcmUgYWx3YXlzIG9uIGEgaGlnaGVyIGVtYmVkZGluZyBsZXZl
bCwgc28gbGV0J3MgY2xvc2UgdGhhdCBydW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gV1RGOjpVbmljb2RlOjpBcmFiaWNOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmRpciA9IEFyYWJpY051bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRp
cigpICE9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpICE9IExlZnRUb1JpZ2h0KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJl
Y3Rpb24sIHdoaWNoIGlzIFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6
VW5pY29kZTo6UmlnaHRUb0xlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBSaWdodFRvTGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
YmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZihiaWRpLnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgewor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoYmlkaS5zdGF0dXMuZW9yICE9IExlZnRUb1Jp
Z2h0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvL2xhc3Qgc3R1ZmYgdGFrZXMgZW1iZWRk
aW5nIGRpcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkg
IT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9
IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiaWRpLmNvbnRleHQtPmRpcigpICE9IExlZnRUb1JpZ2h0ICYmIGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgIT0gTGVmdFRvUmlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmVvciA9IGJpZGkubGFzdDsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZGlyID0gUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7IAogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0xMTIwLDM0ICsxMTIzLDM0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVy
TGluZShjb25zdCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgIGJpZGkuc3Rh
dHVzLmVvciA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7Ci0gICAgICAgICAgICBiaWRpLnN0
YXR1cy5sYXN0U3Ryb25nID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKLSAgICAgICAgICAg
IGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIGJpZGku
c3RhdHVzLmVvciA9IExlZnRUb1JpZ2h0OworICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0
cm9uZyA9IExlZnRUb1JpZ2h0OworICAgICAgICAgICAgYmlkaS5kaXIgPSBMZWZ0VG9SaWdodDsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xl
ZnRBcmFiaWM6Ci0gICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDoKKyAgICAg
ICAgY2FzZSBSaWdodFRvTGVmdEFyYWJpYzoKKyAgICAgICAgY2FzZSBSaWdodFRvTGVmdDoKICAg
ICAgICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNh
c2UgV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6
VW5pY29kZTo6RXVyb3BlYW5OdW1iZXI6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNv
ZGU6OkFyYWJpY051bWJlcjoKKyAgICAgICAgICAgICAgICBjYXNlIExlZnRUb1JpZ2h0OgorICAg
ICAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5OdW1iZXI6CisgICAgICAgICAgICAgICAgY2FzZSBB
cmFiaWNOdW1iZXI6CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAg
ICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljOgorICAgICAgICAgICAgICAg
IGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAgICAgICAgICAgY2FzZSBSaWdodFRvTGVmdEFyYWJp
YzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6
OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgotICAgICAgICAgICAgICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OkNvbW1vbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAgICAgICAg
ICBjYXNlIFdURjo6VW5pY29kZTo6Qm91bmRhcnlOZXV0cmFsOgotICAgICAgICAgICAgICAgIGNh
c2UgV1RGOjpVbmljb2RlOjpCbG9ja1NlcGFyYXRvcjoKLSAgICAgICAgICAgICAgICBjYXNlIFdU
Rjo6VW5pY29kZTo6U2VnbWVudFNlcGFyYXRvcjoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6
VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVu
aWNvZGU6Ok90aGVyTmV1dHJhbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVz
LmVvciAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0ICYmIGJpZGkuc3RhdHVzLmVvciAhPSBX
VEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKSB7CisgICAgICAgICAgICAgICAgY2FzZSBF
dXJvcGVhbk51bWJlclNlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVt
YmVyVGVybWluYXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIENvbW1vbk51bWJlclNlcGFyYXRv
cjoKKyAgICAgICAgICAgICAgICBjYXNlIEJvdW5kYXJ5TmV1dHJhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIEJsb2NrU2VwYXJhdG9yOgorICAgICAgICAgICAgICAgIGNhc2UgU2VnbWVudFNlcGFy
YXRvcjoKKyAgICAgICAgICAgICAgICBjYXNlIFdoaXRlU3BhY2VOZXV0cmFsOgorICAgICAgICAg
ICAgICAgIGNhc2UgT3RoZXJOZXV0cmFsOgorICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5z
dGF0dXMuZW9yICE9IFJpZ2h0VG9MZWZ0ICYmIGJpZGkuc3RhdHVzLmVvciAhPSBSaWdodFRvTGVm
dEFyYWJpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRha2VzIGVt
YmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRp
cigpICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0
QXJhYmljKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIo
KSAhPSBSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFJpZ2h0VG9MZWZ0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAh
PSBSaWdodFRvTGVmdEFyYWJpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0g
V1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLmRpciA9IExlZnRUb1JpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0xMTU1LDk5ICsxMTU4LDk5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGlu
ZShjb25zdCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgIGJpZGkuc3RhdHVz
LmVvciA9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBSaWdodFRvTGVmdDsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
PSBkaXJDdXJyZW50OwotICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0OworICAgICAgICAgICAgYmlkaS5kaXIgPSBSaWdodFRvTGVmdDsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAvLyB3ZWFrIHR5cGVzOgogCi0gICAgICAgIGNhc2UgV1RG
OjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjoKLSAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nICE9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRBcmFiaWMpIHsKKyAgICAgICAg
Y2FzZSBFdXJvcGVhbk51bWJlcjoKKyAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nICE9IFJpZ2h0VG9MZWZ0QXJhYmljKSB7CiAgICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBz
dHJvbmcgd2FzIEFMIGNoYW5nZSBFTiB0byBBTgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmlk
aS5zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6
RXVyb3BlYW5OdW1iZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpM
ZWZ0VG9SaWdodDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFdXJvcGVhbk51bWJlcjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBMZWZ0VG9SaWdodDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRU
b0xlZnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRvTGVm
dEFyYWJpYzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkFyYWJpY051
bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSaWdodFRvTGVmdDoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBSaWdodFRvTGVmdEFyYWJpYzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmFiaWNOdW1iZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGku
bGFzdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gRXVyb3BlYW5OdW1iZXI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6
OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIFdURjo6VW5pY29kZTo6Q29tbW9uTnVtYmVyU2VwYXJhdG9yOgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVt
YmVyKQorICAgICAgICAgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENvbW1vbk51bWJlclNlcGFyYXRvcjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gRXVyb3BlYW5OdW1iZXIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWw6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCbG9ja1NlcGFyYXRvcjoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlNlZ21lbnRTZXBhcmF0b3I6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNlTmV1dHJhbDoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVm
dCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEV1cm9wZWFuTnVtYmVyVGVybWluYXRvcjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBCb3VuZGFyeU5ldXRyYWw6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQmxvY2tTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2Vn
bWVudFNlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBXaGl0ZVNwYWNlTmV1dHJh
bDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBPdGhlck5ldXRyYWw6CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFJpZ2h0VG9MZWZ0KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgZ28gdG8gUgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5zdGF0dXMubGFzdCA9PSBXVEY6OlVuaWNvZGU6
OkV1cm9wZWFuTnVtYmVyVGVybWluYXRvciA/IGJpZGkubGFzdEJlZm9yZUVUIDogYmlkaS5sYXN0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5zdGF0dXMubGFz
dCA9PSBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IgPyBiaWRpLmxhc3RCZWZvcmVFVCA6IGJpZGku
bGFzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFu
TnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5l
b3IgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGJpZGkuc3RhdHVzLmVvciAhPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVt
YmVyIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdo
dCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyICE9IFdURjo6
VW5pY29kZTo6TGVmdFRvUmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IEV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChiaWRpLnN0YXR1cy5lb3IgIT0gTGVmdFRvUmlnaHQgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChiaWRpLnN0YXR1cy5lb3IgIT0gRXVyb3BlYW5OdW1iZXIgfHwgYmlkaS5z
dGF0dXMubGFzdFN0cm9uZyAhPSBMZWZ0VG9SaWdodCkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyICE9IExlZnRUb1JpZ2h0KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbnVtYmVycyBvbiBib3RoIHNpZGVzLCBuZXV0cmFscyBnZXQgcmlnaHQg
dG8gbGVmdCBkaXJlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
YmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLnN0YXR1
cy5sYXN0ID09IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yID8gYmlkaS5s
YXN0QmVmb3JlRVQgOiBiaWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5kaXIgPSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5zdGF0dXMubGFzdCA9PSBFdXJvcGVhbk51bWJlclRlcm1p
bmF0b3IgPyBiaWRpLmxhc3RCZWZvcmVFVCA6IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFJpZ2h0VG9MZWZ0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmlkaS5kaXIgPSBFdXJvcGVhbk51bWJlcjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBXVEY6OlVu
aWNvZGU6OkV1cm9wZWFuTnVtYmVyOwotICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBX
VEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbCkKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OworICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVz
LmVvciA9IEV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBP
dGhlck5ldXRyYWwpCisgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gTGVmdFRvUmlnaHQ7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgV1RG
OjpVbmljb2RlOjpBcmFiaWNOdW1iZXI6Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gV1RGOjpV
bmljb2RlOjpBcmFiaWNOdW1iZXI7CisgICAgICAgIGNhc2UgQXJhYmljTnVtYmVyOgorICAgICAg
ICAgICAgZGlyQ3VycmVudCA9IEFyYWJpY051bWJlcjsKICAgICAgICAgICAgIHN3aXRjaCAoYmlk
aS5zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpMZWZ0
VG9SaWdodDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgPT0g
V1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgICAgICAgICBjYXNlIExlZnRUb1Jp
Z2h0OgorICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBMZWZ0
VG9SaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6
OkFyYWJpY051bWJlcjoKKyAgICAgICAgICAgICAgICBjYXNlIEFyYWJpY051bWJlcjoKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6
OlJpZ2h0VG9MZWZ0OgotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRv
TGVmdEFyYWJpYzoKLSAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5O
dW1iZXI6CisgICAgICAgICAgICAgICAgY2FzZSBSaWdodFRvTGVmdDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFJpZ2h0VG9MZWZ0QXJhYmljOgorICAgICAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5O
dW1iZXI6CiAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBhcmF0
b3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gV1RGOjpVbmlj
b2RlOjpBcmFiaWNOdW1iZXIpCisgICAgICAgICAgICAgICAgY2FzZSBDb21tb25OdW1iZXJTZXBh
cmF0b3I6CisgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gQXJhYmlj
TnVtYmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgotICAgICAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbDoKLSAgICAgICAgICAg
ICAgICBjYXNlIFdURjo6VW5pY29kZTo6QmxvY2tTZXBhcmF0b3I6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OlNlZ21lbnRTZXBhcmF0b3I6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOgotICAgICAgICAgICAgICAgIGNhc2Ug
V1RGOjpVbmljb2RlOjpPdGhlck5ldXRyYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRp
LnN0YXR1cy5lb3IgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1cy5l
b3IgIT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYykgeworICAgICAgICAgICAgICAg
IGNhc2UgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBFdXJv
cGVhbk51bWJlclRlcm1pbmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBCb3VuZGFyeU5ldXRy
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBCbG9ja1NlcGFyYXRvcjoKKyAgICAgICAgICAgICAg
ICBjYXNlIFNlZ21lbnRTZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgY2FzZSBXaGl0ZVNwYWNl
TmV1dHJhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE90aGVyTmV1dHJhbDoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBSaWdodFRvTGVmdCAmJiBiaWRpLnN0YXR1
cy5lb3IgIT0gUmlnaHRUb0xlZnRBcmFiaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHJ1biBvZiBMIGJlZm9yZSBuZXV0cmFscywgbmV1dHJhbHMgdGFrZSBlbWJlZGRpbmcgZGlyIChO
MikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpID09IFdU
Rjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBXVEY6
OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0QXJhYmljKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBSaWdo
dFRvTGVmdCB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFJpZ2h0VG9MZWZ0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBSaWdodFRv
TGVmdEFyYWJpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbWJlZGRp
bmcgZGlyZWN0aW9uIGlzIFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSB0
aGUgTCBydW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgYmVjb21lIGFuIFIgcnVuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUmlnaHRUb0xl
ZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uIGlzIEwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcHBlbmQgbmV1dHJhbHMgdG8gdGhlIEwgcnVuIGFuZCBjbG9zZSBp
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gV1RGOjpVbmljb2RlOjpM
ZWZ0VG9SaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IExlZnRU
b1JpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwpAQCAtMTI1NiwzNyAr
MTI1OSwzNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBXVEY6OlVu
aWNvZGU6OkFyYWJpY051bWJlcjsKLSAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBXVEY6OlVu
aWNvZGU6Ok90aGVyTmV1dHJhbCkKLSAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5p
Y29kZTo6QXJhYmljTnVtYmVyOworICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gQXJhYmlj
TnVtYmVyOworICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IE90aGVyTmV1dHJhbCkKKyAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IEFyYWJpY051bWJlcjsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJTZXBhcmF0b3I6Ci0gICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpDb21tb25OdW1iZXJTZXBhcmF0b3I6CisgICAgICAgIGNh
c2UgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3I6CisgICAgICAgIGNhc2UgQ29tbW9uTnVtYmVyU2Vw
YXJhdG9yOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpF
dXJvcGVhbk51bWJlclRlcm1pbmF0b3I6Ci0gICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFz
dCA9PSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgZGly
Q3VycmVudCA9IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXI7CisgICAgICAgIGNhc2UgRXVy
b3BlYW5OdW1iZXJUZXJtaW5hdG9yOgorICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3Qg
PT0gRXVyb3BlYW5OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gRXVyb3Bl
YW5OdW1iZXI7CiAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAg
ICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVy
VGVybWluYXRvcikKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBF
dXJvcGVhbk51bWJlclRlcm1pbmF0b3IpCiAgICAgICAgICAgICAgICAgYmlkaS5sYXN0QmVmb3Jl
RVQgPSBlbXB0eVJ1biA/IGJpZGkuZW9yIDogYmlkaS5sYXN0OwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgLy8gYm91bmRhcnkgbmV1dHJhbHMgc2hvdWxkIGJlIGlnbm9yZWQKLSAgICAg
ICAgY2FzZSBXVEY6OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbDoKKyAgICAgICAgY2FzZSBCb3Vu
ZGFyeU5ldXRyYWw6CiAgICAgICAgICAgICBpZiAoYmlkaS5lb3IgPT0gYmlkaS5sYXN0KQogICAg
ICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAvLyBuZXV0cmFscwotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6Qmxv
Y2tTZXBhcmF0b3I6CisgICAgICAgIGNhc2UgQmxvY2tTZXBhcmF0b3I6CiAgICAgICAgICAgICAv
LyAjIyMgd2hhdCBkbyB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFwaCBzZXBlcmF0b3Jz
IHRoYXQgY29tZSB0byBoZXJlPwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV1RG
OjpVbmljb2RlOjpTZWdtZW50U2VwYXJhdG9yOgorICAgICAgICBjYXNlIFNlZ21lbnRTZXBhcmF0
b3I6CiAgICAgICAgICAgICAvLyAjIyMgaW1wbGVtZW50IHJ1bGUgTDEKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5ldXRyYWw6CisgICAg
ICAgIGNhc2UgV2hpdGVTcGFjZU5ldXRyYWw6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbDoKKyAgICAgICAgY2FzZSBPdGhlck5ldXRy
YWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTI5NywxMyArMTMwMCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRl
ckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgaWYgKCFiaWRpLnJlYWNoZWRFbmRPZkxpbmUp
IHsKICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmVuZE9mTGluZTsKICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChiaWRpLnN0YXR1cy5lb3IpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpBcmFiaWNOdW1iZXI6CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIExlZnRUb1JpZ2h0OgorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBSaWdodFRvTGVmdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJhYmljTnVtYmVy
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5zdGF0dXMuZW9y
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBXVEY6OlVu
aWNvZGU6OkxlZnRUb1JpZ2h0ID8gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCA6IFdURjo6VW5p
Y29kZTo6RXVyb3BlYW5OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEV1cm9w
ZWFuTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5z
dGF0dXMubGFzdFN0cm9uZyA9PSBMZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0IDogRXVyb3BlYW5O
dW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChm
YWxzZSk7CkBAIC0xMzExLDQ0ICsxMzE0LDQ0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9y
ZGVyTGluZShjb25zdCAKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBiaWRpID0gc3RhdGVBdEVuZDsKLSAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsOworICAgICAg
ICAgICAgICAgIGJpZGkuZGlyID0gT3RoZXJOZXV0cmFsOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gc2V0IHN0YXR1cy5sYXN0
IGFzIG5lZWRlZC4KICAgICAgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7Ci0gICAgICAgICAgICBj
YXNlIFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOgotICAgICAgICAgICAg
ICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0ICE9IFdURjo6VW5pY29kZTo6RXVyb3BlYW5OdW1iZXIp
Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBXVEY6OlVuaWNvZGU6OkV1
cm9wZWFuTnVtYmVyVGVybWluYXRvcjsKKyAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5OdW1iZXJU
ZXJtaW5hdG9yOgorICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0ICE9IEV1cm9w
ZWFuTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gRXVyb3Bl
YW5OdW1iZXJUZXJtaW5hdG9yOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOgotICAgICAgICAgICAg
Y2FzZSBXVEY6OlVuaWNvZGU6OkNvbW1vbk51bWJlclNlcGFyYXRvcjoKLSAgICAgICAgICAgIGNh
c2UgV1RGOjpVbmljb2RlOjpTZWdtZW50U2VwYXJhdG9yOgotICAgICAgICAgICAgY2FzZSBXVEY6
OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOgotICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNv
ZGU6Ok90aGVyTmV1dHJhbDoKKyAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5OdW1iZXJTZXBhcmF0
b3I6CisgICAgICAgICAgICBjYXNlIENvbW1vbk51bWJlclNlcGFyYXRvcjoKKyAgICAgICAgICAg
IGNhc2UgU2VnbWVudFNlcGFyYXRvcjoKKyAgICAgICAgICAgIGNhc2UgV2hpdGVTcGFjZU5ldXRy
YWw6CisgICAgICAgICAgICBjYXNlIE90aGVyTmV1dHJhbDoKICAgICAgICAgICAgICAgICBzd2l0
Y2goYmlkaS5zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5p
Y29kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2Rl
OjpSaWdodFRvTGVmdDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJp
Z2h0VG9MZWZ0QXJhYmljOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6
RXVyb3BlYW5OdW1iZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpB
cmFiaWNOdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGVmdFRvUmlnaHQ6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRUb0xlZnQ6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgUmlnaHRUb0xlZnRBcmFiaWM6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRXVyb3BlYW5O
dW1iZXI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJhYmljTnVtYmVyOgogICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBXVEY6OlVuaWNvZGU6Ok90aGVy
TmV1dHJhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBPdGhl
ck5ldXRyYWw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpOb25TcGFjaW5nTWFyazoKLSAgICAgICAg
ICAgIGNhc2UgV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWw6Ci0gICAgICAgICAgICBjYXNl
IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnRFbWJlZGRpbmc6Ci0gICAgICAgICAgICBjYXNlIFdU
Rjo6VW5pY29kZTo6TGVmdFRvUmlnaHRFbWJlZGRpbmc6Ci0gICAgICAgICAgICBjYXNlIFdURjo6
VW5pY29kZTo6UmlnaHRUb0xlZnRPdmVycmlkZToKLSAgICAgICAgICAgIGNhc2UgV1RGOjpVbmlj
b2RlOjpMZWZ0VG9SaWdodE92ZXJyaWRlOgotICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6
OlBvcERpcmVjdGlvbmFsRm9ybWF0OgorICAgICAgICAgICAgY2FzZSBOb25TcGFjaW5nTWFyazoK
KyAgICAgICAgICAgIGNhc2UgQm91bmRhcnlOZXV0cmFsOgorICAgICAgICAgICAgY2FzZSBSaWdo
dFRvTGVmdEVtYmVkZGluZzoKKyAgICAgICAgICAgIGNhc2UgTGVmdFRvUmlnaHRFbWJlZGRpbmc6
CisgICAgICAgICAgICBjYXNlIFJpZ2h0VG9MZWZ0T3ZlcnJpZGU6CisgICAgICAgICAgICBjYXNl
IExlZnRUb1JpZ2h0T3ZlcnJpZGU6CisgICAgICAgICAgICBjYXNlIFBvcERpcmVjdGlvbmFsRm9y
bWF0OgogICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGVzZQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OkV1cm9wZWFuTnVtYmVyOgorICAg
ICAgICAgICAgY2FzZSBFdXJvcGVhbk51bWJlcjoKICAgICAgICAgICAgICAgICAvLyBmYWxsIHRo
cm91Z2gKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMu
bGFzdCA9IGRpckN1cnJlbnQ7CkBAIC0xMzU2LDExICsxMzU5LDExIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKIAogICAgICAgICBiaWRpLmxhc3QgPSBiaWRpLmN1
cnJlbnQ7CiAKLSAgICAgICAgaWYgKGVtcHR5UnVuICYmICEoZGlyQ3VycmVudCA9PSBXVEY6OlVu
aWNvZGU6OlJpZ2h0VG9MZWZ0RW1iZWRkaW5nCi0gICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVu
dCA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0RW1iZWRkaW5nCi0gICAgICAgICAgICAgICAg
fHwgZGlyQ3VycmVudCA9PSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9MZWZ0T3ZlcnJpZGUKLSAgICAg
ICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHRPdmVy
cmlkZQotICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpQb3BE
aXJlY3Rpb25hbEZvcm1hdCkpIHsKKyAgICAgICAgaWYgKGVtcHR5UnVuICYmICEoZGlyQ3VycmVu
dCA9PSBSaWdodFRvTGVmdEVtYmVkZGluZworICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQg
PT0gTGVmdFRvUmlnaHRFbWJlZGRpbmcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09
IFJpZ2h0VG9MZWZ0T3ZlcnJpZGUKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IExl
ZnRUb1JpZ2h0T3ZlcnJpZGUKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFBvcERp
cmVjdGlvbmFsRm9ybWF0KSkgewogICAgICAgICAgICAgYmlkaS5zb3IgPSBiaWRpLmN1cnJlbnQ7
CiAgICAgICAgICAgICBlbXB0eVJ1biA9IGZhbHNlOwogICAgICAgICB9CkBAIC0xMzcwLDExICsx
MzczLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAg
ICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSB0cnVlOwogICAgICAgICBiaWRpLmN1cnJlbnQuaW5j
cmVtZW50KGJpZGkpOwogICAgICAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IGZhbHNlOwotICAg
ICAgICBpZiAoZW1wdHlSdW4gJiYgKGRpckN1cnJlbnQgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRv
TGVmdEVtYmVkZGluZwotICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQgPT0gV1RGOjpVbmlj
b2RlOjpMZWZ0VG9SaWdodEVtYmVkZGluZwotICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQg
PT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgfHwg
ZGlyQ3VycmVudCA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0T3ZlcnJpZGUKLSAgICAgICAg
ICAgICAgICB8fCBkaXJDdXJyZW50ID09IFdURjo6VW5pY29kZTo6UG9wRGlyZWN0aW9uYWxGb3Jt
YXQpKSB7CisgICAgICAgIGlmIChlbXB0eVJ1biAmJiAoZGlyQ3VycmVudCA9PSBSaWdodFRvTGVm
dEVtYmVkZGluZworICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQgPT0gTGVmdFRvUmlnaHRF
bWJlZGRpbmcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFJpZ2h0VG9MZWZ0T3Zl
cnJpZGUKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IExlZnRUb1JpZ2h0T3ZlcnJp
ZGUKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFBvcERpcmVjdGlvbmFsRm9ybWF0
KSkgewogICAgICAgICAgICAgLy8gZXhjbHVkZSB0aGUgZW1iZWRkaW5nIGNoYXIgaXRzZWxmIGZy
b20gdGhlIG5ldyBydW4gc28gdGhhdCBBVFNVSSB3aWxsIG5ldmVyIHNlZSBpdAogICAgICAgICAg
ICAgYmlkaS5lb3Iub2JqID0gMDsKICAgICAgICAgICAgIGJpZGkubGFzdCA9IGJpZGkuY3VycmVu
dDsKQEAgLTE1NTcsMTggKzE1NjAsMTggQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZQogCiAgICAgICAgIEJpZGlDb250ZXh0ICpzdGFydEVtYmVkOwogICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICBzdGFydEVtYmVk
ID0gbmV3IEJpZGlDb250ZXh0KCAwLCBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0LCBOVUxMLCBz
dHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlICk7Ci0gICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OworICAgICAgICAgICAgc3RhcnRF
bWJlZCA9IG5ldyBCaWRpQ29udGV4dCgwLCBMZWZ0VG9SaWdodCwgTlVMTCwgc3R5bGUoKS0+dW5p
Y29kZUJpZGkoKSA9PSBPdmVycmlkZSk7CisgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBM
ZWZ0VG9SaWdodDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXJ0RW1iZWQgPSBu
ZXcgQmlkaUNvbnRleHQoIDEsIFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQsIE5VTEwsIHN0eWxl
KCktPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUgKTsKLSAgICAgICAgICAgIGJpZGkuc3RhdHVz
LmVvciA9IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBzdGFydEVtYmVk
ID0gbmV3IEJpZGlDb250ZXh0KDEsIFJpZ2h0VG9MZWZ0LCBOVUxMLCBzdHlsZSgpLT51bmljb2Rl
QmlkaSgpID09IE92ZXJyaWRlKTsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFJpZ2h0
VG9MZWZ0OwogICAgICAgICB9CiAKICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IHN0
YXJ0RW1iZWQtPmRpcigpOwogICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gc3RhcnRFbWJlZC0+
ZGlyKCk7CiAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IHN0YXJ0RW1iZWQtPmRpcigpOwogICAg
ICAgICBiaWRpLmNvbnRleHQgPSBzdGFydEVtYmVkOwotICAgICAgICBiaWRpLmRpciA9IFdURjo6
VW5pY29kZTo6T3RoZXJOZXV0cmFsOworICAgICAgICBiaWRpLmRpciA9IE90aGVyTmV1dHJhbDsK
ICAgICAgICAgCiAgICAgICAgIGlmICghc21pZHBvaW50cykKICAgICAgICAgICAgIHNtaWRwb2lu
dHMgPSBuZXcgVmVjdG9yPEJpZGlJdGVyYXRvcj4oKTsKQEAgLTE4OTAsMTEgKzE4OTMsOSBAQCBi
b29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBCCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9uQnJlYWtpbmdTcGFjZSA9IDB4
YTA7Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBza2lwTm9uQnJlYWtpbmdTcGFjZShCaWRpSXRlcmF0
b3IgJml0KQogewotICAgIGlmIChpdC5vYmotPnN0eWxlKCktPm5ic3BNb2RlKCkgIT0gU1BBQ0Ug
fHwgaXQuY3VycmVudCgpICE9IG5vbkJyZWFraW5nU3BhY2UpCisgICAgaWYgKGl0Lm9iai0+c3R5
bGUoKS0+bmJzcE1vZGUoKSAhPSBTUEFDRSB8fCBpdC5jdXJyZW50KCkgIT0gbm9CcmVha1NwYWNl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYmFkLiAg
SXQgbWFrZXMgbmJzcCBpbmNvbnNpc3RlbnQgd2l0aCBzcGFjZSBhbmQgd29uJ3Qgd29yayBjb3Jy
ZWN0bHkKQEAgLTIyMDEsNyArMjIwMiw3IEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6Zmlu
ZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBsb29rcyBz
dXNwaWNpb3VzLiBXaHkgZG9lcyB3IGhhdmUgdG8gYmUgMD8gIAogICAgICAgICAgICAgICAgIGJv
b2wgYnJlYWtXb3JkcyA9IG8tPnN0eWxlKCktPndvcmRXcmFwKCkgPT0gQlJFQUtfV09SRCAmJiAo
KGFsbG93QnJlYWsgJiYgdyA9PSAwKSB8fCBvLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gUFJF
KTsKIAotICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1dTID0gY3VycmVudENoYXJh
Y3RlcklzU3BhY2UgfHwgKGJyZWFrTkJTUCAmJiBjID09IG5vbkJyZWFraW5nU3BhY2UpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1dTID0gY3VycmVudENoYXJhY3RlcklzU3Bh
Y2UgfHwgKGJyZWFrTkJTUCAmJiBjID09IG5vQnJlYWtTcGFjZSk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoYnJlYWtXb3JkcykKICAgICAgICAgICAgICAgICAgICAgd3JhcFcgKz0gdC0+d2lkdGgo
cG9zLCAxLCBmLCB3K3dyYXBXKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAJKHJl
dmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiYnJlYWtfbGluZXMuaCIKIAorI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDQsMTAgKzQ1LDEwIEBA
IGludCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgVUNoYXIqIHMKICAgICBsYXN0Q2ggPSBw
b3MgPiAwID8gc3RyW3BvcyAtIDFdIDogMDsKICAgICBmb3IgKGkgPSBwb3M7IGkgPCBsZW47IGkr
KykgewogICAgICAgICBjaCA9IHN0cltpXTsKLSAgICAgICAgaWYgKGNoID09ICcgJyB8fCBjaCA9
PSAnXG4nIHx8IGNoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBjaCA9PSAweGEwKSkKKyAgICAg
ICAgaWYgKGNoID09ICcgJyB8fCBjaCA9PSAnXG4nIHx8IGNoID09ICdcdCcgfHwgKGJyZWFrTkJT
UCAmJiBjaCA9PSBub0JyZWFrU3BhY2UpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8v
IE1hdGNoIFdpbklFJ3MgYnJlYWtpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIHRvIGFsd2F5cyBhbGxv
dyBicmVha3MgYWZ0ZXIgaHlwaGVucyBhbmQgcXVlc3Rpb24gbWFya3MuCi0gICAgICAgIGlmIChs
YXN0Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycgfHwgbGFzdENoID09IFNPRlRfSFlQSEVOKQor
ICAgICAgICBpZiAobGFzdENoID09ICctJyB8fCBsYXN0Q2ggPT0gJz8nIHx8IGxhc3RDaCA9PSBz
b2Z0SHlwaGVuKQogICAgICAgICAgICAgYnJlYWs7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAg
ICAvLyBGSVhNRTogUmV3cml0ZSBicmVhayBsb2NhdGlvbiB1c2luZyBJQ1UuCkBAIC01NSwxNCAr
NTYsMTQgQEAgaW50IG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBVQ2hhciogcwogICAgICAg
ICAvLyB1c2UgdGhlIFVDIGxpbmUgYnJlYWsgbG9jYXRvci4gIFVDRmluZFRleHRCcmVhayB3aWxs
IHJlcG9ydCBmYWxzZSBpZiB3ZQogICAgICAgICAvLyBoYXZlIGEgc2VxdWVuY2Ugb2YgMHhhMCAw
eDIwIChuYnNwLCBzcCksIHNvIHdlIGV4cGxpY2l0eSBjaGVjayBmb3IgdGhhdAogICAgICAgICAv
LyBjYXNlLgotICAgICAgICBpZiAoKGNoID4gMHg3ZiAmJiBjaCAhPSAweGEwKSB8fCAobGFzdENo
ID4gMHg3ZiAmJiBsYXN0Q2ggIT0gMHhhMCkpIHsKKyAgICAgICAgaWYgKChjaCA+IDB4N2YgJiYg
Y2ggIT0gbm9CcmVha1NwYWNlKSB8fCAobGFzdENoID4gMHg3ZiAmJiBsYXN0Q2ggIT0gbm9CcmVh
a1NwYWNlKSkgewogICAgICAgICAgICAgaWYgKG5leHRVQ0JyZWFrIDwgaSkgewogICAgICAgICAg
ICAgICAgIGlmICghYnJlYWtMb2NhdG9yKQogICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBV
Q0NyZWF0ZVRleHRCcmVha0xvY2F0b3IoTlVMTCwgMCwga1VDVGV4dEJyZWFrTGluZU1hc2ssICZi
cmVha0xvY2F0b3IpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKICAgICAgICAg
ICAgICAgICAgICAgZmluZFN0YXR1cyA9IFVDRmluZFRleHRCcmVhayhicmVha0xvY2F0b3IsIGtV
Q1RleHRCcmVha0xpbmVNYXNrLCAwLCAoY29uc3QgVW5pQ2hhciAqKXN0ciwgbGVuLCBpLCAoVW5p
Q2hhckFycmF5T2Zmc2V0ICopJm5leHRVQ0JyZWFrKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChmaW5kU3RhdHVzID09IDAgJiYgaSA9PSBuZXh0VUNCcmVhayAmJiAhKGxhc3RDaCA9
PSAnICcgfHwgbGFzdENoID09ICdcbicgfHwgbGFzdENoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAm
JiBsYXN0Q2ggPT0gMHhhMCkpKQorICAgICAgICAgICAgaWYgKGZpbmRTdGF0dXMgPT0gMCAmJiBp
ID09IG5leHRVQ0JyZWFrICYmICEobGFzdENoID09ICcgJyB8fCBsYXN0Q2ggPT0gJ1xuJyB8fCBs
YXN0Q2ggPT0gJ1x0JyB8fCAoYnJlYWtOQlNQICYmIGxhc3RDaCA9PSBub0JyZWFrU3BhY2UpKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9icmVha19saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L2JyZWFrX2xpbmVzLmgJKHJldmlzaW9uIDE4Njg3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvYnJl
YWtfbGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lmbmRlZiBicmVh
a19saW5lc19oCiAjZGVmaW5lIGJyZWFrX2xpbmVzX2gKIAotI2luY2x1ZGUgInd0Zi91bmljb2Rl
L1VuaWNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2ODcpCisrKyBX
ZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDkg
QEAKIAogaW50IHhwYXRoeXlwYXJzZSh2b2lkKik7CiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1
c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IFhQYXRoIHsKIApAQCAtNTcsMTggKzYwLDEwIEBAIHN0YXRpYyBYTUxDYXQgY2hhckNhdChVQ2hh
ciBhQ2hhcikKIAogICAgIGlmIChhQ2hhciA9PSAnLicgfHwgYUNoYXIgPT0gJy0nKQogICAgICAg
ICByZXR1cm4gTmFtZUNvbnQ7Ci0gICAgdW5zaWduZWQgY2F0ZWdvcnkgPSBXVEY6OlVuaWNvZGU6
OmNhdGVnb3J5KGFDaGFyKTsKLSAgICBpZiAoY2F0ZWdvcnkgJiAoV1RGOjpVbmljb2RlOjpMZXR0
ZXJfVXBwZXJjYXNlfAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9M
b3dlcmNhc2V8Ci0gICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TGV0dGVyX090aGVy
fAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9UaXRsZWNhc2V8Ci0g
ICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TnVtYmVyX0xldHRlcikpCisgICAgQ2hh
ckNhdGVnb3J5IGNhdGVnb3J5ID0gVW5pY29kZTo6Y2F0ZWdvcnkoYUNoYXIpOworICAgIGlmIChj
YXRlZ29yeSAmIChMZXR0ZXJfVXBwZXJjYXNlIHwgTGV0dGVyX0xvd2VyY2FzZSB8IExldHRlcl9P
dGhlciB8IExldHRlcl9UaXRsZWNhc2UgfCBOdW1iZXJfTGV0dGVyKSkKICAgICAgICAgcmV0dXJu
IE5hbWVTdGFydDsKLSAgICBpZiAoY2F0ZWdvcnkgJiAoV1RGOjpVbmljb2RlOjpNYXJrX05vblNw
YWNpbmd8Ci0gICAgICAgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6TWFya19TcGFjaW5nQ29t
YmluaW5nfAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6Ok1hcmtfRW5jbG9zaW5n
fAotICAgICAgICAgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkxldHRlcl9Nb2RpZmllcnwKLSAg
ICAgICAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpOdW1iZXJfRGVjaW1hbERpZ2l0KSkKKyAg
ICBpZiAoY2F0ZWdvcnkgJiAoTWFya19Ob25TcGFjaW5nIHwgTWFya19TcGFjaW5nQ29tYmluaW5n
IHwgTWFya19FbmNsb3NpbmcgfCBMZXR0ZXJfTW9kaWZpZXIgfCBOdW1iZXJfRGVjaW1hbERpZ2l0
KSkKICAgICAgICAgcmV0dXJuIE5hbWVDb250OwogICAgIHJldHVybiBOb3RQYXJ0T2ZOYW1lOwog
fQo=
</data>
<flag name="review"
          id="4609"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>