<?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>167528</bug_id>
          
          <creation_ts>2017-01-27 14:31:28 -0800</creation_ts>
          <short_desc>The mutator should be able to perform increments of GC work</short_desc>
          <delta_ts>2017-01-31 14:33:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1270775</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-27 14:31:28 -0800</bug_when>
    <thetext>If you don&apos;t have a lot of cores, then running the GC in a purely concurrent way can be bad: you won&apos;t make enough progress to keep pace with the mutator&apos;s allocations.

Fortunately, Riptide has most of what we need to run increments of GC work on the mutator thread. This is the most natural way to pace the mutator, since it forces the mutator to do GC work anytime it allocates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270776</commentid>
    <comment_count>1</comment_count>
      <attachid>299962</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-27 14:32:29 -0800</bug_when>
    <thetext>Created attachment 299962
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271468</commentid>
    <comment_count>2</comment_count>
      <attachid>300158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-30 16:17:34 -0800</bug_when>
    <thetext>Created attachment 300158
possibly better version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271784</commentid>
    <comment_count>3</comment_count>
      <attachid>300235</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-31 10:57:55 -0800</bug_when>
    <thetext>Created attachment 300235
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271824</commentid>
    <comment_count>4</comment_count>
      <attachid>300235</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-01-31 12:08:38 -0800</bug_when>
    <thetext>Comment on attachment 300235
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=300235&amp;action=review

r=me.

&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:552
&gt; +            if (status == IterationStatus::Continue)
&gt; +                break;

Using IterationStatus::Continue to signal we have no more work to do is confusing but I guess that&apos;s the pattern.

&gt; Source/WTF/wtf/DataLog.cpp:131
&gt; +    s_file = new (s_lockedFileData) LockedPrintStream(std::unique_ptr&lt;FilePrintStream&gt;(file));

oh wow...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271826</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-31 12:10:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 300235 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=300235&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:552
&gt; &gt; +            if (status == IterationStatus::Continue)
&gt; &gt; +                break;
&gt; 
&gt; Using IterationStatus::Continue to signal we have no more work to do is
&gt; confusing but I guess that&apos;s the pattern.

It&apos;s unfortunate. I will we had generators. It&apos;s actually so confusing here: we say &quot;Continue&quot; to tell the forEachBlah to go to the next mark stack. We do that when the mark stack we were at had no work. So, if forEachBlah returns Continue then no mark stack had work. Hence, if it says Continue, we break.

&gt; 
&gt; &gt; Source/WTF/wtf/DataLog.cpp:131
&gt; &gt; +    s_file = new (s_lockedFileData) LockedPrintStream(std::unique_ptr&lt;FilePrintStream&gt;(file));
&gt; 
&gt; oh wow...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271834</commentid>
    <comment_count>6</comment_count>
      <attachid>300235</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-01-31 12:31:27 -0800</bug_when>
    <thetext>Comment on attachment 300235
the patch

r=me

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +        precise at keeping case as the new work-based incremental mode.

keeping pace

&gt; Source/JavaScriptCore/ChangeLog:33
&gt; +        each other is a huge splay-latency speed-up on my iPad. It&apos;s also a CDjs progression. It does
&gt; +        progress splay-throughput, but I think that&apos;s fine (the regression is 11%, the progression is

did you mean *regress* splay-throughput?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271835</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-31 12:33:04 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 300235 [details]
&gt; the patch
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:24
&gt; &gt; +        precise at keeping case as the new work-based incremental mode.
&gt; 
&gt; keeping pace

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:33
&gt; &gt; +        each other is a huge splay-latency speed-up on my iPad. It&apos;s also a CDjs progression. It does
&gt; &gt; +        progress splay-throughput, but I think that&apos;s fine (the regression is 11%, the progression is
&gt; 
&gt; did you mean *regress* splay-throughput?

Yes. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271900</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-31 14:33:06 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/211448</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299962</attachid>
            <date>2017-01-27 14:32:29 -0800</date>
            <delta_ts>2017-01-30 16:17:34 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16504</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExMzAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE3LTAxLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIG11dGF0b3Igc2hvdWxkIGJlIGFibGUgdG8gcGVyZm9ybSBpbmNyZW1lbnRzIG9mIEdDIHdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzUy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsg
aW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjptYXJrVG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVwZGF0ZU9iamVjdENv
dW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpkaWRBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q291bnQpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpieXRlc1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JF
YWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjpwZXJmb3JtSW5jcmVtZW50KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkVmlzaXRDb3VudCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzaG91bGRU
aW1lT3V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZCk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVBbGwpOgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpsb2cpOgorICAgICAg
ICAqIGhlYXAvU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bG9nKToKKwogMjAx
Ny0wMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQgbmVlZHMgdG8gbWVyZ2VJZk5lY2Vzc2FyeQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5
LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9kZXBy
ZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCiAg
ICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+
KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xv
dFZpc2l0b3I+KCp0aGlzKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0ZDo6bWFrZV91
bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2NvbnN0cmFpbnRTZXQoc3RkOjptYWtl
X3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKQEAgLTMxMiw5ICszMTMsMTAgQEAgSGVh
cDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogCiBIZWFwOjp+SGVhcCgpCiB7Ci0g
ICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAg
ICAgIHNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKLSAgICBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKKyAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCisgICAg
ICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHZpc2l0b3IuY2xl
YXJNYXJrU3RhY2tzKCk7CisgICAgICAgIH0pOwogICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xl
YXIoKTsKICAgICBtX3JhY2VNYXJrU3RhY2stPmNsZWFyKCk7CiAgICAgCkBAIC01NjEsNyArNTYz
LDYgQEAgdm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydAogCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVF
bmFibGVyKCpzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0
YXJ0TWFya2luZygpOwogICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFy
ZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwogICAgICAgICAgICAgfQogCkBAIC01NzEsOCAr
NTcyLDEzIEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAKKyAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAg
IFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHZpc2l0b3IuZGlkU3Rh
cnRNYXJraW5nKCk7CisgICAgICAgIH0pOworICAgIAogICAgIFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciA9ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOwotICAgIHNsb3RWaXNpdG9yLmRpZFN0YXJ0
TWFya2luZygpOworCiAgICAgbV9jb25zdHJhaW50U2V0LT5kaWRTdGFydE1hcmtpbmcoKTsKICAg
ICAKICAgICBtX3NjaGVkdWxlci0+YmVnaW5Db2xsZWN0aW9uKCk7CkBAIC03OTUsOSArODAxLDcg
QEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSAogdm9pZCBIZWFwOjp1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRD
b3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKLSAgICAgICAgdmlz
aXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7Ci0gICAgICAgIGRhdGFMb2dGKCJcbk51bWJl
ciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CisgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBv
ZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCgpKSwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKQEAgLTgxMCwxMCArODE0LDEwIEBA
IHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKIAogdm9pZCBIZWFwOjpl
bmRNYXJraW5nKCkKIHsKLSAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwotCi0g
ICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQot
ICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7CisgICAgZm9yRWFjaFNsb3RWaXNpdG9y
KAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICB2aXNp
dG9yLnJlc2V0KCk7CisgICAgICAgIH0pOwogCiAgICAgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0Vt
cHR5KCk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKQEAgLTE4
NzEsNiArMTg3NSw3IEBAIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogICAg
IGlmIChtX2VkZW5BY3Rpdml0eUNhbGxiYWNrKQogICAgICAgICBtX2VkZW5BY3Rpdml0eUNhbGxi
YWNrLT5kaWRBbGxvY2F0ZShtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlICsgbV9ieXRlc0FiYW5k
b25lZFNpbmNlTGFzdEZ1bGxDb2xsZWN0KTsKICAgICBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xl
ICs9IGJ5dGVzOworICAgIHBlcmZvcm1JbmNyZW1lbnQoYnl0ZXMpOwogfQogCiBib29sIEhlYXA6
OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCkKQEAgLTE5OTYsMjQgKzIwMDEsMjMgQEAgYm9vbCBI
ZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlFbXB0eVdlYWtCbAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zaXplX3QgSGVhcDo6dGhyZWFkVmlzaXRDb3VudCgpCi17ICAgICAgIAotICAgIHVuc2lnbmVk
IGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCi0gICAgICAgIHJlc3VsdCArPSBwYXJhbGxlbFZpc2l0b3ItPnZp
c2l0Q291bnQoKTsKK3NpemVfdCBIZWFwOjp2aXNpdENvdW50KCkKK3sKKyAgICBzaXplX3QgcmVz
dWx0ID0gMDsKKyAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSB2aXNpdG9yLnZpc2l0Q291bnQo
KTsKKyAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc2l6ZV90IEhlYXA6OmJ5
dGVzVmlzaXRlZCgpCiB7Ci0gICAgcmV0dXJuIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmJ5dGVz
VmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7Ci19Ci0KLXNpemVfdCBIZWFwOjp0aHJl
YWRCeXRlc1Zpc2l0ZWQoKQoteyAgICAgICAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBm
b3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCi0gICAg
ICAgIHJlc3VsdCArPSBwYXJhbGxlbFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpOworICAgIGZvckVh
Y2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAg
ICAgICAgICAgcmVzdWx0ICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAgICAgIH0pOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzNzQsNiArMjM3OCw3IEBAIHZvaWQgSGVhcDo6
Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwogICAgIGZ1bmMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgIGZ1bmMoKm1fbXV0YXRvclNsb3RWaXNpdG9yKTsKICAgICBmb3IgKGF1
dG8mIHNsb3RWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgZnVuYygq
c2xvdFZpc2l0b3IpOwogfQpAQCAtMjM4Myw1ICsyMzg4LDI1IEBAIHZvaWQgSGVhcDo6c2V0TXV0
YXRvclNob3VsZEJlRmVuY2VkKGJvb2wKICAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZh
bHVlOwogICAgIG1fYmFycmllclRocmVzaG9sZCA9IHZhbHVlID8gdGF1dG9sb2dpY2FsVGhyZXNo
b2xkIDogYmxhY2tUaHJlc2hvbGQ7CiB9Ci0gICAgCisKK3ZvaWQgSGVhcDo6cGVyZm9ybUluY3Jl
bWVudChzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKCFtX29iamVjdFNwYWNlLmlzTWFya2luZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luY3JlbWVudEJhbGFuY2UgKz0gYnl0ZXM7Cisg
ICAgaWYgKG1faW5jcmVtZW50QmFsYW5jZSA+PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihNYXJrZWRC
bG9jazo6YmxvY2tTaXplKSkgeworICAgICAgICBzaXplX3QgYnl0ZXNCZWZvcmUgPSBtX211dGF0
b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCk7CisgICAgICAgIG1fbXV0YXRvclNsb3RWaXNp
dG9yLT5kcmFpbkZyb21TaGFyZWQoCisgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2xhdmVEcmFp
biwKKyAgICAgICAgICAgIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCksCisgICAgICAgICAgICBi
eXRlc0JlZm9yZSArIG1faW5jcmVtZW50QmFsYW5jZSwKKyAgICAgICAgICAgIFNsb3RWaXNpdG9y
OjpEcmFpbldhaXRNb2RlOjpEb05vdFdhaXQpOworICAgICAgICBtX211dGF0b3JTbG90VmlzaXRv
ci0+ZG9uYXRlQWxsKCk7CisgICAgICAgIHNpemVfdCBieXRlc0FmdGVyID0gbV9tdXRhdG9yU2xv
dFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpOworICAgICAgICAvLyBpbmNyZW1lbnRCYWxhbmNlIG1h
eSBnbyBuZWdhdGl2ZSBoZXJlIGJlY2F1c2UgaXQnbGwgcmVtZW1iZXIgaG93IG1hbnkgYnl0ZXMg
d2Ugb3ZlcnNob3QuCisgICAgICAgIG1faW5jcmVtZW50QmFsYW5jZSAtPSBieXRlc0FmdGVyIC0g
Ynl0ZXNCZWZvcmU7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDYgKzMyNSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHN0b3BJZk5lY2Vzc2FyeSgpOwogICAgIAogICAgIGJvb2wgbWF5TmVl
ZFRvU3RvcCgpOworCisgICAgdm9pZCBwZXJmb3JtSW5jcmVtZW50KHNpemVfdCBieXRlcyk7CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIga2luZCBvZiBzdG9wcGluZyBvZiB0
aGUgY29sbGVjdG9yLCBhbmQgaXQgbWF5IHJlcXVpcmUgd2FpdGluZyBmb3IgYQogICAgIC8vIHdo
aWxlLiBUaGlzIGlzIG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQSSBmb3IgY2xpZW50cyBvZiBjb2xs
ZWN0QWxsR2FyYmFnZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJlCkBAIC0zMzYsOCArMzM4LDYgQEAg
cHVibGljOgogICAgIHZvaWQgcHJldmVudENvbGxlY3Rpb24oKTsKICAgICB2b2lkIGFsbG93Q29s
bGVjdGlvbigpOwogICAgIAotICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKTsKLSAgICAKICAgICB1
aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRv
ckV4ZWN1dGlvblZlcnNpb247IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwpA
QCAtNDY2LDggKzQ2Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWRTbG93KCk7CiAKLSAgICBzaXplX3QgdGhyZWFkVmlz
aXRDb3VudCgpOwotICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBzaXplX3Qg
dmlzaXRDb3VudCgpOworICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICB2b2lk
IGZvckVhY2hDb2RlQmxvY2tJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTxib29sKENvZGVCbG9jayop
PiYpOwogICAgIApAQCAtNDk5LDYgKzQ5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3Vs
ZERvRnVsbENvbGxlY3Rpb247CiAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAgICAg
c2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CisgICAgaW50NjRfdCBtX2luY3Jl
bWVudEJhbGFuY2UgeyAwIH07CiAgICAgCiAgICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2Nv
cGU+IG1fY29sbGVjdGlvblNjb3BlOwogICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3Bl
PiBtX2xhc3RDb2xsZWN0aW9uU2NvcGU7CkBAIC01MTcsNiArNTE4LDcgQEAgcHJpdmF0ZToKICAg
ICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2xvdFZpc2l0b3I+IG1fbXV0YXRvclNsb3RWaXNpdG9yOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgTG9jayBtX3Jh
Y2VNYXJrU3RhY2tMb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkocmV2aXNpb24gMjExMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsMTMgKzQ2MCwxMyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhCiAgICAgbV9jYW5PcHRpbWl6
ZUZvclN0b3BwZWRNdXRhdG9yID0gdHJ1ZTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
TW9ub3RvbmljVGltZSB0aW1lb3V0KQordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3Rvbmlj
VGltZSB0aW1lb3V0LCBzaXplX3QgYnl0ZXNWaXNpdGVkTGltaXQpCiB7CiAgICAgQVNTRVJUKG1f
aXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3Jp
Z2h0VG9SdW4pOwogICAgIAotICAgIHdoaWxlICghaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAg
IHdoaWxlICghc2hvdWxkVGltZU91dCh0aW1lb3V0LCBieXRlc1Zpc2l0ZWRMaW1pdCkpIHsKICAg
ICAgICAgdXBkYXRlTXV0YXRvcklzU3RvcHBlZChsb2NrZXIpOwogICAgICAgICBpZiAoIW1fY29s
bGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJl
ZmlsbCgpOwpAQCAtNTEwLDEyICs1MTAsMTcgQEAgYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhj
b25zdCBMb2NrSG9sZAogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpOwogfQogCi1TbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZp
c2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCitib29sIFNsb3RWaXNpdG9yOjpzaG91bGRUaW1lT3V0KE1v
bm90b25pY1RpbWUgdGltZW91dCwgc2l6ZV90IGJ5dGVzVmlzaXRlZExpbWl0KQoreworICAgIHJl
dHVybiBoYXNFbGFwc2VkKHRpbWVvdXQpIHx8IG1fYnl0ZXNWaXNpdGVkID49IGJ5dGVzVmlzaXRl
ZExpbWl0OworfQorCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6
OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9u
aWNUaW1lIHRpbWVvdXQsIHNpemVfdCBieXRlc1Zpc2l0ZWRMaW1pdCwgRHJhaW5XYWl0TW9kZSB3
YWl0TW9kZSkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKICAgICBB
U1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7Ci0gICAgCisKICAgICBib29sIGlz
QWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgewpAQCAtNTI2LDkg
KzUzMSw5IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKIAogICAg
ICAgICAgICAgaWYgKHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbikgewogICAgICAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2Vk
KHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVGltZU91dCh0aW1lb3V0
LCBieXRlc1Zpc2l0ZWRMaW1pdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hh
cmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZGlkUmVhY2hUZXJtaW5hdGlvbihsb2NrZXIpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5
QWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmU7CkBAIC01MzYsMjQgKzU0MSwzMiBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzV29yayhsb2NrZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0TW9kZSA9PSBE
cmFpbldhaXRNb2RlOjpEb05vdFdhaXQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OworCiAgICAgICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011
dGV4LCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CiAK
LSAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkVGltZU91dCh0aW1lb3V0LCBieXRlc1Zpc2l0ZWRMaW1pdCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24obG9ja2Vy
KSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
Lm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLndhaXRVbnRpbCgKLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2lu
Z011dGV4LCB0aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICBbJl0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9IFsmXSAoKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9ja2VyKQorICAgICAg
ICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzUmVhZHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAod2FpdE1vZGUgPT0gRHJhaW5XYWl0TW9kZTo6RG9Ob3RXYWl0
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1l
ZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4
LCB0aW1lb3V0LCBpc1JlYWR5KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKQEAg
LTU2Nyw3ICs1ODAsNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4odGltZW91dCk7CisgICAgICAgIGRy
YWluKHRpbWVvdXQsIGJ5dGVzVmlzaXRlZExpbWl0KTsKICAgICAgICAgaXNBY3RpdmUgPSB0cnVl
OwogICAgIH0KIH0KQEAgLTYxMCw2ICs2MjMsMTkgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdAogICAgIH0KIH0KIAordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxs
KCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOworICAg
IGRvbmF0ZUFsbChsb2NrZXIpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbGwoY29u
c3QgTG9ja0hvbGRlciYpCit7CisgICAgbV9jb2xsZWN0b3JTdGFjay50cmFuc2ZlclRvKCptX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2spOworICAgIG1fbXV0YXRvclN0YWNrLnRyYW5z
ZmVyVG8oKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKK30KKwogdm9pZCBTbG90VmlzaXRv
cjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQogewogICAgIGlmICghcm9vdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjExMjk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDEyICsxMDgsMTMgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9WaXNpdENvdW50
KHNpemVfdCB2YWx1ZSkgeyBtX3Zpc2l0Q291bnQgKz0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9u
YXRlKCk7Ci0gICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCksIHNpemVfdCBieXRlc1Zpc2l0ZWRMaW1pdCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHZvaWQgZG9uYXRlQW5kRHJh
aW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAg
ICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9
OwogICAgIGVudW0gY2xhc3MgU2hhcmVkRHJhaW5SZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9Owot
ICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIGVu
dW0gY2xhc3MgRHJhaW5XYWl0TW9kZSB7IFdhaXQsIERvTm90V2FpdCB9OworICAgIFNoYXJlZERy
YWluUmVzdWx0IGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1RpbWUg
dGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCksIHNpemVfdCBieXRlc1Zpc2l0ZWRM
aW1pdCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIERyYWluV2FpdE1vZGUg
PSBEcmFpbldhaXRNb2RlOjpXYWl0KTsKIAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5Q
YXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3Rv
bmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CkBAIC0xNTksNiAr
MTYwLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0SWdub3JlTmV3T3BhcXVlUm9vdHMo
Ym9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3RzID0gdmFsdWU7IH0KIAorICAgIHZv
aWQgZG9uYXRlQWxsKCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9k
ZUVuYWJsZXI7CiAgICAgCkBAIC0xODcsNyArMTkwLDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVs
KE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pOwotICAgIAorCisgICAg
dm9pZCBkb25hdGVBbGwoY29uc3QgTG9ja0hvbGRlciYpOworCisgICAgYm9vbCBzaG91bGRUaW1l
T3V0KE1vbm90b25pY1RpbWUsIHNpemVfdCBieXRlc1Zpc2l0ZWRMaW1pdGVkKTsKICAgICBib29s
IGhhc1dvcmsoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlv
bihjb25zdCBMb2NrSG9sZGVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAy
MTEyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgU3BhY2VU
aW1lTXV0YXRvclNjaGVkdWxlcjo6bG9nKCkKICAgICBBU1NFUlQoT3B0aW9uczo6bG9nR0MoKSk7
CiAgICAgU25hcHNob3Qgc25hcHNob3QoKnRoaXMpOwogICAgIGRhdGFMb2coCi0gICAgICAgICJh
PSIsIGZvcm1hdCgiJS4wbGYiLCBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hvdCkg
LyAxMDI0KSwgIiBrYiAiLAorICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNTaW5j
ZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gMTAyNCksICJrYiAiLAogICAgICAgICAiaGY9
IiwgZm9ybWF0KCIlLjNsZiIsIGhlYWRyb29tRnVsbG5lc3Moc25hcHNob3QpKSwgIiAiLAogICAg
ICAgICAibXU9IiwgZm9ybWF0KCIlLjNsZiIsIG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hvdCkp
LCAiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2
aXNpb24gMjExMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYz
LDcgQEAgdm9pZCBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcgogICAgIEFTU0VS
VChPcHRpb25zOjpsb2dHQygpKTsKICAgICBTbmFwc2hvdCBzbmFwc2hvdCgqdGhpcyk7CiAgICAg
ZGF0YUxvZygKLSAgICAgICAgImE9IiwgZm9ybWF0KCIlLjBsZiIsIGJ5dGVzU2luY2VCZWdpbm5p
bmdPZkN5Y2xlKHNuYXBzaG90KSAvIDEwMjQpLCAiIGtiICIsCisgICAgICAgICJhPSIsIGZvcm1h
dCgiJS4wbGYiLCBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hvdCkgLyAxMDI0KSwg
ImtiICIsCiAgICAgICAgICJoZj0iLCBmb3JtYXQoIiUuM2xmIiwgaGVhZHJvb21GdWxsbmVzcyhz
bmFwc2hvdCkpLCAiICIsCiAgICAgICAgICJtdT0iLCBmb3JtYXQoIiUuM2xmIiwgbXV0YXRvclV0
aWxpemF0aW9uKHNuYXBzaG90KSksICIgIik7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300158</attachid>
            <date>2017-01-30 16:17:34 -0800</date>
            <delta_ts>2017-01-31 10:57:55 -0800</delta_ts>
            <desc>possibly better version</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33241</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExMzAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE3LTAxLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIG11dGF0b3Igc2hvdWxkIGJlIGFibGUgdG8gcGVyZm9ybSBpbmNyZW1lbnRzIG9mIEdDIHdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzUy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsg
aW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjptYXJrVG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVwZGF0ZU9iamVjdENv
dW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpkaWRBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q291bnQpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpieXRlc1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JF
YWNoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjpwZXJmb3JtSW5jcmVtZW50KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkVmlzaXRDb3VudCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzaG91bGRU
aW1lT3V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZCk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVBbGwpOgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpsb2cpOgorICAgICAg
ICAqIGhlYXAvU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bG9nKToKKwogMjAx
Ny0wMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQgbmVlZHMgdG8gbWVyZ2VJZk5lY2Vzc2FyeQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDYgKzEwODcsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50R2V0UmVwb3J0KEV4ZWNTdGF0ZSopOwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudExlYXZp
bmcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbldhaXRGb3JSZXBvcnQoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBDYXBhY2l0eShFeGVjU3RhdGUqKTsKIAogc3RydWN0IFNj
cmlwdCB7CiAgICAgZW51bSBjbGFzcyBTdHJpY3RNb2RlIHsKQEAgLTEzNjcsNiArMTM2OCw4IEBA
IHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGFnZW50LCAibGVhdmluZyIsIGZ1
bmN0aW9uRG9sbGFyQWdlbnRMZWF2aW5nLCAwKTsKICAgICAgICAgCiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAid2FpdEZvclJlcG9ydCIsIGZ1bmN0aW9uV2FpdEZvclJlcG9ydCwgMCk7CisKKyAg
ICAgICAgYWRkRnVuY3Rpb24odm0sICJoZWFwQ2FwYWNpdHkiLCBmdW5jdGlvbkhlYXBDYXBhY2l0
eSwgMCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09iamVj
dCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5z
aWduZWQgYXJndW1lbnRzKQpAQCAtMjYzOSw2ICsyNjQyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25XYWkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKCZ2bSwgc3RyaW5nKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25IZWFwQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2bS5oZWFwLmNhcGFj
aXR5KCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgogdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8IXN0ZDo6aXNfZnVuZGFtZW50YWw8VmFsdWVUeXBlPjo6dmFsdWU+Ojp0eXBl
IGFkZE9wdGlvbihWTSYsIEpTT2JqZWN0KiwgSWRlbnRpZmllciwgVmFsdWVUeXBlKSB7IH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMTI5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTksNiArMjU5LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAg
ICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRz
KHRoaXMpCiAgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xv
dFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91
bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2NvbnN0cmFpbnRTZXQo
c3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKQEAgLTMwNSwxNiArMzA2
LDE3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgbV92
ZXJpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVyPih0aGlzLCBPcHRpb25zOjpu
dW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24oKSk7CiAgICAgCiAgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwotICAgIAor
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fdGhyZWFkTG9jayk7CiAgICAgbV90aHJlYWQgPSBh
ZG9wdFJlZihuZXcgVGhyZWFkKGxvY2tlciwgKnRoaXMpKTsKIH0KIAogSGVhcDo6fkhlYXAoKQog
ewotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQot
ICAgICAgICBzbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7Ci0gICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAor
ICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICB2aXNpdG9y
LmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICB9KTsKICAgICBtX211dGF0b3JNYXJrU3RhY2st
PmNsZWFyKCk7CiAgICAgbV9yYWNlTWFya1N0YWNrLT5jbGVhcigpOwogICAgIApAQCAtNTM3LDYg
KzUzOSwxMSBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAKICAg
ICBiZWdpbk1hcmtpbmcoKTsKIAorICAgIGZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZd
IChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgdmlzaXRvci5kaWRTdGFydE1h
cmtpbmcoKTsKKyAgICAgICAgfSk7CisKICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQg
PSBmYWxzZTsKIAogICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKApAQCAtNTUxLDYgKzU1
OCw4IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6Om9wdGltaXplUGFyYWxsZWxTbG90VmlzaXRvcnNGb3JT
dG9wcGVkTXV0YXRvcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmlzaXRvci0+b3B0
aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgbmV3VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdU
Rk1vdmUobmV3VmlzaXRvcikpOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtNTYxLDcgKzU3
MCw2IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKIAogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRT
dGFydE1hcmtpbmcoKTsKICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hh
cmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKICAgICAgICAgICAgIH0KIApAQCAtNTcyLDcg
KzU4MCw3IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAg
ICAgfSk7CiAKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsKLSAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKKwogICAgIG1fY29u
c3RyYWludFNldC0+ZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgCiAgICAgbV9zY2hlZHVsZXItPmJl
Z2luQ29sbGVjdGlvbigpOwpAQCAtNzk1LDkgKzgwMyw3IEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJs
ZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQgPSBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT52aXNpdENvdW50KCk7Ci0gICAgICAgIHZpc2l0Q291bnQgKz0gdGhyZWFkVmlzaXRD
b3VudCgpOwotICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVy
IEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZp
c2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRp
bWUpOworICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdD
ICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0
Q291bnQoKSksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGlt
ZSk7CiAgICAgfQogICAgIAogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpCkBAIC04MTAsMTAgKzgxNiwxMCBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVj
dENvdW50cyhkb3VibGUgZ2NTCiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKLQotICAgIGZvciAoYXV0byYgcGFyYWxsZWxW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKLSAgICAgICAgcGFyYWxsZWxWaXNpdG9y
LT5yZXNldCgpOworICAgIGZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90Vmlz
aXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgdmlzaXRvci5yZXNldCgpOworICAgICAgICB9
KTsKIAogICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CkBAIC0xNTcwLDYgKzE1NzYsMTIgQEAgdm9pZCBI
ZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXpl
KCkKIHsKKyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkgeworICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgZGF0
YUxvZygiW0dDOiBmaW5hbGl6ZSAiKTsKKyAgICB9CisgICAgCiAgICAgewogICAgICAgICBIZWxw
aW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7CiAgICAgICAgIGRlbGV0ZVVubWFya2Vk
Q29tcGlsZWRDb2RlKCk7CkBAIC0xNTc5LDYgKzE1OTEsMTEgQEAgdm9pZCBIZWFwOjpmaW5hbGl6
ZSgpCiAgICAgCiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFz
T3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKKworICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKKyAgICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vj
b25kcygpLCAibXNdXG4iKTsKKyAgICB9CiB9CiAKIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0
Q29sbGVjdGlvbihzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xODcx
LDYgKzE4ODgsNyBAQCB2b2lkIEhlYXA6OmRpZEFsbG9jYXRlKHNpemVfdCBieXRlcykKICAgICBp
ZiAobV9lZGVuQWN0aXZpdHlDYWxsYmFjaykKICAgICAgICAgbV9lZGVuQWN0aXZpdHlDYWxsYmFj
ay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9u
ZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCk7CiAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSAr
PSBieXRlczsKKyAgICBwZXJmb3JtSW5jcmVtZW50KGJ5dGVzKTsKIH0KIAogYm9vbCBIZWFwOjpp
c1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpCkBAIC0xOTk2LDI0ICsyMDE0LDIzIEBAIGJvb2wgSGVh
cDo6c3dlZXBOZXh0TG9naWNhbGx5RW1wdHlXZWFrQmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c2l6ZV90IEhlYXA6OnRocmVhZFZpc2l0Q291bnQoKQoteyAgICAgICAKLSAgICB1bnNpZ25lZCBs
b25nIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JzKQotICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT52aXNp
dENvdW50KCk7CitzaXplX3QgSGVhcDo6dmlzaXRDb3VudCgpCit7CisgICAgc2l6ZV90IHJlc3Vs
dCA9IDA7CisgICAgZm9yRWFjaFNsb3RWaXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gdmlzaXRvci52aXNpdENvdW50KCk7
CisgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHNpemVfdCBIZWFwOjpieXRl
c1Zpc2l0ZWQoKQogewotICAgIHJldHVybiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5ieXRlc1Zp
c2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgpOwotfQotCi1zaXplX3QgSGVhcDo6dGhyZWFk
Qnl0ZXNWaXNpdGVkKCkKLXsgICAgICAgCiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9y
IChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAg
ICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQoKTsKKyAgICBmb3JFYWNo
U2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAgICAgICB9KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzc0LDYgKzIzOTEsNyBAQCB2b2lkIEhlYXA6OmZv
ckVhY2hTbG90VmlzaXRvcihjb25zdCBGdW5jCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKICAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyAgICBmdW5jKCptX211dGF0b3JTbG90VmlzaXRvcik7CiAgICAgZm9yIChhdXRv
JiBzbG90VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIGZ1bmMoKnNs
b3RWaXNpdG9yKTsKIH0KQEAgLTIzODMsNSArMjQwMSw0MyBAQCB2b2lkIEhlYXA6OnNldE11dGF0
b3JTaG91bGRCZUZlbmNlZChib29sCiAgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1
ZTsKICAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSB2YWx1ZSA/IHRhdXRvbG9naWNhbFRocmVzaG9s
ZCA6IGJsYWNrVGhyZXNob2xkOwogfQorCit2b2lkIEhlYXA6OnBlcmZvcm1JbmNyZW1lbnQoc2l6
ZV90IGJ5dGVzKQoreworICAgIGlmICghbV9vYmplY3RTcGFjZS5pc01hcmtpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbmNyZW1lbnRCYWxhbmNlICs9IGJ5dGVzICogT3B0aW9uczo6
Z2NJbmNyZW1lbnRTY2FsZSgpOworCisgICAgLy8gU2F2ZSBvdXJzZWx2ZXMgZnJvbSBjcmF6eS4g
U2luY2UgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIGl0J3MgT0sgdG8gZ28gYmFjayB0byBhbnkg
Y29uc2lzdGVudAorICAgIC8vIHN0YXRlIHdoZW4gdGhlIGRvdWJsZSBnb2VzIHdpbGQuCisgICAg
aWYgKHN0ZDo6aXNuYW4obV9pbmNyZW1lbnRCYWxhbmNlKSB8fCBzdGQ6OmlzaW5mKG1faW5jcmVt
ZW50QmFsYW5jZSkpCisgICAgICAgIG1faW5jcmVtZW50QmFsYW5jZSA9IDA7CiAgICAgCisgICAg
aWYgKG1faW5jcmVtZW50QmFsYW5jZSA8IHN0YXRpY19jYXN0PGRvdWJsZT4oT3B0aW9uczo6Z2NJ
bmNyZW1lbnRCeXRlcygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHRhcmdldEJ5
dGVzID0gbV9pbmNyZW1lbnRCYWxhbmNlOworICAgIGlmICh0YXJnZXRCeXRlcyA8PSAwKQorICAg
ICAgICByZXR1cm47CisgICAgdGFyZ2V0Qnl0ZXMgPSBzdGQ6Om1pbih0YXJnZXRCeXRlcywgT3B0
aW9uczo6Z2NJbmNyZW1lbnRNYXhCeXRlcygpKTsKKworICAgIE1vbm90b25pY1RpbWUgYmVmb3Jl
OworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CisgICAgICAgIGRhdGFMb2coIltHQzogaW5j
cmVtZW50IHQ9IiwgdGFyZ2V0Qnl0ZXMgLyAxMDI0LCAia2IgIik7CisgICAgICAgIGJlZm9yZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIH0KKworICAgIFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvciA9ICptX211dGF0b3JTbG90VmlzaXRvcjsKKyAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBh
cmFsbGVsTW9kZUVuYWJsZXIoc2xvdFZpc2l0b3IpOworICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQg
PSBzbG90VmlzaXRvci5wZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmluZyhzdGF0aWNfY2FzdDxzaXpl
X3Q+KHRhcmdldEJ5dGVzKSk7CisgICAgLy8gaW5jcmVtZW50QmFsYW5jZSBtYXkgZ28gbmVnYXRp
dmUgaGVyZSBiZWNhdXNlIGl0J2xsIHJlbWVtYmVyIGhvdyBtYW55IGJ5dGVzIHdlIG92ZXJzaG90
LgorICAgIG1faW5jcmVtZW50QmFsYW5jZSAtPSBieXRlc1Zpc2l0ZWQ7CisKKyAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkgeworICAgICAgICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coInA9IiwgKGFmdGVyIC0gYmVmb3JlKS5taWxs
aXNlY29uZHMoKSwgIm1zIGI9IiwgbV9pbmNyZW1lbnRCYWxhbmNlIC8gMTAyNCwgImtiXVxuIik7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDYgKzMyNSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0b3BJZk5lY2Vzc2FyeSgpOwogICAgIAogICAgIGJvb2wgbWF5TmVlZFRvU3RvcCgpOwor
CisgICAgdm9pZCBwZXJmb3JtSW5jcmVtZW50KHNpemVfdCBieXRlcyk7CiAgICAgCiAgICAgLy8g
VGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIga2luZCBvZiBzdG9wcGluZyBvZiB0aGUgY29sbGVjdG9y
LCBhbmQgaXQgbWF5IHJlcXVpcmUgd2FpdGluZyBmb3IgYQogICAgIC8vIHdoaWxlLiBUaGlzIGlz
IG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQSSBmb3IgY2xpZW50cyBvZiBjb2xsZWN0QWxsR2FyYmFn
ZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJlCkBAIC0zMzYsOCArMzM4LDYgQEAgcHVibGljOgogICAg
IHZvaWQgcHJldmVudENvbGxlY3Rpb24oKTsKICAgICB2b2lkIGFsbG93Q29sbGVjdGlvbigpOwog
ICAgIAotICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKTsKLSAgICAKICAgICB1aW50NjRfdCBtdXRh
dG9yRXhlY3V0aW9uVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvckV4ZWN1dGlvblZl
cnNpb247IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25z
dHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludD4pOwpAQCAtNDY2LDggKzQ2
Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5l
ZWRlZCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0
aEFuZEdDSWZOZWVkZWRTbG93KCk7CiAKLSAgICBzaXplX3QgdGhyZWFkVmlzaXRDb3VudCgpOwot
ICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBzaXplX3QgdmlzaXRDb3VudCgp
OworICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICB2b2lkIGZvckVhY2hDb2Rl
QmxvY2tJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTxib29sKENvZGVCbG9jayopPiYpOwogICAgIApA
QCAtNDk5LDYgKzQ5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZERvRnVsbENvbGxl
Y3Rpb247CiAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWQ7CiAgICAgc2l6ZV90IG1fdG90
YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CisgICAgZG91YmxlIG1faW5jcmVtZW50QmFsYW5jZSB7
IDAgfTsKICAgICAKICAgICBzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gbV9jb2xsZWN0
aW9uU2NvcGU7CiAgICAgc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IG1fbGFzdENvbGxl
Y3Rpb25TY29wZTsKQEAgLTUxNyw2ICs1MTgsNyBAQCBwcml2YXRlOgogICAgIE1hY2hpbmVUaHJl
YWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNp
dG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90Vmlz
aXRvcj4gbV9tdXRhdG9yU2xvdFZpc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAKICAgICBMb2NrIG1fcmFjZU1hcmtTdGFja0xv
Y2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlz
aW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCwyMCBAQCB2b2lkIE1hcmtTdGFja0FycmF5Ojp0
cmFuc2ZlclRvKE1hcmtTdGFjCiAgICAgfQogfQogCitzaXplX3QgTWFya1N0YWNrQXJyYXk6OnRy
YW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBzaXplX3QgbGltaXQpCit7CisgICAgc2l6
ZV90IGNvdW50ID0gMDsKKyAgICB3aGlsZSAoY291bnQgPCBsaW1pdCAmJiAhaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY291bnQgPCBsaW1pdCAmJiBjYW5S
ZW1vdmVMYXN0KCkpIHsKKyAgICAgICAgICAgIG90aGVyLmFwcGVuZChyZW1vdmVMYXN0KCkpOwor
ICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VChjb3VudCA8PSBsaW1pdCk7CisgICAgcmV0dXJuIGNvdW50OworfQorCiB2b2lkIE1hcmtTdGFj
a0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCiB7CiAgICAg
Ly8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMuIFRvIHJlZHVjZSBjb3B5
aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJl
dmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAgICAgTWFya1N0YWNr
QXJyYXkoKTsKIAogICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHNp
emVfdCB0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5Jiwgc2l6ZV90IGxpbWl0KTsgLy8gT3B0aW1p
emVkIGZvciB3aGVuIGBsaW1pdGAgaXMgc21hbGwuCiAgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNU
byhNYXJrU3RhY2tBcnJheSYpOwogICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFj
a0FycmF5Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjExMjk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw3ICs5Niw3IEBAIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogdm9pZCBTbG90Vmlz
aXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2Nv
cGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCi0gICAgICAgIEFTU0VSVChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVy
Z2VkIGJ5IG5vdy4KICAgICBlbHNlCiAgICAgICAgIHJlc2V0KCk7CiAKQEAgLTExNyw4ICsxMTcs
MTEgQEAgdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpjbGVh
ck1hcmtTdGFja3MoKQogewotICAgIG1fY29sbGVjdG9yU3RhY2suY2xlYXIoKTsKLSAgICBtX211
dGF0b3JTdGFjay5jbGVhcigpOworICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgIFsmXSAo
TWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAg
c3RhY2suY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRp
bnVlOworICAgICAgICB9KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKQEAgLTI5MCw3ICsyOTMsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiAgICAgCiAgICAgbV92aXNpdENvdW50
Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXplKCk7Ci0gICAgCisK
ICAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIApAQCAtMzI1LDcgKzMyOCwx
MCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpub3RlTGl2ZUF1eGlsaWFyeUNlbGwoCiAgICAgY29udGFp
bmVyLm5vdGVNYXJrZWQoKTsKICAgICAKICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVz
VmlzaXRlZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKKworICAgIHNpemVfdCBjZWxsU2l6ZSA9
IGNvbnRhaW5lci5jZWxsU2l6ZSgpOworICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNlbGxTaXplOwor
ICAgIG1fbm9uQ2VsbFZpc2l0Q291bnQgKz0gY2VsbFNpemU7CiB9CiAKIGNsYXNzIFNldEN1cnJl
bnRDZWxsU2NvcGUgewpAQCAtNDI5LDggKzQzNSwxMSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25h
dGVLbm93blBhcmFsbGVsKE1hCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxs
ZWwoKQogewotICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVh
cC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayk7Ci0gICAgZG9uYXRlS25vd25QYXJhbGxlbCht
X211dGF0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworICAgIGZv
ckVhY2hNYXJrU3RhY2soCisgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJ
dGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbChzdGFjaywg
Y29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSk7CisgICAgICAgICAgICByZXR1cm4gSXRl
cmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0
b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3BwZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQpAQCAtNDYy
LDI3ICs0NzEsMjggQEAgdm9pZCBTbG90VmlzaXRvcjo6b3B0aW1pemVGb3JTdG9wcGVkTXV0YQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7Ci0gICAg
QVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pc0luUGFy
YWxsZWxNb2RlKTsKICAgICAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1
bik7CiAgICAgCiAgICAgd2hpbGUgKCFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CiAgICAgICAgIHVw
ZGF0ZU11dGF0b3JJc1N0b3BwZWQobG9ja2VyKTsKLSAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsK
LSAgICAgICAgICAgIG1faXNGaXJzdFZpc2l0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0t
OykKLSAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3Zl
TGFzdCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwoKTsKLSAgICAgICAgICAgIC8vIFdl
IGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRo
ZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBvZgotICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2lu
ZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlz
aXQgaXQKLSAgICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0
ZXIgaXQgd2FzIGFscmVhZHkgbWFya2VkLgotICAgICAgICAgICAgbV9pc0ZpcnN0VmlzaXQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWlu
aW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJl
bW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJl
bihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
SXRlcmF0aW9uU3RhdHVzIHN0YXR1cyA9IGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICBb
Jl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKworICAgICAgICAgICAgICAgIHN0YWNrLnJlZmls
bCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faXNGaXJzdFZpc2l0ID0g
KCZzdGFjayA9PSAmbV9jb2xsZWN0b3JTdGFjayk7CisKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJl
YmFsYW5jZSgpOyBzdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAg
ICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKHN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBpZiAoc3RhdHVzID09IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWUpCiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsK
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KQEAgLTQ5MCwxMyArNTAwLDc0
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGkKICAgICBtZXJnZUlm
TmVjZXNzYXJ5KCk7CiB9CiAKK3NpemVfdCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9m
RHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
aXNJblBhcmFsbGVsTW9kZSk7CisKKyAgICBzaXplX3QgY2VsbHNSZXF1ZXN0ZWQgPSBieXRlc1Jl
cXVlc3RlZCAvIE1hcmtlZEJsb2NrOjphdG9tU2l6ZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KTsKKyAgICAgICAgZm9yRWFjaE1h
cmtTdGFjaygKKyAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVy
YXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgIGNlbGxzUmVxdWVzdGVkIC09IGNvcnJlc3Bv
bmRpbmdHbG9iYWxTdGFjayhzdGFjaykudHJhbnNmZXJUbyhzdGFjaywgY2VsbHNSZXF1ZXN0ZWQp
OworICAgICAgICAgICAgICAgIHJldHVybiBjZWxsc1JlcXVlc3RlZCA/IEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWUgOiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBzaXplX3QgY2VsbEJ5dGVzVmlzaXRlZCA9IDA7CisgICAgbV9ub25DZWxsVmlz
aXRDb3VudCA9IDA7CisKKyAgICBhdXRvIGJ5dGVzVmlzaXRlZCA9IFsmXSAoKSAtPiBzaXplX3Qg
eworICAgICAgICByZXR1cm4gY2VsbEJ5dGVzVmlzaXRlZCArIG1fbm9uQ2VsbFZpc2l0Q291bnQ7
CisgICAgfTsKKworICAgIGF1dG8gaXNEb25lID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICBy
ZXR1cm4gYnl0ZXNWaXNpdGVkKCkgPj0gYnl0ZXNSZXF1ZXN0ZWQ7CisgICAgfTsKKyAgICAKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9yaWdodFRvUnVuKTsKKyAgICAg
ICAgCisgICAgICAgIHdoaWxlICghaXNEb25lKCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZU11dGF0
b3JJc1N0b3BwZWQobG9ja2VyKTsKKyAgICAgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBzdGF0dXMg
PSBmb3JFYWNoTWFya1N0YWNrKAorICAgICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkm
IHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2suaXNFbXB0eSgpIHx8IGlzRG9uZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhY2su
cmVmaWxsKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2lz
Rmlyc3RWaXNpdCA9ICgmc3RhY2sgPT0gJm1fY29sbGVjdG9yU3RhY2spOworCisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNj
YW5zQmV0d2VlblJlYmFsYW5jZSgpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY291bnRk
b3duICYmIHN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiAhaXNEb25lKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEpTQ2VsbCogY2VsbCA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNlbGxCeXRlc1Zpc2l0ZWQgKz0gY2VsbC0+Y2VsbFNpemUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3VudGRvd24tLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9yaWdodFRvUnVu
LnNhZmVwb2ludCgpOworICAgICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZG9uYXRlQWxsKCk7CisgICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOwor
CisgICAgcmV0dXJuIGJ5dGVzVmlzaXRlZCgpOworfQorCiBib29sIFNsb3RWaXNpdG9yOjpkaWRS
ZWFjaFRlcm1pbmF0aW9uKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJr
aW5nTXV0ZXgpOwogICAgIHJldHVybiBkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9CiAK
LWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYp
Citib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKIHsKICAgICByZXR1cm4gaXNFbXB0eSgpCiAgICAgICAgICYmICFtX2hlYXAubV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwpAQCAtNTA0LDcgKzU3NSw3IEBAIGJvb2wgU2xvdFZp
c2l0b3I6OmRpZFJlYWNoVGVybWluYXRpb24oY28KICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpoYXNX
b3JrKGNvbnN0IExvY2tIb2xkZXImKQorYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBB
YnN0cmFjdExvY2tlciYpCiB7CiAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JN
YXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjay0+aXNFbXB0eSgpOwpAQCAtNTE1LDcgKzU4Niw3IEBAIFNsb3RWaXNpdG9yOjpTaGFy
ZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsK
ICAgICAKICAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7Ci0gICAgCisK
ICAgICBib29sIGlzQWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
ewpAQCAtNTI4LDcgKzU5OSw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90
VmlzaXQKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5u
b3RpZnlBbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJl
c3VsdDo6RG9uZTsKQEAgLTUzNiw3ICs2MDcsNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXN1bHQgU2xvdFZpc2l0CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzV29yayhsb2NrZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1l
b3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTQ4LDIx
ICs2MTksMjUgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAg
ICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
IAotICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0
VW50aWwoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91
dCwKLSAgICAgICAgICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNXb3JrKGxvY2tlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hl
YXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwotICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICBhdXRvIGlzUmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CisgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJs
ZS53YWl0VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJr
ZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVz
dWx0OjpEb25lOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNr
LnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OwotICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAg
ICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFj
aygKKyAgICAgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0
aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9t
KAorICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNr
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFs
bGVsTWFya2Vycyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICBtX2hlYXAubV9u
dW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KQEAgLTU4NCw4ICs2NTks
NyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgCiAgICAg
QVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpOwogICAgIAotICAgIGlmIChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpIDwgNAotICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBB
Y2Nlc3MoKQorICAgIGlmICghbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQogICAgICAgICB8fCBtX2hl
YXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAv
LyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2Ug
aGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRvciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlz
IG5vdCBwcm9maXRhYmxlLgpAQCAtNTkzLDkgKzY2Nyw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlc3VsdCBTbG90VmlzaXQKICAgICB9CiAKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hl
YXAubV9tYXJraW5nTXV0ZXgpOwotICAgIG1fY29sbGVjdG9yU3RhY2sudHJhbnNmZXJUbygqbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKLSAgICBtX211dGF0b3JTdGFjay50cmFu
c2ZlclRvKCptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKTsKLSAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgZG9uYXRlQWxsKGxvY2tl
cik7CiAgICAgCiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0
KSkKQEAgLTYxMCw2ICs2ODIsMjIgQEAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNs
b3RWaXNpdAogICAgIH0KIH0KIAordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKCkKK3sKKyAg
ICBkb25hdGVBbGwoaG9sZExvY2sobV9oZWFwLm1fbWFya2luZ011dGV4KSk7Cit9CisKK3ZvaWQg
U2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgZm9y
RWFjaE1hcmtTdGFjaygKKyAgICAgICAgWyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0
ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBzdGFjay50cmFuc2ZlclRvKGNvcnJlc3BvbmRp
bmdHbG9iYWxTdGFjayhzdGFjaykpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgIH0pOworCisgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVS
b290KHZvaWQqIHJvb3QpCiB7CiAgICAgaWYgKCFyb290KQpAQCAtNzE2LDQgKzgwNCwxMiBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJD
b2xsZWN0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAoY29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwg
TXV0YXRvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChtdXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwog
fQogCitNYXJrU3RhY2tBcnJheSYgU2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpbmdHbG9iYWxTdGFj
ayhNYXJrU3RhY2tBcnJheSYgc3RhY2spCit7CisgICAgaWYgKCZzdGFjayA9PSAmbV9jb2xsZWN0
b3JTdGFjaykKKyAgICAgICAgcmV0dXJuICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2s7CisgICAgUkVMRUFTRV9BU1NFUlQoJnN0YWNrID09ICZtX211dGF0b3JTdGFjayk7CisgICAg
cmV0dXJuICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAko
cmV2aXNpb24gMjExMjk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2VsbFN0
YXRlLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0
dXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0Lmgi
CiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCkBAIC0xMTcsNiArMTE4LDEyIEBAIHB1YmxpYzoK
IAogICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRp
bWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3Vs
dCBkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3Rv
bmljVGltZTo6aW5maW5pdHkoKSk7CisKKyAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGlu
Y3JlbWVudCBvZiBkcmFpbmluZyB0aGF0IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdv
cnRoIG9mIGRhdGEuIFRoaXMKKyAgICAvLyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsg
bW9yZSBvciBsZXNzIHRoYW4gdGhhdC4gSXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5
dGVzLiBJdCBtYXkKKyAgICAvLyBtYXJrIGxlc3MgdGhhbiBieXRlcyBpZiB3ZSdyZSByZWFjaGlu
ZyB0ZXJtaW5hdGlvbiBvciBpZiB0aGUgZ2xvYmFsIHdvcmtsaXN0IGlzIGVtcHR5ICh3aGljaCBt
YXkgaW4KKyAgICAvLyByYXJlIGNhc2VzIGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3Jl
IG5vdCByZWFjaGluZyB0ZXJtaW5hdGlvbikuCisgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRP
ZkRyYWluaW5nKHNpemVfdCBieXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTE1OSw2ICsxNjYsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBzZXRJZ25vcmVOZXdPcGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3Jl
TmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsgfQogCisgICAgdm9pZCBkb25hdGVBbGwoKTsKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE4
Nyw5ICsxOTYsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxs
ZWwoKTsKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20s
IE1hcmtTdGFja0FycmF5JiB0byk7Ci0gICAgCi0gICAgYm9vbCBoYXNXb3JrKGNvbnN0IExvY2tI
b2xkZXImKTsKLSAgICBib29sIGRpZFJlYWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYp
OworCisgICAgdm9pZCBkb25hdGVBbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKworICAgIGJv
b2wgaGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tlciYpOworICAgIGJvb2wgZGlkUmVhY2hUZXJt
aW5hdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBJdGVyYXRpb25TdGF0dXMgZm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5jJik7
CisKKyAgICBNYXJrU3RhY2tBcnJheSYgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFj
a0FycmF5Jik7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1h
cmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwpAQCAtMTk4LDggKzIxNCw5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291
bnQ7CisgICAgc2l6ZV90IG1fbm9uQ2VsbFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGlu
Y3JlbWVudGFsIGRyYWluaW5nLCBpZ25vcmVkIG90aGVyd2lzZS4KICAgICBib29sIG1faXNJblBh
cmFsbGVsTW9kZTsKLSAgICAKKwogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAg
ICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw4ICs4MSwxMCBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlk
CiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZV90IHNpemUpCiB7Ci0gICAgaWYgKG1faXNGaXJzdFZpc2l0KQorICAgIGlmIChtX2lzRmlyc3RW
aXNpdCkgewogICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsK
KyAgICAgICAgbV9ub25DZWxsVmlzaXRDb3VudCArPSBzaXplOworICAgIH0KIH0KIAogI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKQEAgLTEwOCw0ICsxMTAsMTQgQEAgaW5saW5lIGNvbnN0IFZN
JiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogICAgIHJldHVybiAqbV9oZWFwLm1fdm07CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZv
ckVhY2hNYXJrU3RhY2soY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBpZiAoZnVuYyhtX2NvbGxl
Y3RvclN0YWNrKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgIHJldHVybiBJdGVy
YXRpb25TdGF0dXM6OkRvbmU7CisgICAgaWYgKGZ1bmMobV9tdXRhdG9yU3RhY2spID09IEl0ZXJh
dGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsK
KyAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjExMjk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI6OmxvZygpCiAgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0dDKCkpOwogICAgIFNuYXBzaG90IHNu
YXBzaG90KCp0aGlzKTsKICAgICBkYXRhTG9nKAotICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxm
IiwgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gMTAyNCksICIga2IgIiwK
KyAgICAgICAgImE9IiwgZm9ybWF0KCIlLjBsZiIsIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xl
KHNuYXBzaG90KSAvIDEwMjQpLCAia2IgIiwKICAgICAgICAgImhmPSIsIGZvcm1hdCgiJS4zbGYi
LCBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBzaG90KSksICIgIiwKICAgICAgICAgIm11PSIsIGZvcm1h
dCgiJS4zbGYiLCBtdXRhdG9yVXRpbGl6YXRpb24oc25hcHNob3QpKSwgIiAiKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9j
aGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMTI5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU3RvY2hh
c3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIKICAgICBBU1NFUlQoT3B0aW9uczo6bG9nR0Mo
KSk7CiAgICAgU25hcHNob3Qgc25hcHNob3QoKnRoaXMpOwogICAgIGRhdGFMb2coCi0gICAgICAg
ICJhPSIsIGZvcm1hdCgiJS4wbGYiLCBieXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hv
dCkgLyAxMDI0KSwgIiBrYiAiLAorICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNT
aW5jZUJlZ2lubmluZ09mQ3ljbGUoc25hcHNob3QpIC8gMTAyNCksICJrYiAiLAogICAgICAgICAi
aGY9IiwgZm9ybWF0KCIlLjNsZiIsIGhlYWRyb29tRnVsbG5lc3Moc25hcHNob3QpKSwgIiAiLAog
ICAgICAgICAibXU9IiwgZm9ybWF0KCIlLjNsZiIsIG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hv
dCkpLCAiICIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsOSArMzExLDkgQEAgc3RhdGljIHZv
aWQgb3ZlcnJpZGVEZWZhdWx0cygpCiAgICAgaWYgKFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3Jl
cygpIDwgNCkgewogICAgICAgICBPcHRpb25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkg
PSAwLjY7CiAgICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkgPSAxLjQ7
Ci0gICAgICAgIE9wdGlvbnM6OmNvbmN1cnJlbnRHQ1BlcmlvZE1TKCkgPSAxMDsKLSAgICB9IGVs
c2UKLSAgICAgICAgT3B0aW9uczo6dXNlU3RvY2hhc3RpY011dGF0b3JTY2hlZHVsZXIoKSA9IHRy
dWU7CisgICAgICAgIE9wdGlvbnM6Om1pbmltdW1HQ1BhdXNlTVMoKSA9IDE7CisgICAgICAgIE9w
dGlvbnM6OmdjSW5jcmVtZW50U2NhbGUoKSA9IDE7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCBy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDkgKzIwMiwxMiBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGRvdWJsZSwgbWF4aW11bU11
dGF0b3JVdGlsaXphdGlvbiwgMC43LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwg
Y29uY3VycmVudEdDTWF4SGVhZHJvb20sIDEuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihk
b3VibGUsIGNvbmN1cnJlbnRHQ1BlcmlvZE1TLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2
KGJvb2wsIHVzZVN0b2NoYXN0aWNNdXRhdG9yU2NoZWR1bGVyLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihib29sLCB1c2VTdG9jaGFzdGljTXV0YXRvclNjaGVkdWxlciwgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIG1pbmltdW1HQ1BhdXNlTVMsIDAuMywg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGdjUGF1c2VTY2FsZSwgMC4zLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KGRvdWJsZSwgZ2NJbmNyZW1lbnRCeXRlcywgMTAwMDAsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoZG91YmxlLCBnY0luY3JlbWVudE1heEJ5dGVzLCAxMDAw
MDAsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoZG91YmxlLCBnY0luY3JlbWVudFNjYWxlLCAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9u
LCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlv
bkN1dG9mZiwgMTAwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RhdGFMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCShy
ZXZpc2lvbiAyMTEyOTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0YXRpYyBQcmludFN0cmVh
bSogc19maWxlOwogCiBzdGF0aWMgdWludDY0X3Qgc19maWxlRGF0YVsoc2l6ZW9mKEZpbGVQcmlu
dFN0cmVhbSkgKyA3KSAvIDhdOworc3RhdGljIHVpbnQ2NF90IHNfbG9ja2VkRmlsZURhdGFbKHNp
emVvZihMb2NrZWRQcmludFN0cmVhbSkgKyA3KSAvIDhdOwogCiBzdGF0aWMgdm9pZCBpbml0aWFs
aXplTG9nRmlsZU9uY2UoKQogewpAQCAtMTE5LDIxICsxMjAsMTUgQEAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICB9CiAjZW5kaWYgLy8gREFUQV9MT0dfVE9fRklMRQog
ICAgIAotICAgIGJvb2wgd3JhcFdpdGhMb2NrZWQgPSB0cnVlOwotICAgIAogICAgIGlmICghZmls
ZSkgewogICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldzsgdGhpcyBtYWtlcyBpdCBlYXNpZXIg
dG8gdXNlIGRhdGFMb2coKSB0byBkZWJ1ZwogICAgICAgICAvLyBmYXN0TWFsbG9jLgogICAgICAg
ICBmaWxlID0gbmV3IChzX2ZpbGVEYXRhKSBGaWxlUHJpbnRTdHJlYW0oc3RkZXJyLCBGaWxlUHJp
bnRTdHJlYW06OkJvcnJvdyk7Ci0gICAgICAgIHdyYXBXaXRoTG9ja2VkID0gZmFsc2U7CiAgICAg
fQogICAgIAogICAgIHNldHZidWYoZmlsZS0+ZmlsZSgpLCAwLCBfSU9OQkYsIDApOyAvLyBQcmVm
ZXIgdW5idWZmZXJlZCBvdXRwdXQsIHNvIHRoYXQgd2UgZ2V0IGEgZnVsbCBsb2cgdXBvbiBjcmFz
aCBvciBkZWFkbG9jay4KICAgICAKLSAgICBpZiAod3JhcFdpdGhMb2NrZWQpCi0gICAgICAgIHNf
ZmlsZSA9IG5ldyBMb2NrZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8RmlsZVByaW50U3Ry
ZWFtPihmaWxlKSk7Ci0gICAgZWxzZQotICAgICAgICBzX2ZpbGUgPSBmaWxlOworICAgIHNfZmls
ZSA9IG5ldyAoc19sb2NrZWRGaWxlRGF0YSkgTG9ja2VkUHJpbnRTdHJlYW0oc3RkOjp1bmlxdWVf
cHRyPEZpbGVQcmludFN0cmVhbT4oZmlsZSkpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
TG9nRmlsZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300235</attachid>
            <date>2017-01-31 10:57:55 -0800</date>
            <delta_ts>2017-01-31 12:08:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37407</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNDM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE3LTAxLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIG11dGF0b3Igc2hvdWxkIGJlIGFibGUgdG8gcGVyZm9ybSBpbmNyZW1lbnRzIG9mIEdDIHdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzUy
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBj
b29sIHRoaW5nIGFib3V0IGhhdmluZyBhIGNvbmN1cnJlbnQgYW5kIHBhcmFsbGVsIGNvbGxlY3Rv
ciBpcyB0aGF0IGl0J3MgZWFzeSB0byBhbHNvIG1ha2UKKyAgICAgICAgaXQgaW5jcmVtZW50YWws
IGJlY2F1c2UgdGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGFuZCBvdmVyIHdvcmsgdG8gYW55
b25lIChpbmNsdWRpbmcgdGhlCisgICAgICAgIG11dGF0b3IpIGFuZCBzaW5jZSB0aGUgY29sbGVj
dG9yIGlzIHJ1bm5pbmcgY29uY3VycmVudGx5IGFueXdheSwgdGhlIG11dGF0b3IgY2FuIHVzdWFs
bHkgcmVseQorICAgICAgICBvbiB0aGUgYmFsYW5jZXIgaGF2aW5nIHNvbWUgc3BhcmUgd29yay4K
KworICAgICAgICBUaGlzIGNoYW5nZSBhZGRzIGEgY2xhc3NpYyB3b3JrLWJhc2VkIGluY3JlbWVu
dGFsIG1vZGUgdG8gdGhlIEdDLiBXaGVuIHlvdSBhbGxvY2F0ZSBLIGJ5dGVzLAorICAgICAgICB5
b3UgaGF2ZSB0byBkbyBPcHRpb25zOjpnY0luY3JlbWVudFNjYWxlKCkgKiBLICJieXRlcyIgb2Yg
ZHJhaW5pbmcuIFRoaXMgaXMgYW1tb3J0aXplZCBzbyB0aGF0CisgICAgICAgIGl0IG9ubHkgaGFw
cGVucyBpbiBhbGxvY2F0aW9uIHNsb3cgcGF0aHMuCisKKyAgICAgICAgT24gY29tcHV0ZXJzIHRo
YXQgaGF2ZSBhIGxvdCBvZiBDUFVzLCB0aGlzIG1vZGUgaXMgbm90IHByb2ZpdGFibGUgYW5kIHdl
IHNldCBnY0luY3JlbWVudFNjYWxlCisgICAgICAgIHRvIHplcm8uIE9uIHN1Y2ggY29tcHV0ZXJz
LCBSaXB0aWRlIHdhcyBhbHJlYWR5IHBlcmZvcm1pbmcgZ3JlYXQgYmVjYXVzZSB0aGVyZSB3YXMg
bm8gd2F5IHRoYXQKKyAgICAgICAgb25lIG11dGF0b3IgdGhyZWFkIGNvdWxkIG91dHBhY2UgbWFu
eSBHQyB0aHJlYWRzLiBCdXQgb24gY29tcHV0ZXJzIHdpdGggZmV3ZXIgQ1BVcywgdGhlcmUgd2Vy
ZQorICAgICAgICBwcm9ibGVtcyBoYXZpbmcgdG8gZG8gd2l0aCBtYWtpbmcgdGhlIGNvbGxlY3Rv
ciBwcm9ncmVzcyBxdWlja2x5IGVub3VnaCBzbyB0aGF0IHRoZSBoZWFwCisgICAgICAgIGRvZXNu
J3QgZ3JvdyB0b28gbXVjaC4gVGhlIHN0b2NoYXN0aWMgc2NoZWR1bGVyIGFjdHVhbGx5IG1hZGUg
dGhpbmdzIHdvcnNlLCBiZWNhdXNlIGl0IHJlbGllcworICAgICAgICBhIGxvdCBvbiB0aGUgZmFj
dCB0aGF0IHRoZSBHQyB3aWxsIHNpbXBseSBiZSBmYXN0ZXIgdGhhbiB0aGUgbXV0YXRvciBhbnl3
YXkuIFRoZSBvbGQgc2NoZWR1bGVyCisgICAgICAgIGNsYWltZWQgdG8gYWRkcmVzcyB0aGUgcHJv
YmxlbSBvZiBHQyBwYWNlLCBidXQgaXQgdXNlZCBhIHRpbWUtYmFzZWQgc2NoZWR1bGVyLCB3aGlj
aCBpcyBub3QgYXMKKyAgICAgICAgcHJlY2lzZSBhdCBrZWVwaW5nIGNhc2UgYXMgdGhlIG5ldyB3
b3JrLWJhc2VkIGluY3JlbWVudGFsIG1vZGUuCisKKyAgICAgICAgSW4gdGhlb3J5LCB0aGUgd29y
ay1iYXNlZCBtb2RlIGd1YXJhbnRlZXMgYSBib3VuZCBvbiBob3cgbXVjaCB0aGUgaGVhcCBjYW4g
Z3JvdyBkdXJpbmcgYQorICAgICAgICBjb2xsZWN0aW9uIGp1c3QgYmVjYXVzZSBlYWNoIGJ5dGUg
YWxsb2NhdGVkIG1lYW5zIHNvbWUgbnVtYmVyIG9mIGJ5dGVzIHZpc2l0ZWQuIFdlIGRvbid0IHRy
eQorICAgICAgICB0byBjcmVhdGUgc3VjaCBhIHRoZW9yZXRpY2FsIGJvdW5kLiBXZSdyZSBqdXN0
IHRyeWluZyB0byBnaXZlIHRoZSBjb2xsZWN0b3IgYW4gdW5mYWlyIGFkdmFudGFnZQorICAgICAg
ICBpbiBhbnkgcmFjZSB3aXRoIHRoZSBtdXRhdG9yLgorCisgICAgICAgIFR1cm5pbmcgb24gaW5j
cmVtZW50YWwgbW9kZSwgdGhlIHN0b2NoYXN0aWMgc2NoZWR1bGVyLCBhbmQgcGFzc2l2ZSBkcmFp
bmluZyBpbiBjb21iaW5hdGlvbiB3aXRoCisgICAgICAgIGVhY2ggb3RoZXIgaXMgYSBodWdlIHNw
bGF5LWxhdGVuY3kgc3BlZWQtdXAgb24gbXkgaVBhZC4gSXQncyBhbHNvIGEgQ0RqcyBwcm9ncmVz
c2lvbi4gSXQgZG9lcworICAgICAgICBwcm9ncmVzcyBzcGxheS10aHJvdWdocHV0LCBidXQgSSB0
aGluayB0aGF0J3MgZmluZSAodGhlIHJlZ3Jlc3Npb24gaXMgMTElLCB0aGUgcHJvZ3Jlc3Npb24g
aXMKKyAgICAgICAgM3gpLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6On5IZWFwKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya1RvRml4cG9pbnQpOgorICAgICAgICAoSlNDOjpIZWFwOjp1cGRhdGVPYmpl
Y3RDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBbGxvY2F0ZSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpIZWFwOjpieXRl
c1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpwZXJmb3JtSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
dGhyZWFkVmlzaXRDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZEJ5
dGVzVmlzaXRlZCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICog
aGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6dHJhbnNm
ZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MpOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6bm90ZUxpdmVBdXhpbGlhcnlDZWxsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5p
bmcpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkUmVhY2hUZXJtaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpoYXNXb3JrKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmRyYWluRnJvbVNoYXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFp
bkluUGFyYWxsZWxQYXNzaXZlbHkpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZG9uYXRl
QWxsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvcnJlc3BvbmRpbmdHbG9iYWxTdGFj
ayk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Zm9yRWFjaE1hcmtTdGFj
ayk6CisgICAgICAgICogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjo6bG9nKToKKyAgICAgICAgKiBoZWFw
L1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
U3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmxvZyk6CisgICAgICAgICoganNj
LmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
ZnVuY3Rpb25IZWFwQ2FwYWNpdHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6Om92ZXJyaWRlRGVmYXVsdHMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9u
cy5oOgorCiAyMDE3LTAxLTMxICBUb21hcyBQb3BlbGEgIDx0cG9wZWxhQHJlZGhhdC5jb20+CiAK
ICAgICAgICAgQ29tcGlsYXRpb24gZXJyb3IgaW4gSlNBcnJheUJ1ZmZlclZpZXcuaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDYgKzEwODcsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50R2V0UmVwb3J0KEV4ZWNTdGF0ZSopOwog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudExl
YXZpbmcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbldhaXRGb3JSZXBvcnQoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhlYXBDYXBhY2l0eShFeGVjU3RhdGUqKTsKIAogc3RydWN0
IFNjcmlwdCB7CiAgICAgZW51bSBjbGFzcyBTdHJpY3RNb2RlIHsKQEAgLTEzNjcsNiArMTM2OCw4
IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGFnZW50LCAibGVhdmluZyIs
IGZ1bmN0aW9uRG9sbGFyQWdlbnRMZWF2aW5nLCAwKTsKICAgICAgICAgCiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAid2FpdEZvclJlcG9ydCIsIGZ1bmN0aW9uV2FpdEZvclJlcG9ydCwgMCk7CisK
KyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJoZWFwQ2FwYWNpdHkiLCBmdW5jdGlvbkhlYXBDYXBh
Y2l0eSwgMCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkRnVuY3Rpb24oVk0mIHZtLCBKU09i
amVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwg
dW5zaWduZWQgYXJndW1lbnRzKQpAQCAtMjYzOSw2ICsyNjQyLDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYWkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKCZ2bSwgc3RyaW5nKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25IZWFwQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2bS5oZWFwLmNh
cGFjaXR5KCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgogdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfZnVuZGFtZW50YWw8VmFsdWVUeXBlPjo6dmFsdWU+Ojp0
eXBlIGFkZE9wdGlvbihWTSYsIEpTT2JqZWN0KiwgSWRlbnRpZmllciwgVmFsdWVUeXBlKSB7IH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMTQzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTksNiArMjU5LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJl
YWRzKHRoaXMpCiAgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSkKICAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9yYWNlTWFya1N0YWNr
KHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2NvbnN0cmFpbnRT
ZXQoc3RkOjptYWtlX3VuaXF1ZTxNYXJraW5nQ29uc3RyYWludFNldD4oKSkKQEAgLTMwNSwxNiAr
MzA2LDE3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAg
bV92ZXJpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVyPih0aGlzLCBPcHRpb25z
OjpudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24oKSk7CiAgICAgCiAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwotICAg
IAorCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fdGhyZWFkTG9jayk7CiAgICAgbV90aHJlYWQg
PSBhZG9wdFJlZihuZXcgVGhyZWFkKGxvY2tlciwgKnRoaXMpKTsKIH0KIAogSGVhcDo6fkhlYXAo
KQogewotICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQotICAgICAgICBzbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7Ci0gICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgZm9yRWFjaFNsb3RWaXNpdG9y
KAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAgICB2aXNp
dG9yLmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICB9KTsKICAgICBtX211dGF0b3JNYXJrU3Rh
Y2stPmNsZWFyKCk7CiAgICAgbV9yYWNlTWFya1N0YWNrLT5jbGVhcigpOwogICAgIApAQCAtNTM3
LDYgKzUzOSwxMSBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAK
ICAgICBiZWdpbk1hcmtpbmcoKTsKIAorICAgIGZvckVhY2hTbG90VmlzaXRvcigKKyAgICAgICAg
WyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICAgICAgdmlzaXRvci5kaWRTdGFy
dE1hcmtpbmcoKTsKKyAgICAgICAgfSk7CisKICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgPSBmYWxzZTsKIAogICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKApAQCAtNTUxLDYg
KzU1OCw4IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAgICAg
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6Om9wdGltaXplUGFyYWxsZWxTbG90VmlzaXRvcnNG
b3JTdG9wcGVkTXV0YXRvcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmlzaXRvci0+
b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgbmV3VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3Iu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5k
KFdURk1vdmUobmV3VmlzaXRvcikpOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtNTYxLDcg
KzU3MCw2IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKIAogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxN
b2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5k
aWRTdGFydE1hcmtpbmcoKTsKICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9t
U2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKICAgICAgICAgICAgIH0KIApAQCAtNTcy
LDcgKzU4MCw3IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnQKICAg
ICAgICAgfSk7CiAKICAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcjsKLSAgICBzbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKKwogICAgIG1f
Y29uc3RyYWludFNldC0+ZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgCiAgICAgbV9zY2hlZHVsZXIt
PmJlZ2luQ29sbGVjdGlvbigpOwpAQCAtNjUzLDYgKzY2MSwxMCBAQCB2b2lkIEhlYXA6Om1hcmtU
b0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgICAgICBkb3VibGUgdGhpc1BhdXNlTVMg
PSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKICAg
ICAgICAgICAgIGRhdGFMb2coInA9IiwgdGhpc1BhdXNlTVMsICJtcyAobWF4ICIsIG1heFBhdXNl
TVModGhpc1BhdXNlTVMpLCAiKS4uLl1cbiIpOwogICAgICAgICB9CisKKyAgICAgICAgLy8gRm9y
Z2l2ZSB0aGUgbXV0YXRvciBmb3IgaXRzIHBhc3QgZmFpbHVyZXMgdG8ga2VlcCB1cC4KKyAgICAg
ICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaWYgbW92aW5nIHRoaXMgdG8gZGlmZmVyZW50IHBsYWNl
cyByZXN1bHRzIGluIHBlcmYgY2hhbmdlcy4KKyAgICAgICAgbV9pbmNyZW1lbnRCYWxhbmNlID0g
MDsKICAgICAgICAgCiAgICAgICAgIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgICAgIApAQCAtNzk1
LDkgKzgwNyw3IEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEgKIHZv
aWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6
ZV90IHZpc2l0Q291bnQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7Ci0g
ICAgICAgIHZpc2l0Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwotICAgICAgICBkYXRhTG9n
RigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3Nc
biIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOworICAgICAgICBkYXRhTG9nRigi
XG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQoKSksIFdURjo6bW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQogICAgIAogICAgIGlm
IChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCkBAIC04MTAsMTAg
KzgyMCwxMCBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAKIHZv
aWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+cmVz
ZXQoKTsKLQotICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RW
aXNpdG9ycykKLSAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOworICAgIGZvckVhY2hT
bG90VmlzaXRvcigKKyAgICAgICAgWyZdIChTbG90VmlzaXRvciYgdmlzaXRvcikgeworICAgICAg
ICAgICAgdmlzaXRvci5yZXNldCgpOworICAgICAgICB9KTsKIAogICAgIGFzc2VydFNoYXJlZE1h
cmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxs
KCk7CkBAIC0xNTcwLDYgKzE1ODAsMTIgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGlu
Zyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKKyAgICBNb25vdG9uaWNUaW1l
IGJlZm9yZTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgeworICAgICAgICBiZWZvcmUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBmaW5hbGl6ZSAiKTsK
KyAgICB9CisgICAgCiAgICAgewogICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29w
ZSgqdGhpcyk7CiAgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CkBAIC0xNTc5
LDYgKzE1OTUsMTEgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiAgICAgCiAgICAgaWYgKEhhc093
blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAg
ICAgICBjYWNoZS0+Y2xlYXIoKTsKKworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CisgICAg
ICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAg
ZGF0YUxvZygoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAibXNdXG4iKTsKKyAgICB9
CiB9CiAKIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihzdGQ6Om9wdGlvbmFs
PENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xODcxLDYgKzE4OTIsNyBAQCB2b2lkIEhlYXA6
OmRpZEFsbG9jYXRlKHNpemVfdCBieXRlcykKICAgICBpZiAobV9lZGVuQWN0aXZpdHlDYWxsYmFj
aykKICAgICAgICAgbV9lZGVuQWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0Fs
bG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRTaW5jZUxhc3RGdWxsQ29sbGVjdCk7
CiAgICAgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArPSBieXRlczsKKyAgICBwZXJmb3JtSW5j
cmVtZW50KGJ5dGVzKTsKIH0KIAogYm9vbCBIZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3Qp
CkBAIC0xOTk2LDI0ICsyMDE4LDIzIEBAIGJvb2wgSGVhcDo6c3dlZXBOZXh0TG9naWNhbGx5RW1w
dHlXZWFrQmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc2l6ZV90IEhlYXA6OnRocmVhZFZpc2l0
Q291bnQoKQoteyAgICAgICAKLSAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgZm9y
IChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAg
ICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT52aXNpdENvdW50KCk7CitzaXplX3QgSGVhcDo6
dmlzaXRDb3VudCgpCit7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yRWFjaFNsb3RW
aXNpdG9yKAorICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7CisgICAgICAgICAg
ICByZXN1bHQgKz0gdmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAgIH0pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHNpemVfdCBIZWFwOjpieXRlc1Zpc2l0ZWQoKQogewotICAgIHJldHVy
biBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlz
aXRlZCgpOwotfQotCi1zaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXNWaXNpdGVkKCkKLXsgICAgICAg
CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3Ig
OiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNp
dG9yLT5ieXRlc1Zpc2l0ZWQoKTsKKyAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsm
XSAoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSB2aXNpdG9y
LmJ5dGVzVmlzaXRlZCgpOworICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0yMzc0LDYgKzIzOTUsNyBAQCB2b2lkIEhlYXA6OmZvckVhY2hTbG90VmlzaXRvcihjb25zdCBG
dW5jCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKICAgICBmdW5jKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBmdW5jKCptX211
dGF0b3JTbG90VmlzaXRvcik7CiAgICAgZm9yIChhdXRvJiBzbG90VmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIGZ1bmMoKnNsb3RWaXNpdG9yKTsKIH0KQEAgLTIzODMs
NSArMjQwNSw0MyBAQCB2b2lkIEhlYXA6OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sCiAg
ICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB2YWx1ZTsKICAgICBtX2JhcnJpZXJUaHJlc2hv
bGQgPSB2YWx1ZSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkOwogfQor
Cit2b2lkIEhlYXA6OnBlcmZvcm1JbmNyZW1lbnQoc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICgh
bV9vYmplY3RTcGFjZS5pc01hcmtpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbmNy
ZW1lbnRCYWxhbmNlICs9IGJ5dGVzICogT3B0aW9uczo6Z2NJbmNyZW1lbnRTY2FsZSgpOworCisg
ICAgLy8gU2F2ZSBvdXJzZWx2ZXMgZnJvbSBjcmF6eS4gU2luY2UgdGhpcyBpcyBhbiBvcHRpbWl6
YXRpb24sIGl0J3MgT0sgdG8gZ28gYmFjayB0byBhbnkgY29uc2lzdGVudAorICAgIC8vIHN0YXRl
IHdoZW4gdGhlIGRvdWJsZSBnb2VzIHdpbGQuCisgICAgaWYgKHN0ZDo6aXNuYW4obV9pbmNyZW1l
bnRCYWxhbmNlKSB8fCBzdGQ6OmlzaW5mKG1faW5jcmVtZW50QmFsYW5jZSkpCisgICAgICAgIG1f
aW5jcmVtZW50QmFsYW5jZSA9IDA7CiAgICAgCisgICAgaWYgKG1faW5jcmVtZW50QmFsYW5jZSA8
IHN0YXRpY19jYXN0PGRvdWJsZT4oT3B0aW9uczo6Z2NJbmNyZW1lbnRCeXRlcygpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZG91YmxlIHRhcmdldEJ5dGVzID0gbV9pbmNyZW1lbnRCYWxhbmNl
OworICAgIGlmICh0YXJnZXRCeXRlcyA8PSAwKQorICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0
Qnl0ZXMgPSBzdGQ6Om1pbih0YXJnZXRCeXRlcywgT3B0aW9uczo6Z2NJbmNyZW1lbnRNYXhCeXRl
cygpKTsKKworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOworICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKSB7CisgICAgICAgIGRhdGFMb2coIltHQzogaW5jcmVtZW50IHQ9IiwgdGFyZ2V0Qnl0ZXMg
LyAxMDI0LCAia2IgIik7CisgICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgIH0KKworICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX211dGF0b3JTbG90Vmlz
aXRvcjsKKyAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoc2xvdFZp
c2l0b3IpOworICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQgPSBzbG90VmlzaXRvci5wZXJmb3JtSW5j
cmVtZW50T2ZEcmFpbmluZyhzdGF0aWNfY2FzdDxzaXplX3Q+KHRhcmdldEJ5dGVzKSk7CisgICAg
Ly8gaW5jcmVtZW50QmFsYW5jZSBtYXkgZ28gbmVnYXRpdmUgaGVyZSBiZWNhdXNlIGl0J2xsIHJl
bWVtYmVyIGhvdyBtYW55IGJ5dGVzIHdlIG92ZXJzaG90LgorICAgIG1faW5jcmVtZW50QmFsYW5j
ZSAtPSBieXRlc1Zpc2l0ZWQ7CisKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgeworICAgICAg
ICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRh
dGFMb2coInA9IiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIm1zIGI9IiwgbV9p
bmNyZW1lbnRCYWxhbmNlIC8gMTAyNCwgImtiXVxuIik7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIxMTQz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzI1LDYgKzMyNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BJZk5lY2Vzc2FyeSgpOwog
ICAgIAogICAgIGJvb2wgbWF5TmVlZFRvU3RvcCgpOworCisgICAgdm9pZCBwZXJmb3JtSW5jcmVt
ZW50KHNpemVfdCBieXRlcyk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIG11Y2ggc3Ryb25nZXIg
a2luZCBvZiBzdG9wcGluZyBvZiB0aGUgY29sbGVjdG9yLCBhbmQgaXQgbWF5IHJlcXVpcmUgd2Fp
dGluZyBmb3IgYQogICAgIC8vIHdoaWxlLiBUaGlzIGlzIG1lYW50IHRvIGJlIGEgbGVnYWN5IEFQ
SSBmb3IgY2xpZW50cyBvZiBjb2xsZWN0QWxsR2FyYmFnZSB0aGF0IGV4cGVjdCB0aGF0IHRoZXJl
CkBAIC0zMzYsOCArMzM4LDYgQEAgcHVibGljOgogICAgIHZvaWQgcHJldmVudENvbGxlY3Rpb24o
KTsKICAgICB2b2lkIGFsbG93Q29sbGVjdGlvbigpOwogICAgIAotICAgIHNpemVfdCBieXRlc1Zp
c2l0ZWQoKTsKLSAgICAKICAgICB1aW50NjRfdCBtdXRhdG9yRXhlY3V0aW9uVmVyc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbXV0YXRvckV4ZWN1dGlvblZlcnNpb247IH0KICAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFkZE1hcmtpbmdDb25zdHJhaW50KHN0ZDo6dW5pcXVlX3B0cjxN
YXJraW5nQ29uc3RyYWludD4pOwpAQCAtNDY2LDggKzQ2Niw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWRTbG93KCk7CiAK
LSAgICBzaXplX3QgdGhyZWFkVmlzaXRDb3VudCgpOwotICAgIHNpemVfdCB0aHJlYWRCeXRlc1Zp
c2l0ZWQoKTsKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpOworICAgIHNpemVfdCBieXRlc1Zpc2l0
ZWQoKTsKICAgICAKICAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJbXBsKGNvbnN0IFNjb3BlZExh
bWJkYTxib29sKENvZGVCbG9jayopPiYpOwogICAgIApAQCAtNDk5LDYgKzQ5OSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb247CiAgICAgc2l6ZV90IG1fdG90
YWxCeXRlc1Zpc2l0ZWQ7CiAgICAgc2l6ZV90IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7
CisgICAgZG91YmxlIG1faW5jcmVtZW50QmFsYW5jZSB7IDAgfTsKICAgICAKICAgICBzdGQ6Om9w
dGlvbmFsPENvbGxlY3Rpb25TY29wZT4gbV9jb2xsZWN0aW9uU2NvcGU7CiAgICAgc3RkOjpvcHRp
b25hbDxDb2xsZWN0aW9uU2NvcGU+IG1fbGFzdENvbGxlY3Rpb25TY29wZTsKQEAgLTUxNyw2ICs1
MTgsNyBAQCBwcml2YXRlOgogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAg
ICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9tdXRhdG9yU2xvdFZpc2l0
b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3Rh
Y2s7CiAKICAgICBMb2NrIG1fcmFjZU1hcmtTdGFja0xvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2
ICs2NCwyMCBAQCB2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2ZlclRvKE1hcmtTdGFjCiAgICAg
fQogfQogCitzaXplX3QgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkm
IG90aGVyLCBzaXplX3QgbGltaXQpCit7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICB3aGls
ZSAoY291bnQgPCBsaW1pdCAmJiAhaXNFbXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAg
ICAgICB3aGlsZSAoY291bnQgPCBsaW1pdCAmJiBjYW5SZW1vdmVMYXN0KCkpIHsKKyAgICAgICAg
ICAgIG90aGVyLmFwcGVuZChyZW1vdmVMYXN0KCkpOworICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA8PSBsaW1pdCk7CisgICAg
cmV0dXJuIGNvdW50OworfQorCiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNU
byhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAx
IC8gMiBvZiBvdXIgY2VsbHMuIFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
NiArMzYsNyBAQCBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAogICAgIHZvaWQgdHJh
bnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHNpemVfdCB0cmFuc2ZlclRvKE1hcmtTdGFj
a0FycmF5Jiwgc2l6ZV90IGxpbWl0KTsgLy8gT3B0aW1pemVkIGZvciB3aGVuIGBsaW1pdGAgaXMg
c21hbGwuCiAgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYpOwogICAg
IHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5Jiwgc2l6ZV90IGlkbGVUaHJl
YWRDb3VudCk7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjExNDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIFNsb3RWaXNp
dG9yOjp+U2xvdFZpc2l0b3IoKQogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkK
IHsKICAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6
OkZ1bGwpCi0gICAgICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3Vs
ZCBoYXZlIG1lcmdlZCBieSBub3cuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fb3BhcXVlUm9v
dHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KICAgICBlbHNlCiAg
ICAgICAgIHJlc2V0KCk7CiAKQEAgLTExNyw4ICsxMTcsMTEgQEAgdm9pZCBTbG90VmlzaXRvcjo6
cmVzZXQoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQogewotICAgIG1f
Y29sbGVjdG9yU3RhY2suY2xlYXIoKTsKLSAgICBtX211dGF0b3JTdGFjay5jbGVhcigpOworICAg
IGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc3RhY2suY2xlYXIoKTsKKyAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIH0KIAog
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVS
b290cykKQEAgLTI5MCw3ICsyOTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFRvCiAgICAgCiAgICAgbV92aXNpdENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQg
Kz0gY29udGFpbmVyLmNlbGxTaXplKCk7Ci0gICAgCisKICAgICBtX2NvbGxlY3RvclN0YWNrLmFw
cGVuZChjZWxsKTsKIH0KIApAQCAtMzI1LDcgKzMyOCwxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpu
b3RlTGl2ZUF1eGlsaWFyeUNlbGwoCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAgICAK
ICAgICBtX3Zpc2l0Q291bnQrKzsKLSAgICBtX2J5dGVzVmlzaXRlZCArPSBjb250YWluZXIuY2Vs
bFNpemUoKTsKKworICAgIHNpemVfdCBjZWxsU2l6ZSA9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwor
ICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNlbGxTaXplOworICAgIG1fbm9uQ2VsbFZpc2l0Q291bnQg
Kz0gY2VsbFNpemU7CiB9CiAKIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGUgewpAQCAtNDI5LDgg
KzQzNSwxMSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hCiAKIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogewotICAgIGRvbmF0ZUtub3du
UGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjayk7Ci0gICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywgKm1faGVhcC5t
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworICAgIGZvckVhY2hNYXJrU3RhY2soCisgICAgICAg
IFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAg
ICAgICAgZG9uYXRlS25vd25QYXJhbGxlbChzdGFjaywgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNr
KHN0YWNrKSk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
KyAgICAgICAgfSk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnVwZGF0ZU11dGF0b3JJc1N0b3Bw
ZWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQpAQCAtNDYyLDI3ICs0NzEsMjggQEAgdm9pZCBTbG90
VmlzaXRvcjo6b3B0aW1pemVGb3JTdG9wcGVkTXV0YQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkcmFp
bihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7Ci0gICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9k
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7CiAgICAgCiAgICAgd2hpbGUgKCFo
YXNFbGFwc2VkKHRpbWVvdXQpKSB7CiAgICAgICAgIHVwZGF0ZU11dGF0b3JJc1N0b3BwZWQobG9j
a2VyKTsKLSAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKLSAgICAgICAgICAgIG1faXNGaXJzdFZp
c2l0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9u
czo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fY29sbGVjdG9yU3Rh
Y2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgICAgICB2aXNp
dENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAgICAgfSBlbHNl
IGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX211dGF0b3JT
dGFjay5yZWZpbGwoKTsKLSAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBh
cmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBv
ZgotICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBl
eGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKLSAgICAgICAgICAgIC8vIHBv
c3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgbWFya2Vk
LgotICAgICAgICAgICAgbV9pc0ZpcnN0VmlzaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVu
UmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24t
LTspCi0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVM
YXN0KCkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgSXRlcmF0aW9uU3RhdHVzIHN0YXR1cyA9
IGZvckVhY2hNYXJrU3RhY2soCisgICAgICAgICAgICBbJl0gKE1hcmtTdGFja0FycmF5JiBzdGFj
aykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2suaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKKworICAgICAgICAgICAgICAgIHN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1faXNGaXJzdFZpc2l0ID0gKCZzdGFjayA9PSAmbV9jb2xsZWN0b3JT
dGFjayk7CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlv
bnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBzdGFjay5jYW5SZW1v
dmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgICAgICB2aXNpdENoaWxk
cmVuKHN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoc3RhdHVzID09IEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWUpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAg
ICAgICAgIG1fcmlnaHRUb1J1bi5zYWZlcG9pbnQoKTsKICAgICAgICAgZG9uYXRlS25vd25QYXJh
bGxlbCgpOwogICAgIH0KQEAgLTQ5MCwxMyArNTAwLDc0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRy
YWluKE1vbm90b25pY1RpbWUgdGkKICAgICBtZXJnZUlmTmVjZXNzYXJ5KCk7CiB9CiAKK3NpemVf
dCBTbG90VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVx
dWVzdGVkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CisKKyAg
ICBzaXplX3QgY2VsbHNSZXF1ZXN0ZWQgPSBieXRlc1JlcXVlc3RlZCAvIE1hcmtlZEJsb2NrOjph
dG9tU2l6ZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9oZWFwLm1f
bWFya2luZ011dGV4KTsKKyAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgIFsm
XSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAg
ICAgICAgIGNlbGxzUmVxdWVzdGVkIC09IGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjayku
dHJhbnNmZXJUbyhzdGFjaywgY2VsbHNSZXF1ZXN0ZWQpOworICAgICAgICAgICAgICAgIHJldHVy
biBjZWxsc1JlcXVlc3RlZCA/IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWUgOiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzaXplX3QgY2VsbEJ5
dGVzVmlzaXRlZCA9IDA7CisgICAgbV9ub25DZWxsVmlzaXRDb3VudCA9IDA7CisKKyAgICBhdXRv
IGJ5dGVzVmlzaXRlZCA9IFsmXSAoKSAtPiBzaXplX3QgeworICAgICAgICByZXR1cm4gY2VsbEJ5
dGVzVmlzaXRlZCArIG1fbm9uQ2VsbFZpc2l0Q291bnQ7CisgICAgfTsKKworICAgIGF1dG8gaXNE
b25lID0gWyZdICgpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gYnl0ZXNWaXNpdGVkKCkgPj0g
Ynl0ZXNSZXF1ZXN0ZWQ7CisgICAgfTsKKyAgICAKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9yaWdodFRvUnVuKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghaXNE
b25lKCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZU11dGF0b3JJc1N0b3BwZWQobG9ja2VyKTsKKyAg
ICAgICAgICAgIEl0ZXJhdGlvblN0YXR1cyBzdGF0dXMgPSBmb3JFYWNoTWFya1N0YWNrKAorICAg
ICAgICAgICAgICAgIFsmXSAoTWFya1N0YWNrQXJyYXkmIHN0YWNrKSAtPiBJdGVyYXRpb25TdGF0
dXMgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suaXNFbXB0eSgpIHx8IGlzRG9uZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2lzRmlyc3RWaXNpdCA9ICgmc3RhY2sgPT0g
Jm1fY29sbGVjdG9yU3RhY2spOworCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50
ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOwor
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY291bnRkb3duICYmIHN0YWNrLmNhblJlbW92ZUxh
c3QoKSAmJiAhaXNEb25lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEpTQ2Vs
bCogY2VsbCA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNl
bGxCeXRlc1Zpc2l0ZWQgKz0gY2VsbC0+Y2VsbFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGRv
d24tLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aWYgKHN0YXR1cyA9PSBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgpOworICAgICAgICAg
ICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZG9uYXRl
QWxsKCk7CisgICAgbWVyZ2VJZk5lY2Vzc2FyeSgpOworCisgICAgcmV0dXJuIGJ5dGVzVmlzaXRl
ZCgpOworfQorCiBib29sIFNsb3RWaXNpdG9yOjpkaWRSZWFjaFRlcm1pbmF0aW9uKCkKIHsKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwogICAgIHJldHVybiBk
aWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcik7CiB9CiAKLWJvb2wgU2xvdFZpc2l0b3I6OmRpZFJl
YWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpCitib29sIFNsb3RWaXNpdG9yOjpkaWRS
ZWFjaFRlcm1pbmF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICByZXR1cm4gaXNF
bXB0eSgpCiAgICAgICAgICYmICFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
cwpAQCAtNTA0LDcgKzU3NSw3IEBAIGJvb2wgU2xvdFZpc2l0b3I6OmRpZFJlYWNoVGVybWluYXRp
b24oY28KICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0
eSgpOwogfQogCi1ib29sIFNsb3RWaXNpdG9yOjpoYXNXb3JrKGNvbnN0IExvY2tIb2xkZXImKQor
Ym9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAg
cmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAg
ICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOwpAQCAt
NTE1LDcgKzU4Niw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQK
ICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKICAgICBBU1NFUlQoT3B0aW9u
czo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7Ci0gICAgCisKICAgICBib29sIGlzQWN0aXZlID0gZmFs
c2U7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgewpAQCAtNTI4LDcgKzU5OSw3IEBAIFNs
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGlt
ZWRPdXQ7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChk
aWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKQEAgLTUzNiw3ICs2
MDcsNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV29yayhsb2NrZXIpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0
VW50aWwobV9oZWFwLm1fbWFya2luZ011dGV4LCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTQ4LDIxICs2MTksMjUgQEAgU2xvdFZpc2l0b3I6
OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgICAgICAgICAgICAgIGlmIChkaWRSZWFj
aFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwoCi0gICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdNdXRleCwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAg
WyZdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNXb3JrKGxvY2tlcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0OwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhdXRvIGlz
UmVhZHkgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNX
b3JrKGxvY2tlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQ7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobV9oZWFwLm1fbWFy
a2luZ011dGV4LCB0aW1lb3V0LCBpc1JlYWR5KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAg
ICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAu
bV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwotICAgICAgICAgICAgbV9tdXRhdG9y
U3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOworICAgICAgICAgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAgICAgICAgICBbJl0g
KE1hcmtTdGFja0FycmF5JiBzdGFjaykgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKHN0YWNrKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0pOworCiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJr
ZXJzLS07CiAgICAgICAgIH0KQEAgLTU4NCw4ICs2NTksNyBAQCBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQgU2xvdFZpc2l0CiAgICAgCiAgICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkpOwogICAgIAotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
IDwgNAotICAgICAgICB8fCAhbV9oZWFwLmhhc0hlYXBBY2Nlc3MoKQorICAgIGlmICghbV9oZWFw
Lmhhc0hlYXBBY2Nlc3MoKQogICAgICAgICB8fCBtX2hlYXAuY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlv
biBvdmVyIGRyYWluSW5QYXJhbGxlbCgpIHdoZW4gd2UgaGF2ZSBhIGNvbmN1cnJlbnQgbXV0YXRv
ciBidXQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGlzIG5vdCBwcm9maXRhYmxlLgpAQCAtNTkz
LDkgKzY2Nyw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXQKICAg
ICB9CiAKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2hlYXAubV9tYXJraW5nTXV0ZXgpOwotICAg
IG1fY29sbGVjdG9yU3RhY2sudHJhbnNmZXJUbygqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFy
a1N0YWNrKTsKLSAgICBtX211dGF0b3JTdGFjay50cmFuc2ZlclRvKCptX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrKTsKLSAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
bm90aWZ5QWxsKCk7CisgICAgZG9uYXRlQWxsKGxvY2tlcik7CiAgICAgCiAgICAgZm9yICg7Oykg
ewogICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKQEAgLTYxMCw2ICs2ODIsMjIgQEAg
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdAogICAgIH0KIH0KIAordm9p
ZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKCkKK3sKKyAgICBkb25hdGVBbGwoaG9sZExvY2sobV9o
ZWFwLm1fbWFya2luZ011dGV4KSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFsbChj
b25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgZm9yRWFjaE1hcmtTdGFjaygKKyAgICAgICAg
WyZdIChNYXJrU3RhY2tBcnJheSYgc3RhY2spIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAg
ICAgICBzdGFjay50cmFuc2ZlclRvKGNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhzdGFjaykpOwor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OworCisgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwor
fQorCiB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCiB7CiAgICAg
aWYgKCFyb290KQpAQCAtNzE2LDQgKzgwNCwxMiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJDb2xsZWN0b3I6IFsiLCBwb2ludGVyTGlz
dER1bXAoY29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0YXRvcjogWyIsIHBvaW50ZXJMaXN0
RHVtcChtdXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQogCitNYXJrU3RhY2tBcnJheSYgU2xv
dFZpc2l0b3I6OmNvcnJlc3BvbmRpbmdHbG9iYWxTdGFjayhNYXJrU3RhY2tBcnJheSYgc3RhY2sp
Cit7CisgICAgaWYgKCZzdGFjayA9PSAmbV9jb2xsZWN0b3JTdGFjaykKKyAgICAgICAgcmV0dXJu
ICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgUkVMRUFTRV9BU1NFUlQo
JnN0YWNrID09ICZtX211dGF0b3JTdGFjayk7CisgICAgcmV0dXJuICptX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjExNDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiSGFuZGxl
VHlwZXMuaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJNYXJrU3Rh
Y2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5
LmgiCkBAIC0xMTcsNiArMTE4LDEyIEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZERyYWluUmVzdWx0
IGRyYWluSW5QYXJhbGxlbChNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkluUGFyYWxsZWxQYXNzaXZl
bHkoTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisK
KyAgICAvLyBBdHRlbXB0cyB0byBwZXJmb3JtIGFuIGluY3JlbWVudCBvZiBkcmFpbmluZyB0aGF0
IGludm9sdmVzIG9ubHkgd2Fsa2luZyBgYnl0ZXNgIHdvcnRoIG9mIGRhdGEuIFRoaXMKKyAgICAv
LyBpcyBsaWtlbHkgdG8gYWNjaWRlbnRhbGx5IHdhbGsgbW9yZSBvciBsZXNzIHRoYW4gdGhhdC4g
SXQgd2lsbCB1c3VhbGx5IG1hcmsgbW9yZSB0aGFuIGJ5dGVzLiBJdCBtYXkKKyAgICAvLyBtYXJr
IGxlc3MgdGhhbiBieXRlcyBpZiB3ZSdyZSByZWFjaGluZyB0ZXJtaW5hdGlvbiBvciBpZiB0aGUg
Z2xvYmFsIHdvcmtsaXN0IGlzIGVtcHR5ICh3aGljaCBtYXkgaW4KKyAgICAvLyByYXJlIGNhc2Vz
IGhhcHBlbiB0ZW1wb3JhcmlseSBldmVuIGlmIHdlJ3JlIG5vdCByZWFjaGluZyB0ZXJtaW5hdGlv
bikuCisgICAgc2l6ZV90IHBlcmZvcm1JbmNyZW1lbnRPZkRyYWluaW5nKHNpemVfdCBieXRlcyk7
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZUlmTmVjZXNzYXJ5KCk7CiAK
QEAgLTE1OSw2ICsxNjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRJZ25vcmVOZXdP
cGFxdWVSb290cyhib29sIHZhbHVlKSB7IG1faWdub3JlTmV3T3BhcXVlUm9vdHMgPSB2YWx1ZTsg
fQogCisgICAgdm9pZCBkb25hdGVBbGwoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
UGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE4Nyw5ICsxOTYsMTYgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB2b2lkIGRvbmF0ZUtu
b3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7Ci0g
ICAgCi0gICAgYm9vbCBoYXNXb3JrKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBib29sIGRpZFJl
YWNoVGVybWluYXRpb24oY29uc3QgTG9ja0hvbGRlciYpOworCisgICAgdm9pZCBkb25hdGVBbGwo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKworICAgIGJvb2wgaGFzV29yayhjb25zdCBBYnN0cmFj
dExvY2tlciYpOworICAgIGJvb2wgZGlkUmVhY2hUZXJtaW5hdGlvbihjb25zdCBBYnN0cmFjdExv
Y2tlciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBJdGVyYXRpb25TdGF0
dXMgZm9yRWFjaE1hcmtTdGFjayhjb25zdCBGdW5jJik7CisKKyAgICBNYXJrU3RhY2tBcnJheSYg
Y29ycmVzcG9uZGluZ0dsb2JhbFN0YWNrKE1hcmtTdGFja0FycmF5Jik7CiAKICAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOwogICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwpAQCAtMTk4LDggKzIxNCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc2l6ZV90IG1fYnl0
ZXNWaXNpdGVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CisgICAgc2l6ZV90IG1fbm9uQ2Vs
bFZpc2l0Q291bnQgeyAwIH07IC8vIFVzZWQgZm9yIGluY3JlbWVudGFsIGRyYWluaW5nLCBpZ25v
cmVkIG90aGVyd2lzZS4KICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICAKKwogICAg
IEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSwxMCBAQCBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzSGlkCiAKIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaWYgKG1f
aXNGaXJzdFZpc2l0KQorICAgIGlmIChtX2lzRmlyc3RWaXNpdCkgewogICAgICAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKKyAgICAgICAgbV9ub25DZWxsVmlzaXRD
b3VudCArPSBzaXplOworICAgIH0KIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKQEAg
LTEwOCw0ICsxMTAsMTQgQEAgaW5saW5lIGNvbnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25z
dAogICAgIHJldHVybiAqbV9oZWFwLm1fdm07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitJdGVyYXRpb25TdGF0dXMgU2xvdFZpc2l0b3I6OmZvckVhY2hNYXJrU3RhY2soY29uc3QgRnVu
YyYgZnVuYykKK3sKKyAgICBpZiAoZnVuYyhtX2NvbGxlY3RvclN0YWNrKSA9PSBJdGVyYXRpb25T
dGF0dXM6OkRvbmUpCisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAg
aWYgKGZ1bmMobV9tdXRhdG9yU3RhY2spID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICByZXR1cm4gSXRlcmF0aW9uU3Rh
dHVzOjpDb250aW51ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVy
LmNwcAkocmV2aXNpb24gMjExNDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEs
NyBAQCB2b2lkIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OmxvZygpCiAgICAgQVNTRVJUKE9w
dGlvbnM6OmxvZ0dDKCkpOwogICAgIFNuYXBzaG90IHNuYXBzaG90KCp0aGlzKTsKICAgICBkYXRh
TG9nKAotICAgICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNTaW5jZUJlZ2lubmluZ09m
Q3ljbGUoc25hcHNob3QpIC8gMTAyNCksICIga2IgIiwKKyAgICAgICAgImE9IiwgZm9ybWF0KCIl
LjBsZiIsIGJ5dGVzU2luY2VCZWdpbm5pbmdPZkN5Y2xlKHNuYXBzaG90KSAvIDEwMjQpLCAia2Ig
IiwKICAgICAgICAgImhmPSIsIGZvcm1hdCgiJS4zbGYiLCBoZWFkcm9vbUZ1bGxuZXNzKHNuYXBz
aG90KSksICIgIiwKICAgICAgICAgIm11PSIsIGZvcm1hdCgiJS4zbGYiLCBtdXRhdG9yVXRpbGl6
YXRpb24oc25hcHNob3QpKSwgIiAiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHAJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIKICAgICBBU1NFUlQoT3B0aW9uczo6bG9nR0MoKSk7CiAgICAgU25hcHNob3Qgc25hcHNo
b3QoKnRoaXMpOwogICAgIGRhdGFMb2coCi0gICAgICAgICJhPSIsIGZvcm1hdCgiJS4wbGYiLCBi
eXRlc1NpbmNlQmVnaW5uaW5nT2ZDeWNsZShzbmFwc2hvdCkgLyAxMDI0KSwgIiBrYiAiLAorICAg
ICAgICAiYT0iLCBmb3JtYXQoIiUuMGxmIiwgYnl0ZXNTaW5jZUJlZ2lubmluZ09mQ3ljbGUoc25h
cHNob3QpIC8gMTAyNCksICJrYiAiLAogICAgICAgICAiaGY9IiwgZm9ybWF0KCIlLjNsZiIsIGhl
YWRyb29tRnVsbG5lc3Moc25hcHNob3QpKSwgIiAiLAogICAgICAgICAibXU9IiwgZm9ybWF0KCIl
LjNsZiIsIG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hvdCkpLCAiICIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDIxMTQzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTEsOSArMzExLDkgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVEZWZhdWx0cygpCiAg
ICAgaWYgKFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpIDwgNCkgewogICAgICAgICBPcHRp
b25zOjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgPSAwLjY7CiAgICAgICAgIE9wdGlvbnM6
OmNvbmN1cnJlbnRHQ01heEhlYWRyb29tKCkgPSAxLjQ7Ci0gICAgICAgIE9wdGlvbnM6OmNvbmN1
cnJlbnRHQ1BlcmlvZE1TKCkgPSAxMDsKLSAgICB9IGVsc2UKLSAgICAgICAgT3B0aW9uczo6dXNl
U3RvY2hhc3RpY011dGF0b3JTY2hlZHVsZXIoKSA9IHRydWU7CisgICAgICAgIE9wdGlvbnM6Om1p
bmltdW1HQ1BhdXNlTVMoKSA9IDE7CisgICAgICAgIE9wdGlvbnM6OmdjSW5jcmVtZW50U2NhbGUo
KSA9IDE7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDIxMTQzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAyLDkgKzIwMiwxMiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZzsKICAgICB2KGRvdWJsZSwgbWF4aW11bU11dGF0b3JVdGlsaXphdGlvbiwgMC43LCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVudEdDTWF4SGVhZHJvb20s
IDEuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIGNvbmN1cnJlbnRHQ1Blcmlv
ZE1TLCAyLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIHVzZVN0b2NoYXN0aWNNdXRh
dG9yU2NoZWR1bGVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VT
dG9jaGFzdGljTXV0YXRvclNjaGVkdWxlciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihkb3VibGUsIG1pbmltdW1HQ1BhdXNlTVMsIDAuMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihkb3VibGUsIGdjUGF1c2VTY2FsZSwgMC4zLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGRv
dWJsZSwgZ2NJbmNyZW1lbnRCeXRlcywgMTAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
ZG91YmxlLCBnY0luY3JlbWVudE1heEJ5dGVzLCAxMDAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoZG91YmxlLCBnY0luY3JlbWVudFNjYWxlLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYodW5zaWduZWQsIGxhcmdlQWxsb2NhdGlvbkN1dG9mZiwgMTAwMDAwLCBOb3JtYWws
IG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTE0MzYpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTAxLTMxICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIG11dGF0b3Igc2hvdWxkIGJl
IGFibGUgdG8gcGVyZm9ybSBpbmNyZW1lbnRzIG9mIEdDIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzUyOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHdhbnQgZGF0YUxvZyB0byBiZSBsb2Nr
ZWQgZXZlbiBpZiB5b3UncmUgbm90IGxvZ2dpbmcgdG8gYSBmaWxlIQorCisgICAgICAgICogd3Rm
L0RhdGFMb2cuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTG9nRmlsZU9uY2UpOgorCiAy
MDE3LTAxLTI4ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIENoZWNrIFVTRShBUFBMRV9JTlRFUk5BTF9TREspIGluc3RlYWQgb2Ygc3BlY2lmaWMgaGVh
ZGVycyB3aGVuIGltcG9ydGluZyBmcm9tIFdlYktpdEFkZGl0aW9ucwpJbmRleDogU291cmNlL1dU
Ri93dGYvRGF0YUxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5j
cHAJKHJldmlzaW9uIDIxMTQzNikKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogc3RhdGljIFByaW50
U3RyZWFtKiBzX2ZpbGU7CiAKIHN0YXRpYyB1aW50NjRfdCBzX2ZpbGVEYXRhWyhzaXplb2YoRmls
ZVByaW50U3RyZWFtKSArIDcpIC8gOF07CitzdGF0aWMgdWludDY0X3Qgc19sb2NrZWRGaWxlRGF0
YVsoc2l6ZW9mKExvY2tlZFByaW50U3RyZWFtKSArIDcpIC8gOF07CiAKIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVMb2dGaWxlT25jZSgpCiB7CkBAIC0xMTksMjEgKzEyMCwxNSBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogICAgIH0KICNlbmRpZiAvLyBEQVRBX0xPR19UT19G
SUxFCiAgICAgCi0gICAgYm9vbCB3cmFwV2l0aExvY2tlZCA9IHRydWU7Ci0gICAgCiAgICAgaWYg
KCFmaWxlKSB7CiAgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3OyB0aGlzIG1ha2VzIGl0IGVh
c2llciB0byB1c2UgZGF0YUxvZygpIHRvIGRlYnVnCiAgICAgICAgIC8vIGZhc3RNYWxsb2MuCiAg
ICAgICAgIGZpbGUgPSBuZXcgKHNfZmlsZURhdGEpIEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZp
bGVQcmludFN0cmVhbTo6Qm9ycm93KTsKLSAgICAgICAgd3JhcFdpdGhMb2NrZWQgPSBmYWxzZTsK
ICAgICB9CiAgICAgCiAgICAgc2V0dmJ1ZihmaWxlLT5maWxlKCksIDAsIF9JT05CRiwgMCk7IC8v
IFByZWZlciB1bmJ1ZmZlcmVkIG91dHB1dCwgc28gdGhhdCB3ZSBnZXQgYSBmdWxsIGxvZyB1cG9u
IGNyYXNoIG9yIGRlYWRsb2NrLgogICAgIAotICAgIGlmICh3cmFwV2l0aExvY2tlZCkKLSAgICAg
ICAgc19maWxlID0gbmV3IExvY2tlZFByaW50U3RyZWFtKHN0ZDo6dW5pcXVlX3B0cjxGaWxlUHJp
bnRTdHJlYW0+KGZpbGUpKTsKLSAgICBlbHNlCi0gICAgICAgIHNfZmlsZSA9IGZpbGU7CisgICAg
c19maWxlID0gbmV3IChzX2xvY2tlZEZpbGVEYXRhKSBMb2NrZWRQcmludFN0cmVhbShzdGQ6OnVu
aXF1ZV9wdHI8RmlsZVByaW50U3RyZWFtPihmaWxlKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVMb2dGaWxlKCkK
</data>
<flag name="review"
          id="322143"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>