<?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>27735</bug_id>
          
          <creation_ts>2009-07-27 14:25:21 -0700</creation_ts>
          <short_desc>Give a helpful name to JSLock argument</short_desc>
          <delta_ts>2009-07-27 16:46:38 -0700</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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135019</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-27 14:25:21 -0700</bug_when>
    <thetext>JSLock lock(false) just means &quot;shut up JavaScriptCore warnings, we are not working with the legacy JSC API shared global context&quot;. We should use a named argument instead of a boolean,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135022</commentid>
    <comment_count>1</comment_count>
      <attachid>33570</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-27 14:31:59 -0700</bug_when>
    <thetext>Created attachment 33570
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135059</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-27 16:46:38 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/projects/webkit/changeset/46431&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33570</attachid>
            <date>2009-07-27 14:31:59 -0700</date>
            <delta_ts>2009-07-27 14:51:32 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>NameJSLockArgument.txt</filename>
            <type>text/plain</type>
            <size>126008</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NDI3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDctMjcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzczNQorICAgICAgICBHaXZlIGEgaGVscGZ1bCBuYW1lIHRvIEpTTG9jayBhcmd1bWVu
dAorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAgIChKU0dhcmJhZ2VDb2xsZWN0
KToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKiBBUEkvSlNPYmpl
Y3RSZWYuY3BwOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJheVJlbGVhc2UpOgorICAgICAg
ICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLmV4cDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25HQyk6Cisg
ICAgICAgIChjbGVhbnVwR2xvYmFsRGF0YSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAg
KiBydW50aW1lL0NvbGxlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpKU0xv
Y2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6
OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9j
a3MpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2Nrcyk6
CisgICAgICAgICogcnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQzo6KToKKyAgICAgICAg
KEpTQzo6SlNMb2NrOjpKU0xvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6On5KU0xvY2spOgor
CiAyMDA5LTA3LTI1ICBab2x0YW4gSG9ydmF0aCAgPGh6b2x0YW5AaW5mLnUtc3plZ2VkLmh1Pgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAkocmV2aXNpb24gNDY0MTcpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMywxMCArMjAzLDEwIEBAIF9fWk4zSlNDNkpT
Q2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzcKIF9fWk4zSlNDNkpTQ2VsbDlnZXRPYmplY3RF
dgogX19aTjNKU0M2SlNDZWxsbndFbVBOU185RXhlY1N0YXRlRQogX19aTjNKU0M2SlNMb2NrMTJE
cm9wQWxsTG9ja3NDMUVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDNkpTTG9jazEyRHJvcEFsbExv
Y2tzQzFFYgorX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUVOU18xNEpTTG9ja0JlaGF2
aW9yRQogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NEMUV2Ci1fX1pOM0pTQzZKU0xvY2s0
bG9ja0ViCi1fX1pOM0pTQzZKU0xvY2s2dW5sb2NrRWIKK19fWk4zSlNDNkpTTG9jazRsb2NrRU5T
XzE0SlNMb2NrQmVoYXZpb3JFCitfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVo
YXZpb3JFCiBfX1pOM0pTQzZKU0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBO
U185RXhlY1N0YXRlRQogX19aTjNKU0M2UGFyc2VyNXBhcnNlRVBOU18xMkpTR2xvYmFsRGF0YUVQ
aVBOU183VVN0cmluZ0UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBKYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlYwogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0KCk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogCiBzdGF0aWMgdm9pZCBjbGVhbnVwR2xvYmFsRGF0YShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgZ2xvYmFsRGF0YS0+aGVhcC5kZXN0
cm95KCk7CiAgICAgZ2xvYmFsRGF0YS0+ZGVyZWYoKTsKIH0KQEAgLTU1MCw3ICs1NTAsNyBAQCBz
dGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogCiAgICAgT3B0aW9ucyBvcHRpb25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3Ys
IG9wdGlvbnMsIGdsb2JhbERhdGEpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlzaW9u
IDQ2NDE3KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4dFJlZiBjdHgp
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAgIEpTTG9jayBsb2NrKGdsb2JhbERh
dGEuaXNTaGFyZWRJbnN0YW5jZSk7CisgICAgSlNMb2NrIGxvY2soZ2xvYmFsRGF0YS5pc1NoYXJl
ZEluc3RhbmNlID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAuaXNCdXN5KCkpCiAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5j
b2xsZWN0KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24g
NDY0MTcpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0
Q3JlYXRlCiAjZWxzZQogICAgIHsKICNlbmRpZgotICAgICAgICBKU0xvY2sgbG9jayh0cnVlKTsK
KyAgICAgICAgSlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogICAgICAgICByZXR1cm4gSlNHbG9i
YWxDb250ZXh0Q3JlYXRlSW5Hcm91cCh0b1JlZigmSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5j
ZSgpKSwgZ2xvYmFsT2JqZWN0Q2xhc3MpOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShEQVJX
SU4pCkBAIC04Miw3ICs4Miw3IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayh0
cnVlKTsKKyAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAKICAgICBSZWZQdHI8SlNHbG9i
YWxEYXRhPiBnbG9iYWxEYXRhID0gZ3JvdXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9K
Uyhncm91cCkpIDogSlNHbG9iYWxEYXRhOjpjcmVhdGUoKTsKIApJbmRleDogSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9K
U09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBKU1Byb3Bl
cnR5TmFtZUFycmF5UmVmIEpTUHJvcGVydHlOYW1lQXJyCiB2b2lkIEpTUHJvcGVydHlOYW1lQXJy
YXlSZWxlYXNlKEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgYXJyYXkpCiB7CiAgICAgaWYgKC0tYXJy
YXktPnJlZkNvdW50ID09IDApIHsKLSAgICAgICAgSlNMb2NrIGxvY2soYXJyYXktPmdsb2JhbERh
dGEtPmlzU2hhcmVkSW5zdGFuY2UpOworICAgICAgICBKU0xvY2sgbG9jayhhcnJheS0+Z2xvYmFs
RGF0YS0+aXNTaGFyZWRJbnN0YW5jZSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAgICAgZGVsZXRlIGFycmF5OwogICAgIH0KIH0KQEAgLTUxMSw3ICs1MTEsNyBA
QCB2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTCiAgICAgUHJvcGVydHlO
YW1lQXJyYXkqIHByb3BlcnR5TmFtZXMgPSB0b0pTKGFycmF5KTsKIAogICAgIHByb3BlcnR5TmFt
ZXMtPmdsb2JhbERhdGEoKS0+aGVhcC5yZWdpc3RlclRocmVhZCgpOwotICAgIEpTTG9jayBsb2Nr
KHByb3BlcnR5TmFtZXMtPmdsb2JhbERhdGEoKS0+aXNTaGFyZWRJbnN0YW5jZSk7CisgICAgSlNM
b2NrIGxvY2socHJvcGVydHlOYW1lcy0+Z2xvYmFsRGF0YSgpLT5pc1NoYXJlZEluc3RhbmNlID8g
TG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgcHJvcGVydHlOYW1l
cy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihwcm9wZXJ0eU5hbWVzLT5nbG9iYWxEYXRh
KCkpKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9u
IDQ2NDE3KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgSGVhcDo6fkhlYXAoKQogCiB2b2lkIEhlYXA6OmRl
c3Ryb3koKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgaWYgKCFtX2dsb2JhbERhdGEpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDQ2NDE3KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCwyMyArNjAsMjMgQEAgc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQog
fQogCiBKU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tpbmdGb3JS
ZWFsKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKQorICAgIDogbV9sb2NrQmVo
YXZpb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UgPyBMb2NrRm9yUmVhbCA6
IFNpbGVuY2VBc3NlcnRpb25zT25seSkKIHsKLSAgICBsb2NrKG1fbG9ja2luZ0ZvclJlYWwpOwor
ICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhib29sIGxv
Y2tGb3JSZWFsKQordm9pZCBKU0xvY2s6OmxvY2soSlNMb2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9y
KQogewogI2lmZGVmIE5ERUJVRwogICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBk
ZWJ1Zy1vbmx5IGZlYXR1cmUuCi0gICAgaWYgKCFsb2NrRm9yUmVhbCkKKyAgICBpZiAobG9ja0Jl
aGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAKICAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2Nr
Q291bnQpOwogCiAgICAgaW50cHRyX3QgY3VycmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwot
ICAgIGlmICghY3VycmVudExvY2tDb3VudCAmJiBsb2NrRm9yUmVhbCkgeworICAgIGlmICghY3Vy
cmVudExvY2tDb3VudCAmJiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKICAgICAgICAg
aW50IHJlc3VsdDsKICAgICAgICAgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZKU011dGV4
KTsKICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOwpAQCAtODQsMTkgKzg0LDE5IEBAIHZvaWQgSlNM
b2NrOjpsb2NrKGJvb2wgbG9ja0ZvclJlYWwpCiAgICAgc2V0TG9ja0NvdW50KGN1cnJlbnRMb2Nr
Q291bnQgKyAxKTsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhib29sIGxvY2tGb3JSZWFsKQor
dm9pZCBKU0xvY2s6OnVubG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCiB7CiAgICAg
QVNTRVJUKGxvY2tDb3VudCgpKTsKIAogI2lmZGVmIE5ERUJVRwogICAgIC8vIExvY2tpbmcgIm5v
dCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1vbmx5IGZlYXR1cmUuCi0gICAgaWYgKCFsb2NrRm9yUmVh
bCkKKyAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAKICAgICBpbnRwdHJfdCBuZXdMb2NrQ291bnQgPSBsb2NrQ291
bnQoKSAtIDE7CiAgICAgc2V0TG9ja0NvdW50KG5ld0xvY2tDb3VudCk7Ci0gICAgaWYgKCFuZXdM
b2NrQ291bnQgJiYgbG9ja0ZvclJlYWwpIHsKKyAgICBpZiAoIW5ld0xvY2tDb3VudCAmJiBsb2Nr
QmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKICAgICAgICAgaW50IHJlc3VsdDsKICAgICAgICAg
cmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJkpTTXV0ZXgpOwogICAgICAgICBBU1NFUlQo
IXJlc3VsdCk7CkBAIC0xMDUsMTIgKzEwNSwxMiBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKGJvb2wg
bG9ja0ZvclJlYWwpCiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBsb2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKTsKKyAgICBsb2NrKGV4
ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogfQogCiB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICB1bmxvY2soZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UpOwor
ICAgIHVubG9jayhleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSA/IExvY2tGb3JS
ZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkKQEAgLTE2Miw3ICsxNjIsNyBAQCBib29sIEpTTG9jazo6Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soCiBzdGF0aWMgdW5zaWduZWQgbG9ja0Ryb3BEZXB0aCA9
IDA7CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVj
KQotICAgIDogbV9sb2NraW5nRm9yUmVhbChleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0
YW5jZSkKKyAgICA6IG1fbG9ja0JlaGF2aW9yKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZElu
c3RhbmNlID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCiB7CiAgICAgcHRo
cmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKIApA
QCAtMTczLDExICsxNzMsMTEgQEAgSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhF
eGVjUwogCiAgICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwogICAgIGZvciAo
aW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVu
bG9jayhtX2xvY2tpbmdGb3JSZWFsKTsKKyAgICAgICAgSlNMb2NrOjp1bmxvY2sobV9sb2NrQmVo
YXZpb3IpOwogfQogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKGJvb2wgbG9j
a2luZ0ZvclJlYWwpCi0gICAgOiBtX2xvY2tpbmdGb3JSZWFsKGxvY2tpbmdGb3JSZWFsKQorSlNM
b2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvciBKU0xvY2tCZWhh
dmlvcikKKyAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQogewogICAgIHB0aHJl
YWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7CiAKQEAg
LTE5MSwxMyArMTkxLDEzIEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoYm9v
bCAKIAogICAgIG1fbG9ja0NvdW50ID0gSlNMb2NrOjpsb2NrQ291bnQoKTsKICAgICBmb3IgKGlu
dHB0cl90IGkgPSAwOyBpIDwgbV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjp1bmxv
Y2sobV9sb2NraW5nRm9yUmVhbCk7CisgICAgICAgIEpTTG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2
aW9yKTsKIH0KIAogSlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogewogICAg
IGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xv
Y2s6OmxvY2sobV9sb2NraW5nRm9yUmVhbCk7CisgICAgICAgIEpTTG9jazo6bG9jayhtX2xvY2tC
ZWhhdmlvcik7CiAKICAgICAtLWxvY2tEcm9wRGVwdGg7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAg
SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogI2Vsc2UKIAogSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKikKLSAgICA6IG1fbG9ja2luZ0ZvclJlYWwoZmFsc2UpCisgICAgOiBt
X2xvY2tCZWhhdmlvcihmYWxzZSkKIHsKIH0KIApAQCAtMjIxLDExICsyMjEsMTEgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpTTG9jazo6bG9jayhib29sKQordm9pZCBKU0xvY2s6OmxvY2soSlNMb2NrQmVoYXZp
b3IpCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soYm9vbCkKK3ZvaWQgSlNMb2NrOjp1bmxv
Y2soSlNMb2NrQmVoYXZpb3IpCiB7CiB9CiAKQEAgLTI0MSw3ICsyNDEsNyBAQCBKU0xvY2s6OkRy
b3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTCiB7CiB9CiAKLUpTTG9jazo6RHJvcEFsbExv
Y2tzOjpEcm9wQWxsTG9ja3MoYm9vbCkKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9j
a3MoSlNMb2NrQmVoYXZpb3IpCiB7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAko
cmV2aXNpb24gNDY0MTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw1MCArNTAsNTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBFeGVjU3RhdGU7CiAKKyAgICBlbnVtIEpTTG9ja0JlaGF2aW9yIHsgU2lsZW5jZUFzc2VydGlv
bnNPbmx5LCBMb2NrRm9yUmVhbCB9OworCiAgICAgY2xhc3MgSlNMb2NrIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEpTTG9jayhFeGVjU3RhdGUqKTsKIAotICAg
ICAgICBKU0xvY2soYm9vbCBsb2NraW5nRm9yUmVhbCkKLSAgICAgICAgICAgIDogbV9sb2NraW5n
Rm9yUmVhbChsb2NraW5nRm9yUmVhbCkKKyAgICAgICAgSlNMb2NrKEpTTG9ja0JlaGF2aW9yIGxv
Y2tCZWhhdmlvcikKKyAgICAgICAgICAgIDogbV9sb2NrQmVoYXZpb3IobG9ja0JlaGF2aW9yKQog
ICAgICAgICB7CiAjaWZkZWYgTkRFQlVHCiAgICAgICAgICAgICAvLyBMb2NraW5nICJub3QgZm9y
IHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAgICAgaWYgKCFsb2NraW5n
Rm9yUmVhbCkKKyAgICAgICAgICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlv
bnNPbmx5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgotICAgICAgICAgICAgbG9j
ayhsb2NraW5nRm9yUmVhbCk7CisgICAgICAgICAgICBsb2NrKGxvY2tCZWhhdmlvcik7CiAgICAg
ICAgIH0KIAogICAgICAgICB+SlNMb2NrKCkKICAgICAgICAgeyAKICNpZmRlZiBOREVCVUcKICAg
ICAgICAgICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1vbmx5IGZlYXR1
cmUuCi0gICAgICAgICAgICBpZiAoIW1fbG9ja2luZ0ZvclJlYWwpCisgICAgICAgICAgICBpZiAo
bG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAjZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tpbmdGb3JSZWFsKTsgCisg
ICAgICAgICAgICB1bmxvY2sobV9sb2NrQmVoYXZpb3IpOyAKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgc3RhdGljIHZvaWQgbG9jayhib29sKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdW5s
b2NrKGJvb2wpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEpTTG9ja0JlaGF2aW9yKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNT
dGF0ZSopOwogCiAgICAgICAgIHN0YXRpYyBpbnRwdHJfdCBsb2NrQ291bnQoKTsKICAgICAgICAg
c3RhdGljIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIAotICAgICAgICBib29s
IG1fbG9ja2luZ0ZvclJlYWw7CisgICAgICAgIEpTTG9ja0JlaGF2aW9yIG1fbG9ja0JlaGF2aW9y
OwogCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIERyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMp
OwotICAgICAgICAgICAgRHJvcEFsbExvY2tzKGJvb2wpOworICAgICAgICAgICAgRHJvcEFsbExv
Y2tzKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgICAgIH5Ecm9wQWxsTG9ja3MoKTsKICAgICAg
ICAgICAgIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291
bnQ7Ci0gICAgICAgICAgICBib29sIG1fbG9ja2luZ0ZvclJlYWw7CisgICAgICAgICAgICBKU0xv
Y2tCZWhhdmlvciBtX2xvY2tCZWhhdmlvcjsKICAgICAgICAgfTsKICAgICB9OwogCkluZGV4OiBK
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NjQyNykKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA5LTA3LTI3ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc3
MzUKKyAgICAgICAgR2l2ZSBhIGhlbHBmdWwgbmFtZSB0byBKU0xvY2sgYXJndW1lbnQKKworICAg
ICAgICAqIEpTQmFzZS5jcHA6CisgICAgICAgIChKU0Jhc2U6OlJlbGVhc2UpOgorICAgICAgICAq
IEpTVXRpbHMuY3BwOgorICAgICAgICAoSlNPYmplY3RLSlNWYWx1ZSk6CisgICAgICAgIChLSlNW
YWx1ZVRvQ0ZUeXBlSW50ZXJuYWwpOgorICAgICAgICAodW5wcm90ZWN0R2xvYmFsT2JqZWN0KToK
KyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6
SlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNP
YmplY3RDb3B5UHJvcGVydHkpOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0U2V0
UHJvcGVydHkpOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHlDRlZhbHVlKToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0R2x1ZS5jcHA6CisgICAgICAgIChKU1J1bkNyZWF0ZSk6CisgICAgICAg
IChKU1J1bkV2YWx1YXRlKToKKyAgICAgICAgKEpTUnVuQ2hlY2tTeW50YXgpOgorICAgICAgICAo
SlNDb2xsZWN0KToKKyAgICAgICAgKEpTTG9ja0ludGVycHJldGVyKToKKyAgICAgICAgKEpTVW5s
b2NrSW50ZXJwcmV0ZXIpOgorCiAyMDA5LTA3LTEwICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBTb3J0IGFsbCBvdXIgWGNvZGUgcHJvamVjdHMKSW5kZXg6IEphdmFT
Y3JpcHRHbHVlL0pTQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNCYXNl
LmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgSlNCYXNlOjpSZWxlYXNlKCkKIHsKICAg
ICBpZiAoLS1mUmV0YWluQ291bnQgPT0gMCkKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKHRy
dWUpOworICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIGRlbGV0ZSB0
aGlzOwogICAgIH0KIH0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIEph
dmFTY3JpcHRHbHVlL0pTVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcg
QEAgSlNVc2VyT2JqZWN0KiBLSlNWYWx1ZVRvSlNPYmplY3QoSlNWYWx1ZQogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogSlNWYWx1ZSBKU09iamVjdEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcHRyKQogewot
ICAgIEpTTG9jayBsb2NrKHRydWUpOworICAgIEpTTG9jayBsb2NrKExvY2tGb3JSZWFsKTsKIAog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAocHRyKQpAQCAtMjAz
LDcgKzIwMyw3IEBAIENGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNWYWwKIAog
ICAgIENGVHlwZVJlZiByZXN1bHQgPSAwOwogCi0gICAgSlNMb2NrIGxvY2sodHJ1ZSk7CisgICAg
SlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogCiAgICAgICAgIGlmIChpblZhbHVlLmlzQm9vbGVh
bigpKQogICAgICAgICAgICAgewpAQCAtMzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBwdGhyZWFkX29u
Y2VfdCBnbG9iYWxPYmplY3RLZXlPbmMKIAogc3RhdGljIHZvaWQgdW5wcm90ZWN0R2xvYmFsT2Jq
ZWN0KHZvaWQqIGRhdGEpIAogewotICAgIEpTTG9jayBsb2NrKHRydWUpOworICAgIEpTTG9jayBs
b2NrKExvY2tGb3JSZWFsKTsKICAgICBnY1VucHJvdGVjdChzdGF0aWNfY2FzdDxKU0dsdWVHbG9i
YWxPYmplY3QqPihkYXRhKSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJ
KHJldmlzaW9uIDQ2NDE3KQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2Jq
ZWN0RGlzcG9zZSh2b2kKIAogQ0ZBcnJheVJlZiBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDb3B5
UHJvcGVydHlOYW1lcyh2b2lkICpkYXRhKQogewotICAgIEpTTG9jayBsb2NrKHRydWUpOworICAg
IEpTTG9jayBsb2NrKExvY2tGb3JSZWFsKTsKIAogICAgIENGTXV0YWJsZUFycmF5UmVmIHJlc3Vs
dCA9IDA7CiAgICAgSlNWYWx1ZVdyYXBwZXIqIHB0ciA9IChKU1ZhbHVlV3JhcHBlciopZGF0YTsK
QEAgLTEwMSw3ICsxMDEsNyBAQCBDRkFycmF5UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENv
cHlQCiAKIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdENvcHlQcm9wZXJ0eSh2
b2lkICpkYXRhLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2so
dHJ1ZSk7CisgICAgSlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogCiAgICAgSlNPYmplY3RSZWYg
cmVzdWx0ID0gMDsKICAgICBKU1ZhbHVlV3JhcHBlciogcHRyID0gKEpTVmFsdWVXcmFwcGVyKilk
YXRhOwpAQCAtMTI1LDcgKzEyNSw3IEBAIEpTT2JqZWN0UmVmIEpTVmFsdWVXcmFwcGVyOjpKU09i
amVjdENvcHkKIAogdm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RTZXRQcm9wZXJ0eSh2b2lk
ICpkYXRhLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0UmVmIGpzVmFsdWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2sodHJ1ZSk7CisgICAgSlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwog
CiAgICAgSlNWYWx1ZVdyYXBwZXIqIHB0ciA9IChKU1ZhbHVlV3JhcHBlciopZGF0YTsKICAgICBp
ZiAocHRyKQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0
U2V0UHJvcGVydHkKIAogSlNPYmplY3RSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbEZ1
bmN0aW9uKHZvaWQgKmRhdGEsIEpTT2JqZWN0UmVmIHRoaXNPYmosIENGQXJyYXlSZWYgYXJncykK
IHsKLSAgICBKU0xvY2sgbG9jayh0cnVlKTsKKyAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7
CiAKICAgICBKU09iamVjdFJlZiByZXN1bHQgPSAwOwogICAgIEpTVmFsdWVXcmFwcGVyKiBwdHIg
PSAoSlNWYWx1ZVdyYXBwZXIqKWRhdGE7CkBAIC0xODAsNyArMTgwLDcgQEAgSlNPYmplY3RSZWYg
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q2FsbAogCiBDRlR5cGVSZWYgSlNWYWx1ZVdyYXBwZXI6
OkpTT2JqZWN0Q29weUNGVmFsdWUodm9pZCAqZGF0YSkKIHsKLSAgICBKU0xvY2sgbG9jayh0cnVl
KTsKKyAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAKICAgICBDRlR5cGVSZWYgcmVzdWx0
ID0gMDsKICAgICBKU1ZhbHVlV3JhcHBlciogcHRyID0gKEpTVmFsdWVXcmFwcGVyKilkYXRhOwpJ
bmRleDogSmF2YVNjcmlwdEdsdWUvSmF2YVNjcmlwdEdsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRHbHVlL0phdmFTY3JpcHRHbHVlLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBKYXZh
U2NyaXB0R2x1ZS9KYXZhU2NyaXB0R2x1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsy
NDYsNyBAQCBKU1J1blJlZiBKU1J1bkNyZWF0ZShDRlN0cmluZ1JlZiBqc1NvdXJjCiAgICAgSlNS
dW5SZWYgcmVzdWx0ID0gMDsKICAgICBpZiAoanNTb3VyY2UpCiAgICAgewotICAgICAgICBKU0xv
Y2sgbG9jayh0cnVlKTsKKyAgICAgICAgSlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogICAgICAg
ICByZXN1bHQgPSAoSlNSdW5SZWYpIG5ldyBKU1J1bihqc1NvdXJjZSwgaW5GbGFncyk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTEsNyArMjkxLDcgQEAgSlNPYmplY3RSZWYgSlNS
dW5FdmFsdWF0ZShKU1J1blJlZiByZWYpCiAgICAgSlNSdW4qIHB0ciA9IChKU1J1biopcmVmOwog
ICAgIGlmIChwdHIpCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayh0cnVlKTsKKyAgICAgICAg
SlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogICAgICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24g
PSBwdHItPkV2YWx1YXRlKCk7CiAgICAgICAgIGlmIChjb21wbGV0aW9uLmlzVmFsdWVDb21wbGV0
aW9uKCkpCiAgICAgICAgIHsKQEAgLTMyNSw3ICszMjUsNyBAQCBib29sIEpTUnVuQ2hlY2tTeW50
YXgoSlNSdW5SZWYgcmVmKQogICAgIEpTUnVuKiBwdHIgPSAoSlNSdW4qKXJlZjsKICAgICBpZiAo
cHRyKQogICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKHRydWUpOworICAgICAgICAgICAg
SlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogICAgICAgICAgICAgcmVzdWx0ID0gcHRyLT5DaGVj
a1N5bnRheCgpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzM4LDcgKzMzOCw3IEBA
IHZvaWQgSlNDb2xsZWN0KCkKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBK
U0xvY2sgbG9jayh0cnVlKTsKKyAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgZ2V0
VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmhlYXAoKS0+Y29sbGVjdCgpOwogfQogCkBAIC02NDks
MTEgKzY0OSwxMSBAQCBDRk11dGFibGVBcnJheVJlZiBKU0NyZWF0ZUpTQXJyYXlGcm9tQ0ZBCiB2
b2lkIEpTTG9ja0ludGVycHJldGVyKCkKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0g
ICAgSlNMb2NrOjpsb2NrKHRydWUpOworICAgIEpTTG9jazo6bG9jayhMb2NrRm9yUmVhbCk7CiB9
CiAKIAogdm9pZCBKU1VubG9ja0ludGVycHJldGVyKCkKIHsKLSAgICBKU0xvY2s6OnVubG9jayh0
cnVlKTsKKyAgICBKU0xvY2s6OnVubG9jayhMb2NrRm9yUmVhbCk7CiB9CkluZGV4OiBXZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDY0
MjcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAwOS0wNy0yNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NzM1CisgICAgICAgIEdpdmUgYSBoZWxwZnVs
IG5hbWUgdG8gSlNMb2NrIGFyZ3VtZW50CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHQ0NvbnRyb2xsZXI6OmdjVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRy
b2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Q
b3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3Np
dGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3Vz
dG9tU1FMU3RhdGVtZW50Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0
b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Wb2lkQ2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpjdXJyZW50Q2Fs
bEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QXJyYXk6
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRBcnJheTo6Y3JlYXRlTmV3KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpp
bml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdSb290
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0
Rm9yUGx1Z2luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3Jp
cHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0T2JqZWN0OjpzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0T2JqZWN0OjpjcmVhdGVOZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0R2xvYmFsT2JqZWN0OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2Jq
ZWN0OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cXVhcmFudGluZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFF1
YXJhbnRpbmVkU2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
Y2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3Jp
cHRPYmplY3QgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBzZXRWYWx1ZTpmb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZv
cktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHJlbW92ZVdlYlNjcmlwdEtleTpd
KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHN0cmluZ1JlcHJlc2VudGF0aW9uXSk6Cisg
ICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6XSk6CisgICAg
ICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6dmFsdWU6XSk6
CisgICAgICAgICgrW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6b3Jp
Z2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVj
dC5jcHA6CisgICAgICAgIChfTlBOX0ludm9rZURlZmF1bHQpOgorICAgICAgICAoX05QTl9JbnZv
a2UpOgorICAgICAgICAoX05QTl9FdmFsdWF0ZSk6CisgICAgICAgIChfTlBOX0dldFByb3BlcnR5
KToKKyAgICAgICAgKF9OUE5fU2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9SZW1vdmVQcm9w
ZXJ0eSk6CisgICAgICAgIChfTlBOX0hhc1Byb3BlcnR5KToKKyAgICAgICAgKF9OUE5fSGFzTWV0
aG9kKToKKyAgICAgICAgKF9OUE5fRW51bWVyYXRlKToKKyAgICAgICAgKF9OUE5fQ29uc3RydWN0
KToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2NsYXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OkNDbGFzczo6fkNDbGFzcyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6Om1l
dGhvZHNOYW1lZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6OmZpZWxkTmFtZWQp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OkNJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYnJpZGdl
L2MvY19ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNGaWVsZDo6dmFsdWVG
cm9tSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjpzZXRWYWx1ZVRv
SW5zdGFuY2UpOgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5jcHA6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9q
bmlfY2xhc3MuY3BwOgorICAgICAgICAoSmF2YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAo
SmF2YUNsYXNzOjp+SmF2YUNsYXNzKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9pbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6
CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpn
ZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAo
SmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRT
bG90KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNP
YmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9K
T2JqZWN0KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToK
KyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6ZGlzcGF0Y2hKTklDYWxsKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9ydW50aW1lLmNw
cDoKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25hdHVyZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qbmlfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6SmF2
YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpfY29tbW9uSW5p
dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpVVEY4U3RyaW5nKToKKyAgICAgICAg
KiBicmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNv
bnZlcnRWYWx1ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNl
Lm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6
c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
bW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNl
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU9iamVjdEltcDo6cmVtb3Zl
RnJvbUNhY2hlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3Rh
bmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVj
dCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
Ojpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVu
dGltZU1ldGFNZXRob2Q6OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5l
Y3Rpb25PYmplY3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lLmNwcDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3JpcHRQcm9maWxlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3Jp
cHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNj
cmlwdFByb2ZpbGVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFRvdGFsVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRTZWxmVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUb3Rh
bFBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2VsZlBlcmNlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0TnVtYmVyT2ZDYWxscyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
SGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldENhbGxVSUQpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6YmluZGluZ0luc3RhbmNlKToKKyAgICAgICAgKiBw
bHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmluaXQpOgorICAgICAgICAqIHBsdWdpbnMvbWFjL1BsdWdpblZp
ZXdNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgICogcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9wKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmluaXQpOgorICAgICAgICAqIHBsdWdpbnMvd2lu
L1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0
Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisKIDIwMDktMDctMjcgIEpha3ViIFdpZWN6
b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CiAKICAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gVHJl
YXQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NjQx
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkKiBj
b2xsZWN0KHZvaWQqKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5jb2xsZWN0KCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC03MCwxMyArNzAs
MTMgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0U29vbigpCiAKIHZvaWQgR0ND
b250cm9sbGVyOjpnY1RpbWVyRmlyZWQoVGltZXI8R0NDb250cm9sbGVyPiopCiB7Ci0gICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxlY3QoKTsK
IH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY29sbGVjdCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2Fs
bGJhY2suY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2
b2lkIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjazo6aGFuZGxlRXZlCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAg
ICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fY2FsbGJhY2st
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVy
cm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6
OmhhbmQKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9mcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogICAgIAotICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpT
Qzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gbV9jYWxsYmFjay0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImhhbmRs
ZUV2ZW50IikpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCShyZXZpc2lv
biA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRDYWxs
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBKU0N1c3RvbVNR
TFN0YXRlbWVudENhbGxiYWNrOjpoYW5kbAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2ZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIAotICAgIEpTQzo6SlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBib29sIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
azo6CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZnJhbWUtPnNjcmlwdCgp
LT5nbG9iYWxPYmplY3QoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKICAgICAgICAgCi0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
SlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAKICAgICBK
U1ZhbHVlIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgaGFuZGxlRXZlbnRDYWxs
RGF0YTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNh
bGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSlNDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrOjpo
YW4KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9kYXRhLT5mcmFtZSgpLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIAotICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2Up
OworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAg
CiAgICAgSlNWYWx1ZSBoYW5kbGVFdmVudEZ1bmN0aW9uID0gbV9kYXRhLT5jYWxsYmFjaygpLT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEg
aGFuZGxlRXZlbnRDYWxsRGF0YTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lv
biA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSlND
dXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNDOjpKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fY2FsbGJhY2stPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgSlNDdXN0b21Wb2lkQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KCkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBs
b2NrKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgICAgIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2NhbGxiYWNrLT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgaWYgKCFtX2ZyYW1lLT5zY3Jp
cHQoKS0+aXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDY0MTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTVmFsdWUgSlNFdmVudDo6Y2xpcGJvYXJkRGF0
YShFeGVjU3RhdGUKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRXZlbnQqIGV2ZW50KQogewotICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgaWYg
KCFldmVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6Om1hcmtKU0Z1bmN0aW9uKCkKIAogdm9pZCBKU0V2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQog
ewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9u
KCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OSwxMyArMjU5LDEzIEBAIEpTVmFsdWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpjdXJy
ZW50Q2FsbEYKICAgICAvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5
IG5lZWRlZC4gQ2FuIHdlIGp1c3QgdXNlIGV4ZWM/CiAgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVj
ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGds
b2JhbEV4ZWMsIHRvSlMoZXhlYywgY2FsbEZyYW1lKSk7CiB9CiAKIEpTVmFsdWUgSlNJbnNwZWN0
b3JCYWNrZW5kOjpwcm9maWxlcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdM
aXN0JikKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7CiAgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsK
ICAgICBpZiAoIWljKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
dm9pZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogCiBzaG9ydCBKU05vZGVGaWx0ZXJD
b25kaXRpb246OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIGZpbHRlck5v
ZGUpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IG1fZmlsdGVyLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWMK
IHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgQVNTRVJUKG1f
ZnVuY3Rpb24pOwotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBtX2Z1bmN0aW9uLmdldCgpLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw0
MiArNTMsNDIgQEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNjcmlwdFN0YXRlKgogCiBi
b29sIFNjcmlwdEFycmF5OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCB1bnNpZ25lZCBp
bmRleCwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBqc0FycmF5
KCktPnB1dChzY3JpcHRTdGF0ZSwgaW5kZXgsIHZhbHVlLmpzT2JqZWN0KCkpOwogICAgIHJldHVy
biBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQogCiBib29sIFNjcmlwdEFycmF5Ojpz
ZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBqc0FycmF5KCktPnB1dChzY3JpcHRTdGF0ZSwgaW5k
ZXgsIGpzU3RyaW5nKHNjcmlwdFN0YXRlLCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQogCiBib29sIFNjcmlwdEFycmF5OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCB1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQogewotICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIGpzQXJyYXkoKS0+cHV0KHNjcmlwdFN0YXRlLCBpbmRleCwganNOdW1iZXIoc2NyaXB0
U3RhdGUsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CiB9CiAKIGJvb2wgU2NyaXB0QXJyYXk6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBsb25nIGxvbmcgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2Up
OworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAganNBcnJheSgp
LT5wdXQoc2NyaXB0U3RhdGUsIGluZGV4LCBqc051bWJlcihzY3JpcHRTdGF0ZSwgdmFsdWUpKTsK
ICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3Jp
cHRBcnJheTo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgdW5zaWduZWQgaW5kZXgsIGlu
dCB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBqc0FycmF5KCktPnB1dChzY3JpcHRTdGF0ZSwgaW5k
ZXgsIGpzTnVtYmVyKHNjcmlwdFN0YXRlLCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQogCiBib29sIFNjcmlwdEFycmF5OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCB1bnNpZ25lZCBpbmRleCwgYm9vbCB2YWx1ZSkKIHsKLSAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBqc0FycmF5KCktPnB1dChzY3JpcHRTdGF0ZSwgaW5kZXgsIGpzQm9vbGVhbih2YWx1ZSkp
OwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQpAQCAtMTAwLDcg
KzEwMCw3IEBAIHVuc2lnbmVkIFNjcmlwdEFycmF5OjpsZW5ndGgoU2NyaXB0U3RhdGUKIAogU2Ny
aXB0QXJyYXkgU2NyaXB0QXJyYXk6OmNyZWF0ZU5ldyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUp
CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgcmV0dXJuIFNjcmlwdEFycmF5KGNvbnN0cnVjdEVtcHR5QXJyYXko
c2NyaXB0U3RhdGUpKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q2FjaGVkRnJhbWVEYXRhLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlw
dENhY2hlZEZyYW1lRGF0YShGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2Up
OworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIGlmIChz
Y3JpcHRDb250cm9sbGVyLT5oYXZlV2luZG93U2hlbGwoKSkgewpAQCAtNjcsNyArNjcsNyBAQCB2
b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtCiB7CiAgICAgUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCk7CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNj
cmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAgaWYgKHNjcmlwdENvbnRyb2xs
ZXItPmhhdmVXaW5kb3dTaGVsbCgpKSB7CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW0KIAogdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6
OmNsZWFyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIGlmICghbV93aW5kb3cpIHsKICAgICAgICAgbV93
aW5kb3cgPSAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBTY3JpcHRWYWx1ZSBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAgY29uc3QgU3RyaW5nKiBzYXZlZFNvdXJjZVVS
TCA9IG1fc291cmNlVVJMOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJjZVVSTDsKIAotICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0ID0gbV9mcmFtZTsKIApAQCAtMTM1LDcgKzEz
NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAo
IW1fd2luZG93U2hlbGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgLy8gQ2xl
YXIgdGhlIGRlYnVnZ2VyIGZyb20gdGhlIGN1cnJlbnQgd2luZG93IGJlZm9yZSBzZXR0aW5nIHRo
ZSBuZXcgd2luZG93LgogICAgIGF0dGFjaERlYnVnZ2VyKDApOwpAQCAtMTU3LDcgKzE1Nyw3IEBA
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCgpCiAgICAgaWYgKG1fd2luZG93U2hl
bGwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgbV93aW5kb3dTaGVsbCA9IG5l
dyBKU0RPTVdpbmRvd1NoZWxsKG1fZnJhbWUtPmRvbVdpbmRvdygpKTsKICAgICBtX3dpbmRvd1No
ZWxsLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICBpZiAoIW1fZnJhbWUtPmRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGlmIChtX3dpbmRvd1No
ZWxsKQogICAgICAgICBtX3dpbmRvd1NoZWxsLT53aW5kb3coKS0+dXBkYXRlRG9jdW1lbnQoKTsK
IH0KQEAgLTI2NSw3ICsyNjUsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJv
bGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0
KSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRp
bmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTI5MSw3ICsyOTEsNyBAQCBOUE9i
amVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0CiAgICAgICAgIGlmIChpc0VuYWJs
ZWQoKSkgewogICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBp
cyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KICAgICAgICAgICAgIC8vIFJldHVybiBhbiBO
UE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVjdC4KLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrIGxvY2soZmFsc2UpOworICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgSlNPYmplY3QqIHdpbiA9IHdpbmRvd1NoZWxsKCkt
PndpbmRvdygpOwogICAgICAgICAgICAgQVNTRVJUKHdpbik7CiAgICAgICAgICAgICBCaW5kaW5n
czo6Um9vdE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CkBAIC0zMjUsNyArMzI1
LDcgQEAgSlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUAogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVu
dAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7CiAgICAgSlNWYWx1ZSBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZXhlYywgcGx1Z2luKTsK
ICAgICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1ZS5pc09iamVjdCgpKQpA
QCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9i
amUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewotICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogCiAgICAgUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2Jq
ZWN0cy5lbmQoKTsKICAgICBmb3IgKFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9yb290T2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA0NjQxNykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDcgKzExMiw3IEBAIFdlYlNjcmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG8KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fd2luZG93U2NyaXB0T2JqZWN0KSB7
Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBKU0M6OkpTTG9jayBs
b2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgIG1fd2luZG93
U2NyaXB0T2JqZWN0ID0gW1dlYlNjcmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0
b1JlZih3aW5kb3dTaGVsbCgpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290
XTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5l
ci5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBQYXNzUmVmUHRy
PEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0CiAKICAgICAvLyBFbnN1cmUgdGhhdCAnbm9k
ZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdl
J3JlIGNyZWF0aW5nLgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICB0b0pTKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBub2RlKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw3ICs2Niw3IEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCgK
IAogdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1f
ZXhlYywgYXJndW1lbnQpKTsKIH0KIApAQCAtODIsMTkgKzgyLDE5IEBAIHZvaWQgU2NyaXB0RnVu
Y3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudCgKIAogdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewot
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihtX2V4ZWMsIGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChpbnQgYXJn
dW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKG1fZXhl
YywgYXJndW1lbnQpKTsKIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBAIFNjcmlwdFZhbHVlIFNjcmlw
dEZ1bmN0aW9uQ2FsbDo6Y2FsbChib28KIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1f
dGhpc09iamVjdC5qc09iamVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIG1fbmFtZSkpOwog
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0xNDUsNyArMTQ1LDcgQEAgU2Ny
aXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElk
ZW50aWZpZXIobV9leGVjLCBtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHJldmlzaW9uIDQ2
NDE3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRT
dGF0ZSoKIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sg
bG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUs
IElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCBqc1N0cmluZyhzY3JpcHRTdGF0ZSwgdmFs
dWUpLCBzbG90KTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAg
LTY0LDcgKzY0LDcgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaQog
CiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9j
ayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElk
ZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpLCBzbG90KTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTcyLDcgKzcyLDcgQEAg
Ym9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaQogCiBib29sIFNjcmlwdE9i
amVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsK
ICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUs
IG5hbWUpLCBqc1N0cmluZyhzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsKICAgICByZXR1cm4g
aGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBTY3Jp
cHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0
KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVl
KQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0KCkt
PnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzTnVtYmVy
KHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24o
c2NyaXB0U3RhdGUpOwpAQCAtODgsNyArODgsNyBAQCBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNj
cmlwdFN0YXRlKiBzY3JpCiAKIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBsb25nIGxvbmcgdmFsdWUpCiB7Ci0gICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAganNPYmplY3QoKS0+cHV0KHNjcmlwdFN0
YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwganNOdW1iZXIoc2NyaXB0U3RhdGUs
IHZhbHVlKSwgc2xvdCk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNj
cmkKIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNv
bnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Cisg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIoc2Ny
aXB0U3RhdGUsIG5hbWUpLCBqc051bWJlcihzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTEwNCw3ICsxMDQsNyBA
QCBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpCiAKIGJvb2wgU2NyaXB0
T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBi
b29sIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpz
T2JqZWN0KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSks
IGpzQm9vbGVhbih2YWx1ZSksIHNsb3QpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2Ny
aXB0U3RhdGUpOwpAQCAtMTEyLDI3ICsxMTIsMjcgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZSogc2NyaQogCiBTY3JpcHRPYmplY3QgU2NyaXB0T2JqZWN0OjpjcmVhdGVOZXco
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHJldHVybiBTY3JpcHRP
YmplY3QoY29uc3RydWN0RW1wdHlPYmplY3Qoc2NyaXB0U3RhdGUpKTsKIH0KIAogYm9vbCBTY3Jp
cHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFs
c2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc2NyaXB0
U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KElkZW50aWZpZXIoc2NyaXB0
U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0
aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQq
IHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnB1dERpcmVjdChJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRT
dGF0ZSwgdmFsdWUpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsK
IH0KIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSk7CiAgICAgaWYg
KCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDYsNyArMTQ2LDcgQEAgYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5k
ZWxldGVQcm9wZXJ0eShzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkp
OwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCShyZXZpc2lv
biA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTY3JpcHRWYWx1ZSBxdWFyYW50aW5lVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChzY3JpcHRTdGF0ZSwgdmFsdWUuanNW
YWx1ZSgpKSk7CiB9CiAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlw
dE9iamVjdChEYXRhYmFzZQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdpbmRvdyhm
cmFtZSktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHF1YXJhbnRpbmVkT2JqZWN0ID0g
U2NyaXB0T2JqZWN0KGFzT2JqZWN0KEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChleGVj
LCB0b0pTKGV4ZWMsIGRhdGFiYXNlKSkpKTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtODYsNyAr
ODYsNyBAQCBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZyYW1lKiBmCiAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTRE9NV2luZG93KGZyYW1lKS0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgcXVhcmFudGluZWRPYmplY3QgPSBTY3JpcHRPYmplY3QoYXNPYmplY3QoSlNJ
bnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4ZWMsIHRvSlMoZXhlYywgc3RvcmFnZSkpKSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBnZXRRdWFyYW50aW5l
ZFNjcmlwdE9iamVjdChOb2RlKiBubwogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgcXVhcmFudGluZWRPYmplY3QgPSBTY3JpcHRPYmplY3QoYXNP
YmplY3QoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4ZWMsIHRvSlMoZXhlYywgbm9k
ZSkpKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIGdldFF1
YXJhbnRpbmVkU2NyaXB0T2JqZWN0KERPTVdpbmRvCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9
IHRvSlNET01XaW5kb3coZG9tV2luZG93LT5mcmFtZSgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHF1YXJhbnRpbmVkT2JqZWN0
ID0gU2NyaXB0T2JqZWN0KGFzT2JqZWN0KEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChl
eGVjLCB3aW5kb3cpKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTdHJpbmcmIHJlc3UKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBVU3RyaW5nIHVzdHJpbmc7CiAgICAg
aWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyh1c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KAogewogICAgIEFTU0VSVCghbV93b3Jr
ZXJDb250ZXh0V3JhcHBlcik7CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVj
dCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAg
ICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFs
IG9iamVjdCBpcyBmdWxseQpAQCAtOTEsNyArOTEsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpldmFsCiAgICAgU2NyaXB0VmFsdWUgZXhjZXB0aW9uOwogICAgIFNjcmlw
dFZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pOwogICAgIGlm
IChleGNlcHRpb24uanNWYWx1ZSgpKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAg
ICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9u
LmpzVmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDYsNyArMTA2LDcg
QEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbAogICAgIH0KIAogICAg
IGluaXRTY3JpcHRJZk5lZWRlZCgpOwotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
bV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpOwogICAgIG1fd29ya2VyQ29udGV4
dFdyYXBwZXItPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gNDY0MTcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEV4ZWNT
dGF0ZQogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9t
TlNBcnJheShFeGVjU3RhdGUKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAog
ICAgIEpTVmFsdWUgcmVzdWx0OwotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0
XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsK
ICAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBKU0M6OmV2YWx1YXRlKFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgW3NlbGYgX3Jvb3RPYmplY3RdLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKFN0cmluZyhzY3Jp
cHQpKSk7CkBAIC0zNjAsNyArMzYwLDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5
KEV4ZWNTdGF0ZQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgW3NlbGYg
X2ltcF0tPnB1dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9i
amNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RP
YmplY3RdKSwgc2xvdCk7CkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIHZvaWQgZ2V0TGlzdEZy
b21OU0FycmF5KEV4ZWNTdGF0ZQogICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0
byBlbnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAg
IC8vIFtzdXBlciB2YWx1ZUZvcktleTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlv
biBhbmQgYnlwYXNzIHRoZSBKU0xvY2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0
aGUgbG9jayBwZXJtYW5lbnRseSBoZWxkCi0gICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAg
ICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgCiAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsIFN0cmluZyhrZXkpKSk7CiAgICAgICAgIApAQCAtNDAyLDcgKzQwMiw3IEBAIHN0YXRpYyB2
b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tp
bmRPZkNsYXNzOltXZWJVbmRlZmluZWQgY2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1
cGVyIHZhbHVlRm9yS2V5OmtleV07ICAgIC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2Vw
dGlvbgogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCiAgICAgcmV0dXJu
IHJlc3VsdE9iajsKQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5T
QXJyYXkoRXhlY1N0YXRlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgW3NlbGYgX2ltcF0tPmRlbGV0ZVByb3BlcnR5KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKGtleSkpKTsKIAogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9t
TlNBcnJheShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAK
LSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCiAgICAgaWQgcmVzdWx0ID0gY29udmVydFZh
bHVlVG9PYmpjVmFsdWUoZXhlYywgW3NlbGYgX2ltcF0sIE9iamNPYmplY3RUeXBlKS5vYmplY3RW
YWx1ZTsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBzdGF0aWMgdm9pZCBnZXRMaXN0RnJvbU5TQXJyYXko
RXhlY1N0YXRlCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9u
KCkpOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDc4LDcg
KzQ3OCw3IEBAIHN0YXRpYyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBbc2VsZiBfaW1wXS0+cHV0KGV4ZWMsIGluZGV4LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1
ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pKTsKIAog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNTA5LDcgKzUwOSw3IEBAIHN0YXRp
YyB2b2lkIGdldExpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUKICAgICBpZiAodmFsdWUuaXNPYmpl
Y3QoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIAogICAgICAgICBpZiAob2JqZWN0LT5j
bGFzc0luZm8oKSAhPSAmUnVudGltZU9iamVjdEltcDo6c19pbmZvKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlIHJ1bnRpbWVPYmplY3QgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvTlBfanNv
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAko
cmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAs
IE5QT2JqZWN0KiBvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5j
dGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcDsKQEAgLTE2
MSw3ICsxNjEsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAg
ICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJ
ZGVudGlmaWVyKGktPnN0cmluZygpKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNhbGxEYXRhKTsK
QEAgLTE5OSw3ICsxOTksNyBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywg
TlBTCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYx
NihzKTsKICAgICAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3Qg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCktPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CkBAIC0yMzYsNyArMjM2LDcgQEAgYm9v
bCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5
TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0
OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+
aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoaS0+c3RyaW5nKCkpKTsK
QEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJl
cCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAgLTMw
OSw3ICszMDksNyBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVydHkoTlBQLCBOUE9iamVjdCogCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Cisg
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIGlmIChp
LT5pc1N0cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPmRlbGV0ZVByb3BlcnR5KGV4ZWMs
IGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UK
QEAgLTMzMiw3ICszMzIsNyBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0
PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAg
IGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihpLT5zdHJpbmco
KSkpOwogICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTM2NCw3ICszNjQs
NyBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soZmFsc2Up
OworICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICBK
U1ZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGktPnN0cmluZygpKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwpAQCAtMzkzLDcgKzM5Myw3IEBAIGJvb2wg
X05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsK
KyAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKIAogICAgICAgICBvYmotPmltcC0+
Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKQEAgLTQzMCw3ICs0MzAsNyBA
QCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhm
YWxzZSk7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25zdHJ1Y3RvciBvYmplY3QuCiAgICAgICAgIEpT
VmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRp
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCShyZXZpc2lv
biA0NjQxNykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHZvaWQgSW5zdGFuY2U6OmVuZCgpCiAKIFJ1bnRpbWVPYmplY3RJbXAq
IEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICAKICAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lT2JqZWN0SW1wKGV4ZWMsIHRo
aXMpOwogfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNv
cmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Q0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyogYUNsYXNzKQogCiBDQ2xhc3M6On5DQ2xhc3MoKQogewot
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRob2RzKTsKICAgICBfbWV0aG9kcy5j
bGVhcigpOwpAQCAtODYsNyArODYsNyBAQCBNZXRob2RMaXN0IENDbGFzczo6bWV0aG9kc05hbWVk
KGNvbnN0IElkCiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAmJiBfaXNhLT5oYXNNZXRob2Qob2Jq
LCBpZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2QgPSBuZXcgQ01ldGhvZChpZGVudCk7
IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBfbWV0aG9kcy5zZXQoaWRlbnRpZmllci51c3Ry
aW5nKCkucmVwKCksIGFNZXRob2QpOwogICAgICAgICB9CiAgICAgICAgIG1ldGhvZExpc3QuYXBw
ZW5kKGFNZXRob2QpOwpAQCAtMTA3LDcgKzEwNyw3IEBAIEZpZWxkKiBDQ2xhc3M6OmZpZWxkTmFt
ZWQoY29uc3QgSWRlbnRpZmkKICAgICBpZiAoX2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFz
UHJvcGVydHkob2JqLCBpZGVudCkpewogICAgICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50
KTsgLy8gZGVsZXRlZCBpbiB0aGUgQ0NsYXNzIGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAg
ICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIF9maWVsZHMuc2V0KGlkZW50aWZpZXIudXN0
cmluZygpLnJlcCgpLCBhRmllbGQpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9i
cmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9jL2Nf
aW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBDSW5zdGFuY2U6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAg
ICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGdsb2Jh
bEV4Y2VwdGlvblN0cmluZygpKTsKICAgICB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBKU1ZhbHVl
IENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0CiAgICAgVk9JRF9UT19OUFZBUklBTlQo
cmVzdWx0VmFyaWFudCk7CiAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShf
b2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAg
ICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0xNTYsNyArMTU2
LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRQogICAgIE5QVmFy
aWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQp
OwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNl
KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051
bGwoKSk7CiAgICAgICAgIF9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0LCBj
QXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBKU1ZhbHVlIENJ
bnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KEV4ZWNTCiAgICAgTlBWYXJpYW50IHJlc3VsdFZhcmlh
bnQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAg
X29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwg
JnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFt
ZXMoRXhlY1N0YQogICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnM7CiAKICAgICB7Ci0gICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAg
ICBib29sIG9rID0gX29iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZp
ZXJzLCAmY291bnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNv
cmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QCBKU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0CiAKICAgICAgICAgYm9v
bCByZXN1bHQ7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIHJlc3VsdCA9IG9i
ai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdCkgewpAQCAtNjgsNyArNjgsNyBAQCB2b2lk
IENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAgICAgICAgIG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eShvYmosIF9maWVsZElk
ZW50aWZpZXIsICZ2YXJpYW50KTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9j
L2NfdXRpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHku
Y3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4
VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBO
UFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpT
TG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAKQEAgLTEwNyw3ICsxMDcsNyBA
QCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogCiAKIEpTVmFsdWUgY29u
dmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIHZh
cmlhbnQsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2Up
OworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgCiAgICAgTlBW
YXJpYW50VHlwZSB0eXBlID0gdmFyaWFudC0+dHlwZTsKIApJbmRleDogV2ViQ29yZS9icmlkZ2Uv
am5pL2puaV9jbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9j
bGFzcy5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9jbGFz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgSmF2YUNsYXNzOjpKYXZhQ2xh
c3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICBqb2JqZWN0IGFKRmllbGQgPSBlbnYtPkdl
dE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFycmF5KWZpZWxkcywgaSk7CiAgICAgICAgIEph
dmFGaWVsZCAqYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVk
IGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1lKCksIGFGaWVsZCk7
CiAgICAgICAgIH0KICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhSkZpZWxkKTsKQEAgLTc0
LDcgKzc0LDcgQEAgSmF2YUNsYXNzOjpKYXZhQ2xhc3Moam9iamVjdCBhbkluc3RhbmNlKQogICAg
ICAgICBKYXZhTWV0aG9kICphTWV0aG9kID0gbmV3IEphdmFNZXRob2QoZW52LCBhSk1ldGhvZCk7
IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIE1ldGhvZExp
c3QqIG1ldGhvZExpc3Q7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKKyAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAg
ICAgICAgICAgIG1ldGhvZExpc3QgPSBfbWV0aG9kcy5nZXQoYU1ldGhvZC0+bmFtZSgpKTsKICAg
ICAgICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtOTAsNyArOTAsNyBAQCBKYXZhQ2xhc3M6
OkphdmFDbGFzcyhqb2JqZWN0IGFuSW5zdGFuY2UpCiBKYXZhQ2xhc3M6On5KYXZhQ2xhc3MoKSB7
CiAgICAgZnJlZSgodm9pZCAqKV9uYW1lKTsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgZGVsZXRlQWxsVmFs
dWVzKF9maWVsZHMpOwogICAgIF9maWVsZHMuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9q
bmlfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIENsYXNzICpK
YXZhSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QgCiAKIEpTVmFsdWUgSmF2YUluc3RhbmNlOjpz
dHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFs
c2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgCiAgICAg
anN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4oX2lu
c3RhbmNlLT5faW5zdGFuY2UsICJ0b1N0cmluZyIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwog
ICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNv
YmplY3QubW0JKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIGpvYmplY3QgSmF2YUpT
T2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0
aW9uIG9iamVjdC4KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gX2ltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIGpvYmpl
Y3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXAKICAgICAKICAgICBKU1ZhbHVlIHJl
c3VsdDsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlz
LT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQpAQCAtMzQ2LDcgKzM0Niw3IEBA
IGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgSWRlbnRpZmll
cihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZh
bHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBKYXZhSlNPYmpl
Y3Q6OnNldE1lbWJlcihqc3RyaW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90OwogICAgIF9pbXAtPnB1dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEph
dmFTdHJpbmcobWVtYmVyTmFtZSkpLCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhlYywgdmFsdWUp
LCBzbG90KTsKIH0KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6cmVtb3Zl
TWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxv
Y2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
X2ltcC0+ZGVsZXRlUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1l
bWJlck5hbWUpKSk7CiB9CiAKQEAgLTM5Niw3ICszOTYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVj
dDo6Z2V0U2xvdChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2Up
OworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0
OjpzZXRTbG90KGppbnQgaW5kZXgsIGoKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBfaW1wLT5wdXQoZXhlYywgKHVuc2lnbmVkKWluZGV4LCBjb252ZXJ0Sk9iamVjdFRv
VmFsdWUoZXhlYywgdmFsdWUpKTsKIH0KIApAQCAtNDI5LDcgKzQyOSw3IEBAIGpzdHJpbmcgSmF2
YUpTT2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTT2JqZWN0ICp0aGlzT2JqID0gY29uc3RfY2Fz
dDxKU09iamVjdCo+KF9pbXApOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCkBAIC00ODcsNyArNDg3LDcgQEAgamxv
bmcgSmF2YUpTT2JqZWN0OjpjcmVhdGVOYXRpdmUoamxvbmcgbgogCiBqb2JqZWN0IEphdmFKU09i
amVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KEpTVmFsdWUgdmFsdWUpIGNvbnN0CiB7Ci0gICAg
SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3Qo
KTsKICAgICBpZiAoIXJvb3RPYmplY3QpCkBAIC02MDAsNyArNjAwLDcgQEAgSlNWYWx1ZSBKYXZh
SlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgICAgICByZXR1cm4gaW1wOwogICAgIH0K
IAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgcmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwg
X3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogV2ViQ29y
ZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfb2JqYy5tbQkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5p
X29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBKU0M6OkJpbmRp
bmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhlYwogICAgICAgICAvLyBpbXBsZW1lbnRlZCBpbiBXZWJD
b3JlIHdpbGwgZ3VhcmFudGVlIHRoYXQgb25seSBhcHByb3ByaWF0ZSBKYXZhU2NyaXB0CiAgICAg
ICAgIC8vIGNhbiByZWZlcmVuY2UgdGhlIGFwcGxldC4KICAgICAgICAgewotICAgICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAgICAgICAgIHJlc3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBpc1N0YXRpYzpp
c1N0YXRpYyByZXR1cm5UeXBlOnJldHVyblR5cGUgbWV0aG9kOm1ldGhvZElEIGFyZ3VtZW50czph
cmdzIGNhbGxpbmdVUkw6bmlsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOiZfZXhjZXB0aW9uRGVzY3Jp
cHRpb25dOwogICAgICAgICB9CiAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdz
OjpkaXNwYXRjaEpOSUNhbGwoRXhlYwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
ZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxs
SmF2YTptZXRob2Q6cmV0dXJuVHlwZTphcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIHJlc3Vs
dCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJuVHlw
ZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCShyZXZpc2lvbiA0NjQxNykKKysr
IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
Niw3ICszMTYsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoVVN0cmluZyYgYVN0CiBj
b25zdCBjaGFyICpKYXZhTWV0aG9kOjpzaWduYXR1cmUoKSBjb25zdCAKIHsKICAgICBpZiAoIV9z
aWduYXR1cmUpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgICAgIFVTdHJpbmcgc2lnbmF0dXJl
QnVpbGRlcigiKCIpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9udW1QYXJhbWV0ZXJz
OyBpKyspIHsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCShyZXZpc2lvbiA0NjQxNykK
KysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIGNsYXNzIEphdmFTdHJpbmcKIHB1YmxpYzoKICAgICBKYXZhU3RyaW5nKCkK
ICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgX3JlcCA9IFVTdHJpbmcoKS5yZXAoKTsK
ICAgICB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICBpbnQgX3NpemUgPSBl
LT5HZXRTdHJpbmdMZW5ndGggKHMpOwogICAgICAgICBjb25zdCBqY2hhciAqdWMgPSBnZXRVQ2hh
cmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYgKGUsIHMpOwogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgICAgICAgICAgX3JlcCA9IFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KHVjKSwgX3NpemUpLnJlcCgpOwogICAgICAgICB9CiAgICAgICAgIHJlbGVh
c2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoZSwgcywgdWMpOwpAQCAtNzEsMTMgKzcxLDEz
IEBAIHB1YmxpYzoKICAgICAKICAgICB+SmF2YVN0cmluZygpCiAgICAgewotICAgICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgICAgIF9yZXAgPSAwOwogICAgIH0KICAgICAKICAgICBjb25zdCBjaGFyICpVVEY4
U3RyaW5nKCkgY29uc3QgeyAKICAgICAgICAgaWYgKF91dGY4U3RyaW5nLmNfc3RyKCkgPT0gMCkg
ewotICAgICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIF91dGY4U3RyaW5nID0gVVN0
cmluZyhfcmVwKS5VVEY4U3RyaW5nKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIF91dGY4
U3RyaW5nLmNfc3RyKCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAJKHJldmlz
aW9uIDQ2NDE3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcwLDcgKzQ3MCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXYKIAoganZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgSk5JVHlwZSBfSk5JVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNz
TmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICAKICAgICBqdmFsdWUgcmVzdWx0OwogICAgCkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCB2b2lkIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvCiAgICAgfQog
CiAgICAgaWYgKCFzX2V4Y2VwdGlvbkVudmlyb25tZW50IHx8IHNfZXhjZXB0aW9uRW52aXJvbm1l
bnQgPT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSB7Ci0gICAgICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKKyAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIHNfZXhjZXB0aW9uKTsKICAgICB9
CiAKQEAgLTEyOCw3ICsxMjgsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KEV4ZWNTCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAotICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0IHB1dCB0
aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHku
CisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0
IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAg
ICAKQEAgLTI0OSw3ICsyNDksNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVs
dE1ldGhvCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsgLy8gQ2FuJ3QgcHV0IHRoaXMg
aW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53
aW5kcyBpbmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0
cnkgewpAQCAtMzAyLDcgKzMwMiw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5k
ZWZpbmVkRmkKICAgICBpZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0
IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3Jy
ZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCBy
ZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHNldFZh
bHVlOmZvclVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnRuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb24KQEAgLTMzMCw3ICszMzAsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFs
dWVPZlVuZGVmaW5lCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAK
LSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOyAvLyBDYW4ndCBw
dXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVj
dGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVz
ZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhpcyBjaGVjayBpcyBub3QgcmVh
bGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVudHMKICAgICAvLyB2YWx1ZUZv
clVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnRuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiA0NjQxNykK
KysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05NiwxNSArOTYsMTUgQEAgSlNWYWx1ZSBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4
ZQogICAgIAogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5z
dGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJnZXRPYmpl
Y3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAgICAgcmVz
dWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2JqY09iamVj
dFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9u
KiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soZmFsc2UpOworICAgICAg
ICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBHZW5lcmFsRXJyb3IsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKLSAgICAgICAg
SlNMb2NrOjp1bmxvY2soZmFsc2UpOworICAgICAgICBKU0xvY2s6OnVubG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29t
ZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZApA
QCAtMTI1LDE0ICsxMjUsMTQgQEAgdm9pZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShF
eGVjUwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFu
Y2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1
ZVRvT2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGZhbHNlKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRo
aXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4K
IAogICAgIEB0cnkgewogICAgICAgICBbdGFyZ2V0T2JqZWN0IHNldFZhbHVlOnZhbHVlIGZvcktl
eTooTlNTdHJpbmcgKilfbmFtZS5nZXQoKV07CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24qIGxv
Y2FsRXhjZXB0aW9uKSB7Ci0gICAgICAgIEpTTG9jazo6bG9jayhmYWxzZSk7CisgICAgICAgIEpT
TG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIEdlbmVyYWxFcnJvciwgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xv
Y2s6OnVubG9jayhmYWxzZSk7CisgICAgICAgIEpTTG9jazo6dW5sb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRp
bGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5t
bQkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFs
dWVUb09iamNWYWx1ZShFeGVjU3QKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNl
IE9iamNPYmplY3RUeXBlOiB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0ID0gZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCogb3JpZ2luUm9v
dE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBAIC0xOTYsNyAr
MTk2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdAogCiBKU1Zh
bHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5z
c3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIAogICAgIHVuaWNoYXIgKmNoYXJzOwogICAgIHVuc2ln
bmVkIGludCBsZW5ndGggPSBbbnNzdHJpbmcgbGVuZ3RoXTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBK
U1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0CiAqLwogSlNWYWx1ZSBjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZlciwgT2JqY1Zh
bHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIAog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7CkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUv
YnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBA
QCB2b2lkIFF0UnVudGltZU9iamVjdEltcDo6aW52YWxpZGF0ZSgpCiAKIHZvaWQgUXRSdW50aW1l
T2JqZWN0SW1wOjpyZW1vdmVGcm9tQ2FjaGUoKQogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsK
KyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFF0SW5zdGFuY2Uq
IGtleSA9IGNhY2hlZE9iamVjdHMua2V5KHRoaXMpOwogICAgIGlmIChrZXkpCiAgICAgICAgIGNh
Y2hlZE9iamVjdHMucmVtb3ZlKGtleSk7CkBAIC0xMTAsNyArMTEwLDcgQEAgUXRJbnN0YW5jZTo6
UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUgogCiBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgp
CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAKICAgICBjYWNoZWRPYmplY3RzLnJlbW92ZSh0aGlzKTsKICAgICBjYWNo
ZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgUXRJbnN0
YW5jZTo6flF0SW5zdGFuY2UoKQogCiBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IFF0SW5zdGFuY2U6
OmdldFF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2Jq
ZWN0LCBRU2NyaXB0RW5naW5lOjpWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXApCiB7Ci0gICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAKICAgICBmb3JlYWNoKFF0SW5zdGFuY2UqIGluc3RhbmNlLCBjYWNoZWRJbnN0YW5jZXMudmFs
dWVzKG8pKSB7CiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmpl
Y3QpCkBAIC0xOTIsNyArMTkyLDcgQEAgQ2xhc3MqIFF0SW5zdGFuY2U6OmdldENsYXNzKCkgY29u
c3QKIAogUnVudGltZU9iamVjdEltcCogUXRJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgUnVudGltZU9iamVjdEltcCogcmV0ID0g
c3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KGNhY2hlZE9iamVjdHMudmFsdWUodGhpcykp
OwogICAgIGlmICghcmV0KSB7CiAgICAgICAgIHJldCA9IG5ldyAoZXhlYykgUXRSdW50aW1lT2Jq
ZWN0SW1wKGV4ZWMsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlz
aW9uIDQ2NDE3KQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50
KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlm
IChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAt
NzcwLDcgKzc3MCw3IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKGZhbHNl
KTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgaWYgKHR5
cGUgPT0gUU1ldGFUeXBlOjpCb29sKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQu
dG9Cb29sKCkpOwpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpjYWxsKEV4ZWNTdAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8v
IFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2Nr
KGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAg
UU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKG9iaikg
ewpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
OjpjYWxsKAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3RhdGlj
X2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihmdW5jdGlvbk9iamVjdCktPmRfZnVu
YygpOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNlLT5n
ZXRPYmplY3QoKTsKIApAQCAtMTY3MCw3ICsxNjcwLDcgQEAgdm9pZCBRdENvbm5lY3Rpb25PYmpl
Y3Q6OmV4ZWN1dGUodm9pZCAqKgogCiAgICAgICAgIGludCBhcmdjID0gcGFyYW1ldGVyVHlwZXMu
Y291bnQoKTsKIAotICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICAgICAgLy8gIyMjIFNob3VsZCB0aGUg
SW50ZXJwcmV0ZXIvRXhlY1N0YXRlIGNvbWUgZnJvbSBzb21ld2hlcmUgZWxzZT8KICAgICAgICAg
UmVmUHRyPFJvb3RPYmplY3Q+IHJvID0gbV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpOwpJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ2NDE3
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRk
U2NyaXB0UHJvZmkKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgIG1fZnJvbnRlbmQtPmFkZFByb2ZpbGUodG9KUyhtX3NjcmlwdFN0YXRlLCBwcm9m
aWxlKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgSlNWYWx1ZSBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjbwogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICByZXR1cm4gbV9kZWJ1Z2dlckNhbGxG
cmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaW5z
cGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9p
bnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGls
ZUFsbAogCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlv
bnMoVGltZXI8SmF2YVNjcmlwdERlYnVnU2VydmVyPiopCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFs
c2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpOwog
CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29t
cGlsZSwgc2luY2Ugd2UnbGwgZW5kCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0
UHJvZmlsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHRQcm9maWxlTm9kZS5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
SmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRMaW5lTnVtYmVyKEpTQ29udGV4CiAKIHN0YXRpYyBKU1Zh
bHVlUmVmIGdldFRvdGFsVGltZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhm
YWxzZSk7CisgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAg
ICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgUHJvZmlsZU5v
ZGVDbGFzcygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CkBA
IC05NSw3ICs5NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFRvdGFsVGltZShKU0NvbnRleHQK
IAogc3RhdGljIEpTVmFsdWVSZWYgZ2V0U2VsZlRpbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewotICAgIEpTQzo6
SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmpl
Y3QsIFByb2ZpbGVOb2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFNlbGZU
aW1lKEpTQ29udGV4dFIKIAogc3RhdGljIEpTVmFsdWVSZWYgZ2V0VG90YWxQZXJjZW50KEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVl
UmVmKikKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlTm9kZUNsYXNzKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMg
SlNWYWx1ZVJlZiBnZXRUb3RhbFBlcmNlbnQoSlNDb250CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdl
dFNlbGZQZXJjZW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpT
U3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsK
KyAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBpZiAo
IUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlTm9kZUNsYXNz
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKQEAgLTEyOCw3
ICsxMjgsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRTZWxmUGVyY2VudChKU0NvbnRlCiAKIHN0
YXRpYyBKU1ZhbHVlUmVmIGdldE51bWJlck9mQ2FsbHMoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewotICAgIEpTQzo6
SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmpl
Y3QsIFByb2ZpbGVOb2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdldE51bWJl
ck9mQ2FsbHMoSlNDb24KIAogc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q2hpbGRyZW4oSlNDb250ZXh0
UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0M6OkpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBpZiAoIUpTVmFsdWVJc09i
amVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9maWxlTm9kZUNsYXNzKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKQEAgLTE4Niw3ICsxODYsNyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRDaGlsZHJlbihKU0NvbnRleHRSCiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGdldFBhcmVudChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7
CisgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgaWYg
KCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgUHJvZmlsZU5vZGVDbGFz
cygpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CkBAIC0xOTgs
NyArMTk4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZ2V0UGFyZW50KEpTQ29udGV4dFJlZgogCiBz
dGF0aWMgSlNWYWx1ZVJlZiBnZXRIZWFkKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKIHsKLSAgICBKU0M6OkpTTG9jayBs
b2NrKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAKICAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBQcm9m
aWxlTm9kZUNsYXNzKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4
KTsKQEAgLTIxMCw3ICsyMTAsNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBnZXRIZWFkKEpTQ29udGV4
dFJlZiBjCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldFZpc2libGUoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQogewotICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRo
aXNPYmplY3QsIFByb2ZpbGVOb2RlQ2xhc3MoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGdl
dFZpc2libGUoSlNDb250ZXh0UmUKIAogc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q2FsbFVJRChKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1
ZVJlZiopCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RP
ZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgUHJvZmlsZU5vZGVDbGFzcygpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CShyZXZpc2lvbiA0NjQxNykKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnQoKQog
ICAgIE5QRXJyb3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoZmFsc2UpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5l
d3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9w
YXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwogICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgYm9vbCBn
ZXRTdHJpbmcoU2NyaXB0Q29udHJvbGxlciogCiB7CiAgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0
IHx8IHJlc3VsdC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb3h5LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIFVTdHJpbmcgdXN0cmluZyA9IHJlc3VsdC50b1N0cmluZyhleGVjKTsK
QEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdp
blJlCiAgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMg
c2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAg
ICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKICAgICAgICAgICAg
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlm
eShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RP
TkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CkBAIC01MzMsNyArNTMzLDcgQEAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdz
OjpJbnN0YW5jZT4gUGx1ZwogICAgIE5QRXJyb3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QsICZvYmplY3QpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gNDY0MTcpCisr
KyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
ZmFsc2UpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAg
ICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3Rh
bmNlLCAmZXZlbnQpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXkKICAgICAKICAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBYRXZl
bnQgdG8gcGFzcyB0aHJvdWdoICovCiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAg
LTE5Myw3ICsxOTMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VF
CiAgICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3MgdGhyb3VnaCAqLwog
ICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRl
bnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CiAK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogI2VuZGlmCiAKICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2lu
c3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0y
NzMsNyArMjczLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICAgICBBU1NFUlQobV9zdHJl
YW1zLmlzRW1wdHkoKSk7CiAKICAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAK
ICAgICAvLyBDbGVhciB0aGUgd2luZG93CiAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwpAQCAt
NTQzLDcgKzU0Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCiAKICAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwog
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9t
YWMvUGx1Z2luVmlld01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL21hYy9Q
bHVnaW5WaWV3TWFjLmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvbWFj
L1BsdWdpblZpZXdNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpzdG9wKCkKIAogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKLSAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogCiAgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdp
c3RlclBsdWdpbihtX2luc3RhbmNlKTsKIApAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0IC0gbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0
LmJvdHRvbSAtIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFu
Y2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTcxMiw3
ICs3MTIsNyBAQCBQb2ludCBQbHVnaW5WaWV3OjpnbG9iYWxNb3VzZVBvc0ZvclBsdWdpCiBib29s
IFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5ib3R0b20gPSBtX2NsaXBSZWN0LmhlaWdodCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoZmFsc2UpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwg
Jm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMjQzLDcgKzI0
Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAKICAgICBtX2lzU3RhcnRlZCA9IGZhbHNl
OwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKIAogICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxl
cigpLnVucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7CiAKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2
b2lkIFBsdWdpblZpZXc6OmluaXQoKQogCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFs
c2UpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJ
KHJldmlzaW9uIDQ2NDE3KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDcgKzQxMyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCByZXN1bHQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOwog
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICAgICAgbnBFdmVudC5sUGFyYW0g
PSAweDgwMDA7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZmFsc2UpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC02MDIs
NyArNjAyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRQogICAg
IH0gZWxzZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIGlmICghZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIApA
QCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0
IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CiAKICAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNzA3LDcgKzcwNyw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c3RvcCgpCiAgICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkcpbV9wbHVnaW5XbmRQcm9jKTsKICAgICB9
CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHdpbmRvdwogICAgIG1fbnBXaW5kb3cu
d2luZG93ID0gMDsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjQyNykKKysrIFdlYktpdC9ndGsvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDctMjcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzczNQorICAgICAgICBHaXZlIGEgaGVscGZ1bCBuYW1lIHRvIEpTTG9jayBhcmd1bWVu
dAorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtp
dF9nY19jb3VudF9qYXZhc2NyaXB0X29iamVjdHMpOgorCiAyMDA5LTA3LTI0ICBQcmlpdCBMYWVz
ICA8cGxhZXNAcGxhZXMub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5k
ZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysg
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NTAsNyArODUwLDcgQEAgdm9pZCB3ZWJraXRfZ2NfY29sbGVjdF9qYXZhc2NyaXB0X29iamVjdAog
CiBnc2l6ZSB3ZWJraXRfZ2NfY291bnRfamF2YXNjcmlwdF9vYmplY3RzKCkKIHsKLSAgICBKU0M6
OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5vYmplY3RDb3VudCgpOwogCiB9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDY0MjcpCisrKyBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDA5LTA3
LTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mjc3MzUKKyAgICAgICAgR2l2ZSBhIGhlbHBmdWwgbmFtZSB0byBK
U0xvY2sgYXJndW1lbnQKKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06Cisg
ICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RzQ291bnRdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudF0p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0
ZWRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2
YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3Mgc2hvdWxkUHJpbnRFeGNlcHRpb25zXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0
aXN0aWNzIHNldFNob3VsZFByaW50RXhjZXB0aW9uczpdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGljc10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGlj
cyBqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudF0pOgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2VEZWZhdWx0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHJ1Y3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFByb3BlcnR5KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01l
dGhvZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51
bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojph
ZGRWYWx1ZVRvQXJyYXkpOgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
U3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3Ry
ZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5XSk6Cisg
ICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2Jq
ZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2Vi
RnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBl
UGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQ
bHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJ
blZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQ
bHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVnaW5D
b250cm9sbGVyIHN0b3BBbGxQbHVnaW5zXSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgYWRkUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lQ
bHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdp
bnNdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVy
ZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06CisgICAg
ICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXSk6CisgICAgICAgICgtW1dlYlNj
cmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmc6XSk6CisKIDIwMDktMDctMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NCwzMSArNTQsMzEgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2Jh
bE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90
KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICByZXR1cm4g
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENv
dW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0Nv
dW50CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChOU0NvdW50
ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCkBA
IC0xNDMsMTMgKzE0MywxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogKyAoQk9PTClz
aG91bGRQcmludEV4Y2VwdGlvbnMKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICByZXR1cm4gQ29uc29sZTo6c2hv
dWxkUHJpbnRFeGNlcHRpb25zKCk7CiB9CiAKICsgKHZvaWQpc2V0U2hvdWxkUHJpbnRFeGNlcHRp
b25zOihCT09MKXByaW50CiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgQ29uc29sZTo6c2V0U2hvdWxkUHJpbnRF
eGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogKyAoTlNEaWN0aW9uYXJ5ICopbWVtb3J5U3RhdGlzdGljcwogewogICAgIFdU
Rjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBXVEY6OmZhc3RN
YWxsb2NTdGF0aXN0aWNzKCk7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSGVhcDo6U3RhdGlzdGljcyBqc0hlYXBT
dGF0aXN0aWNzID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnN0YXRp
c3RpY3MoKTsKICAgICByZXR1cm4gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmZhc3RNYWxs
b2NTdGF0aXN0aWNzLmhlYXBTaXplXSwgQCJGYXN0TWFsbG9jSGVhcFNpemUiLApAQCAtMjE2LDcg
KzIxNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiArIChzaXplX3QpamF2YVNjcmlw
dFJlZmVyZW5jZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9
CiAKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5tbQkocmV2aXNpb24gNDY0MTcpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcg
QEAgYm9vbCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3Ig
ZXJyb3I7CiAgICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVn
aW5WaWV3LmdldCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZmFsc2UpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVn
aW5GdW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJl
YW1zLCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCklu
ZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlz
aW9uIDQ2NDE3KQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBn
ZXROUFJlY3QoY29uc3QgTlNSZWMKICAgICBCT09MIGFjY2VwdGVkRXZlbnQ7CiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAg
ICAgYWNjZXB0ZWRFdmVudCA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmV2
ZW50KHBsdWdpbiwgZXZlbnQpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rp
b25dOwpAQCAtOTczLDcgKzk3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29u
c3QgTlNSZWMKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3Nl
bGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICAgICAgICAgIG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdp
bkZ1bmNzXS0+c2V0d2luZG93KHBsdWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAgICAg
W3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0MDgsNyArMTQwOCw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWMKICAgICBOUEVycm9yIGVycm9yOwog
ICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUpOwog
ICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTUzOSw3ICsxNTM5
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBOU1JlYwogICAgICAgICBp
ZiAoW0pTUGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgW3Nl
bGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbVVJMIF93ZWJfVVJMQ1N0cmluZ10s
IE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE1NzEsNyAr
MTU3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXROUFJlY3QoY29uc3QgTlNSZWMKICAgICAg
ICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJs
bm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0
cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAgICBb
c2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGdldE5QUmVjdChjb25zdCBOU1JlYwogICAgICAgICAgICAgICAgIGlmIChb
cGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAgICAgICBb
c2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90
aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmlu
Z10sIE5QRVJSX0dFTkVSSUNfRVJST1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1
Z0luRnVuY3Rpb25dOwpAQCAtMjM3NCw3ICsyMzc0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdl
dE5QUmVjdChjb25zdCBOU1JlYwogICAgIC8vIFRlbGwgdGhlIHBsdWdpbiB0byBwcmludCBpbnRv
IHRoZSBHV29ybGQKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVu
Y3NdLT5wcmludChwbHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9s
bGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9s
bGVyLm1tCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5D
b250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMCArOTAsMTAgQEAgc3RhdGljIE5T
TXV0YWJsZVNldCAqcGx1Z2luVmlld3MgPSBuaWw7CiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwog
CiAgICAgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJ
blZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICB2aWV3
ID0gW3ZpZXdGYWN0b3J5IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAgICAg
fSBlbHNlIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVn
aW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgdmll
dyA9IFt2aWV3RmFjdG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAg
IH0KICAgICAKQEAgLTE0NywxMCArMTQ3LDEwIEBAIHN0YXRpYyBOU011dGFibGVTZXQgKnBsdWdp
blZpZXdzID0gbmlsOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAg
IGlkIGFWaWV3ID0gW192aWV3cyBvYmplY3RBdEluZGV4OmldOwogICAgICAgICBpZiAoW2FWaWV3
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsK
ICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihw
bHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBb
YVZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMTcwLDEwICsxNzAsMTAg
QEAgc3RhdGljIE5TTXV0YWJsZVNldCAqcGx1Z2luVmlld3MgPSBuaWw7CiAgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0
SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5TdG9wKV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAg
ICAgIFthVmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICAgICAgICAgIFthVmlldyBwbHVnaW5TdG9wXTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTE5NywxMCArMTk3LDEwIEBAIHN0YXRpYyBOU011dGFibGVTZXQgKnBsdWdpblZp
ZXdzID0gbmlsOwogICAgICAgICAKICAgICAgICAgTE9HKFBsdWdpbnMsICJpbml0aWFsaXppbmcg
cGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAgICB9
IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5pdGlh
bGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBbdmlldyBw
bHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yMTAsMTUgKzIxMCwxNSBAQCBzdGF0
aWMgTlNNdXRhYmxlU2V0ICpwbHVnaW5WaWV3cyA9IG5pbDsKICAgICAgICAgaWYgKF9zdGFydGVk
KSB7CiAgICAgICAgICAgICBMT0coUGx1Z2lucywgInN0YXJ0aW5nIHBsdWctaW4gJUAiLCB2aWV3
KTsKICAgICAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlBsdWdJblN0YXJ0KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
ICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0g
ICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFs
c2UpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgICAgICBbdmlldyBw
bHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6
KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgICAg
IFt2aWV3IHNldENvbnRhaW5pbmdXaW5kb3c6W19kb2N1bWVudFZpZXcgd2luZG93XV07CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIzMCwxOSArMjMwLDE5IEBAIHN0YXRpYyBOU011dGFi
bGVTZXQgKnBsdWdpblZpZXdzID0gbmlsOwogICAgIGlmIChbX3ZpZXdzIGNvbnRhaW5zT2JqZWN0
OnZpZXddKSB7CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewogICAgICAgICAgICAgaWYgKFt2aWV3
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcCldKSB7Ci0gICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVn
SW5TdG9wXTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcih3ZWJQbHVnSW5EZXN0cm95KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAgICAgICB9IGVsc2Ug
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luRGVzdHJveSldKSB7
Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxz
ZSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5EZXN0
cm95XTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI5MSwxMCArMjkxLDEwIEBAIHN0YXRpYyB2
b2lkIGNhbmNlbE91dHN0YW5kaW5nQ2hlY2soY29uc3QKICAgICBmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewogICAgICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRleDppXTsK
ICAgICAgICAgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJ
bkRlc3Ryb3kpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoZmFsc2UpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgW2FW
aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAgICAgICB9IGVsc2UgaWYgKFthVmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRlc3Ryb3kpXSkgewotICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgICAgICAgICAgW2FWaWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgICAgICB9
CiAgICAgICAgIApJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDQ2NDE3KQorKysgV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTY4NSw3ICs2ODUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgCiAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxP
YmplY3QgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpOwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtNzI5LDcgKzcyOSw3IEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
b2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CkBA
IC03NjMsNyArNzYzLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9r
ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsgICAgCisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
ICAgCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmpl
Y3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKQpAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Ojpjb25zdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBl
IGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSk7
CkBAIC04MzAsNyArODMwLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omdl
dFBybwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKGZhbHNlKTsgICAgCisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1
bHRMZW5ndGgpOwpAQCAtODQ5LDcgKzg0OSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0xvY2sgbG9jayhmYWxzZSk7ICAgIAorICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBw
cm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0
RGF0YSwgcmVzdWx0TGVuZ3RoKTsKQEAgLTg3MSw3ICs4NzEsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOyAgICAKKyAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNo
YWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdDsKQEAgLTg5NSw3ICs4OTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNMb2NrIGxvY2soZmFsc2UpOyAgICAKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOyAgICAKICAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUo
ZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgb2JqZWN0LT5wdXQoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7CkBAIC05MjMsNyArOTIzLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIG9iamVjdC0+ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTk0OCw3ICs5NDgsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3Zl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSlNMb2NrIGxvY2soZmFs
c2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgb2JqZWN0
LT5kZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTVmFsdWUgZnVuYyA9IG9iamVj
dC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydHlOYW1lcyhleGVjKTsKICAgICBvYmplY3QtPmdldFByb3BlcnR5TmFtZXMoZXhlYywg
cHJvcGVydHlOYW1lcyk7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJyYXkgKmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkg
ewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmlu
Z1ZhbHVlVHlwZV1dOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNDY0MTcp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTYw
NSw3ICs2MDUsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAg
ICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5n
KCkgJiYgIXJlc3VsdC5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNM
b2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKTsKIH0KIApJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDQ2
NDE3KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlw
dEVycm9yTGluZU51bWJlCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7
CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIGNvbnN0IFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5z
Y29wZUNoYWluKCk7CiAgICAgaWYgKCFzY29wZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1l
CkBAIC0yMjksNyArMjI5LDcgQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRFcnJvckxpbmVO
dW1iZQogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAKICAgICAvLyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBm
cmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1pYyBnbG9iYWwgb2JqZWN0LAogICAgIC8vIERhc2hj
b2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVzaW5nIGEg
c3RhbGUKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQ4LDcgKzM5NDgs
NyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBjb3JlRnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1
ZSkuanNWYWx1ZSgpOwogICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgcmV0dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKGNv
cmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJlc3VsdCk7
CiB9CiAKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gNDY0MjcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDctMjcgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzcz
NQorICAgICAgICBHaXZlIGEgaGVscGZ1bCBuYW1lIHRvIEpTTG9jayBhcmd1bWVudAorCisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdCk6CisKIDIwMDktMDctMjcgIFZvbGtlciBIaWxzaGVpbWVyIDx2b2xr
ZXIuaGlsc2hlaW1lckBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1
c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiA0NjQxNykKKysrIFdlYktpdC9x
dC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzLDcgKzM4Myw3IEBAIHZv
aWQgUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmoKICAgICBpZiAoIXBhZ2UoKS0+
c2V0dGluZ3MoKS0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkphdmFzY3JpcHRFbmFibGVk
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJhbWUpOwogICAgIEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QqIHJvb3QgPSBkLT5mcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2Jq
ZWN0KCk7CiAgICAgaWYgKCF3aW5kb3cpIHsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjQyNykKKysrIFdl
YktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDkt
MDctMjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzczNQorICAgICAgICBHaXZlIGEgaGVscGZ1bCBuYW1lIHRv
IEpTTG9jayBhcmd1bWVudAorCisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQpOgorICAg
ICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQp
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxP
YmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKwogMjAwOS0wNy0yNSAgS3dhbmcgWXVsIFNlbyAgPHNr
eXVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDQ2NDE3KQorKysgV2ViS2l0
L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgIGlmICghY291
bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7
CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAqY291bnQgPSAo
VUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEwOCw3ICsxMDgsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJl
dHVybiBTX09LOwogfQpAQCAtMTE5LDcgKzExOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CkBAIC0xMzAsNyArMTMwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJD
b3JlU3RhdGlzdAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAK
LSAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19P
SzsKIH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNv
cmVTdGF0aXN0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBJUHJvcGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IE93blB0cjxIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gPiBqc09iamVjdFR5cGVOYW1lcyhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cygpKTsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6Y29u
c3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFt
ZXMtPmVuZCgpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCShyZXZp
c2lvbiA0NjQxNykKKysrIFdlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkphdmFTY3JpcHRDCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAg
SlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDQ2NDE3KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgyMCw3ICsyODIwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojpz
dHJpbgogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uUmVzdWx0KQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogICAgIGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5pc1N0cmluZygpKSB7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICAgICAgKnJlc3VsdCA9IEJTdHJpbmcoU3RyaW5nKHNjcmlwdEV4
ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoKSkpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="17831"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>