<?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>151668</bug_id>
          
          <creation_ts>2015-11-30 12:23:25 -0800</creation_ts>
          <short_desc>B3 stackmaps should support early clobber</short_desc>
          <delta_ts>2015-11-30 17:27:30 -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>
          
          <blocked>151667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144873</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 12:23:25 -0800</bug_when>
    <thetext>Currently we almost support this with LateUse, but that&apos;s not really good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144886</commentid>
    <comment_count>1</comment_count>
      <attachid>266260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 12:46:28 -0800</bug_when>
    <thetext>Created attachment 266260
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144974</commentid>
    <comment_count>2</comment_count>
      <attachid>266287</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 15:27:06 -0800</bug_when>
    <thetext>Created attachment 266287
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144977</commentid>
    <comment_count>3</comment_count>
      <attachid>266287</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-30 15:30:35 -0800</bug_when>
    <thetext>Comment on attachment 266287
the patch

r=me if you make it apply cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144979</commentid>
    <comment_count>4</comment_count>
      <attachid>266289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 15:32:09 -0800</bug_when>
    <thetext>Created attachment 266289
patch for landing

Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144982</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 15:33:39 -0800</bug_when>
    <thetext>Attachment 266289 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:133:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3353:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3364:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3379:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:152:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:160:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:209:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:318:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 12 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144987</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 15:40:54 -0800</bug_when>
    <thetext>Hmmm I&apos;ll wait some more on those builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144990</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 15:43:06 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=266287&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        B3 stackmaps should support early clobber

What about saying &quot;reserved registers&quot; instead of early clobber?

It is a bit weird to have a clobber set *before* the instructions.

&gt; Source/JavaScriptCore/b3/B3StackmapSpecial.h:51
&gt;      const RegisterSet&amp; extraClobberedRegs(Air::Inst&amp;) override;
&gt; +    const RegisterSet&amp; extraEarlyClobberedRegs(Air::Inst&amp;) override;

Move it before extraClobberedRegs?
Rename extraClobberedRegs to extraLateClobberedRegs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144992</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 15:48:31 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266287&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        B3 stackmaps should support early clobber
&gt; 
&gt; What about saying &quot;reserved registers&quot; instead of early clobber?

I think that clobber has a more precise meaning.

&gt; 
&gt; It is a bit weird to have a clobber set *before* the instructions.

It&apos;s just like late use in that regard.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3StackmapSpecial.h:51
&gt; &gt;      const RegisterSet&amp; extraClobberedRegs(Air::Inst&amp;) override;
&gt; &gt; +    const RegisterSet&amp; extraEarlyClobberedRegs(Air::Inst&amp;) override;
&gt; 
&gt; Move it before extraClobberedRegs?

Yeah, I&apos;ll do that.

&gt; Rename extraClobberedRegs to extraLateClobberedRegs?

I ended up not doing this inside Air because there the extraClobberedRegs is the one that makes sense - it applies to its own instruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145005</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 16:05:24 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145033</commentid>
    <comment_count>10</comment_count>
      <attachid>266289</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 16:50:31 -0800</bug_when>
    <thetext>Comment on attachment 266289
patch for landing

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

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:208
&gt; +                            addEdge(Tmp(reg), liveTmp);

This could add edges between FP and GP, preventing the algorithm from converging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145039</commentid>
    <comment_count>11</comment_count>
      <attachid>266289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-30 17:05:01 -0800</bug_when>
    <thetext>Comment on attachment 266289
patch for landing

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

&gt;&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:208
&gt;&gt; +                            addEdge(Tmp(reg), liveTmp);
&gt; 
&gt; This could add edges between FP and GP, preventing the algorithm from converging.

Ooops.  So it should be guarded by a check for liveTmp&apos;s type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145051</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-30 17:27:30 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 266289 [details]
&gt; patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266289&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:208
&gt; &gt;&gt; +                            addEdge(Tmp(reg), liveTmp);
&gt; &gt; 
&gt; &gt; This could add edges between FP and GP, preventing the algorithm from converging.
&gt; 
&gt; Ooops.  So it should be guarded by a check for liveTmp&apos;s type?

Yep. What is happening is we would have interference edges that never go away and we keep spilling (select spill).
It would eventually color but the result could be shit.

I&apos;ll have the new Liveness ready soon. That will fix the issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266260</attachid>
            <date>2015-11-30 12:46:28 -0800</date>
            <delta_ts>2015-11-30 15:27:06 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13043</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAkocmV2aXNpb24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTQgQEAgY29uc3QgUmVn
aXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cgogICAgIHJldHVybiB2YWx1ZS0+Y2xvYmJl
cmVkKCk7CiB9CiAKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbi0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKKyAgICBBU1NFUlQodmFsdWUpOwor
CisgICAgcmV0dXJuIHZhbHVlLT5lYXJseUNsb2JiZXJlZCgpOworfQorCiB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywg
dW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCiAgICAgSW5zdCYgaW5zdCwgQXJnOjpSb2xlIHJv
bGUsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShy
ZXZpc2lvbiAxOTI4MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lz
dGVyU2V0Jikgb3ZlcnJpZGU7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVk
UmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CiAKICAgICAvLyBOb3RlIHRo
YXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1
bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCiAgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxl
bWVudCB0aGF0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFs
dWUuaAkocmV2aXNpb24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CiAgICAgfQogCisgICAgdm9pZCBlYXJseUNs
b2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fZWFybHlDbG9i
YmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKICAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJl
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKyAgICBjb25zdCBSZWdpc3RlclNl
dCYgZWFybHlDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Vhcmx5Q2xvYmJlcmVkOyB9CiAK
ICAgICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8U3RhY2ttYXBHZW5lcmF0b3I+IGdlbmVyYXRv
cikKICAgICB7CkBAIC0xOTAsNiArMTk2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWVS
ZXA+IG1fcmVwczsKICAgICBSZWZQdHI8U3RhY2ttYXBHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOwog
ICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fZWFybHlDbG9i
YmVyZWQ7CiAgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291
bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28g
d2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFw
cGVuLgogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiAr
MTQzLDExIEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2wKICAgICBy
ZXR1cm4gbV9jbG9iYmVyZWRSZWdzOwogfQogCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVj
aWFsOjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gbV9lbXB0
eVJlZ3M7Cit9CisKIHZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIG91dC5wcmludCgiQ0NhbGwiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMTkyODA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZXBvcnRVc2Vk
UmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOwogICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKSBvdmVycmlkZTsKICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRS
ZWdzKEluc3QmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC03Niw2ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIG51
bVNwZWNpYWxBcmdzICsgbnVtQ2FsbGVlQXJncyArIG51bVJldHVybkdQQXJncyArIG51bVJldHVy
bkZQQXJnczsKICAgICAKICAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7CisgICAgUmVn
aXN0ZXJTZXQgbV9lbXB0eVJlZ3M7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24g
MTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDEyIEBAIHB1YmxpYzoKICAgICAvLyBSZXBvcnRzIGFu
eSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUg
dGhhdCBmb3IgZWZmaWNpZW5jeSwKICAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdv
cmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhQ2xvYmJlcmVkUmVncygpOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5
Q2xvYmJlcmVkUmVncygpOwogCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFuZCB0aGUg
ZXh0cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIERlZnMg
YW5kIHRoZSBleHRyYSBjbG9iYmVyZWQgcmVnaXN0ZXJzLiBZb3UgbXVzdCBzdXBwbHkgdGhlIG5l
eHQgaW5zdHJ1Y3Rpb24gaWYKKyAgICAvLyB0aGVyZSBpcyBvbmUuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcChB
cmc6OlR5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworICAgIHZvaWQgZm9yRWFjaFRtcFdp
dGhFeHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpOwogCiAgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2
ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCiAgICAgLy8g
dGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYg
aGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDE5MjgwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksMjQgKzg5LDI5IEBAIGlubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG8K
ICAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7
CiB9CiAKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFFYXJseUNsb2JiZXJl
ZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBhcmdzWzBd
LnNwZWNpYWwoKS0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZkFuZEV4dHJh
Q2xvYmJlcmVkVG1wKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5s
aW5lIHZvaWQgSW5zdDo6Zm9yRWFjaFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCogbmV4
dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgZm9yRWFjaFRtcChbJl0gKFRt
cCYgdG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKLSAgICAgICAg
aWYgKGFyZ1R5cGUgPT0gdHlwZSAmJiBBcmc6OmlzRGVmKHJvbGUpKQotICAgICAgICAgICAgZnVu
Y3Rvcih0bXBBcmcpOwotICAgIH0pOwotCi0gICAgaWYgKCFoYXNTcGVjaWFsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWRSZWdpc3RlcnMgPSBl
eHRyYUNsb2JiZXJlZFJlZ3MoKTsKLSAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZm9yRWFjaChbZnVu
Y3RvciwgdHlwZV0gKFJlZyByZWcpIHsKLSAgICAgICAgaWYgKHJlZy5pc0dQUigpID09ICh0eXBl
ID09IEFyZzo6R1ApKSB7Ci0gICAgICAgICAgICBUbXAgcmVnaXN0ZXJUbXAocmVnKTsKLSAgICAg
ICAgICAgIGZ1bmN0b3IocmVnaXN0ZXJUbXApOwotICAgICAgICB9Ci0gICAgfSk7CisgICAgZm9y
RWFjaFRtcCgKKyAgICAgICAgWyZdIChUbXAmIHRtcEFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSBhcmdUeXBlKSB7CisgICAgICAgICAgICBmdW5jdG9yKHRtcEFyZywgcm9sZSwgYXJnVHlw
ZSk7CisgICAgICAgIH0pOworCisgICAgYXV0byByZXBvcnRSZWcgPSBbJl0gKFJlZyByZWcpIHsK
KyAgICAgICAgZnVuY3RvcihUbXAocmVnKSwgQXJnOjpEZWYsIHJlZy5pc0dQUigpID8gQXJnOjpH
UCA6IEFyZzo6RlApOworICAgIH07CisKKyAgICBpZiAoaGFzU3BlY2lhbCgpKQorICAgICAgICBl
eHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CisKKyAgICBpZiAobmV4dElu
c3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkKKyAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFy
bHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOwogfQogCiBpbmxpbmUgdm9pZCBJ
bnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5MjgwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMjAgKzE0NSwyNCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faXNPblNlbGVjdFN0YWNrLmVuc3VyZVNpemUodG1wQXJyYXlTaXplKTsKICAgICB9CiAK
LSAgICB2b2lkIGJ1aWxkKEluc3QmIGluc3QsIGNvbnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2Fs
YyYgbG9jYWxDYWxjKQorICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgSW5zdCogbmV4dEluc3Qs
IGNvbnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsKLSAgICAg
ICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAodHlwZSwgWyZdIChUbXAmIGFy
ZykgewotICAgICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBv
dGhlciBhbmQgd2l0aCBhbGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgotICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG5vdCB1c2UgZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKCkgaGVy
ZSBzaW5jZSBjb2xvcmVkIFRtcHMKLSAgICAgICAgICAgIC8vIGRvIG5vdCBuZWVkIGludGVyZmVy
ZW5jZSBlZGdlcyBpbiBvdXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIG90aGVy
QXJnVHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChvdGhlckFyZ1R5cGUgIT0gdHlwZSkKKyAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICAgICAgICAg
IG5leHRJbnN0LAorICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSBhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVm
KHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0
aCBhbGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgorICAgICAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBub3QgdXNlIGZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcCgpIGhlcmUgc2luY2Ug
Y29sb3JlZCBUbXBzCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNl
IGVkZ2VzIGluIG91ciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBh
cmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFy
Zywgb3RoZXJBcmcpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KTsKIAogICAgICAgICBpZiAoTW92ZUluc3RIZWxwZXI8dHlwZT46Om1heUJlQ29h
bGVzY2FibGUoaW5zdCkpIHsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2Uo
KSBvZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlz
IGxpdmUKQEAgLTE5Niw3ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGFk
ZEVkZ2UoZGVmVG1wLCBsaXZlVG1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBhZGRFZGdlcyhpbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAg
IGFkZEVkZ2VzKGluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKICAgICB9CiAKICAg
ICB2b2lkIGFsbG9jYXRlKCkKQEAgLTI5NiwxNSArMzAwLDIwIEBAIHByaXZhdGU6CiAgICAgICAg
IGJ6ZXJvKG1fZGVncmVlcy5kYXRhKCkgKyBmaXJzdE5vblJlZ0luZGV4LCAodG1wQXJyYXlTaXpl
IC0gZmlyc3ROb25SZWdJbmRleCkgKiBzaXplb2YodW5zaWduZWQpKTsKICAgICB9CiAKLSAgICB2
b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgbGl2ZVRtcCkKKyAg
ICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBIYXNoU2V0
PFRtcD4mIGxpdmVUbXApCiAgICAgewogICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZl
cmUgd2l0aCBldmVydGhpbmcgbGl2ZS4KLSAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFD
bG9iYmVyZWRUbXAodHlwZSwgWyZdIChUbXAmIGFyZykgewotICAgICAgICAgICAgZm9yIChjb25z
dCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAu
aXNHUCgpID09ICh0eXBlID09IEFyZzo6R1ApKQotICAgICAgICAgICAgICAgICAgICBhZGRFZGdl
KGFyZywgbGl2ZVRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICBpbnN0
LmZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKAorICAgICAgICAgICAgbmV4dEluc3Qs
CisgICAgICAgICAgICBbJl0gKGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIGFyZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkgfHwg
YXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1w
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBB
cmc6OkdQKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICB2b2lkIGFk
ZEVkZ2UoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpCkBAIC0xMDMwLDcgKzEwMzksOCBAQCBz
dGF0aWMgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uCiAgICAgICAgICAgICBMaXZl
bmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0t
OykgewogICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
LSAgICAgICAgICAgICAgICBhbGxvY2F0b3IuYnVpbGQoaW5zdCwgbG9jYWxDYWxjKTsKKyAgICAg
ICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGluc3RJbmRleCArIDEgPCBibG9jay0+c2l6ZSgp
ID8gJmJsb2NrLT5hdChpbnN0SW5kZXggKyAxKSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
YWxsb2NhdG9yLmJ1aWxkKGluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMpOwogICAgICAgICAgICAg
ICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTEwNjgsOSArMTA3OCwxMCBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
KENvZGUmIGNvCiAgICAgICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5z
dCA9IGluc3RJbmRleCArIDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5kZXgg
KyAxKSA6IG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBncEFsbG9jYXRvci5idWlsZChpbnN0
LCBsb2NhbENhbGMpOwotICAgICAgICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIGxv
Y2FsQ2FsYyk7CisgICAgICAgICAgICAgICAgZ3BBbGxvY2F0b3IuYnVpbGQoaW5zdCwgbmV4dElu
c3QsIGxvY2FsQ2FsYyk7CisgICAgICAgICAgICAgICAgZnBBbGxvY2F0b3IuYnVpbGQoaW5zdCwg
bmV4dEluc3QsIGxvY2FsQ2FsYyk7CiAKICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDE5MjgwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0
JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CiAKICAgICB2aXJ0dWFs
IGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKyAgICB2
aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0Jikg
PSAwOwogCiAgICAgLy8gQnkgZGVmYXVsdCwgdGhpcyByZXR1cm5zIHRydWUuCiAgICAgdmlydHVh
bCBib29sIGhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lv
biAxOTI4MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEyICs1OCwxMiBAQCB2b2lkIHNwaWxsRXZl
cnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAgICAgICAgICAvLyBHb3R0YSBhY2NvdW50IGZvciBk
ZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gVGhlc2UgbWF5IGhhcHBlbiBiZWNhdXNlIHRo
ZSBpbnB1dAogICAgICAgICAgICAgLy8gY29kZSBpcyBzdWJvcHRpbWFsLgotICAgICAgICAgICAg
YXV0byB1cGRhdGVSZWdpc3RlclNldCA9IFsmcmVnaXN0ZXJTZXRdIChjb25zdCBUbXAmIHRtcCkg
ewotICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmVnaXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
aW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpHUCwgdXBkYXRlUmVnaXN0
ZXJTZXQpOwotICAgICAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAo
QXJnOjpGUCwgdXBkYXRlUmVnaXN0ZXJTZXQpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
V2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICAgICAgICAgICAgICBpbmRleCA8IGJsb2NrLT5z
aXplKCkgPyAmYmxvY2stPmF0KGluZGV4KSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgWyZy
ZWdpc3RlclNldF0gKGNvbnN0IFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpICYmIEFyZzo6aXNEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266287</attachid>
            <date>2015-11-30 15:27:06 -0800</date>
            <delta_ts>2015-11-30 15:32:09 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23866</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDE1LTExLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc3RhY2ttYXBzIHNob3VsZCBzdXBwb3J0IGVhcmx5IGNsb2JiZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY2OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoaWxlIHN0YXJ0aW5nIHdvcmsgb24g
RlRMIGxhenkgc2xvdyBwYXRocywgSSByZWFsaXplZCB0aGF0IHdlIG5lZWRlZCBzb21lIHdheSB0
byBzYXkgdGhhdCByMTEgaXMKKyAgICAgICAgb2ZmIGxpbWl0cy4gTm90IGp1c3QgdGhhdCBpdCdz
IGNsb2JiZXJlZCwgYnV0IHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgZm9yIGFueSBpbnB1dCB2YWx1
ZXMgdG8gYQorICAgICAgICBzdGFja21hcC4KKworICAgICAgICBJbiBMTFZNIHdlIGRvIHRoaXMg
YnkgaGF2aW5nIHRoZSBBbnlSZWdDQyBmb3JiaWQgcjExLgorCisgICAgICAgIEluIEIzLCB3ZSB3
YW50IHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiBJbiB0aGlzIGFuZCBvdGhlciBjYXNlcywgd2hh
dCB3ZSByZWFsbHkgd2FudCBpcyBhbiBlYXJseQorICAgICAgICBjbG9iYmVyIHNldC4gQjMgYWxy
ZWFkeSBzdXBwb3J0ZWQgYSBsYXRlIGNsb2JiZXIgc2V0IGZvciBldmVyeSBzdGFja21hcCB2YWx1
ZS4gTGF0ZSBjbG9iYmVyIG1lYW5zCisgICAgICAgIHRoYXQgdGhlIGFjdCBvZiBwZXJmb3JtaW5n
IHRoZSBvcGVyYXRpb24gd2lsbCBjYXVzZSBnYXJiYWdlIHRvIGJlIHdyaXR0ZW4gaW50byB0aG9z
ZSByZWdpc3RlcnMuCisgICAgICAgIEJ1dCBoZXJlIHdlIHdhbnQ6IGFzc3VtZSB0aGF0IGdhcmJh
Z2UgbWFnaWNhbGx5IGFwcGVhcnMgaW4gdGhvc2UgcmVnaXN0ZXJzIGluIHRoZSBtb21lbnQgYmVm
b3JlCisgICAgICAgIHRoZSBvcGVyYXRpb24gZXhlY3V0ZXMuIEFueSByZWdpc3RlcnMgaW4gdGhh
dCBzZXQgd2lsbCBiZSBvZmYtbGltaXRzIHRvIHRoZSBpbnB1dHMgdG8gdGhlCisgICAgICAgIHN0
YWNrbWFwLiBUaGlzIHNob3VsZCBiZSBncmVhdCBmb3Igb3RoZXIgdGhpbmdzLCBsaWtlIHRoZSB3
YXkgdGhlIHdlIGhhbmRsZSBleGNlcHRpb25zLgorCisgICAgICAgIFRoaXMgYWRkcyB0aGUgZWFy
bHkgY2xvYmJlciBmZWF0dXJlLCBkb2VzIHNvbWUgbWlub3IgSW5zdCByZWZhY3RvcmluZyB0byBt
YWtlIHRoaXMgbGVzcyBzY2FyeSwKKyAgICAgICAgYW5kIGFkZHMgYSB0ZXN0LiBUaGUgdGVzdCBp
cyBzaW1wbGUgYnV0IGl0J3MgdmVyeSBjb21wcmVoZW5zaXZlIC0gZm9yIGV4YW1wbGUgaXQgdGVz
dHMgdGhlCisgICAgICAgIGVhcmx5LWNsb2JiZXItYWZ0ZXItTW92ZSBzcGVjaWFsIGNhc2UuCisK
KyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpT
dGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpT
dGFja21hcFNwZWNpYWw6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAgICAqIGIzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmg6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrbWFwVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwVmFsdWU6OlN0YWNrbWFwVmFsdWUpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBW
YWx1ZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDoK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5z
dDo6ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0
Ojpmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXApOiBEZWxldGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpidWlsZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9y
Ojppbml0aWFsaXplRGVncmVlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphZGRFZGdlcyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjphZGRFZGdlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyk6CisgICAgICAg
ICogYjMvYWlyL0FpclNwZWNpYWwuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRo
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAg
ICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9p
bnRXaXRob3V0T3VwdXRDbG9iYmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2lt
cGxlUGF0Y2hwb2ludFdpdGhPdXB1dENsb2JiZXJzR1BBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aG91dE91cHV0Q2xvYmJlcnNGUEFyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0ZQQXJncyk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludFdpdGhFYXJseUNsb2JiZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRDYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorCiAyMDE1LTExLTMwICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBTbmlwcGVmeSBvcF9kaXYgZm9yIHRo
ZSBiYXNlbGluZSBKSVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MjgwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDE1IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHIKICAgICBTdGFj
a21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVlPigpOwogICAg
IEFTU0VSVCh2YWx1ZSk7CiAKLSAgICByZXR1cm4gdmFsdWUtPmNsb2JiZXJlZCgpOworICAgIHJl
dHVybiB2YWx1ZS0+bGF0ZUNsb2JiZXJlZCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgU3Rh
Y2ttYXBTcGVjaWFsOjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0JiBpbnN0KQoreworICAg
IFN0YWNrbWFwVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPFN0YWNrbWFwVmFsdWU+KCk7
CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIHJldHVybiB2YWx1ZS0+ZWFybHlDbG9iYmVyZWQo
KTsKIH0KIAogdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDE5
MjgwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBv
dmVycmlkZTsKICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6
SW5zdCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJl
cmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKIAogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKICAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAko
cmV2aXNpb24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDggQEAgdm9pZCBTdGFja21hcFZh
bHVlOjpkdW1wQ2hpbGRyZW4oQ29tbWFQcgogdm9pZCBTdGFja21hcFZhbHVlOjpkdW1wTWV0YShD
b21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5w
cmludCgKLSAgICAgICAgY29tbWEsICJnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJh
dG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCi0gICAgICAgICIsIHVz
ZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMpOworICAgICAgICBjb21tYSwgImdlbmVy
YXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBlYXJseUNsb2JiZXJl
ZCA9ICIsIG1fZWFybHlDbG9iYmVyZWQsCisgICAgICAgICIsIGxhdGVDbG9iYmVyZWQgPSAiLCBt
X2xhdGVDbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMpOwog
fQogCiBTdGFja21hcFZhbHVlOjpTdGFja21hcFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAx
OTI4MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDEyICs4MywyNCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBWZWN0
b3I8VmFsdWVSZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9CiAKKyAgICB2b2lk
IGNsb2JiZXJFYXJseShjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9l
YXJseUNsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlckxhdGUo
Y29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fbGF0ZUNsb2JiZXJlZC5t
ZXJnZShzZXQpOworICAgIH0KKwogICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYg
c2V0KQogICAgIHsKLSAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICAgICAgY2xv
YmJlckVhcmx5KHNldCk7CisgICAgICAgIGNsb2JiZXJMYXRlKHNldCk7CiAgICAgfQogCi0gICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVk
OyB9CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGVhcmx5Q2xvYmJlcmVkKCkgY29uc3QgeyByZXR1
cm4gbV9lYXJseUNsb2JiZXJlZDsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBsYXRlQ2xvYmJl
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9sYXRlQ2xvYmJlcmVkOyB9CiAKICAgICB2b2lkIHNldEdl
bmVyYXRvcihSZWZQdHI8U3RhY2ttYXBHZW5lcmF0b3I+IGdlbmVyYXRvcikKICAgICB7CkBAIC0x
ODksNyArMjAxLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVw
czsKICAgICBSZWZQdHI8U3RhY2ttYXBHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOwotICAgIFJlZ2lz
dGVyU2V0IG1fY2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fZWFybHlDbG9iYmVyZWQ7Cisg
ICAgUmVnaXN0ZXJTZXQgbV9sYXRlQ2xvYmJlcmVkOwogICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJl
Z2lzdGVyczsgLy8gU3RhY2ttYXBzIGNvdWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIs
IGJ1dCB0aGF0J3MgdW5saWtlbHksIHNvIHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJz
IHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhhcHBlbi4KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTI4MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwNiw3ICszMjA2LDcgQEAgdm9p
ZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsbwogICAgIFZhbHVlKiBjb25zdDIg
PSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTMpOwogCiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwogICAg
IHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MiwgVmFsdWVSZXA6OlNv
bWVSZWdpc3RlcikpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKQEAgLTMyNDksNyAr
MzI0OSw3IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBj
bG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwogICAgIGNs
b2JiZXJBbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
KTsKICAgICBjbG9iYmVyQWxsLmNsZWFyKEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVyQWxsKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0
ZShjbG9iYmVyQWxsKTsKIAogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGNvbnN0MSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAt
MzI4Niw3ICszMjg2LDcgQEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENs
bwogICAgIFZhbHVlKiBjb25zdDIgPSByb290LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEzLjEpOwogCiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkp
OwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQoRlBSSW5mbzo6YXJndW1lbnRG
UFIwLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0
ZShSZWdpc3RlclNldChGUFJJbmZvOjphcmd1bWVudEZQUjAsIEZQUkluZm86OmFyZ3VtZW50RlBS
MSkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MSwgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKGNvbnN0MiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwogICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKQEAgLTMzMjIsNyArMzMyMiw3IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNo
cG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBjbG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCkpOwogICAgIGNsb2JiZXJBbGwuZXhjbHVkZShSZWdpc3RlclNldDo6
cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKICAgICBjbG9iYmVyQWxsLmNsZWFyKEZQUklu
Zm86OmFyZ3VtZW50RlBSMik7Ci0gICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVyQWxsKTsK
KyAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShjbG9iYmVyQWxsKTsKIAogICAgIHBhdGNocG9p
bnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cikpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGNvbnN0MiwgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcikpOwpAQCAtMzM0OCw2ICszMzQ4LDQyIEBAIHZvaWQgdGVzdFNp
bXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGRv
dWJsZT4ocHJvYywgMS41LCAyLjUpID09IDU5LjYpOwogfQogCit2b2lkIHRlc3RQYXRjaHBvaW50
V2l0aEVhcmx5Q2xvYmJlcigpCit7CisgICAgYXV0byB0ZXN0ID0gW10gKEdQUlJlZyByZWdpc3Rl
clRvQ2xvYmJlciwgYm9vbCBhcmcxSW5BcmdHUFIsIGJvb2wgYXJnMkluQXJnR1BSKSB7CisgICAg
ICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgICAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
VmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIAorICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihw
cm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShhcmcxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzIsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0KHJlZ2lz
dGVyVG9DbG9iYmVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzFdLmdw
cigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gYXJnMUluQXJnR1BSKTsKKyAgICAgICAg
ICAgICAgICBDSEVDSygocGFyYW1zLnJlcHNbMl0uZ3ByKCkgPT0gR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSA9PSBhcmcySW5BcmdHUFIpOworCisgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXBz
WzBdLmdwcigpID09IHBhcmFtcy5yZXBzWzJdLmdwcigpKSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIo
KSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1syXS5ncHIoKSwg
cGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHBhdGNocG9pbnQpOworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
Pihwcm9jLCAxLCAyKSA9PSAzKTsKKyAgICB9OworCisgICAgdGVzdChHUFJJbmZvOjpub25BcmdH
UFIwLCB0cnVlLCB0cnVlKTsKKyAgICB0ZXN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgZmFsc2Us
IHRydWUpOworICAgIHRlc3QoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCB0cnVlLCBmYWxzZSk7Cit9
CisKIHZvaWQgdGVzdFBhdGNocG9pbnRDYWxsQXJnKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsK
QEAgLTU3MTcsNiArNTc1Myw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBS
VU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0dQQXJncygpKTsKICAgICBS
VU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKICAg
ICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKKyAg
ICBSVU4odGVzdFBhdGNocG9pbnRXaXRoRWFybHlDbG9iYmVyKCkpOwogICAgIFJVTih0ZXN0UGF0
Y2hwb2ludENhbGxBcmcoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50Rml4ZWRSZWdpc3Rlcigp
KTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRBbnkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTI4MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTEgQEAgY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxs
U3BlY2lhbDo6ZXh0cmFDbAogICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7CiB9CiAKK2NvbnN0
IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKEluc3Qm
KQoreworICAgIHJldHVybiBtX2VtcHR5UmVnczsKK30KKwogdm9pZCBDQ2FsbFNwZWNpYWw6OmR1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJDQ2FsbCIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5oCShyZXZpc2lvbiAxOTI4MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0
Jikgb3ZlcnJpZGU7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2Fs
bEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTc2LDYgKzc3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgbnVtU3BlY2lhbEFyZ3MgKyBudW1DYWxsZWVBcmdzICsgbnVt
UmV0dXJuR1BBcmdzICsgbnVtUmV0dXJuRlBBcmdzOwogICAgIAogICAgIFJlZ2lzdGVyU2V0IG1f
Y2xvYmJlcmVkUmVnczsKKyAgICBSZWdpc3RlclNldCBtX2VtcHR5UmVnczsKIH07CiAKIH0gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5oCShyZXZpc2lvbiAxOTI4MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEwICsxMjUsMTIgQEAgcHVi
bGljOgogICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBi
eSB0aGlzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LAogICAgIC8vIGV4dHJh
Q2xvYmJlcmVkUmVncygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4K
ICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCk7CiAKLSAgICAvLyBJdGVyYXRl
IG92ZXIgdGhlIERlZnMgYW5kIHRoZSBleHRyYSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgIC8v
IEl0ZXJhdGUgb3ZlciB0aGUgRGVmcyBhbmQgdGhlIGV4dHJhIGNsb2JiZXJlZCByZWdpc3RlcnMu
IFlvdSBtdXN0IHN1cHBseSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpZgorICAgIC8vIHRoZXJlIGlz
IG9uZS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yRWFjaERl
ZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKEFyZzo6VHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7
CisgICAgdm9pZCBmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0SW5z
dCwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CiAKICAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQg
d2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3Jl
IGNvZGVnZW4uIE5vdGUKICAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVn
aXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNp
b24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwyNCArODksMjkgQEAgaW5saW5lIGNvbnN0IFJlZ2lz
dGVyU2V0JiBJbnN0OjpleHRyYUNsbwogICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0
cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKIH0KIAoraW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJ
bnN0OjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpCit7CisgICAgQVNTRVJUKGhhc1NwZWNpYWwo
KSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygqdGhpcyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBJ
bnN0Ojpmb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpUeXBlIHR5cGUsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoVG1wV2l0aEV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
LSAgICBmb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXBBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgYXJnVHlwZSkgewotICAgICAgICBpZiAoYXJnVHlwZSA9PSB0eXBlICYmIEFyZzo6aXNEZWYo
cm9sZSkpCi0gICAgICAgICAgICBmdW5jdG9yKHRtcEFyZyk7Ci0gICAgfSk7Ci0KLSAgICBpZiAo
IWhhc1NwZWNpYWwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgUmVnaXN0ZXJTZXQm
IGNsb2JiZXJlZFJlZ2lzdGVycyA9IGV4dHJhQ2xvYmJlcmVkUmVncygpOwotICAgIGNsb2JiZXJl
ZFJlZ2lzdGVycy5mb3JFYWNoKFtmdW5jdG9yLCB0eXBlXSAoUmVnIHJlZykgewotICAgICAgICBp
ZiAocmVnLmlzR1BSKCkgPT0gKHR5cGUgPT0gQXJnOjpHUCkpIHsKLSAgICAgICAgICAgIFRtcCBy
ZWdpc3RlclRtcChyZWcpOwotICAgICAgICAgICAgZnVuY3RvcihyZWdpc3RlclRtcCk7Ci0gICAg
ICAgIH0KLSAgICB9KTsKKyAgICBmb3JFYWNoVG1wKAorICAgICAgICBbJl0gKFRtcCYgdG1wQXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGZ1bmN0
b3IodG1wQXJnLCByb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgfSk7CisKKyAgICBhdXRvIHJlcG9y
dFJlZyA9IFsmXSAoUmVnIHJlZykgeworICAgICAgICBmdW5jdG9yKFRtcChyZWcpLCBBcmc6OkRl
ZiwgcmVnLmlzR1BSKCkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgfTsKKworICAgIGlmICho
YXNTcGVjaWFsKCkpCisgICAgICAgIGV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVwb3J0
UmVnKTsKKworICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+aGFzU3BlY2lhbCgpKQorICAg
ICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJl
Zyk7CiB9CiAKIGlubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cAkocmV2aXNpb24gMTkyODA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwyMCAr
MTQ1LDI0IEBAIHB1YmxpYzoKICAgICAgICAgbV9pc09uU2VsZWN0U3RhY2suZW5zdXJlU2l6ZSh0
bXBBcnJheVNpemUpOwogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgY29uc3Qg
TGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjJiBsb2NhbENhbGMpCisgICAgdm9pZCBidWlsZChJbnN0
JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjJiBs
b2NhbENhbGMpCiAgICAgewotICAgICAgICBpbnN0LmZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJl
ZFRtcCh0eXBlLCBbJl0gKFRtcCYgYXJnKSB7Ci0gICAgICAgICAgICAvLyBBbGwgdGhlIERlZigp
cyBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIGFsbCB0aGUgZXh0cmEgY2xvYmJl
cmVkIFRtcHMuCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IHVzZSBmb3JFYWNoRGVmQW5k
RXh0cmFDbG9iYmVyZWRUbXAoKSBoZXJlIHNpbmNlIGNvbG9yZWQgVG1wcwotICAgICAgICAgICAg
Ly8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVkZ2VzIGluIG91ciBpbXBsZW1lbnRhdGlvbi4K
LSAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgb3RoZXJBcmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG90
aGVyQXJnVHlwZSAhPSB0eXBlKQorICAgICAgICBpbnN0LmZvckVhY2hUbXBXaXRoRXh0cmFDbG9i
YmVyZWRSZWdzKAorICAgICAgICAgICAgbmV4dEluc3QsCisgICAgICAgICAgICBbJl0gKGNvbnN0
IFRtcCYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkgfHwgYXJnVHlwZSAhPSB0eXBlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihy
b2xlKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIG90aGVyQXJnKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUg
d2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIGFsbCB0aGUgZXh0cmEgY2xvYmJlcmVkIFRtcHMuCisg
ICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCB1c2UgZm9yRWFjaERlZkFuZEV4dHJhQ2xv
YmJlcmVkVG1wKCkgaGVyZSBzaW5jZSBjb2xvcmVkIFRtcHMKKyAgICAgICAgICAgICAgICAvLyBk
byBub3QgbmVlZCBpbnRlcmZlcmVuY2UgZWRnZXMgaW4gb3VyIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwogCiAgICAgICAgIGlmIChNb3ZlSW5z
dEhlbHBlcjx0eXBlPjo6bWF5QmVDb2FsZXNjYWJsZShpbnN0KSkgewogICAgICAgICAgICAgLy8g
V2UgZG8gbm90IHdhbnQgdGhlIFVzZSgpIG9mIHRoaXMgbW92ZSB0byBpbnRlcmZlcmUgd2l0aCB0
aGUgRGVmKCksIGV2ZW4gaWYgaXQgaXMgbGl2ZQpAQCAtMTk1LDggKzE5OSwxOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gdXNlVG1wICYmIGxpdmVUbXAuaXNHUCgp
ID09ICh0eXBlID09IEFyZzo6R1ApKQogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGRlZlRt
cCwgbGl2ZVRtcCk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBuZXh0IGlu
c3RydWN0aW9uIGNvdWxkIGhhdmUgZWFybHkgY2xvYmJlcnMuIFdlIG5lZWQgdG8gY29uc2lkZXIg
dGhvc2Ugbm93LgorICAgICAgICAgICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5oYXNTcGVj
aWFsKCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJl
Z3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbG9jYWxDYWxjLmxp
dmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoVG1wKHJlZyksIGxp
dmVUbXApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhZGRFZGdlcyhp
bnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIGFkZEVkZ2VzKGluc3QsIG5leHRJ
bnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIGFsbG9jYXRlKCkKQEAg
LTI5NiwxNSArMzEwLDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGJ6ZXJvKG1fZGVncmVlcy5kYXRh
KCkgKyBmaXJzdE5vblJlZ0luZGV4LCAodG1wQXJyYXlTaXplIC0gZmlyc3ROb25SZWdJbmRleCkg
KiBzaXplb2YodW5zaWduZWQpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGlu
c3QsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgbGl2ZVRtcCkKKyAgICB2b2lkIGFkZEVkZ2VzKEluc3Qm
IGluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBIYXNoU2V0PFRtcD4mIGxpdmVUbXApCiAgICAg
ewogICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBldmVydGhpbmcgbGl2
ZS4KLSAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAodHlwZSwgWyZd
IChUbXAmIGFyZykgewotICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZl
VG1wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAuaXNHUCgpID09ICh0eXBlID09IEFy
Zzo6R1ApKQotICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywgbGl2ZVRtcCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICBpbnN0LmZvckVhY2hUbXBXaXRoRXh0cmFD
bG9iYmVyZWRSZWdzKAorICAgICAgICAgICAgbmV4dEluc3QsCisgICAgICAgICAgICBbJl0gKGNv
bnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkgfHwgYXJnVHlwZSAhPSB0eXBlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2UoY29uc3QgVG1wJiBhLCBj
b25zdCBUbXAmIGIpCkBAIC0xMDMwLDcgKzEwNDksOCBAQCBzdGF0aWMgdm9pZCBpdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ09uCiAgICAgICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMg
bG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0b3IuYnVpbGQoaW5zdCwgbG9jYWxDYWxjKTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0
SW5zdCA9IGluc3RJbmRleCArIDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5k
ZXggKyAxKSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLmJ1aWxkKGluc3Qs
IG5leHRJbnN0LCBsb2NhbENhbGMpOwogICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGluc3RJbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNjgsOSArMTA4OCwx
MCBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvCiAgICAgICAgICAg
ICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGluc3RJbmRleCArIDEgPCBi
bG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5kZXggKyAxKSA6IG51bGxwdHI7CiAKLSAg
ICAgICAgICAgICAgICBncEFsbG9jYXRvci5idWlsZChpbnN0LCBsb2NhbENhbGMpOwotICAgICAg
ICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1aWxkKGluc3QsIGxvY2FsQ2FsYyk7CisgICAgICAgICAg
ICAgICAgZ3BBbGxvY2F0b3IuYnVpbGQoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYyk7CisgICAg
ICAgICAgICAgICAgZnBBbGxvY2F0b3IuYnVpbGQoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYyk7
CiAKICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5MjgwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2Vu
ZXJhdGlvbkNvbnRleHQmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBl
eHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOwogCiAgICAgLy8gQnkgZGVm
YXVsdCwgdGhpcyByZXR1cm5zIHRydWUuCiAgICAgdmlydHVhbCBib29sIGhhc05vbkFyZ05vbkNv
bnRyb2xFZmZlY3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
aWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTI4MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDEyICs1OCwxMiBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQog
CiAgICAgICAgICAgICAvLyBHb3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJl
Z2lzdGVycy4gVGhlc2UgbWF5IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAogICAgICAgICAgICAg
Ly8gY29kZSBpcyBzdWJvcHRpbWFsLgotICAgICAgICAgICAgYXV0byB1cGRhdGVSZWdpc3RlclNl
dCA9IFsmcmVnaXN0ZXJTZXRdIChjb25zdCBUbXAmIHRtcCkgewotICAgICAgICAgICAgICAgIGlm
ICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0KHRtcC5y
ZWcoKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0
cmFDbG9iYmVyZWRUbXAoQXJnOjpHUCwgdXBkYXRlUmVnaXN0ZXJTZXQpOwotICAgICAgICAgICAg
aW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpGUCwgdXBkYXRlUmVnaXN0
ZXJTZXQpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVn
cygKKyAgICAgICAgICAgICAgICBpbmRleCA8IGJsb2NrLT5zaXplKCkgPyAmYmxvY2stPmF0KGlu
ZGV4KSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgWyZyZWdpc3RlclNldF0gKGNvbnN0IFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSAmJiBBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVnaXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH07CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6
ZSgpOyBpbnN0SW5kZXgtLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkocmV2aXNpb24gMTkyODEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50
YWwgdHJhbnNpdGlvbiBmcm9tIExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwu
IFdlIGRvbid0CiAvLyB5ZXQga25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhp
cyBmbGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQg
dGhpcwogLy8gdG8gMCBiZWZvcmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMQor
I2RlZmluZSBGVExfVVNFU19CMyAwCiAKIHN0cnVjdCBOb2RlOwogCg==
</data>
<flag name="review"
          id="291302"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266289</attachid>
            <date>2015-11-30 15:32:09 -0800</date>
            <delta_ts>2015-11-30 15:32:09 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23479</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE1LTExLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc3RhY2ttYXBzIHNob3VsZCBzdXBwb3J0IGVhcmx5IGNsb2JiZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY2OAorCisgICAgICAgIFJldmll
d2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFdoaWxlIHN0YXJ0aW5nIHdvcmsgb24g
RlRMIGxhenkgc2xvdyBwYXRocywgSSByZWFsaXplZCB0aGF0IHdlIG5lZWRlZCBzb21lIHdheSB0
byBzYXkgdGhhdCByMTEgaXMKKyAgICAgICAgb2ZmIGxpbWl0cy4gTm90IGp1c3QgdGhhdCBpdCdz
IGNsb2JiZXJlZCwgYnV0IHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgZm9yIGFueSBpbnB1dCB2YWx1
ZXMgdG8gYQorICAgICAgICBzdGFja21hcC4KKworICAgICAgICBJbiBMTFZNIHdlIGRvIHRoaXMg
YnkgaGF2aW5nIHRoZSBBbnlSZWdDQyBmb3JiaWQgcjExLgorCisgICAgICAgIEluIEIzLCB3ZSB3
YW50IHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiBJbiB0aGlzIGFuZCBvdGhlciBjYXNlcywgd2hh
dCB3ZSByZWFsbHkgd2FudCBpcyBhbiBlYXJseQorICAgICAgICBjbG9iYmVyIHNldC4gQjMgYWxy
ZWFkeSBzdXBwb3J0ZWQgYSBsYXRlIGNsb2JiZXIgc2V0IGZvciBldmVyeSBzdGFja21hcCB2YWx1
ZS4gTGF0ZSBjbG9iYmVyIG1lYW5zCisgICAgICAgIHRoYXQgdGhlIGFjdCBvZiBwZXJmb3JtaW5n
IHRoZSBvcGVyYXRpb24gd2lsbCBjYXVzZSBnYXJiYWdlIHRvIGJlIHdyaXR0ZW4gaW50byB0aG9z
ZSByZWdpc3RlcnMuCisgICAgICAgIEJ1dCBoZXJlIHdlIHdhbnQ6IGFzc3VtZSB0aGF0IGdhcmJh
Z2UgbWFnaWNhbGx5IGFwcGVhcnMgaW4gdGhvc2UgcmVnaXN0ZXJzIGluIHRoZSBtb21lbnQgYmVm
b3JlCisgICAgICAgIHRoZSBvcGVyYXRpb24gZXhlY3V0ZXMuIEFueSByZWdpc3RlcnMgaW4gdGhh
dCBzZXQgd2lsbCBiZSBvZmYtbGltaXRzIHRvIHRoZSBpbnB1dHMgdG8gdGhlCisgICAgICAgIHN0
YWNrbWFwLiBUaGlzIHNob3VsZCBiZSBncmVhdCBmb3Igb3RoZXIgdGhpbmdzLCBsaWtlIHRoZSB3
YXkgdGhlIHdlIGhhbmRsZSBleGNlcHRpb25zLgorCisgICAgICAgIEZvciB0aGUgc2ltcGxlIHIx
MSBpc3N1ZSwgd2hhdCB3ZSB3YW50IGlzIHRvIGNhbGwgdGhlIFN0YWNrbWFwVmFsdWU6OmNsb2Ji
ZXIoKSBtZXRob2QsIHdoaWNoIG5vdworICAgICAgICBtZWFucyBib3RoIGVhcmx5IGFuZCBsYXRl
IGNsb2JiZXIuIEl0J3MgdGhlIHdlYXBvbiBvZiBjaG9pY2Ugd2hlbmV2ZXIgeW91J3JlIHVuc3Vy
ZS4KKworICAgICAgICBUaGlzIGFkZHMgdGhlIGVhcmx5IGNsb2JiZXIgZmVhdHVyZSwgZG9lcyBz
b21lIG1pbm9yIEluc3QgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGlzIGxlc3Mgc2NhcnksCisgICAg
ICAgIGFuZCBhZGRzIGEgdGVzdC4gVGhlIHRlc3QgaXMgc2ltcGxlIGJ1dCBpdCdzIHZlcnkgY29t
cHJlaGVuc2l2ZSAtIGZvciBleGFtcGxlIGl0IHRlc3RzIHRoZQorICAgICAgICBlYXJseS1jbG9i
YmVyLWFmdGVyLU1vdmUgc3BlY2lhbCBjYXNlLgorCisgICAgICAgICogYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2Ji
ZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpleHRyYUVhcmx5
Q2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmZvckVh
Y2hBcmdJbXBsKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOgorICAgICAgICAq
IGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVl
OjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjpTdGFja21hcFZh
bHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwVmFsdWUuaDoKKyAgICAgICAgKiBiMy9haXIv
QWlyQ0NhbGxTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNp
YWw6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjpkdW1wSW1wbCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5o
OgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcFdpdGhFeHRyYUNsb2Ji
ZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaERlZkFuZEV4dHJhQ2xv
YmJlcmVkVG1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZ0FsbG9jYXRvcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9j
YXRvcjo6YnVpbGQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6aW5pdGlhbGl6ZURlZ3JlZXMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6
YWRkRWRnZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZ0FsbG9jYXRvcjo6YWRkRWRnZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Oml0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6Cisg
ICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aG91dE91cHV0Q2xvYmJlcnNHUEFy
Z3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9i
YmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhv
dXRPdXB1dENsb2JiZXJzRlBBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVQYXRj
aHBvaW50V2l0aE91cHV0Q2xvYmJlcnNGUEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBh
dGNocG9pbnRXaXRoRWFybHlDbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBv
aW50Q2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdD
b21tb24uaDoKKwogMjAxNS0xMS0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgU25pcHBlZnkgb3BfZGl2IGZvciB0aGUgYmFzZWxpbmUgSklULgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lv
biAxOTI4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxNSBAQCBjb25zdCBSZWdpc3RlclNldCYg
U3RhY2ttYXBTcGVjaWFsOjpleHRyCiAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbi0+YXM8U3RhY2ttYXBWYWx1ZT4oKTsKICAgICBBU1NFUlQodmFsdWUpOwogCi0gICAgcmV0
dXJuIHZhbHVlLT5jbG9iYmVyZWQoKTsKKyAgICByZXR1cm4gdmFsdWUtPmxhdGVDbG9iYmVyZWQo
KTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVlPigpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAg
ICByZXR1cm4gdmFsdWUtPmVhcmx5Q2xvYmJlcmVkKCk7CiB9CiAKIHZvaWQgU3RhY2ttYXBTcGVj
aWFsOjpmb3JFYWNoQXJnSW1wbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAxOTI4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFp
cjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CiAgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBjb25z
dCBSZWdpc3RlclNldCYgZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJp
ZGU7CiAKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgp
IG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCiAgICAgLy8g
c3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MjgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw4ICs3OSw4IEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6ZHVtcENoaWxkcmVuKENvbW1hUHIK
IHZvaWQgU3RhY2ttYXBWYWx1ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoCi0gICAgICAgIGNvbW1hLCAiZ2Vu
ZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9
ICIsIG1fY2xvYmJlcmVkLAotICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgY29tbWEsICJnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2Vu
ZXJhdG9yLmdldCgpKSwgIiwgZWFybHlDbG9iYmVyZWQgPSAiLCBtX2Vhcmx5Q2xvYmJlcmVkLAor
ICAgICAgICAiLCBsYXRlQ2xvYmJlcmVkID0gIiwgbV9sYXRlQ2xvYmJlcmVkLCAiLCB1c2VkUmVn
aXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzKTsKIH0KIAogU3RhY2ttYXBWYWx1ZTo6U3RhY2tt
YXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTkyODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMs
MjQgQEAgcHVibGljOgogCiAgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwczsgfQogCisgICAgdm9pZCBjbG9iYmVyRWFybHkoY29uc3QgUmVnaXN0
ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fZWFybHlDbG9iYmVyZWQubWVyZ2Uoc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXJMYXRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisg
ICAgeworICAgICAgICBtX2xhdGVDbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKICAgICB2
b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKICAgICB7Ci0gICAgICAgIG1fY2xv
YmJlcmVkLm1lcmdlKHNldCk7CisgICAgICAgIGNsb2JiZXJFYXJseShzZXQpOworICAgICAgICBj
bG9iYmVyTGF0ZShzZXQpOwogICAgIH0KIAotICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVy
ZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBlYXJseUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZWFybHlDbG9iYmVyZWQ7IH0KKyAg
ICBjb25zdCBSZWdpc3RlclNldCYgbGF0ZUNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF0
ZUNsb2JiZXJlZDsgfQogCiAgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPFN0YWNrbWFwR2Vu
ZXJhdG9yPiBnZW5lcmF0b3IpCiAgICAgewpAQCAtMTg5LDcgKzIwMSw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CiAgICAgUmVmUHRyPFN0YWNrbWFwR2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcjsKLSAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBS
ZWdpc3RlclNldCBtX2Vhcmx5Q2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fbGF0ZUNsb2Ji
ZXJlZDsKICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3Vs
ZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3
ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBw
ZW4uCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24g
MTkyODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyMDYsNyArMzIwNiw3IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRo
b3V0T3VwdXRDbG8KICAgICBWYWx1ZSogY29uc3QyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDEzKTsKIAogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdp
bigpKTsKLSAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCkBAIC0zMjQ5LDcgKzMyNDksNyBAQCB2b2lkIHRlc3RTaW1wbGVQ
YXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlCiAgICAgY2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpKTsKICAgICBjbG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CiAgICAgY2xvYmJlckFsbC5jbGVhcihH
UFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlckFs
bCk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoY2xvYmJlckFsbCk7CiAKICAgICBwYXRj
aHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKQEAgLTMyODYsNyArMzI4Niw3IEBAIHZvaWQgdGVz
dFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG8KICAgICBWYWx1ZSogY29uc3QyID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMy4xKTsKIAog
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdpbigpKTsKLSAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0KEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5mbzo6YXJndW1lbnRGUFIx
KSk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQoRlBSSW5mbzo6YXJn
dW1lbnRGUFIwLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpKTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCkBAIC0zMzIyLDcg
KzMzMjIsNyBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlCiAgICAg
Y2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKICAgICBj
bG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMo
KSk7CiAgICAgY2xvYmJlckFsbC5jbGVhcihGUFJJbmZvOjphcmd1bWVudEZQUjIpOwotICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlckFsbCk7CisgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxh
dGUoY2xvYmJlckFsbCk7CiAKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1
ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKQEAg
LTMzNDgsNiArMzM0OCw0MiBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xv
YmJlCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxkb3VibGU+KHByb2MsIDEuNSwgMi41KSA9PSA1
OS42KTsKIH0KIAordm9pZCB0ZXN0UGF0Y2hwb2ludFdpdGhFYXJseUNsb2JiZXIoKQoreworICAg
IGF1dG8gdGVzdCA9IFtdIChHUFJSZWcgcmVnaXN0ZXJUb0Nsb2JiZXIsIGJvb2wgYXJnMUluQXJn
R1BSLCBib29sIGFyZzJJbkFyZ0dQUikgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgVmFsdWUqIGFy
ZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcm9v
dC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgSW50MzIsIE9yaWdpbigpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXJFYXJseShSZWdpc3RlclNldChyZWdpc3RlclRvQ2xvYmJlcikpOworICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIENIRUNLKChwYXJhbXMucmVwc1sxXS5ncHIoKSA9PSBHUFJJbmZvOjphcmd1bWVudEdQ
UjApID09IGFyZzFJbkFyZ0dQUik7CisgICAgICAgICAgICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBz
WzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucmVwc1swXS5ncHIoKSA9PSBwYXJhbXMucmVwc1sy
XS5ncHIoKSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShwYXJhbXMucmVwc1syXS5n
cHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
MzIocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShwYXJhbXMucmVw
c1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBq
aXQuYWRkMzIocGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKwor
ICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgMSwgMikgPT0gMyk7CisgICAg
fTsKKworICAgIHRlc3QoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdHJ1ZSwgdHJ1ZSk7CisgICAgdGVz
dChHUFJJbmZvOjphcmd1bWVudEdQUjAsIGZhbHNlLCB0cnVlKTsKKyAgICB0ZXN0KEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgdHJ1ZSwgZmFsc2UpOworfQorCiB2b2lkIHRlc3RQYXRjaHBvaW50Q2Fs
bEFyZygpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC01NzE3LDYgKzU3NTMsNyBAQCB2b2lk
IHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0
aE91cHV0Q2xvYmJlcnNHUEFyZ3MoKSk7CiAgICAgUlVOKHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0
aG91dE91cHV0Q2xvYmJlcnNGUEFyZ3MoKSk7CiAgICAgUlVOKHRlc3RTaW1wbGVQYXRjaHBvaW50
V2l0aE91cHV0Q2xvYmJlcnNGUEFyZ3MoKSk7CisgICAgUlVOKHRlc3RQYXRjaHBvaW50V2l0aEVh
cmx5Q2xvYmJlcigpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRDYWxsQXJnKCkpOwogICAgIFJV
Tih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50
QW55KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkyODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQz
LDExIEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2wKICAgICByZXR1
cm4gbV9jbG9iYmVyZWRSZWdzOwogfQogCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFs
OjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gbV9lbXB0eVJl
Z3M7Cit9CisKIHZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIG91dC5wcmludCgiQ0NhbGwiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMTkyODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNiArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZXBvcnRVc2VkUmVn
aXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOwogICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRl
eHQmKSBvdmVycmlkZTsKICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdz
KEluc3QmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFFYXJseUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC03Niw2ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIG51bVNw
ZWNpYWxBcmdzICsgbnVtQ2FsbGVlQXJncyArIG51bVJldHVybkdQQXJncyArIG51bVJldHVybkZQ
QXJnczsKICAgICAKICAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7CisgICAgUmVnaXN0
ZXJTZXQgbV9lbXB0eVJlZ3M7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTky
ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSwxMCArMTI1LDEyIEBAIHB1YmxpYzoKICAgICAvLyBSZXBvcnRzIGFueSBh
ZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhh
dCBmb3IgZWZmaWNpZW5jeSwKICAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtz
IGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4
dHJhQ2xvYmJlcmVkUmVncygpOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xv
YmJlcmVkUmVncygpOwogCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFuZCB0aGUgZXh0
cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIERlZnMgYW5k
IHRoZSBleHRyYSBjbG9iYmVyZWQgcmVnaXN0ZXJzLiBZb3UgbXVzdCBzdXBwbHkgdGhlIG5leHQg
aW5zdHJ1Y3Rpb24gaWYKKyAgICAvLyB0aGVyZSBpcyBvbmUuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcChBcmc6
OlR5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworICAgIHZvaWQgZm9yRWFjaFRtcFdpdGhF
eHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
OwogCiAgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4g
VGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCiAgICAgLy8gdGhh
dCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFz
U3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDE5MjgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODks
MjQgKzg5LDI5IEBAIGlubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG8KICAg
ICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7CiB9
CiAKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFFYXJseUNsb2JiZXJlZFJl
Z3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBhcmdzWzBdLnNw
ZWNpYWwoKS0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZkFuZEV4dHJhQ2xv
YmJlcmVkVG1wKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5l
IHZvaWQgSW5zdDo6Zm9yRWFjaFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCogbmV4dElu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgZm9yRWFjaFRtcChbJl0gKFRtcCYg
dG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKLSAgICAgICAgaWYg
KGFyZ1R5cGUgPT0gdHlwZSAmJiBBcmc6OmlzRGVmKHJvbGUpKQotICAgICAgICAgICAgZnVuY3Rv
cih0bXBBcmcpOwotICAgIH0pOwotCi0gICAgaWYgKCFoYXNTcGVjaWFsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWRSZWdpc3RlcnMgPSBleHRy
YUNsb2JiZXJlZFJlZ3MoKTsKLSAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZm9yRWFjaChbZnVuY3Rv
ciwgdHlwZV0gKFJlZyByZWcpIHsKLSAgICAgICAgaWYgKHJlZy5pc0dQUigpID09ICh0eXBlID09
IEFyZzo6R1ApKSB7Ci0gICAgICAgICAgICBUbXAgcmVnaXN0ZXJUbXAocmVnKTsKLSAgICAgICAg
ICAgIGZ1bmN0b3IocmVnaXN0ZXJUbXApOwotICAgICAgICB9Ci0gICAgfSk7CisgICAgZm9yRWFj
aFRtcCgKKyAgICAgICAgWyZdIChUbXAmIHRtcEFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSBhcmdUeXBlKSB7CisgICAgICAgICAgICBmdW5jdG9yKHRtcEFyZywgcm9sZSwgYXJnVHlwZSk7
CisgICAgICAgIH0pOworCisgICAgYXV0byByZXBvcnRSZWcgPSBbJl0gKFJlZyByZWcpIHsKKyAg
ICAgICAgZnVuY3RvcihUbXAocmVnKSwgQXJnOjpEZWYsIHJlZy5pc0dQUigpID8gQXJnOjpHUCA6
IEFyZzo6RlApOworICAgIH07CisKKyAgICBpZiAoaGFzU3BlY2lhbCgpKQorICAgICAgICBleHRy
YUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CisKKyAgICBpZiAobmV4dEluc3Qg
JiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkKKyAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlD
bG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOwogfQogCiBpbmxpbmUgdm9pZCBJbnN0
OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5MjgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMjAgKzE0NSwyNCBAQCBwdWJsaWM6CiAgICAgICAg
IG1faXNPblNlbGVjdFN0YWNrLmVuc3VyZVNpemUodG1wQXJyYXlTaXplKTsKICAgICB9CiAKLSAg
ICB2b2lkIGJ1aWxkKEluc3QmIGluc3QsIGNvbnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyYg
bG9jYWxDYWxjKQorICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgSW5zdCogbmV4dEluc3QsIGNv
bnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsKLSAgICAgICAg
aW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAodHlwZSwgWyZdIChUbXAmIGFyZykg
ewotICAgICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhl
ciBhbmQgd2l0aCBhbGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgotICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIG5vdCB1c2UgZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKCkgaGVyZSBz
aW5jZSBjb2xvcmVkIFRtcHMKLSAgICAgICAgICAgIC8vIGRvIG5vdCBuZWVkIGludGVyZmVyZW5j
ZSBlZGdlcyBpbiBvdXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIG90aGVyQXJn
VHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChvdGhlckFyZ1R5cGUgIT0gdHlwZSkKKyAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICAgICAgICAgIG5l
eHRJbnN0LAorICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSBhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJv
bGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAg
IGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCBh
bGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgorICAgICAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgdXNlIGZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcCgpIGhlcmUgc2luY2UgY29s
b3JlZCBUbXBzCisgICAgICAgICAgICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVk
Z2VzIGluIG91ciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBhcmdU
eXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
b3RoZXJBcmcpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKIAogICAgICAgICBpZiAoTW92ZUluc3RIZWxwZXI8dHlwZT46Om1heUJlQ29hbGVz
Y2FibGUoaW5zdCkpIHsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBv
ZiB0aGlzIG1vdmUgdG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxp
dmUKQEAgLTE5NSw4ICsxOTksMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChsaXZl
VG1wICE9IHVzZVRtcCAmJiBsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKICAg
ICAgICAgICAgICAgICAgICAgYWRkRWRnZShkZWZUbXAsIGxpdmVUbXApOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVhcmx5
IGNsb2JiZXJzLiBXZSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIG5vdy4KKyAgICAgICAgICAgIGlm
IChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+aGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAgICAg
bmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFRtcCYgbGl2ZVRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRFZGdlKFRtcChyZWcpLCBsaXZlVG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgYWRkRWRnZXMoaW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7Cisg
ICAgICAgICAgICBhZGRFZGdlcyhpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBhbGxvY2F0ZSgpCkBAIC0yOTYsMTUgKzMxMCwyMCBAQCBwcml2YXRl
OgogICAgICAgICBiemVybyhtX2RlZ3JlZXMuZGF0YSgpICsgZmlyc3ROb25SZWdJbmRleCwgKHRt
cEFycmF5U2l6ZSAtIGZpcnN0Tm9uUmVnSW5kZXgpICogc2l6ZW9mKHVuc2lnbmVkKSk7CiAgICAg
fQogCi0gICAgdm9pZCBhZGRFZGdlcyhJbnN0JiBpbnN0LCBjb25zdCBIYXNoU2V0PFRtcD4mIGxp
dmVUbXApCisgICAgdm9pZCBhZGRFZGdlcyhJbnN0JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29u
c3QgSGFzaFNldDxUbXA+JiBsaXZlVG1wKQogICAgIHsKICAgICAgICAgLy8gQWxsIHRoZSBEZWYo
KXMgaW50ZXJmZXJlIHdpdGggZXZlcnRoaW5nIGxpdmUuCi0gICAgICAgIGluc3QuZm9yRWFjaERl
ZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKHR5cGUsIFsmXSAoVG1wJiBhcmcpIHsKLSAgICAgICAgICAg
IGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcCkgewotICAgICAgICAgICAgICAgIGlm
IChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKLSAgICAgICAgICAgICAgICAg
ICAgYWRkRWRnZShhcmcsIGxpdmVUbXApOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICAgICAgICAg
IG5leHRJbnN0LAorICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSBhcmdUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVm
KHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1w
IDogbGl2ZVRtcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZVRtcC5pc0dQKCkgPT0g
KHR5cGUgPT0gQXJnOjpHUCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CiAgICAgfQogCiAg
ICAgdm9pZCBhZGRFZGdlKGNvbnN0IFRtcCYgYSwgY29uc3QgVG1wJiBiKQpAQCAtMTAzMCw3ICsx
MDQ5LDggQEAgc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPbgogICAgICAg
ICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBp
bnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLmJ1aWxkKGluc3QsIGxvY2FsQ2Fs
Yyk7CisgICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBpbnN0SW5kZXggKyAxIDwgYmxv
Y2stPnNpemUoKSA/ICZibG9jay0+YXQoaW5zdEluZGV4ICsgMSkgOiBudWxscHRyOworICAgICAg
ICAgICAgICAgIGFsbG9jYXRvci5idWlsZChpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsKICAg
ICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xMDY4LDkgKzEwODgsMTAgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyhDb2RlJiBjbwogICAgICAgICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxj
IGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgSW5z
dCogbmV4dEluc3QgPSBpbnN0SW5kZXggKyAxIDwgYmxvY2stPnNpemUoKSA/ICZibG9jay0+YXQo
aW5zdEluZGV4ICsgMSkgOiBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgZ3BBbGxvY2F0b3Iu
YnVpbGQoaW5zdCwgbG9jYWxDYWxjKTsKLSAgICAgICAgICAgICAgICBmcEFsbG9jYXRvci5idWls
ZChpbnN0LCBsb2NhbENhbGMpOworICAgICAgICAgICAgICAgIGdwQWxsb2NhdG9yLmJ1aWxkKGlu
c3QsIG5leHRJbnN0LCBsb2NhbENhbGMpOworICAgICAgICAgICAgICAgIGZwQWxsb2NhdG9yLmJ1
aWxkKGluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMpOwogCiAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAxOTI4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2Vu
ZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOwogCiAg
ICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9
IDA7CisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFFYXJseUNsb2JiZXJlZFJl
Z3MoSW5zdCYpID0gMDsKIAogICAgIC8vIEJ5IGRlZmF1bHQsIHRoaXMgcmV0dXJucyB0cnVlLgog
ICAgIHZpcnR1YWwgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMTkyODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsMTIgQEAgdm9p
ZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgLy8gR290dGEgYWNj
b3VudCBmb3IgZGVhZCBhc3NpZ25tZW50cyB0byByZWdpc3RlcnMuIFRoZXNlIG1heSBoYXBwZW4g
YmVjYXVzZSB0aGUgaW5wdXQKICAgICAgICAgICAgIC8vIGNvZGUgaXMgc3Vib3B0aW1hbC4KLSAg
ICAgICAgICAgIGF1dG8gdXBkYXRlUmVnaXN0ZXJTZXQgPSBbJnJlZ2lzdGVyU2V0XSAoY29uc3Qg
VG1wJiB0bXApIHsKLSAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIGluc3QuZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKEFyZzo6R1AsIHVw
ZGF0ZVJlZ2lzdGVyU2V0KTsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaERlZkFuZEV4dHJhQ2xv
YmJlcmVkVG1wKEFyZzo6RlAsIHVwZGF0ZVJlZ2lzdGVyU2V0KTsKKyAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCisgICAgICAgICAgICAgICAgaW5kZXgg
PCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbmRleCkgOiBudWxscHRyLAorICAgICAgICAg
ICAgICAgIFsmcmVnaXN0ZXJTZXRdIChjb25zdCBUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkgJiYgQXJnOjpp
c0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0bXAu
cmVnKCkpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9OwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>