<?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>130914</bug_id>
          
          <creation_ts>2014-03-28 15:58:13 -0700</creation_ts>
          <short_desc>Implementing caching transition puts that need to reallocate with indexing storage</short_desc>
          <delta_ts>2016-04-07 19:11:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>156352</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>995477</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-28 15:58:13 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089742</commentid>
    <comment_count>1</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-04-28 14:32:17 -0700</bug_when>
    <thetext>Seeing many put_by_id caching failures on Speedometer due to this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181767</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 11:39:33 -0700</bug_when>
    <thetext>OK, this is happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181784</commentid>
    <comment_count>3</comment_count>
      <attachid>275912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 12:13:45 -0700</bug_when>
    <thetext>Created attachment 275912
work in progress

Of course it doesn&apos;t even compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181815</commentid>
    <comment_count>4</comment_count>
      <attachid>275921</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 13:09:13 -0700</bug_when>
    <thetext>Created attachment 275921
starting to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181863</commentid>
    <comment_count>5</comment_count>
      <attachid>275931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 14:09:24 -0700</bug_when>
    <thetext>Created attachment 275931
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181870</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 14:11:39 -0700</bug_when>
    <thetext>Attachment 275931 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:179:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:186:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:989:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 9 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>1181914</commentid>
    <comment_count>7</comment_count>
      <attachid>275931</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-07 15:10:07 -0700</bug_when>
    <thetext>Comment on attachment 275931
the patch

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

r=me with comments

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:85
&gt; +        m_liveRegistersForCall.merge(extra);

I think this should come before the above exclude because if the extra is part of a callee save, we shouldn&apos;t save it.
And it probably shouldn&apos;t have any registers in common with RegisterSet::stackRegisters() or RegisterSet::reservedHardwareRegisters()

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1108
&gt; +                extraRegistersToPreserve.set(baseGPR);
&gt; +                extraRegistersToPreserve.set(valueRegs);

These will be locked registers in the scratch register allocator.
I wonder if its a bug that ScratchRegisterAllocator doesn&apos;t consider
locked registers as part of its used register set. Maybe it should?
What are your thoughts?

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1147
&gt; +                    jit.emitExceptionCheck(CCallHelpers::InvertedExceptionCheck);

Style: This can be one line.

Not something to do in this patch, but I wish we had better names for exception checks. InvetedExceptionCheck means nothing to me.
I&apos;d like &quot;JumpIfException&quot; and &quot;JumpIfNotException&quot; or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181921</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 15:15:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 275931 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275931&amp;action=review
&gt; 
&gt; r=me with comments
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:85
&gt; &gt; +        m_liveRegistersForCall.merge(extra);
&gt; 
&gt; I think this should come before the above exclude because if the extra is
&gt; part of a callee save, we shouldn&apos;t save it.
&gt; And it probably shouldn&apos;t have any registers in common with
&gt; RegisterSet::stackRegisters() or RegisterSet::reservedHardwareRegisters()

You&apos;re right, I fixed it.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1108
&gt; &gt; +                extraRegistersToPreserve.set(baseGPR);
&gt; &gt; +                extraRegistersToPreserve.set(valueRegs);
&gt; 
&gt; These will be locked registers in the scratch register allocator.
&gt; I wonder if its a bug that ScratchRegisterAllocator doesn&apos;t consider
&gt; locked registers as part of its used register set. Maybe it should?
&gt; What are your thoughts?

I don&apos;t think it&apos;s a bug. The other user of the call preservation stuff will have consumed its inputs before it makes its call. So, those inputs (just baseGPR for custom getter, or baseGPR and valueRegs for custom setter) should only be saved if they are live *after* the call.

This is quite different, since the call is happening early. We haven&apos;t used the baseGPR and valueRegs yet. We will still use them after the call.

I think that the better default is the one we have now, because it&apos;s more customizable.  Otherwise, the custom getter/setter stuff would have to say that baseGPR and valueRegs are excluded. Except that this would have a strange meaning because we would be saying that they are excluded from the set that was added when we added locked registers.  For that to work right, the custom getter/setter code would have to go to great lengths to list *all* of the registers that were locked, including scratchGPR. It would actually have to know exactly what the locking discipline was in the outermost scratch register allocator.  I think that would be weirder than what I do in this patch.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1147
&gt; &gt; +                    jit.emitExceptionCheck(CCallHelpers::InvertedExceptionCheck);
&gt; 
&gt; Style: This can be one line.
&gt; 
&gt; Not something to do in this patch, but I wish we had better names for
&gt; exception checks. InvetedExceptionCheck means nothing to me.
&gt; I&apos;d like &quot;JumpIfException&quot; and &quot;JumpIfNotException&quot; or something similar.

That would make sense.

The &quot;inverted&quot; thing made sense at the time because almost all exception checks fall through when there is no exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181922</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-04-07 15:17:40 -0700</bug_when>
    <thetext>What are the perf number from this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181923</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-07 15:18:41 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; What are the perf number from this?

Up to 5x faster on microbenchmark.  Still running the larger benchmarks.  This is likely to only be profitable for in-browser tests, and I haven&apos;t run any of those yet.  This is neutral on small JS benchmarks like Octane and such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182012</commentid>
    <comment_count>11</comment_count>
      <attachid>275931</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 19:11:50 -0700</bug_when>
    <thetext>Comment on attachment 275931
the patch

Clearing flags on attachment: 275931

Committed r199209: &lt;http://trac.webkit.org/changeset/199209&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182013</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 19:11:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275912</attachid>
            <date>2016-04-07 12:13:45 -0700</date>
            <delta_ts>2016-04-07 13:09:13 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17239</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTk5MTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsOCBAQCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2CiAKIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bCgpCiB7CisgICAgY2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5k
bGluZygpOworICAgIAogICAgIHVuc2lnbmVkIGV4dHJhU3RhY2tQYWRkaW5nID0gMDsKICAgICB1
bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwo
KmppdCwgbGl2ZVJlZ2lzdGVyc0ZvckNhbGwoKSwgZXh0cmFTdGFja1BhZGRpbmcpOwogICAgIGlm
IChtX251bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiAhPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCkBAIC0xNTUsNiArMTU3LDM4IEBAIGNv
bnN0IEhhbmRsZXJJbmZvJiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKIAogQ2FsbFNpdGVJbmRleCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6Om9yaWdpbmFsQ2FsbFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4OyB9CiAKK3ZvaWQgQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCkKK3sKKyAgICBzdGF0ZS5yZXN0b3Jl
U2NyYXRjaCgpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIo
KTsKKyAgICBpZiAoc3RhdGUubmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbigpKSB7
CisgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhhdCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwgZXhjZXB0
aW9uIGhhbmRsaW5nCisgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0aGUg
T1NSIGV4aXQgdG8gYmUgYXJyaXZlZAorICAgICAgICAvLyBhdCBmcm9tIGdlbmVyaWNVbndpbmQu
IFRoZXJlZm9yZSB3ZSBtdXN0IG1vZGVsIHdoYXQgZ2VuZXJpY1Vud2luZAorICAgICAgICAvLyBk
b2VzIGhlcmUuIEkuZSwgc2V0IGNhbGxGcmFtZUZvckNhdGNoIGFuZCBjb3B5IGNhbGxlZSBzYXZl
cy4KKworICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZt
LmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAganVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQuanVtcCgpOworCisgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdG8gaW5zZXJ0IGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGluIHRo
ZSB0YWJsZQorICAgICAgICAvLyBiZWNhdXNlIHdlJ3JlIGRvaW5nIGEgbWFudWFsIGV4Y2VwdGlv
biBjaGVjayBoZXJlLiBpLmUsIHdlJ2xsCisgICAgICAgIC8vIG5ldmVyIGFycml2ZSBoZXJlIGZy
b20gZ2VuZXJpY1Vud2luZCgpLgorICAgICAgICBIYW5kbGVySW5mbyBvcmlnaW5hbEhhbmRsZXIg
PSBzdGF0ZS5vcmlnaW5hbEV4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb09TUkV4aXRFeGNlcHRpb25IYW5kbGVyLCBv
cmlnaW5hbEhhbmRsZXIubmF0aXZlQ29kZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KCZ2bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAg
aml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgIH0KK30KKwogQWNjZXNzQ2FzZTo6
QWNjZXNzQ2FzZSgpCiB7CiB9CkBAIC0yMjMsMTMgKzI1Nyw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywg
YW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCi0gICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKLSAgICBpZiAob2xkU3Ry
dWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nh
c2UoKSk7CiAKICAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247CkBAIC03NTcsNyArNzg0
LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgICAg
IC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsOwogCiAgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJz
L3NldHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxp
bmtGdW5jdGlvbkNoZWNrOwpAQCAtNzY5LDExICs3OTUsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5l
Y2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAg
Ly8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAgICAgICAgc3RhdGUuY2FsY3VsYXRl
TGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpOwogICAgICAgICBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwogCi0gICAgICAgIC8vIE5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1
dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBm
cm9tLgogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2lu
YWwoKS5iaXRzKCkpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpAQCAtODk2LDcg
KzkxOSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGwoaXNHZXR0ZXIoKSk7CiAKLSAgICAgICAgICAgIHN0YXRlLmNhbGxi
YWNrcy5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAg
ICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxs
KSwKQEAgLTk0MCw2ICs5NjMsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAg
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21B
Y2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICB9KTsKKwogICAgICAgICAgICAgaWYg
KG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JH
ZXR0ZXIpCiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAg
ICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpAQCAtOTQ3LDQzICs5
NzUsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KICAgICAgICAgICAgICAgICBq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7CiAKLSAgICAgICAgICAgIGJvb2wgZGlkU2V0TG9va3VwRXhjZXB0aW9uSGFuZGxlciA9IGZh
bHNlOwogICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsV2l0aFRocm93bkV4Y2VwdGlvbigpOwotICAgICAgICAgICAgc3RhdGUucmVzdG9yZVNjcmF0
Y2goKTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZm
ZXIoKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMg
dGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBoYW5kbGluZwotICAgICAgICAgICAgICAgIC8vIGNhbGwg
c2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZAotICAgICAg
ICAgICAgICAgIC8vIGF0IGZyb20gZ2VuZXJpY1Vud2luZC4gVGhlcmVmb3JlIHdlIG11c3QgbW9k
ZWwgd2hhdCBnZW5lcmljVW53aW5kCi0gICAgICAgICAgICAgICAgLy8gZG9lcyBoZXJlLiBJLmUs
IHNldCBjYWxsRnJhbWVGb3JDYXRjaCBhbmQgY29weSBjYWxsZWUgc2F2ZXMuCi0KLSAgICAgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciA9IGppdC5qdW1wKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc2VydCBhIG5ldyBleGNlcHRpb24gaGFu
ZGxlciBpbiB0aGUgdGFibGUKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlJ3JlIGRvaW5n
IGEgbWFudWFsIGV4Y2VwdGlvbiBjaGVjayBoZXJlLiBpLmUsIHdlJ2xsCi0gICAgICAgICAgICAg
ICAgLy8gbmV2ZXIgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAg
ICAgICAgSGFuZGxlckluZm8gb3JpZ2luYWxIYW5kbGVyID0gc3RhdGUub3JpZ2luYWxFeGNlcHRp
b25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKLSAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhh
bmRsZXIsIG9yaWdpbmFsSGFuZGxlci5uYXRpdmVDb2RlKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0g
aml0LmNhbGwoKTsKLSAgICAgICAgICAgICAgICBkaWRTZXRMb29rdXBFeGNlcHRpb25IYW5kbGVy
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFu
ZGxlcigpOwogICAgICAgICAKICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAg
ICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaXNH
ZXR0ZXIoKSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRh
LT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFNl
dExvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpOwotICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyMCw3ICsxMDE2LDYgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgIGNhc2UgVHJhbnNpdGlvbjogewogICAg
ICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVs
bC4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0g
NiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkpOwogCiAgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1
cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQpAQCAtMTA1OCw0NiArMTA1Myw5MyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgaWYgKGFsbG9jYXRpbmcpIHsKICAgICAgICAgICAg
IHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9j
YXRvciA9ICZ2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKLQotICAgICAgICAgICAgaWYgKCFy
ZWFsbG9jYXRpbmcpIHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2Nh
dG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcpOwotICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNv
bHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAg
ICAgICAgICAgICAgIHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5h
bCgpLmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRp
b25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVy
dHlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPQorICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICAg
ICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgICAgICAgICAgICAgQ29waWVk
QWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgeworICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJz
b2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UikpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAgICAgICAgICAgIGppdC5uZWdQdHIo
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2Us
IHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQ
UjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBv
ZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6
ZW9mKHZvaWQqKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5icmFuY2hTdWJQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BS
KSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAgICBqaXQu
bmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihK
U1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNj
cmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9
IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE0NjQsNyArMTUwNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0Fj
Y2VzczoKIAogICAgICAgICBIYW5kbGVySW5mbyBvbGRIYW5kbGVyID0gc3RhdGUub3JpZ2luYWxF
eGNlcHRpb25IYW5kbGVyKCk7CiAgICAgICAgIENhbGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFu
ZGxpbmdDYWxsU2l0ZSA9IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygp
OwotICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCiAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9s
ZEhhbmRsZXIubmF0aXZlQ29kZSk7CiAKQEAgLTE0OTgsOSArMTU0MCw2IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAgICAgZmFpbHVyZSwKICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgIAotICAgIGZvciAoYXV0byBjYWxsYmFjayA6IHN0
YXRlLmNhbGxiYWNrcykKLSAgICAgICAgY2FsbGJhY2sobGlua0J1ZmZlcik7Ci0KICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVP
cmlnaW4sICI6IEdlbmVyYXRpbmcgcG9seW1vcnBoaWMgYWNjZXNzIHN0dWIgZm9yICIsIGxpc3RE
dW1wKGNhc2VzKSwgIlxuIik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTkxNjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQxLDcgKzQ0MSw2IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIEdQUlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IEludmFsaWRHUFJSZWcgfTsKLSAgICBW
ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXImKT4+IGNhbGxiYWNrczsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwpAQCAtNDU1LDcgKzQ1NCw3IEBAIHN0cnVjdCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUgewogCiAgICAgdm9pZCBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgpOwogCi0gICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoYm9vbCBpc0dldHRlcik7CisgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21T
dGFja0ZvckNhbGwoYm9vbCBpc0dldHRlciA9IGZhbHNlKTsKICAgICB2b2lkIHJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oKTsKICAgICB2b2lk
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNldCYg
ZG9udFJlc3RvcmUpOwogCkBAIC00ODQsNiArNDgzLDggQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZSB7CiAgICAgYm9vbCBuZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uOyB9CiAg
ICAgQ2FsbFNpdGVJbmRleCBvcmlnaW5hbENhbGxTaXRlSW5kZXgoKSBjb25zdDsKICAgICAKKyAg
ICB2b2lkIGVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAKIHByaXZhdGU6CiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlKCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275921</attachid>
            <date>2016-04-07 13:09:13 -0700</date>
            <delta_ts>2016-04-07 14:09:24 -0700</delta_ts>
            <desc>starting to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33702</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTk5MTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCgpCiAgICAgc3VjY2Vz
cy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQogCi12b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpCit2b2lk
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRF
eGNlcHRpb25IYW5kbGluZyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpCiB7CiAgICAgaWYgKCFt
X2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcpIHsKICAgICAg
ICAgbV9jYWxjdWxhdGVkUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nID0gdHJ1
ZTsKQEAgLTgyLDExICs4MiwxNCBAQCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3Vs
YXRlTGl2CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1f
bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9j
YXRvci0+dXNlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKSk7CisgICAg
ICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwubWVyZ2UoZXh0cmEpOwogICAgIH0KIH0KIAotdm9p
ZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKCkKK3ZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpCiB7CisgICAgY2FsY3VsYXRl
TGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyhleHRyYSk7CisgICAgCiAg
ICAgdW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9m
U3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0
ZXJzRm9yQ2FsbCgpLCBleHRyYVN0YWNrUGFkZGluZyk7CiAgICAgaWYgKG1fbnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKQEAgLTE1NSw2ICsxNTgsMzggQEAgY29uc3QgSGFuZGxlckluZm8m
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogCiBDYWxsU2l0ZUluZGV4IEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXg7IH0KIAordm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNp
dEV4Y2VwdGlvbkhhbmRsZXIoKQoreworICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgaml0LT5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICBpZiAobmVlZHNUb1Jl
c3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbigpKSB7CisgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhh
dCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgIC8vIGNh
bGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZAorICAg
ICAgICAvLyBhdCBmcm9tIGdlbmVyaWNVbndpbmQuIFRoZXJlZm9yZSB3ZSBtdXN0IG1vZGVsIHdo
YXQgZ2VuZXJpY1Vud2luZAorICAgICAgICAvLyBkb2VzIGhlcmUuIEkuZSwgc2V0IGNhbGxGcmFt
ZUZvckNhdGNoIGFuZCBjb3B5IGNhbGxlZSBzYXZlcy4KKworICAgICAgICBqaXQtPnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQtPnZtKCktPmFkZHJlc3NPZkNhbGxGcmFt
ZUZvckNhdGNoKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcFRvT1NSRXhpdEV4
Y2VwdGlvbkhhbmRsZXIgPSBqaXQtPmp1bXAoKTsKKworICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGluc2VydCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBpbiB0aGUgdGFibGUKKyAgICAgICAg
Ly8gYmVjYXVzZSB3ZSdyZSBkb2luZyBhIG1hbnVhbCBleGNlcHRpb24gY2hlY2sgaGVyZS4gaS5l
LCB3ZSdsbAorICAgICAgICAvLyBuZXZlciBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQo
KS4KKyAgICAgICAgSGFuZGxlckluZm8gb3JpZ2luYWxIYW5kbGVyID0gb3JpZ2luYWxFeGNlcHRp
b25IYW5kbGVyKCk7CisgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCisgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9yaWdpbmFsSGFuZGxlci5uYXRpdmVD
b2RlKTsKKyAgICAgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGppdC0+c2V0dXBB
cmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC0+dm0oKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKCk7CisgICAgICAgIGppdC0+YWRkTGlua1Rh
c2soCisgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGppdC0+anVtcFRv
RXhjZXB0aW9uSGFuZGxlcigpOworICAgIH0KK30KKwogQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgp
CiB7CiB9CkBAIC0yMjMsMTMgKzI1OCw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBB
Y2Nlc3NDYXNlOjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1
Y3R1cmUgaGFzCi0gICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IHNraXAgdGhpcyEgSW1wbGVtZW50IGl0IQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA5MTQKLSAgICBpZiAob2xkU3RydWN0dXJlLT5jb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CiAKICAg
ICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247CkBAIC03NTcsNyArNzg1LDYgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgICAgIC8vIFN0dWZmIGZv
ciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3Bl
cmF0aW9uQ2FsbDsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJDYWxsOwogCiAgICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzL3NldHRlcnMuCiAg
ICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNo
ZWNrOwpAQCAtNzY5LDExICs3OTYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vz
c0dlbmVyYXRpCiAKICAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxj
dWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9u
IGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAgICAgICAgc3RhdGUuY2FsY3VsYXRlTGl2ZVJlZ2lzdGVy
c0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpOwogICAgICAgICBzdGF0ZS5wcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwogCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBjYWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVt
ZW1iZXIgdGhlCi0gICAgICAgIC8vIHBsYWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgogICAgICAg
ICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkp
LAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwpAQCAtODk2LDcgKzkyMCw3IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoaXNHZXR0ZXIoKSk7CiAKLSAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQo
CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgWz0sICZ2bV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0
YS0+Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKQEAgLTk0MCw2
ICs5NjQsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9w
Q2FsbEZyYW1lKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhv
cGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFx
dWUpKTsKKyAgICAgICAgICAgICAgICB9KTsKKwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBD
dXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpCiAgICAg
ICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgaml0
LnJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpAQCAtOTQ3LDQzICs5NzYsMTEgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KICAgICAgICAgICAgICAgICBqaXQuZW1pdEV4Y2Vw
dGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAKLSAgICAg
ICAgICAgIGJvb2wgZGlkU2V0TG9va3VwRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlOwogICAgICAg
ICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93
bkV4Y2VwdGlvbigpOwotICAgICAgICAgICAgc3RhdGUucmVzdG9yZVNjcmF0Y2goKTsKLSAgICAg
ICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBUbyB0aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFs
IGV4Y2VwdGlvbiBoYW5kbGluZwotICAgICAgICAgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3
aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZAotICAgICAgICAgICAgICAgIC8v
IGF0IGZyb20gZ2VuZXJpY1Vud2luZC4gVGhlcmVmb3JlIHdlIG11c3QgbW9kZWwgd2hhdCBnZW5l
cmljVW53aW5kCi0gICAgICAgICAgICAgICAgLy8gZG9lcyBoZXJlLiBJLmUsIHNldCBjYWxsRnJh
bWVGb3JDYXRjaCBhbmQgY29weSBjYWxsZWUgc2F2ZXMuCi0KLSAgICAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFt
ZUZvckNhdGNoKCkpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9P
U1JFeGl0RXhjZXB0aW9uSGFuZGxlciA9IGppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGluc2VydCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBpbiB0aGUg
dGFibGUKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlJ3JlIGRvaW5nIGEgbWFudWFsIGV4
Y2VwdGlvbiBjaGVjayBoZXJlLiBpLmUsIHdlJ2xsCi0gICAgICAgICAgICAgICAgLy8gbmV2ZXIg
YXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAgICAgSGFuZGxl
ckluZm8gb3JpZ2luYWxIYW5kbGVyID0gc3RhdGUub3JpZ2luYWxFeGNlcHRpb25IYW5kbGVyKCk7
Ci0gICAgICAgICAgICAgICAgc3RhdGUuY2FsbGJhY2tzLmFwcGVuZCgKLSAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9yaWdp
bmFsSGFuZGxlci5uYXRpdmVDb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgICAgIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsK
LSAgICAgICAgICAgICAgICBkaWRTZXRMb29rdXBFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwogICAg
ICAgICAKICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBz
dGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaXNHZXR0ZXIoKSk7Ci0K
LSAgICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nl
c3Nvci5vcGFxdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFNldExvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9v
a3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTAyMCw3ICsxMDE3LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZShBY2Nlc3NHZW5lcmF0aQogICAgIGNhc2UgVHJhbnNpdGlvbjogewogICAgICAgICAvLyBBY2Nl
c3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CiAgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+aW5mZXJy
ZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAt
MTAzMyw2ICsxMDI5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogICAgICAgICAKICAgICAgICAgYm9vbCBhbGxvY2F0aW5nID0gbmV3U3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgICAgIGJvb2wgcmVhbGxvY2F0aW5nID0gYWxsb2NhdGluZyAmJiBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgYm9vbCBhbGxvY2F0aW5nVXNpbmdPcGVyYXRpb24g
PSBhbGxvY2F0aW5nICYmIHN0cnVjdHVyZSgpLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOwog
CiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0
Y2gudXNlZFJlZ2lzdGVycyk7CiAgICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwpAQCAt
MTA0MiwxMiArMTAzOSwxMiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVy
YXRpCiAgICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CiAgICAgICAgIGFsbG9jYXRv
ci5sb2NrKHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzOwot
ICAgICAgICBpZiAoYWxsb2NhdGluZykKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgaWYgKGFsbG9jYXRpbmcgJiYgIWFsbG9jYXRpbmdVc2luZ09wZXJhdGlvbikgewor
ICAgICAgICAgICAgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIH0KIAogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZl
ZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KICAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKQEAgLTEwNTgsNDYgKzEwNTUsOTYgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgICAgIGlmIChhbGxv
Y2F0aW5nKSB7CiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgQ29waWVk
QWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7
Ci0KLSAgICAgICAgICAgIGlmICghcmVhbGxvY2F0aW5nKSB7Ci0gICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAg
IGppdC5icmFuY2hTdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIp
KTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKLSAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ1VzaW5nT3BlcmF0aW9u
KSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZl
OworICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7
CisgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3Mp
OworICAgICAgICAgICAgICAgIHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRl
eEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAor
ICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgLyBzaXplb2YoSlNW
YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNl
cHRpb24gPQorICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxs
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0
aFRocm93bkV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4
Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub0V4
Y2VwdGlvbi5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVn
aXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xk
U2l6ZSk7CisgICAgICAgICAgICAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3Ig
PSAmdm0uaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXJl
YWxsb2NhdGluZykgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNo
U3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVk
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICog
c2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIzKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9y
LT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcp
OwotICAgICAgICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2Us
Ci0gICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJl
bWFpbmluZywgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcpOworICAgICAgICAgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9h
ZEVuZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2Ny
YXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQ
UjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0g
MDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMTcsMzQgKzExNjQsMzkgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNl
dCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KGFsbG9jYXRpbmcpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIp
OwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBq
aXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
MzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFu
Y2gzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIHNj
cmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpKTsKLQotICAgICAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAg
ICAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSk7Ci0KLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMyk7Ci0g
ICAgICAgICAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ug
d2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2hHUFIyLgotICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKAotICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLCBzY3JhdGNo
R1BSMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAgICAgIC8vIElmIHdlIGhhZCBhbGxvY2F0
ZWQgdXNpbmcgYW4gb3BlcmF0aW9uIHRoZW4gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGV4ZWN1dGVk
IHRoZSBzdG9yZQorICAgICAgICAvLyBiYXJyaWVyIGFuZCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkg
c3RvcmVkIHRoZSBidXR0ZXJmbHkgaW50byB0aGUgb2JqZWN0LgorICAgICAgICBpZiAoIWFsbG9j
YXRpbmdVc2luZ09wZXJhdGlvbikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmcpIHsKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGppdC5qdW1wSWZJc1JlbWVtYmVyZWRPckluRWRlbihiYXNlR1BSKTsKKyAgICAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5o
ZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIod3Jp
dGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOworICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgaml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRj
aEdQUjIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMyk7CisgICAg
ICAgICAgICAgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNl
IHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoR1BSMi4KKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUjMsIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Cisg
ICAgICAgICAgICAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBi
dXR0ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJl
cyB0aGF0CisgICAgICAgICAgICAvLyB3aGF0ZXZlciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBv
aW50IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2UgdG8gYnJhbmNoIHRvIHNsb3cKKyAgICAgICAg
ICAgIC8vIHBhdGguCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nKQor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhlIHN0
cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQgd2hhdGV2ZXIKLSAg
ICAgICAgLy8gd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYgd2Ug
Y2hvb3NlIHRvIGJyYW5jaCB0byBzbG93IHBhdGguCi0gICAgICAgIAotICAgICAgICBpZiAoYWxs
b2NhdGluZykKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAg
ICAgIAogICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihuZXdTdHJ1Y3R1cmUoKS0+aWQoKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlQml0cyksCkBAIC0xMTUz
LDEyICsxMjA1LDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkK
ICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICAgICAgc2xv
d1BhdGgubGluaygmaml0KTsKLSAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAgICAgICAgc3RhdGUu
ZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIC8vIFdlIHdpbGwgaGF2
ZSBhIHNsb3cgcGF0aCBpZiB3ZSB3ZXJlIGFsbG9jYXRpbmcgd2l0aG91dCB0aGUgaGVscCBvZiBh
biBvcGVyYXRpb24uCisgICAgICAgIGlmIChhbGxvY2F0aW5nICYmICFhbGxvY2F0aW5nVXNpbmdP
cGVyYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkgeworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWls
QW5kSWdub3JlLmFwcGVuZChzbG93UGF0aCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoc2xvd1BhdGgpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2xvd1BhdGguZW1wdHkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTE0NjQsNyArMTUyMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBQb2x5bW9ycGhpY0FjY2Vz
czoKIAogICAgICAgICBIYW5kbGVySW5mbyBvbGRIYW5kbGVyID0gc3RhdGUub3JpZ2luYWxFeGNl
cHRpb25IYW5kbGVyKCk7CiAgICAgICAgIENhbGxTaXRlSW5kZXggbmV3RXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZSA9IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwot
ICAgICAgICBzdGF0ZS5jYWxsYmFja3MuYXBwZW5kKAorICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9sZEhh
bmRsZXIubmF0aXZlQ29kZSk7CiAKQEAgLTE0OTgsOSArMTU1NCw2IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBQb2x5bW9ycGhpY0FjY2VzczoKICAgICAgICAgZmFpbHVyZSwKICAgICAgICAgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9TbG93Q2FzZSkpOwogICAgIAotICAgIGZvciAoYXV0byBjYWxsYmFjayA6IHN0YXRl
LmNhbGxiYWNrcykKLSAgICAgICAgY2FsbGJhY2sobGlua0J1ZmZlcik7Ci0KICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiICIsIHN0dWJJbmZvLmNvZGVPcmln
aW4sICI6IEdlbmVyYXRpbmcgcG9seW1vcnBoaWMgYWNjZXNzIHN0dWIgZm9yICIsIGxpc3REdW1w
KGNhc2VzKSwgIlxuIik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAxOTkxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQxLDcgKzQ0MSw2IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAg
IEdQUlJlZyBiYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVnczsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiB7IEludmFsaWRHUFJSZWcgfTsKLSAgICBWZWN0
b3I8c3RkOjpmdW5jdGlvbjx2b2lkKExpbmtCdWZmZXImKT4+IGNhbGxiYWNrczsKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpT
Q2VsbD4+IHdlYWtSZWZlcmVuY2VzOwpAQCAtNDUxLDExICs0NTAsMTEgQEAgc3RydWN0IEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgdm9pZCByZXN0b3JlU2NyYXRjaCgpOwogICAgIHZvaWQg
c3VjY2VlZCgpOwogCi0gICAgdm9pZCBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CisgICAgdm9pZCBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2Fs
bEFuZEV4Y2VwdGlvbkhhbmRsaW5nKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IFJlZ2lzdGVy
U2V0KCkpOwogCi0gICAgdm9pZCBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgp
OworICAgIHZvaWQgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVn
aXN0ZXJTZXQmIGV4dHJhID0gUmVnaXN0ZXJTZXQoKSk7CiAKLSAgICB2b2lkIHJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChib29sIGlzR2V0dGVyKTsKKyAgICB2b2lkIHJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChib29sIGlzR2V0dGVyID0gZmFsc2UpOwog
ICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4
Y2VwdGlvbigpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSk7CiAKQEAgLTQ4NCw2ICs0ODMsOCBAQCBz
dHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKICAgICBib29sIG5lZWRzVG9SZXN0b3JlUmVn
aXN0ZXJzSWZFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX25lZWRzVG9SZXN0b3JlUmVnaXN0
ZXJzSWZFeGNlcHRpb247IH0KICAgICBDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGVJbmRl
eCgpIGNvbnN0OwogICAgIAorICAgIHZvaWQgZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigp
OworICAgIAogcHJpdmF0ZToKICAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZVJlZ2lzdGVyc1Rv
UHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUoKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTk5MTY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExMiwyOSArMTExMiw2IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm8KICAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZt
LCAwLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKLXsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKLQotICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5KTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVz
dWx0KTsKLX0KLQotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0KLSAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBu
ZXdTaXplKTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKLX0KLQogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE5
OTE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsOCArMTI0LDYgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZk9iagogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVj
dEFzVHlwZW9mVHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRl
Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTkxNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAwLDYg
KzIwMDAsMjkgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdAogICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogfQogCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5KTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwg
c2l6ZV90IG5ld1NpemUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVT
dG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdT
aXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
K30KKwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE5OTE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDkgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRGcm9tU2NvcGUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEV4ZWNT
dGF0ZSosIEluc3RydWN0aW9uKiBieXRlY29kZVBDKSBXVEZfSU5URVJOQUw7CiAKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dy
b3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkg
V1RGX0lOVEVSTkFMOworCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIoRXhlY1N0YXRl
KiwgSlNDZWxsKik7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS1pZC10cmFu
c2l0aW9uLXdpdGgtaW5kZXhpbmctaGVhZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS1pZC10cmFuc2l0aW9uLXdpdGgtaW5kZXhpbmct
aGVhZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LWlkLXRyYW5zaXRpb24td2l0aC1pbmRleGluZy1oZWFkZXItZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktaWQtdHJh
bnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
dXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LWlkLXRyYW5zaXRpb24td2l0aC1pbmRl
eGluZy1oZWFkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHV0LWJ5LWlkLXRyYW5zaXRpb24td2l0aC1pbmRleGluZy1oZWFkZXIuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9wdXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9w
dXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS1pZC10cmFuc2l0
aW9uLXdpdGgtaW5kZXhpbmctaGVhZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQg
QEAKKyhmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBhbGxvY2F0ZSgpIHsKKyAgICAgICAgcmV0
dXJuIHt9OworICAgIH07CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIG87CisgICAgICAgIHZhciBuID0gMTAwOworICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IG47ICsraikgeworICAgICAgICAgICAgbyA9IGFsbG9jYXRlKCk7CisgICAg
ICAgICAgICBvWzBdID0gaSArIDA7CisgICAgICAgICAgICBvWzFdID0gaSArIDE7CisgICAgICAg
ICAgICBvWzJdID0gaSArIDI7CisgICAgICAgICAgICBvWzNdID0gaSArIDM7CisgICAgICAgICAg
ICBvWzRdID0gaSArIDQ7CisgICAgICAgICAgICBvWzVdID0gaSArIDU7CisgICAgICAgICAgICBv
WzZdID0gaSArIDY7CisgICAgICAgICAgICBvWzddID0gaSArIDc7CisgICAgICAgICAgICBvWzhd
ID0gaSArIDg7CisgICAgICAgICAgICBvWzldID0gaSArIDk7CisgICAgICAgICAgICBvWzEwXSA9
IGkgKyAxMDsKKyAgICAgICAgICAgIG9bMTFdID0gaSArIDExOworICAgICAgICAgICAgby5mID0g
aiArIDA7CisgICAgICAgICAgICBvLmcgPSBqICsgMTsKKyAgICAgICAgICAgIG8uaCA9IGogKyAy
OworICAgICAgICAgICAgby5pID0gaiArIDM7CisgICAgICAgICAgICBvLmogPSBqICsgNDsKKyAg
ICAgICAgICAgIG8uayA9IGogKyA1OworICAgICAgICAgICAgby5sID0gaiArIDY7CisgICAgICAg
ICAgICBvLm0gPSBqICsgNzsKKyAgICAgICAgICAgIG8ubiA9IGogKyA4OworICAgICAgICAgICAg
by5vID0gaiArIDk7CisgICAgICAgICAgICBvLnAgPSBqICsgMTA7CisgICAgICAgICAgICBvLnEg
PSBqICsgMTE7CisgICAgICAgICAgICBvLnIgPSBqICsgMTI7CisgICAgICAgICAgICBvLnMgPSBq
ICsgMTM7CisgICAgICAgICAgICBvLnQgPSBqICsgMTQ7CisgICAgICAgICAgICBvLnUgPSBqICsg
MTU7CisgICAgICAgICAgICBvLnYgPSBqICsgMTY7CisgICAgICAgICAgICBvLncgPSBqICsgMTc7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTE7ICsr
aikgeworICAgICAgICAgICAgaWYgKG9bal0gIT0gaSArIGopCisgICAgICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgb1siICsgaiArICJdOiAiICsgb1tqXTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoby5mICE9IG4gLSAxICsgMCkKKyAgICAgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8uZjsKKyAgICAgICAgaWYgKG8uZyAhPSBuIC0gMSAr
IDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLmc7
CisgICAgICAgIGlmIChvLmggIT0gbiAtIDEgKyAyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby5oOworICAgICAgICBpZiAoby5pICE9IG4gLSAxICsg
MykKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8uaTsK
KyAgICAgICAgaWYgKG8uaiAhPSBuIC0gMSArIDQpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLmo7CisgICAgICAgIGlmIChvLmsgIT0gbiAtIDEgKyA1
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby5rOwor
ICAgICAgICBpZiAoby5sICE9IG4gLSAxICsgNikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIGF0IG8uZjogIiArIG8ubDsKKyAgICAgICAgaWYgKG8ubSAhPSBuIC0gMSArIDcp
CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLm07Cisg
ICAgICAgIGlmIChvLm4gIT0gbiAtIDEgKyA4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgYXQgby5mOiAiICsgby5uOworICAgICAgICBpZiAoby5vICE9IG4gLSAxICsgOSkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8ubzsKKyAg
ICAgICAgaWYgKG8ucCAhPSBuIC0gMSArIDEwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgYXQgby5mOiAiICsgby5wOworICAgICAgICBpZiAoby5xICE9IG4gLSAxICsgMTEp
CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLnE7Cisg
ICAgICAgIGlmIChvLnIgIT0gbiAtIDEgKyAxMikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIGF0IG8uZjogIiArIG8ucjsKKyAgICAgICAgaWYgKG8ucyAhPSBuIC0gMSArIDEz
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby5zOwor
ICAgICAgICBpZiAoby50ICE9IG4gLSAxICsgMTQpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLnQ7CisgICAgICAgIGlmIChvLnUgIT0gbiAtIDEgKyAx
NSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8udTsK
KyAgICAgICAgaWYgKG8udiAhPSBuIC0gMSArIDE2KQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby52OworICAgICAgICBpZiAoby53ICE9IG4gLSAxICsg
MTcpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLnc7
CisgICAgfQorfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275931</attachid>
            <date>2016-04-07 14:09:24 -0700</date>
            <delta_ts>2016-04-07 19:11:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35622</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50aW5nIGNhY2hpbmcgdHJhbnNpdGlvbiBwdXRzIHRoYXQgbmVlZCB0byByZWFsbG9j
YXRlIHdpdGggaW5kZXhpbmcgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBJQydzIHB1dF9ieV9pZCBwYXRoIHRv
IGhhbmRsZSByZWFsbG9jYXRpbmcgdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgZXZlbiBpZgorICAg
ICAgICB0aGUgYnV0dGVyZmx5IGhhcyBpbmRleGluZyBzdG9yYWdlLiBMaWtlIHRoZSBERkcsIHdl
IGRvIHRoaXMgYnkgY2FsbGluZyBvcGVyYXRpb25zIHRoYXQKKyAgICAgICAgcmVhbGxvY2F0ZSB0
aGUgYnV0dGVyZmx5LiBUaG9zZSB1c2UgSlNPYmplY3QgQVBJIGFuZCBkbyBhbGwgb2YgdGhlIG5h
c3R5IHdvcmsgZm9yIHVzLCBsaWtlCisgICAgICAgIHRyaWdnZXJpbmcgYSBiYXJyaWVyLgorCisg
ICAgICAgIFRoaXMgZG9lcyBhIGJ1bmNoIG9mIHJlZmFjdG9yaW5nIHRvIGhvdyBQb2x5bW9ycGhp
Y0FjY2VzcyBtYWtlcyBjYWxscy4gSXQncyBhIGxvdCBlYXNpZXIgdG8KKyAgICAgICAgZG8gaXQg
bm93IGJlY2F1c2UgdGhlIGhhcmQgd29yayBpcyBoaWRkZW4gdW5kZXIgQWNjZXNzR2VuZXJhdGlv
blN0YXRlIG1ldGhvZHMuIFRoaXMgbWVhbnMKKyAgICAgICAgdGhhdCBjdXN0b20gYWNjZXNzb3Jz
IG5vdyBzaGFyZSBsb2dpYyB3aXRoIHB1dF9ieV9pZCB0cmFuc2l0aW9ucy4KKworICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOjpzdWNjZWVkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
b3JpZ2luYWxDYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6QWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6Om5lZWRz
VG9SZXN0b3JlUmVnaXN0ZXJzSWZFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0Nh
bGxTaXRlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZn
L0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKwogMjAxNi0wNC0wNyAgU2FhbSBiYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGFu
bmV4IGIuMy4zIGJlaGF2aW9yIHdhcyBpbmNvcnJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24g
MTk5MTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6c3VjY2VlZCgpCiAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOwog
fQogCi12b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0Zv
ckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpCit2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyhjb25zdCBS
ZWdpc3RlclNldCYgZXh0cmEpCiB7CiAgICAgaWYgKCFtX2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JD
YWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcpIHsKICAgICAgICAgbV9jYWxjdWxhdGVkUmVnaXN0ZXJz
Rm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nID0gdHJ1ZTsKQEAgLTgyLDExICs4MiwxNCBAQCB2
b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2CiAKICAgICAgICAgbV9saXZl
UmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVB
dEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsK
ICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZWdp
c3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKSk7CisgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNh
bGwubWVyZ2UoZXh0cmEpOwogICAgIH0KIH0KIAotdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6
OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCkKK3ZvaWQgQWNjZXNzR2VuZXJh
dGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChjb25zdCBSZWdp
c3RlclNldCYgZXh0cmEpCiB7CisgICAgY2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRF
eGNlcHRpb25IYW5kbGluZyhleHRyYSk7CisgICAgCiAgICAgdW5zaWduZWQgZXh0cmFTdGFja1Bh
ZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzRm9yQ2FsbCgpLCBleHRyYVN0YWNr
UGFkZGluZyk7CiAgICAgaWYgKG1fbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJl
c2VydmF0aW9uICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKQEAgLTE1
NSw2ICsxNTgsMzggQEAgY29uc3QgSGFuZGxlckluZm8mIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQog
CiBDYWxsU2l0ZUluZGV4IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6b3JpZ2luYWxDYWxsU2l0ZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gc3R1YkluZm8tPmNhbGxTaXRlSW5kZXg7IH0KIAordm9pZCBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKQorewor
ICAgIHJlc3RvcmVTY3JhdGNoKCk7CisgICAgaml0LT5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVl
U2F2ZXNCdWZmZXIoKTsKKyAgICBpZiAobmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlv
bigpKSB7CisgICAgICAgIC8vIFRvIHRoZSBKSVQgdGhhdCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwg
ZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVj
dCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJyaXZlZAorICAgICAgICAvLyBhdCBmcm9tIGdlbmVyaWNV
bndpbmQuIFRoZXJlZm9yZSB3ZSBtdXN0IG1vZGVsIHdoYXQgZ2VuZXJpY1Vud2luZAorICAgICAg
ICAvLyBkb2VzIGhlcmUuIEkuZSwgc2V0IGNhbGxGcmFtZUZvckNhdGNoIGFuZCBjb3B5IGNhbGxl
ZSBzYXZlcy4KKworICAgICAgICBqaXQtPnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBqaXQtPnZtKCktPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAganVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIgPSBqaXQtPmp1
bXAoKTsKKworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc2VydCBhIG5ldyBleGNlcHRp
b24gaGFuZGxlciBpbiB0aGUgdGFibGUKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSdyZSBkb2luZyBh
IG1hbnVhbCBleGNlcHRpb24gY2hlY2sgaGVyZS4gaS5lLCB3ZSdsbAorICAgICAgICAvLyBuZXZl
ciBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KKyAgICAgICAgSGFuZGxlckluZm8g
b3JpZ2luYWxIYW5kbGVyID0gb3JpZ2luYWxFeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgIGpp
dC0+YWRkTGlua1Rhc2soCisgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlv
bkhhbmRsZXIsIG9yaWdpbmFsSGFuZGxlci5uYXRpdmVDb2RlKTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGppdC0+dm0oKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0
LT5jYWxsKCk7CisgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCisgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAg
IH0KK30KKwogQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7CiB9CkBAIC0yMjMsMTMgKzI1OCw2
IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjoKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdo
ZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCi0gICAgLy8gaW5kZXhp
bmcgc3RvcmFnZS4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHNraXAgdGhpcyEgSW1wbGVt
ZW50IGl0IQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzA5MTQKLSAgICBpZiAob2xkU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CiAKICAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5z
aXRpb247CkBAIC03NTcsNyArNzg1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJz
LgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsOwogCiAgICAgICAgIC8v
IFN0dWZmIGZvciBKUyBnZXR0ZXJzL3NldHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrOwpAQCAtNzY5LDExICs3OTYsOCBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgLy8g
VGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBu
b3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAg
ICAgICAgc3RhdGUuY2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5k
bGluZygpOwogICAgICAgICBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bCgpOwogCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbmV2ZXIgdGhpcyBj
YWxsIGlzIG1hZGUgaW4gdGhlIGZ1dHVyZSwgd2UgcmVtZW1iZXIgdGhlCi0gICAgICAgIC8vIHBs
YWNlIHRoYXQgd2UgbWFkZSBpdCBmcm9tLgogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNl
cHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOwpAQCAtODk2LDcgKzkyMCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUo
QWNjZXNzR2VuZXJhdGkKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBzdGF0
ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaXNHZXR0ZXIoKSk7CiAKLSAg
ICAgICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCiAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5zZXRDYWxs
TG9jYXRpb25zKAogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd1BhdGhDYWxsKSwKQEAgLTk0MCw2ICs5NjQsMTEgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKIAogICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCisgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0
cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKwogICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpCiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVz
dWx0cyh2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9uU3RhY2tGb3JD
Q2FsbCgpOwpAQCAtOTQ3LDQzICs5NzYsMTEgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShB
Y2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9u
ID0KICAgICAgICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAKLSAgICAgICAgICAgIGJvb2wgZGlkU2V0TG9va3Vw
RXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlOwogICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbigpOwotICAgICAgICAg
ICAgc3RhdGUucmVzdG9yZVNjcmF0Y2goKTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5uZWVkc1Rv
UmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyB0
aGUgSklUIHRoYXQgcHJvZHVjZXMgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBoYW5kbGluZwotICAg
ICAgICAgICAgICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQg
dG8gYmUgYXJyaXZlZAotICAgICAgICAgICAgICAgIC8vIGF0IGZyb20gZ2VuZXJpY1Vud2luZC4g
VGhlcmVmb3JlIHdlIG11c3QgbW9kZWwgd2hhdCBnZW5lcmljVW53aW5kCi0gICAgICAgICAgICAg
ICAgLy8gZG9lcyBoZXJlLiBJLmUsIHNldCBjYWxsRnJhbWVGb3JDYXRjaCBhbmQgY29weSBjYWxs
ZWUgc2F2ZXMuCi0KLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciA9
IGppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc2Vy
dCBhIG5ldyBleGNlcHRpb24gaGFuZGxlciBpbiB0aGUgdGFibGUKLSAgICAgICAgICAgICAgICAv
LyBiZWNhdXNlIHdlJ3JlIGRvaW5nIGEgbWFudWFsIGV4Y2VwdGlvbiBjaGVjayBoZXJlLiBpLmUs
IHdlJ2xsCi0gICAgICAgICAgICAgICAgLy8gbmV2ZXIgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmlj
VW53aW5kKCkuCi0gICAgICAgICAgICAgICAgSGFuZGxlckluZm8gb3JpZ2luYWxIYW5kbGVyID0g
c3RhdGUub3JpZ2luYWxFeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUu
Y2FsbGJhY2tzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVt
cFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9yaWdpbmFsSGFuZGxlci5uYXRpdmVDb2RlKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZt
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgICAgICBkaWRTZXRM
b29rdXBFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUuZW1p
dEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwogICAgICAgICAKICAgICAgICAgICAgIG5vRXhj
ZXB0aW9uLmxpbmsoJmppdCk7CiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGwoaXNHZXR0ZXIoKSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLmNhbGxi
YWNrcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBG
dW5jdGlvblB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRpZFNldExvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGws
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyMCw3ICsx
MDE3LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgIGNh
c2UgVHJhbnNpdGlvbjogewogICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hv
dWxkIGhhdmUgcmV0dXJuZWQgbnVsbC4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0dXJl
KCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwogCiAgICAgICAgIGlmIChJbmZlcnJlZFR5
cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMTAzMyw2ICsxMDI5LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAKICAgICAgICAgYm9v
bCBhbGxvY2F0aW5nID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgICAgIGJvb2wgcmVhbGxvY2F0aW5n
ID0gYWxsb2NhdGluZyAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAg
ICAgYm9vbCBhbGxvY2F0aW5nSW5saW5lID0gYWxsb2NhdGluZyAmJiAhc3RydWN0dXJlKCktPmNv
dWxkSGF2ZUluZGV4aW5nSGVhZGVyKCk7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgYWxs
b2NhdG9yLmxvY2soYmFzZUdQUik7CkBAIC0xMDQyLDEyICsxMDM5LDEyIEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFs
dWVSZWdzKTsKICAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CiAKLSAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjM7Ci0gICAgICAgIGlmIChhbGxvY2F0aW5nKQorICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkg
eworICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CiAgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICB9CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVz
ZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9CiAgICAgICAgICAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CkBAIC0xMDU4LDQ3ICsxMDU1LDEwMiBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICAgICAgaWYg
KGFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICBD
b3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS5oZWFwLnN0b3JhZ2VBbGxvY2F0
b3IoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsK
KyAgICAgICAgICAgICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZ2bS5o
ZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKIAotICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcp
IHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1YlB0cigKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplKSwgc2NyYXRjaEdQUikpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwotICAgICAg
ICAgICAgICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmFk
ZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Mo
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgeworICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3ViUHRyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6U2lnbmVkLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplKSwgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUiwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgd2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkK
KyAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkg
c3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoU3ViUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpTaWduZWQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BS
KSk7Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7Ci0gICAgICAgICAgICAgICAgaml0Lm5lZ1B0cihz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1
cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwg
c2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BS
MiA9IGF2YWlsYWJsZQotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9m
ZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXpl
b2Yodm9pZCopKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMik7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmJyYW5jaFN1YlB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlNpZ25lZCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIp
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRB
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5u
ZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2Ny
YXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLAorICAgICAg
ICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9p
ZCopKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBhbGxvY2F0aW5nIG91
dC1vZi1saW5lIHVzaW5nIGFuIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7CisgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmUuc2V0KHZhbHVlUmVncyk7CisgICAgICAgICAgICAgICAgc3RhdGUucHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFs
KCkuYml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNh
bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJl
IHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSku
CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5j
YWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RnVuY3Rpb25QdHIob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgaml0LmVt
aXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCkBAIC0xMTE3LDcgKzExNjksOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihK
U1ZhbHVlKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYWxsb2NhdGluZykg
eworICAgICAgICAvLyBJZiB3ZSBoYWQgYWxsb2NhdGVkIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGVu
IHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBleGVjdXRlZCB0aGUgc3RvcmUKKyAgICAgICAgLy8gYmFy
cmllciBhbmQgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHN0b3JlZCB0aGUgYnV0dGVyZmx5IGludG8g
dGhlIG9iamVjdC4KKyAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0Lmp1bXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKGJhc2VHUFIpOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJC
dWZmZXIoKTsKICAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJl
bnRJbmRleEFkZHJlc3MoKSwgc2NyYXRjaEdQUjIpOwpAQCAtMTEyNSwxMCArMTE3OSwxMCBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAg
aml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgc2NyYXRjaEdQUjIsCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSkpOwotCisgICAgICAgICAg
ICAKICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaEdQUjIpOwogICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUjIsIHdyaXRl
QmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICAvLyBXZSB1c2Ug
YW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRv
IHNjcmF0Y2hHUFIyLgogICAgICAgICAgICAgaml0LnN0b3JlUHRyKApAQCAtMTEzNywxMyArMTE5
MSwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpTY2Fs
ZVB0ciwKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2
b2lkKikpKSk7CiAgICAgICAgICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmpp
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRl
cmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRo
YXQgd2hhdGV2ZXIKLSAgICAgICAgLy8gd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBm
b3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93IHBhdGguCi0gICAgICAgIAot
ICAgICAgICBpZiAoYWxsb2NhdGluZykKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ug
c2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRo
aXMgd2F5IGVuc3VyZXMgdGhhdAorICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUg
dXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBz
bG93CisgICAgICAgICAgICAvLyBwYXRoLgorICAgICAgICAgICAgCiAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1
aW50MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1
cmUoKS0+aWQoKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKApAQCAtMTE1MywxMiArMTIwNywxNiBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUp
OwogICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoYWxsb2Nh
dG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7Ci0gICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBzbG93IHBhdGgg
aWYgd2Ugd2VyZSBhbGxvY2F0aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3BlcmF0aW9uLgor
ICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRv
ci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygm
aml0KTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWls
QW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChzbG93UGF0aCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0eSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTQ2NCw3ICsxNTIyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIFBvbHltb3JwaGljQWNjZXNzOgogCiAgICAgICAgIEhhbmRsZXJJbmZvIG9sZEhhbmRsZXIg
PSBzdGF0ZS5vcmlnaW5hbEV4Y2VwdGlvbkhhbmRsZXIoKTsKICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlID0gc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nKCk7Ci0gICAgICAgIHN0YXRlLmNhbGxiYWNrcy5hcHBlbmQoCisgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhj
ZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIApAQCAtMTQ5OCw5ICsxNTU2
LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgICAgICBm
YWlsdXJlLAogICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvIGNhbGxiYWNrIDogc3RhdGUuY2FsbGJhY2tzKQotICAgICAgICBjYWxsYmFjayhsaW5rQnVm
ZmVyKTsKLQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICIg
Iiwgc3R1YkluZm8uY29kZU9yaWdpbiwgIjogR2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mg
c3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDE5OTE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNyArNDQxLDYgQEAgc3RydWN0IEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSB7CiAgICAgR1BSUmVnIGJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSIHsgSW52YWxp
ZEdQUlJlZyB9OwotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoTGlua0J1ZmZlciYpPj4g
Y2FsbGJhY2tzOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNocG9pbnRzOwogICAgIFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7CkBAIC00NTEsMTEgKzQ1
MCwxMSBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKICAgICB2b2lkIHJlc3RvcmVT
Y3JhdGNoKCk7CiAgICAgdm9pZCBzdWNjZWVkKCk7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUxpdmVS
ZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKKyAgICB2b2lkIGNhbGN1bGF0
ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhID0gUmVnaXN0ZXJTZXQoKSk7CiAKLSAgICB2b2lkIHByZXNlcnZlTGl2ZVJlZ2lz
dGVyc1RvU3RhY2tGb3JDYWxsKCk7CisgICAgdm9pZCBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNldCYgZXh0cmEgPSBSZWdpc3RlclNldCgpKTsKIAot
ICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGJvb2wgaXNHZXR0
ZXIpOworICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGJvb2wg
aXNHZXR0ZXIgPSBmYWxzZSk7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKCk7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lz
dGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGRvbnRSZXN0b3JlKTsKIApA
QCAtNDg0LDYgKzQ4Myw4IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGJv
b2wgbmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbjsgfQogICAgIENhbGxTaXRlSW5kZXgg
b3JpZ2luYWxDYWxsU2l0ZUluZGV4KCkgY29uc3Q7CiAgICAgCisgICAgdm9pZCBlbWl0RXhwbGlj
aXRFeGNlcHRpb25IYW5kbGVyKCk7CisgICAgCiBwcml2YXRlOgogICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSgp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxOTkxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEyLDI5ICsxMTEyLDYgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgICAgICBCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7CiB9CiAKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3Bl
cnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0KQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotCi0gICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwotfQotCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
LQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9
IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOwotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZXN1bHQpOwotfQotCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTk5MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsNiBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqCiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9J
TlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdT
aXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUlu
dDMyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVEb3VibGUoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNDZWxsKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5OTE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMDAsNiArMjAwMCwyOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVGhyb3coRXhlY1N0CiAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiB9CiAKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAw
LCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKwor
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9i
amVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXN1bHQpOworfQorCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTk5MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw2ICszNzYsOSBA
QCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShFeGVjU3RhdGUqLCBJbnN0cnVj
dGlvbiogYnl0ZWNvZGVQQykgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFRvU2NvcGUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpIFdURl9J
TlRFUk5BTDsKIAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBK
U09iamVjdCopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CisKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVW5jb25kaXRpb25hbFdy
aXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTE2
NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDE2LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgSW1wbGVtZW50aW5nIGNhY2hpbmcgdHJhbnNpdGlvbiBwdXRzIHRoYXQgbmVlZCB0byByZWFs
bG9jYXRlIHdpdGggaW5kZXhpbmcgc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS1pZC10cmFuc2l0aW9uLXdp
dGgtaW5kZXhpbmctaGVhZGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9wdXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktaWQtdHJhbnNpdGlv
bi13aXRoLWluZGV4aW5nLWhlYWRlci5qczogQWRkZWQuCisgICAgICAgIChhbGxvY2F0ZSk6CisK
IDIwMTYtMDQtMDcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTkxMjggYW5kIHIxOTkxNDEuCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS1pZC10cmFuc2l0aW9uLXdpdGgtaW5kZXhp
bmctaGVhZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3B1dC1ieS1pZC10cmFuc2l0aW9uLXdpdGgtaW5kZXhpbmctaGVhZGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LWlkLXRyYW5z
aXRpb24td2l0aC1pbmRleGluZy1oZWFkZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4
aW5nLWhlYWRlcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktaWQtdHJhbnNpdGlv
bi13aXRoLWluZGV4aW5nLWhlYWRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvcHV0LWJ5LWlkLXRyYW5zaXRpb24td2l0aC1pbmRleGluZy1oZWFkZXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LWlkLXRyYW5zaXRp
b24td2l0aC1pbmRleGluZy1oZWFkZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQt
YnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9w
dXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktaWQtdHJhbnNpdGlv
bi13aXRoLWluZGV4aW5nLWhlYWRlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS1pZC10cmFuc2l0aW9uLXdpdGgtaW5kZXhpbmct
aGVhZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKyhmdW5jdGlvbigpIHsK
KyAgICBmdW5jdGlvbiBhbGxvY2F0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH07Cisg
ICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIG87
CisgICAgICAgIHZhciBuID0gMTAwOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47ICsr
aikgeworICAgICAgICAgICAgbyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBvWzBdID0gaSAr
IDA7CisgICAgICAgICAgICBvWzFdID0gaSArIDE7CisgICAgICAgICAgICBvWzJdID0gaSArIDI7
CisgICAgICAgICAgICBvWzNdID0gaSArIDM7CisgICAgICAgICAgICBvWzRdID0gaSArIDQ7Cisg
ICAgICAgICAgICBvWzVdID0gaSArIDU7CisgICAgICAgICAgICBvWzZdID0gaSArIDY7CisgICAg
ICAgICAgICBvWzddID0gaSArIDc7CisgICAgICAgICAgICBvWzhdID0gaSArIDg7CisgICAgICAg
ICAgICBvWzldID0gaSArIDk7CisgICAgICAgICAgICBvWzEwXSA9IGkgKyAxMDsKKyAgICAgICAg
ICAgIG9bMTFdID0gaSArIDExOworICAgICAgICAgICAgby5mID0gaiArIDA7CisgICAgICAgICAg
ICBvLmcgPSBqICsgMTsKKyAgICAgICAgICAgIG8uaCA9IGogKyAyOworICAgICAgICAgICAgby5p
ID0gaiArIDM7CisgICAgICAgICAgICBvLmogPSBqICsgNDsKKyAgICAgICAgICAgIG8uayA9IGog
KyA1OworICAgICAgICAgICAgby5sID0gaiArIDY7CisgICAgICAgICAgICBvLm0gPSBqICsgNzsK
KyAgICAgICAgICAgIG8ubiA9IGogKyA4OworICAgICAgICAgICAgby5vID0gaiArIDk7CisgICAg
ICAgICAgICBvLnAgPSBqICsgMTA7CisgICAgICAgICAgICBvLnEgPSBqICsgMTE7CisgICAgICAg
ICAgICBvLnIgPSBqICsgMTI7CisgICAgICAgICAgICBvLnMgPSBqICsgMTM7CisgICAgICAgICAg
ICBvLnQgPSBqICsgMTQ7CisgICAgICAgICAgICBvLnUgPSBqICsgMTU7CisgICAgICAgICAgICBv
LnYgPSBqICsgMTY7CisgICAgICAgICAgICBvLncgPSBqICsgMTc7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTE7ICsraikgeworICAgICAgICAgICAg
aWYgKG9bal0gIT0gaSArIGopCisgICAgICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWUgYXQgb1siICsgaiArICJdOiAiICsgb1tqXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoby5m
ICE9IG4gLSAxICsgMCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8u
ZjogIiArIG8uZjsKKyAgICAgICAgaWYgKG8uZyAhPSBuIC0gMSArIDEpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLmc7CisgICAgICAgIGlmIChvLmgg
IT0gbiAtIDEgKyAyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5m
OiAiICsgby5oOworICAgICAgICBpZiAoby5pICE9IG4gLSAxICsgMykKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8uaTsKKyAgICAgICAgaWYgKG8uaiAh
PSBuIC0gMSArIDQpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6
ICIgKyBvLmo7CisgICAgICAgIGlmIChvLmsgIT0gbiAtIDEgKyA1KQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby5rOworICAgICAgICBpZiAoby5sICE9
IG4gLSAxICsgNikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjog
IiArIG8ubDsKKyAgICAgICAgaWYgKG8ubSAhPSBuIC0gMSArIDcpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLm07CisgICAgICAgIGlmIChvLm4gIT0g
biAtIDEgKyA4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAi
ICsgby5uOworICAgICAgICBpZiAoby5vICE9IG4gLSAxICsgOSkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8ubzsKKyAgICAgICAgaWYgKG8ucCAhPSBu
IC0gMSArIDEwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAi
ICsgby5wOworICAgICAgICBpZiAoby5xICE9IG4gLSAxICsgMTEpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLnE7CisgICAgICAgIGlmIChvLnIgIT0g
biAtIDEgKyAxMikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjog
IiArIG8ucjsKKyAgICAgICAgaWYgKG8ucyAhPSBuIC0gMSArIDEzKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5mOiAiICsgby5zOworICAgICAgICBpZiAoby50ICE9
IG4gLSAxICsgMTQpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6
ICIgKyBvLnQ7CisgICAgICAgIGlmIChvLnUgIT0gbiAtIDEgKyAxNSkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIGF0IG8uZjogIiArIG8udTsKKyAgICAgICAgaWYgKG8udiAh
PSBuIC0gMSArIDE2KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgYXQgby5m
OiAiICsgby52OworICAgICAgICBpZiAoby53ICE9IG4gLSAxICsgMTcpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBhdCBvLmY6ICIgKyBvLnc7CisgICAgfQorfSkoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>