<?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>180874</bug_id>
          
          <creation_ts>2017-12-15 11:30:58 -0800</creation_ts>
          <short_desc>YARR: JIT RegExps with back references</short_desc>
          <delta_ts>2018-09-04 17:59:16 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>189291</dependson>
          <blocked>179230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1382215</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-12-15 11:30:58 -0800</bug_when>
    <thetext>Currently, patterns with back references, e.g. /(a)\1/, are not supported in the Yarr JIT.  We should add support for some or all back references.  It should be straightforward to support back references without case folding.  JIT support for case folding with 8 bit characters shouldn&apos;t be to hard as the case folding table is a reasonable size.  JIT support of 16-bit and/or Unicode patterns will require calling out to C++ for case folding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382221</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-15 11:35:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/36078115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455870</commentid>
    <comment_count>2</comment_count>
      <attachid>348676</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-08-31 14:55:44 -0700</bug_when>
    <thetext>Created attachment 348676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455961</commentid>
    <comment_count>3</comment_count>
      <attachid>348713</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-09-01 09:03:48 -0700</bug_when>
    <thetext>Created attachment 348713
Updated pPatch with speculative build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1455962</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-01 09:06:07 -0700</bug_when>
    <thetext>Attachment 348713 did not pass style-queue:


ERROR: Source/JavaScriptCore/yarr/YarrJIT.cpp:3818:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExp.cpp:308:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExp.cpp:368:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456358</commentid>
    <comment_count>5</comment_count>
      <attachid>348713</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-09-04 10:23:11 -0700</bug_when>
    <thetext>Comment on attachment 348713
Updated pPatch with speculative build fixes

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1288
&gt; +

I&apos;ll revert this whitespace change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456453</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-09-04 14:19:00 -0700</bug_when>
    <thetext>Committed r235636: &lt;https://trac.webkit.org/changeset/235636&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456466</commentid>
    <comment_count>7</comment_count>
      <attachid>348713</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-04 14:51:26 -0700</bug_when>
    <thetext>Comment on attachment 348713
Updated pPatch with speculative build fixes

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

LGTM too. It would be nice to add some more tests for some of the trickier tests in the JIT.

&gt; Source/JavaScriptCore/yarr/YarrCanonicalizeUCS2.cpp:548
&gt; +    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x39c, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,

Any idea what 0x39c is?

&gt; Source/JavaScriptCore/yarr/YarrCanonicalizeUCS2.cpp:552
&gt; +    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178

ditto about 0x178?

Can you add tests for these?

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1135
&gt; +            readCharacterDontDecodeSurrogates(0, patternCharacter, patternIndex);
&gt; +            readCharacterDontDecodeSurrogates(m_checkedOffset - term-&gt;inputPosition, character);

Indentation is wrong.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1181
&gt; +            load32(Address(output, (subpatternId &lt;&lt; 1) * sizeof(int)), patternIndex);
&gt; +            load32(Address(output, ((subpatternId &lt;&lt; 1) + 1) * sizeof(int)), patternTemp);

Why &quot;&lt;&lt; 1&quot; everywhere instead of &quot;* 2&quot;?

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1263
&gt; +            load32(Address(output, (subpatternId &lt;&lt; 1) * sizeof(int)), patternIndex);
&gt; +            load32(Address(output, ((subpatternId &lt;&lt; 1) + 1) * sizeof(int)), patternTemp);

Why not just use TimesFour for these addresses instead of &quot;* sizeof(int)&quot;? Wouldn&apos;t we end up with better instruction encoding?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456503</commentid>
    <comment_count>8</comment_count>
      <attachid>348713</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-09-04 16:21:17 -0700</bug_when>
    <thetext>Comment on attachment 348713
Updated pPatch with speculative build fixes

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

&gt;&gt; Source/JavaScriptCore/yarr/YarrCanonicalizeUCS2.cpp:548
&gt;&gt; +    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x39c, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
&gt; 
&gt; Any idea what 0x39c is?

That is the appropriate toUpper() result for 0xb5.

&gt;&gt; Source/JavaScriptCore/yarr/YarrCanonicalizeUCS2.cpp:552
&gt;&gt; +    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178
&gt; 
&gt; ditto about 0x178?
&gt; 
&gt; Can you add tests for these?

That is the correct toUpper() result for 0xff.

I&apos;ll add tests for these two cases.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1135
&gt;&gt; +            readCharacterDontDecodeSurrogates(m_checkedOffset - term-&gt;inputPosition, character);
&gt; 
&gt; Indentation is wrong.

I&apos;ll land a fix for this.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1181
&gt;&gt; +            load32(Address(output, ((subpatternId &lt;&lt; 1) + 1) * sizeof(int)), patternTemp);
&gt; 
&gt; Why &quot;&lt;&lt; 1&quot; everywhere instead of &quot;* 2&quot;?

Following the convention already in this file.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1263
&gt;&gt; +            load32(Address(output, ((subpatternId &lt;&lt; 1) + 1) * sizeof(int)), patternTemp);
&gt; 
&gt; Why not just use TimesFour for these addresses instead of &quot;* sizeof(int)&quot;? Wouldn&apos;t we end up with better instruction encoding?

The (subpatternId &lt;&lt; 1) * sizeof(int)) becomes an offset of subpattern * 2 * 4. The instruction coding is fine (see last two instructions):
   7:OpTerm BackReference pattern #1 {0,...} non-greedy
        ...
        0x29db3e40904e: jmp 0x29db3e4090ba
        0x29db3e409053: mov 0x8(%rcx), %r9d
        0x29db3e409057: mov 0xc(%rcx), %r10d</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456573</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-09-04 17:59:05 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #8)
&gt; Comment on attachment 348713 [details]

&gt; &gt;&gt; Source/JavaScriptCore/yarr/YarrCanonicalizeUCS2.cpp:552
&gt; &gt;&gt; +    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178
&gt; &gt; 
&gt; &gt; ditto about 0x178?
&gt; &gt; 
&gt; &gt; Can you add tests for these?

New tests tracked in https://bugs.webkit.org/show_bug.cgi?id=189291.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348676</attachid>
            <date>2018-08-31 14:55:44 -0700</date>
            <delta_ts>2018-09-01 09:03:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>180874.patch</filename>
            <type>text/plain</type>
            <size>27017</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE4LTA4LTMxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFlBUlI6IEpJVCBSZWdFeHBzIHdpdGggYmFjayByZWZlcmVuY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA4NzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBKSVQnZWQgYmFj
ayByZWZlcmVuY2VzIGZvciBhbGwgY291bnRlZCB0eXBlcy4gIFRoZSBvbmx5IHR5cGUgb2YgYmFj
ayByZWZlcmVuY2VzCisgICAgICAgIG5vdCBoYW5kbGVkIGluIHRoZSBKSVQgYXJlIDE2Yml0IG1h
dGNoZXMgdGhhdCBpZ25vcmUgY2FzZS4gIFN1Y2ggc3VwcG9ydCB3b3VsZCByZXF1aXJlIHRoZQor
ICAgICAgICBjYW5vbmljYWxpemF0aW9uIHRoYXQgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gdGhl
IFlhcnIgaW50ZXJwcmV0ZXIgdmlhIGEgQyBmdW50aW9uIGNhbGwuCisgICAgICAgIFRoZSBiYWNr
IHJlZmVyZW5jZSBwcm9jZXNzaW5nIGZvciBzdXJyb2dhdGUgcGFpcnMgaXMgaW1wbGVtZW50ZWQg
YnkgaW5kaXZpZHVhbGx5IGNvbXBhcmluZworICAgICAgICBlYWNoIHN1cnJvZ2F0ZSBhbGEgbWVt
Y21wLgorCisgICAgICAgIEFkZGVkIGEgZ2VuZXJhdGVkIGNhbm9uaWNhbGl6YXRpb24gdGFibGUg
Zm9yIHRoZSBMQ2hhciAoOGJpdCkgZG9tYWluIHRvIHByb2Nlc3MgY2FzZQorICAgICAgICBpZ25v
cmVkIGJhY2sgcmVmZXJlbmNlcy4KKworICAgICAgICBBZGRlZCBtYWNybyBhc3NlbWJsZXIgbG9h
ZDE2KEV4dGVuZGVkQWRkcmVzcykgZm9yIGluZGV4ZWQgYWNjZXNzIHRvIHRoZSBjYW5vbmljYWxp
emF0aW9uIHRhYmxlLgorCisgICAgICAgIEFkZGVkIGEgbmV3IEpJVCBmYWlsdXJlIHJlYXNvbiBm
b3IgZm9yd2FyZCByZWZlcmVuY2VzIGFzIHRoZSBjaGVjayB0byBKSVQgZXhwcmVzc2lvbnMgd2l0
aAorICAgICAgICBmb3J3YXJkIHJlZmVyZW5jZXMgd2UncmUgaGFuZGxlZCBzeW5vbmltb3VzbHkg
dGhvc2UgY29udGFpbmluZyBiYWNrIHJlZmVyZW5jZXMuCisgICAgICAgIAorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6
bG9hZDE2KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMTYpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6bG9hZDE2KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29t
cGlsZU1hdGNoT25seSk6CisgICAgICAgICogeWFyci9ZYXJyQ2Fub25pY2FsaXplLmg6CisgICAg
ICAgICogeWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHA6CisgICAgICAgICogeWFyci9ZYXJy
Q2Fub25pY2FsaXplVUNTMi5qczoKKyAgICAgICAgKHNldCBjaGFyYWN0ZXJzLmhleC5zZXQgc3Ry
aW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNoZWNrTm90RW5vdWdoSW5wdXQpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpyZWFkQ2hhcmFjdGVyRG9udERlY29kZVN1cnJv
Z2F0ZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjptYXRjaEJhY2tyZWZl
cmVuY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2tS
ZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tC
YWNrUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJh
dGVUZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrVGVy
bSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpkdW1wQ29tcGlsZUZhaWx1cmUpOgorICAgICAgICAqIHlhcnIvWWFyckpJ
VC5oOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6
QmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCk6CisKIDIw
MTgtMDgtMzEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBl
eGNlcHRpb24gY2hlY2sgYWNjb3VudGluZyBpbiBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yKCkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMzU1NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5OSw2ICs2
OTksMTEgQEAgcHVibGljOgogICAgICAgICB4b3IzMihzcmMsIGRlc3QpOwogICAgIH0KIAorICAg
IHZvaWQgbG9hZDE2KEV4dGVuZGVkQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkMTYoQWRkcmVzcyhhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0
KSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGVz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMTgsNyArMTIxOCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDw2ND4o
bWVtb3J5VGVtcFJlZ2lzdGVyLCBtZW1vcnlUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIEFz
c2VtYmxlcjo6VVhUWCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmxkcmgo
ZGVzdCwgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOwogICAgIH0KLSAgICAKKwor
ICAgIHZvaWQgbG9hZDE2KEV4dGVuZGVkQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtb3ZlVG9DYWNoZWRSZWcoVHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihhZGRyZXNzLm9mZnNldCkpLCBjYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXIo
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcmgoZGVzdCwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UsIEFzc2VtYmxlcjo6VVhUWCwgMSk7CisgICAgICAgIGlmIChkZXN0ID09IG1l
bW9yeVRlbXBSZWdpc3RlcikKKyAgICAgICAgICAgIGNhY2hlZE1lbW9yeVRlbXBSZWdpc3Rlcigp
LmludmFsaWRhdGUoKTsKKyAgICB9CisKICAgICB2b2lkIGxvYWQxNlVuYWxpZ25lZChJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbG9hZDE2
KGFkZHJlc3MsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjM1NTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg1LDcgKzEyODUsMTQgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92endsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUsIGRlc3QpOwogICAgIH0KLSAgICAK
KworICAgIHZvaWQgbG9hZDE2KEV4dGVuZGVkQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBUcnVzdGVkSW1tUHRyIGFkZHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYWRkcmVzcy5vZmZzZXQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
Om1vdmUoYWRkciwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBsb2FkMTYoQmFzZUluZGV4
KHNjcmF0Y2hSZWdpc3RlcigpLCBhZGRyZXNzLmJhc2UsIFRpbWVzVHdvKSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBsb2FkMTYoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6d2xfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5jcHAJKHJldmlzaW9uIDIzNTU2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIFJlZ0V4
cDo6Y29tcGlsZShWTSogdm0sIFlhcnI6OllhcnJDCiAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJf
SklUKQotICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgIXBhdHRl
cm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6Y2FuVXNlUmVnRXhwSklU
KCkpIHsKKyAgICBpZiAoIXBhdHRlcm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAm
JiBWTTo6Y2FuVXNlUmVnRXhwSklUKCkpIHsKICAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0
ZXJuLCBtX3BhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCB2bSwgbV9yZWdFeHBKSVRDb2RlKTsKICAg
ICAgICAgaWYgKCFtX3JlZ0V4cEpJVENvZGUuZmFpbHVyZVJlYXNvbigpKSB7CiAgICAgICAgICAg
ICBtX3N0YXRlID0gSklUQ29kZTsKQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIFJlZ0V4cDo6Y29t
cGlsZU1hdGNoT25seShWTSogdm0sIFlhCiAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUKQot
ICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYgIXBhdHRlcm4uY29u
dGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6Y2FuVXNlUmVnRXhwSklUKCkpIHsK
KyAgICBpZiAoIXBhdHRlcm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6
Y2FuVXNlUmVnRXhwSklUKCkpIHsKICAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBt
X3BhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCB2bSwgbV9yZWdFeHBKSVRDb2RlLCBZYXJyOjpNYXRj
aE9ubHkpOwogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5mYWlsdXJlUmVhc29uKCkpIHsK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJDYW5vbmljYWxpemUuaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw3IEBAIHN0cnVjdCBDYW5vbmljYWxpemF0aW9uUmFuZ2UgewogZXh0ZXJu
IGNvbnN0IHNpemVfdCBVQ1MyX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTOwogZXh0ZXJuIGNvbnN0
IFVDaGFyMzIqIGNvbnN0IHVjczJDaGFyYWN0ZXJTZXRJbmZvW107CiBleHRlcm4gY29uc3QgQ2Fu
b25pY2FsaXphdGlvblJhbmdlIHVjczJSYW5nZUluZm9bXTsKK2V4dGVybiBjb25zdCB1aW50MTZf
dCBjYW5vbmljYWxUYWJsZUxDaGFyWzI1Nl07CiAKIGV4dGVybiBjb25zdCBzaXplX3QgVU5JQ09E
RV9DQU5PTklDQUxJWkFUSU9OX1JBTkdFUzsKIGV4dGVybiBjb25zdCBVQ2hhcjMyKiBjb25zdCB1
bmljb2RlQ2hhcmFjdGVyU2V0SW5mb1tdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJDYW5vbmljYWxpemVVQ1MyLmNwcAkocmV2aXNpb24gMjM1NTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzMsNSArNTMzLDI0IEBAIGNvbnN0IENhbm9uaWNhbGl6YXRpb25S
YW5nZSB1Y3MyUmFuZ2VJbmYKICAgICB7IDB4ZmY1YiwgMHhmZmZmLCAweDAwMDAsIENhbm9uaWNh
bGl6ZVVuaXF1ZSB9LAogfTsKIAorY29uc3QgdWludDE2X3QgY2Fub25pY2FsVGFibGVMQ2hhclsy
NTZdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4
MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAg
MHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgx
OSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAweDIwLCAweDIxLCAw
eDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJi
LCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4
MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2Qs
IDB4M2UsIDB4M2YsCisgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwK
KyAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4
LCAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAorICAgIDB4NjAsIDB4
NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEs
IDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsCisgICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1
MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwgMHg1YSwgMHg3YiwgMHg3Yywg
MHg3ZCwgMHg3ZSwgMHg3ZiwKKyAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1
LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAw
eDhmLAorICAgIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcs
IDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisgICAgMHhh
MCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwg
MHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKKyAgICAweGIwLCAweGIxLCAweGIy
LCAweGIzLCAweGI0LCAweDM5YywgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwg
MHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKKyAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0
LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAw
eGNlLCAweGNmLAorICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYs
IDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCisg
ICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwg
MHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICAweGQwLCAweGQx
LCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGY3LCAweGQ4LCAweGQ5LCAweGRhLCAw
eGRiLCAweGRjLCAweGRkLCAweGRlLCAweDE3OAorfTsKKwogfSB9IC8vIEpTQzo6WWFycgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyQ2Fub25pY2FsaXpl
VUNTMi5qcwkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckNhbm9uaWNhbGl6ZVVDUzIuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjQg
QEAgZnVuY3Rpb24gY3JlYXRlVGFibGVzKHByZWZpeCwgbWF4VmFsdWUsIAogICAgIH0KICAgICBw
cmludCgifTsiKTsKICAgICBwcmludCgpOworICAgIC8vIENyZWF0ZSBjYW5vbmljYWwgdGFibGUg
Zm9yIExDaGFyIGRvbWFpbgorICAgIGxldCBsaW5lID0gImNvbnN0IHVpbnQxNl90IGNhbm9uaWNh
bFRhYmxlTENoYXJbMjU2XSA9IHsiOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKKyAgICAgICAgaWYgKCEoaSAlIDE2KSkgeworICAgICAgICAgICAgcHJpbnQobGluZSk7Cisg
ICAgICAgICAgICBsaW5lID0gIiAgICAiOworICAgICAgICB9CisgICAgICAgIGxldCBjYW5vbmlj
YWxDaGFyID0gY2Fub25pY2FsaXplKGkpOworICAgICAgICBsaW5lID0gbGluZSArIChjYW5vbmlj
YWxDaGFyIDwgMTYgPyAiMHgwIiA6ICIweCIpICsgY2Fub25pY2FsQ2hhci50b1N0cmluZygxNik7
CisgICAgICAgIGlmICgoaSAlIDE2KSAhPSAxNSkKKyAgICAgICAgICAgIGxpbmUgKz0gIiwgIjsK
KyAgICAgICAgZWxzZSBpZiAoaSAhPSAyNTUpCisgICAgICAgICAgICBsaW5lICs9ICIsIjsKKyAg
ICB9CisgICAgcHJpbnQobGluZSk7CisgICAgcHJpbnQoIn07Iik7CisgICAgcHJpbnQoKTsKKyAg
ICAKIH0KIAogcHJpbnRIZWFkZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCShyZXZpc2lvbiAyMzU1NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCwxMiBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAgIHJldHVybiBicmFuY2gz
MihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOwogICAgIH0KIAorICAgIEp1bXAgY2hlY2tO
b3RFbm91Z2hJbnB1dChSZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCisgICAgeworICAgICAg
ICBhZGQzMihpbmRleCwgYWRkaXRpb25hbEFtb3VudCk7CisgICAgICAgIHJldHVybiBicmFuY2gz
MihBYm92ZSwgYWRkaXRpb25hbEFtb3VudCwgbGVuZ3RoKTsKKyAgICB9CisKICAgICBKdW1wIGNo
ZWNrSW5wdXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
aW5kZXgsIGxlbmd0aCk7CkBAIC01NDYsNiArNTUyLDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
OiBwdWJsaWMgWWFyckpJVEluZm8KICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgcmVhZENoYXJh
Y3RlckRvbnREZWNvZGVTdXJyb2dhdGVzKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFj
dGVyT2Zmc2V0LCBSZWdpc3RlcklEIHJlc3VsdFJlZywgUmVnaXN0ZXJJRCBpbmRleFJlZyA9IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGluZGV4UmVn
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAg
ICAgbG9hZDgoYWRkcmVzcywgcmVzdWx0UmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgfQorICAgIAogICAgIHZv
aWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNl
dCwgUmVnaXN0ZXJJRCByZXN1bHRSZWcsIFJlZ2lzdGVySUQgaW5kZXhSZWcgPSBpbmRleCkKICAg
ICB7CiAgICAgICAgIEJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRk
cmVzcyhuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7CkBAIC0x
MTA2LDYgKzExMjIsMjI2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJVElu
Zm8KICAgICAgICAgYmFja3RyYWNrVGVybURlZmF1bHQob3BJbmRleCk7CiAgICAgfQogCisgICAg
dm9pZCBtYXRjaEJhY2tyZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgsIEp1bXBMaXN0JiBjaGFyYWN0
ZXJNYXRjaEZhaWxzLCBSZWdpc3RlcklEIGNoYXJhY3RlciwgUmVnaXN0ZXJJRCBwYXR0ZXJuSW5k
ZXgsIFJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIFlhcnJPcCYg
b3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CisgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZlcmVuY2VT
dWJwYXR0ZXJuSWQ7CisKKyAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKworICAgICAgICAgICAg
cmVhZENoYXJhY3RlckRvbnREZWNvZGVTdXJyb2dhdGVzKDAsIHBhdHRlcm5DaGFyYWN0ZXIsIHBh
dHRlcm5JbmRleCk7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyRG9udERlY29kZVN1cnJvZ2F0
ZXMobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSkKKyAgICAgICAgICAg
IGNoYXJhY3Rlck1hdGNoRmFpbHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIs
IHBhdHRlcm5DaGFyYWN0ZXIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBKdW1wIGNo
YXJhY3RlcnNNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0
ZXIpOworICAgICAgICAgICAgRXh0ZW5kZWRBZGRyZXNzIGNoYXJhY3RlclRhYmxlRW50cnkoY2hh
cmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVMQ2hhcikp
OworICAgICAgICAgICAgbG9hZDE2KGNoYXJhY3RlclRhYmxlRW50cnksIGNoYXJhY3Rlcik7Cisg
ICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNoYXJh
Y3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsK
KyAgICAgICAgICAgIGxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rlcik7
CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJz
TWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIAorICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBw
YXR0ZXJuSW5kZXgpOworICAgICAgICAKKyAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRl
cm5JbmRleCwgQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXpl
b2YoaW50KSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGdlbmVyYXRl
QmFja1JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIFlhcnJPcCYgb3Ag
PSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07
CisKKyAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgbV9jaGFyU2l6ZSAhPSBD
aGFyOCkgeworICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6
QmFja1JlZmVyZW5jZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0ZXJuSWQ7
CisgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1l
TG9jYXRpb247CisKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXJPclRlbXAgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBwYXR0ZXJuSW5kZXggPSByZWdUMTsKKyAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBwYXR0ZXJuVGVtcCA9IHJlZ1QyOworCisgICAgICAgIHN0
b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQgfHwgdGVybS0+cXVhbnRpdHlNYXhDb3VudCAh
PSAxKQorICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigwKSwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50
SW5kZXgoKSk7CisKKyAgICAgICAgSnVtcExpc3QgbWF0Y2hlczsKKworICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJOb25HcmVlZHkpIHsKKyAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSwg
cGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1dCwgKChzdWJw
YXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSwgcGF0dGVyblRlbXApOworCisgICAg
ICAgICAgICAvLyBBbiBlbXB0eSBtYXRjaCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgY29uc3VtaW5n
IGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRp
ZmllckZpeGVkQ291bnQgfHwgdGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7CisgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIFRydXN0ZWRJbW0zMigtMSks
IHBhdHRlcm5JbmRleCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1YWws
IFRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgSnVtcCB0
cnlOb25aZXJvTWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CisgICAgICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAg
ICAgICB0cnlOb25aZXJvTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CisgICAgICAgIGNhc2Ug
UXVhbnRpZmllckZpeGVkQ291bnQ6IHsKKyAgICAgICAgICAgIExhYmVsIG91dGVyTG9vcCh0aGlz
KTsKKworICAgICAgICAgICAgLy8gUGF0dGVyblRlbXAgc2hvdWxkIGNvbnRhaW4gcGF0dGVybiBl
bmQgaW5kZXggYXQgdGhpcyBwb2ludAorICAgICAgICAgICAgc3ViMzIocGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBpZiAobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5w
dXRQb3NpdGlvbikKKyAgICAgICAgICAgICAgICBzdWIzMihJbW0zMigobV9jaGVja2VkT2Zmc2V0
IC0gdGVybS0+aW5wdXRQb3NpdGlvbikudW5zYWZlR2V0KCkpLCBwYXR0ZXJuVGVtcCk7CisgICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KHBhdHRlcm5UZW1w
KSk7CisKKyAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4LCBvcC5tX2p1bXBz
LCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworCisgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7CisgICAgICAgICAgICAgICAg
bG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFj
a1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOworICAgICAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUoY2hhcmFjdGVyT3JUZW1wLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgp
KTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgSW1tMzIo
dGVybS0+cXVhbnRpdHlNYXhDb3VudC51bnNhZmVHZXQoKSksIGNoYXJhY3Rlck9yVGVtcCkpOwor
ICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAx
KSAqIHNpemVvZihpbnQpKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSks
IHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICBqdW1wKG91dGVyTG9vcCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUXVhbnRpZmllckdyZWVkeTogeworICAgICAg
ICAgICAgSnVtcExpc3QgaW5jb21wbGV0ZU1hdGNoZXM7CisKKyAgICAgICAgICAgIExhYmVsIG91
dGVyTG9vcCh0aGlzKTsKKworICAgICAgICAgICAgLy8gUGF0dGVyblRlbXAgc2hvdWxkIGNvbnRh
aW4gcGF0dGVybiBlbmQgaW5kZXggYXQgdGhpcyBwb2ludAorICAgICAgICAgICAgc3ViMzIocGF0
dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBpZiAobV9jaGVja2VkT2Zmc2V0
IC0gdGVybS0+aW5wdXRQb3NpdGlvbikKKyAgICAgICAgICAgICAgICBzdWIzMihJbW0zMigobV9j
aGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbikudW5zYWZlR2V0KCkpLCBwYXR0ZXJu
VGVtcCk7CisgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KHBh
dHRlcm5UZW1wKSk7CisKKyAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4LCBp
bmNvbXBsZXRlTWF0Y2hlcywgY2hhcmFjdGVyT3JUZW1wLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5U
ZW1wKTsKKworICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFy
YWN0ZXJPclRlbXApOworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0
ZXJPclRlbXApOworICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGNoYXJhY3Rlck9yVGVtcCwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNo
QW1vdW50SW5kZXgoKSk7CisgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAh
PSBxdWFudGlmeUluZmluaXRlKQorICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGJyYW5j
aDMyKEVxdWFsLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50LnVuc2FmZUdldCgpKSwgY2hh
cmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQsIChzdWJw
YXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXpl
b2YoaW50KSksIHBhdHRlcm5UZW1wKTsKKworICAgICAgICAgICAgLy8gU3RvcmUgY3VycmVudCBp
bmRleCBpbiBmcmFtZSBmb3IgcmVzdG9yaW5nIGFmdGVyIGEgcGFydGlhbCBtYXRjaAorICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIGp1bXAo
b3V0ZXJMb29wKTsKKworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluayh0aGlzKTsK
KyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworCisgICAgICAg
ICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFF1YW50
aWZpZXJOb25HcmVlZHk6IHsKKyAgICAgICAgICAgIEp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVz
OworCisgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAgICBv
cC5tX3JlZW50cnkgPSBsYWJlbCgpOworCisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRw
dXQsIChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHBhdHRlcm5JbmRleCk7Cisg
ICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsg
MSkgKiBzaXplb2YoaW50KSksIHBhdHRlcm5UZW1wKTsKKworICAgICAgICAgICAgLy8gQW4gZW1w
dHkgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCisgICAg
ICAgICAgICBKdW1wIHplcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1t
MzIoLTEpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgSnVtcCB0cnlOb25aZXJvTWF0Y2gg
PSBicmFuY2gzMihOb3RFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAg
ICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShUcnVzdGVkSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAgICAgICAgICAgbWF0Y2hl
cy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHRyeU5vblplcm9NYXRjaC5saW5rKHRoaXMp
OworCisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGlucHV0IHJlbWFpbmluZyB0byBt
YXRjaAorICAgICAgICAgICAgc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAg
ICAgICAgICBpZiAobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbikKKyAgICAg
ICAgICAgICAgICBzdWIzMihJbW0zMigobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3Np
dGlvbikudW5zYWZlR2V0KCkpLCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtYXRjaGVzLmFw
cGVuZChjaGVja05vdEVub3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CisKKyAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7CisKKyAgICAgICAgICAgIG1hdGNoQmFja3Jl
ZmVyZW5jZShvcEluZGV4LCBpbmNvbXBsZXRlTWF0Y2hlcywgY2hhcmFjdGVyT3JUZW1wLCBwYXR0
ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKworICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVt
cCgpKTsKKworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworCisgICAgICAgICAgICBt
YXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIHZvaWQgYmFja3RyYWNrQmFja1JlZmVyZW5jZShzaXplX3Qgb3BJbmRl
eCkKKyAgICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAg
UGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisKKyAgICAgICAgdW5zaWduZWQgc3VicGF0
dGVybklkID0gdGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKKworICAgICAgICBtX2Jh
Y2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlz
KTsKKworICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKworICAgICAgICB1bnNpZ25lZCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOworICAgICAgICBzd2l0
Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgeworICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENv
dW50OgorICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFF1YW50aWZpZXJHcmVlZHk6IHsKKyAgICAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSByZWdUMDsKKyAgICAgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVyblN0YXJ0SW5kZXggPSByZWdUMTsKKyAgICAgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVybkVuZEluZGV4T3JMZW4gPSByZWdUMjsKKworICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBtYXRjaEFtb3VudCk7CisgICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIG1hdGNoQW1vdW50KSk7
CisKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAx
KSAqIHNpemVvZihpbnQpKSwgcGF0dGVyblN0YXJ0SW5kZXgpOworICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3Mob3V0cHV0LCAoKHN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkp
LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAgICAgICBzdWIzMihwYXR0ZXJuU3RhcnRJ
bmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOworICAgICAgICAgICAgc3ViMzIocGF0dGVybkVu
ZEluZGV4T3JMZW4sIGluZGV4KTsKKworICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBtYXRjaEFtb3VudCk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRj
aEFtb3VudEluZGV4KCkpOworICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFF1YW50aWZpZXJOb25HcmVl
ZHk6IHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSByZWdUMDsK
KworICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBtYXRjaEFtb3Vu
dCk7CisgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUlu
ZmluaXRlKQorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQudW5zYWZlR2V0KCkpLCBtYXRjaEFt
b3VudCkpOworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7
CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkp
OworICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZShzaXplX3Qgb3BJbmRleCkKICAgICB7CiAg
ICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKQEAgLTE4NTQsMTMgKzIwOTAsMTUg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6
CisgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRGYWlsdXJlUmVhc29uOjpGb3J3YXJk
UmVmZXJlbmNlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6
VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCiAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVmZXJl
bmNlOgotICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6QmFj
a1JlZmVyZW5jZTsKKyAgICAgICAgICAgIGdlbmVyYXRlQmFja1JlZmVyZW5jZShvcEluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRG90U3Rh
ckVuY2xvc3VyZToKICAgICAgICAgICAgIGdlbmVyYXRlRG90U3RhckVuY2xvc3VyZShvcEluZGV4
KTsKQEAgLTE5MjAsMTggKzIxNTgsMTkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZ
YXJySklUSW5mbwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6CisgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBK
SVRGYWlsdXJlUmVhc29uOjpGb3J3YXJkUmVmZXJlbmNlOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKICAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgIGNhc2UgUGF0
dGVyblRlcm06OlR5cGVEb3RTdGFyRW5jbG9zdXJlOgotICAgICAgICAgICAgYmFja3RyYWNrRG90
U3RhckVuY2xvc3VyZShvcEluZGV4KTsKKyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJh
Y2tSZWZlcmVuY2U6CisgICAgICAgICAgICBiYWNrdHJhY2tCYWNrUmVmZXJlbmNlKG9wSW5kZXgp
OwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJh
Y2tSZWZlcmVuY2U6Ci0gICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRGYWlsdXJlUmVh
c29uOjpCYWNrUmVmZXJlbmNlOworICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRG90U3Rh
ckVuY2xvc3VyZToKKyAgICAgICAgICAgIGJhY2t0cmFja0RvdFN0YXJFbmNsb3N1cmUob3BJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTM1NjYsNiArMzgw
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzCisgICAgICAgICAgICAmJiAoY29tcGlsZU1vZGUg
PT0gTWF0Y2hPbmx5IHx8IChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIG1fY2hhclNpemUgIT0g
Q2hhcjgpKSkgeworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWls
dXJlUmVhc29uKEpJVEZhaWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2UpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSBi
ZWZvcmUgZ2VuZXJhdGluZyBjb2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNlZCBvbiBjb21waWxh
dGlvbiB0aGF0CiAgICAgICAgIC8vIGFyZSB1c2VkIGR1cmluZyBnZW5lcmF0aW9uLgogICAgICAg
ICBvcENvbXBpbGVCb2R5KG1fcGF0dGVybi5tX2JvZHkpOwpAQCAtMzcxMyw2ICszOTU4LDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkFzc2VydCBFT0wiKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJh
Y2tSZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiQmFja1JlZmVyZW5jZSBw
YXR0ZXJuICMldSIsIHRlcm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0ZXJuSWQpOworICAgICAgICAg
ICAgICAgIHRlcm0tPmR1bXBRdWFudGlmaWVyKG91dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyOgog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHlwZVBhdHRlcm5DaGFyYWN0ZXIgIik7CiAgICAg
ICAgICAgICAgICAgZHVtcFVDaGFyMzIob3V0LCB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyKTsKQEAg
LTM3MzksNyArMzk4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6Ci0gICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQmFja1JlZmVyZW5jZToKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIlR5cGVGb3J3YXJkUmVmZXJlbmNlIDxub3QgaGFuZGxlZD4iKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBh
cmVudGhlc2VzU3VicGF0dGVybjoKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0zODUzLDcgKzQxMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4oMCk7CiAKICAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3NlcnRpb25FbmQ6Ci0g
ICAgICAgICAgICBvdXQucHJpbnQoIk9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCVzXG4iLCB0
ZXJtLT5pbnZlcnQoKSA/ICIgaW52ZXJ0ZWQiIDogIiIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kJXNcbiIsIHRlcm0tPmludmVydCgpID8gIiBp
bnZlcnRlZCIgOiAiIik7CiAgICAgICAgICAgICByZXR1cm4oMCk7CiAKICAgICAgICAgY2FzZSBP
cE1hdGNoRmFpbGVkOgpAQCAtMzkxNyw3ICs0MTY5LDEwIEBAIHN0YXRpYyB2b2lkIGR1bXBDb21w
aWxlRmFpbHVyZShKSVRGYWlsdXIKICAgICAgICAgZGF0YUxvZygiQ2FuJ3QgSklUIGEgcGF0dGVy
biBkZWNvZGluZyBzdXJyb2dhdGUgcGFpcnNcbiIpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEpJVEZhaWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2U6Ci0gICAgICAgIGRhdGFMb2coIkNhbid0
IEpJVCBhIHBhdHRlcm4gY29udGFpbmluZyBiYWNrIHJlZmVyZW5jZXNcbiIpOworICAgICAgICBk
YXRhTG9nKCJDYW4ndCBKSVQgc29tZSBwYXR0ZXJucyBjb250YWluaW5nIGJhY2sgcmVmZXJlbmNl
c1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURmFpbHVyZVJlYXNvbjo6Rm9yd2Fy
ZFJlZmVyZW5jZToKKyAgICAgICAgZGF0YUxvZygiQ2FuJ3QgSklUIGEgcGF0dGVybiBjb250YWlu
aW5nIGZvcndhcmQgcmVmZXJlbmNlc1xuIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklU
RmFpbHVyZVJlYXNvbjo6VmFyaWFibGVDb3VudGVkUGFyZW50aGVzaXNXaXRoTm9uWmVyb01pbmlt
dW06CiAgICAgICAgIGRhdGFMb2coIkNhbid0IEpJVCBhIHBhdHRlcm4gY29udGFpbmluZyBhIHZh
cmlhYmxlIGNvdW50ZWQgcGFyZW50aGVzaXMgd2l0aCBhIG5vbi16ZXJvIG1pbmltdW1cbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gMjM1NTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw2ICs1Miw3IEBAIG5hbWVzcGFjZSBZYXJyIHsKIGVudW0gY2xhc3MgSklURmFpbHVyZVJl
YXNvbiA6IHVpbnQ4X3QgewogICAgIERlY29kZVN1cnJvZ2F0ZVBhaXIsCiAgICAgQmFja1JlZmVy
ZW5jZSwKKyAgICBGb3J3YXJkUmVmZXJlbmNlLAogICAgIFZhcmlhYmxlQ291bnRlZFBhcmVudGhl
c2lzV2l0aE5vblplcm9NaW5pbXVtLAogICAgIFBhcmVudGhlc2l6ZWRTdWJwYXR0ZXJuLAogICAg
IEZpeGVkQ291bnRQYXJlbnRoZXNpemVkU3VicGF0dGVybiwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtNTU1LDgg
KzU1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnRwdHJfdCBiZWdpbjsgLy8gTm90IHJlYWxs
eSBuZWVkZWQgZm9yIGdyZWVkeSBxdWFudGlmaWVycy4KICAgICAgICAgdWludHB0cl90IG1hdGNo
QW1vdW50OyAvLyBOb3QgcmVhbGx5IG5lZWRlZCBmb3IgZml4ZWQgcXVhbnRpZmllcnMuCiAKLSAg
ICAgICAgdW5zaWduZWQgYmVnaW5JbmRleCgpIHsgcmV0dXJuIG9mZnNldG9mKEJhY2tUcmFja0lu
Zm9CYWNrUmVmZXJlbmNlLCBiZWdpbikgLyBzaXplb2YodWludHB0cl90KTsgfQotICAgICAgICB1
bnNpZ25lZCBtYXRjaEFtb3VudEluZGV4KCkgeyByZXR1cm4gb2Zmc2V0b2YoQmFja1RyYWNrSW5m
b0JhY2tSZWZlcmVuY2UsIG1hdGNoQW1vdW50KSAvIHNpemVvZih1aW50cHRyX3QpOyB9CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBiZWdpbkluZGV4KCkgeyByZXR1cm4gb2Zmc2V0b2YoQmFja1Ry
YWNrSW5mb0JhY2tSZWZlcmVuY2UsIGJlZ2luKSAvIHNpemVvZih1aW50cHRyX3QpOyB9CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBtYXRjaEFtb3VudEluZGV4KCkgeyByZXR1cm4gb2Zmc2V0b2Yo
QmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2UsIG1hdGNoQW1vdW50KSAvIHNpemVvZih1aW50cHRy
X3QpOyB9CiAgICAgfTsKIAogICAgIHN0cnVjdCBCYWNrVHJhY2tJbmZvQWx0ZXJuYXRpdmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348713</attachid>
            <date>2018-09-01 09:03:48 -0700</date>
            <delta_ts>2018-09-04 12:30:12 -0700</delta_ts>
            <desc>Updated pPatch with speculative build fixes</desc>
            <filename>180874-2.patch</filename>
            <type>text/plain</type>
            <size>28836</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM1NTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE4LTA5LTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFlBUlI6IEpJVCBSZWdFeHBzIHdpdGggYmFjayByZWZlcmVuY2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA4NzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBKSVQnZWQgYmFj
ayByZWZlcmVuY2VzIGZvciBhbGwgY291bnRlZCB0eXBlcy4gIFRoZSBvbmx5IHR5cGUgb2YgYmFj
ayByZWZlcmVuY2VzCisgICAgICAgIG5vdCBoYW5kbGVkIGluIHRoZSBKSVQgYXJlIDE2Yml0IG1h
dGNoZXMgdGhhdCBpZ25vcmUgY2FzZS4gIFN1Y2ggc3VwcG9ydCB3b3VsZCByZXF1aXJlIHRoZQor
ICAgICAgICBjYW5vbmljYWxpemF0aW9uIHRoYXQgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gdGhl
IFlhcnIgaW50ZXJwcmV0ZXIgdmlhIGEgQyBmdW50aW9uIGNhbGwuCisgICAgICAgIFRoZSBiYWNr
IHJlZmVyZW5jZSBwcm9jZXNzaW5nIGZvciBzdXJyb2dhdGUgcGFpcnMgaXMgaW1wbGVtZW50ZWQg
YnkgaW5kaXZpZHVhbGx5IGNvbXBhcmluZworICAgICAgICBlYWNoIHN1cnJvZ2F0ZSBhbGEgbWVt
Y21wLgorCisgICAgICAgIEFkZGVkIGEgZ2VuZXJhdGVkIGNhbm9uaWNhbGl6YXRpb24gdGFibGUg
Zm9yIHRoZSBMQ2hhciAoOGJpdCkgZG9tYWluIHRvIHByb2Nlc3MgY2FzZQorICAgICAgICBpZ25v
cmVkIGJhY2sgcmVmZXJlbmNlcy4KKworICAgICAgICBBZGRlZCBtYWNybyBhc3NlbWJsZXIgbG9h
ZDE2KEV4dGVuZGVkQWRkcmVzcykgZm9yIGluZGV4ZWQgYWNjZXNzIHRvIHRoZSBjYW5vbmljYWxp
emF0aW9uIHRhYmxlLgorCisgICAgICAgIEFkZGVkIGEgbmV3IEpJVCBmYWlsdXJlIHJlYXNvbiBm
b3IgZm9yd2FyZCByZWZlcmVuY2VzIGFzIHRoZSBjaGVjayB0byBKSVQgZXhwcmVzc2lvbnMgd2l0
aAorICAgICAgICBmb3J3YXJkIHJlZmVyZW5jZXMgd2UncmUgaGFuZGxlZCBzeW5vbmltb3VzbHkg
dGhvc2UgY29udGFpbmluZyBiYWNrIHJlZmVyZW5jZXMuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
aXMgb25seSBlbmFibGVkIGZvciA2NCBiaXQgcGxhdGZvcm1zLgorCisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bG9hZDE2KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmxvYWQxNik6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpSZWdFeHA6OmNvbXBpbGVNYXRjaE9ubHkpOgorICAgICAgICAqIHlhcnIvWWFyckNhbm9u
aWNhbGl6ZS5oOgorICAgICAgICAqIHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwOgorICAg
ICAgICAqIHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuanM6CisgICAgICAgIChzZXQgY2hhcmFj
dGVycy5oZXguc2V0IHN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKiB5YXJyL1lhcnJK
SVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjaGVja05vdEVub3Vn
aElucHV0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6cmVhZENoYXJhY3Rl
ckRvbnREZWNvZGVTdXJyb2dhdGVzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRv
cjo6bWF0Y2hCYWNrcmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRv
cjo6Z2VuZXJhdGVCYWNrUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVy
YXRvcjo6YmFja3RyYWNrQmFja1JlZmVyZW5jZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJH
ZW5lcmF0b3I6OmdlbmVyYXRlVGVybSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmJhY2t0cmFja1Rlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6ZHVtcENvbXBpbGVGYWlsdXJlKToKKyAgICAg
ICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmg6CisgICAg
ICAgIChKU0M6OllhcnI6OkJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KToK
KyAgICAgICAgKEpTQzo6WWFycjo6QmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1v
dW50SW5kZXgpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgRnVuY3Rpb24gb2JqZWN0IHNob3VsZCBjb252ZXJ0IHBh
cmFtcyB0byBzdHJpbmcgYmVmb3JlIHRocm93IGEgcGFyc2luZyBlcnJvcgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgJKHJldmlzaW9uIDIzNTU2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE4LDcgKzEyMTgsMTUg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGQ8NjQ+KG1lbW9yeVRlbXBSZWdpc3Rl
ciwgbWVtb3J5VGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBBc3NlbWJsZXI6OlVYVFgsIGFk
ZHJlc3Muc2NhbGUpOwogICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIGFkZHJlc3MuYmFz
ZSwgbWVtb3J5VGVtcFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIGxvYWQxNihF
eHRlbmRlZEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bW92ZVRvQ2FjaGVkUmVnKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRk
cmVzcy5vZmZzZXQpKSwgY2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVyKCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5sZHJoKGRlc3QsIG1lbW9yeVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBBc3Nl
bWJsZXI6OlVYVFgsIDEpOworICAgICAgICBpZiAoZGVzdCA9PSBtZW1vcnlUZW1wUmVnaXN0ZXIp
CisgICAgICAgICAgICBjYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXIoKS5pbnZhbGlkYXRlKCk7Cisg
ICAgfQorCiAgICAgdm9pZCBsb2FkMTZVbmFsaWduZWQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBkZXN0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDIzNTU2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTI4NSw3ICsxMjg1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92endsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUsIGRlc3QpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgbG9hZDE2
KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92endsX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
NiArMTAwLDIzIEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDgoZGVzdCwgZGVzdCk7CiAgICAgfQog
CisgICAgdm9pZCBsb2FkMTYoRXh0ZW5kZWRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIFRydXN0ZWRJbW1QdHIgYWRkcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihhZGRyZXNzLm9mZnNldCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
bW92ZShhZGRyLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpsb2FkMTYoQmFzZUluZGV4KHNjcmF0Y2hSZWdpc3RlcigpLCBhZGRyZXNzLmJhc2Us
IFRpbWVzVHdvKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpsb2FkMTYoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYo
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6bG9hZDE2KGFkZHJlc3MsIGRlc3QpOworICAgIH0KKwogICAgIHZv
aWQgbG9hZDMyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAg
ICAgICAgIGlmIChkZXN0ID09IFg4NlJlZ2lzdGVyczo6ZWF4KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiAyMzU1NjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NyArMzA1LDExIEBAIHZvaWQgUmVnRXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckMKICAg
ICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgaWYgKCFwYXR0ZXJuLm1fY29udGFpbnNC
YWNrcmVmZXJlbmNlcyAmJiAhcGF0dGVybi5jb250YWluc1Vuc2lnbmVkTGVuZ3RoUGF0dGVybigp
ICYmIFZNOjpjYW5Vc2VSZWdFeHBKSVQoKSkgeworICAgIGlmICghcGF0dGVybi5jb250YWluc1Vu
c2lnbmVkTGVuZ3RoUGF0dGVybigpICYmIFZNOjpjYW5Vc2VSZWdFeHBKSVQoKQorI2lmICFFTkFC
TEUoWUFSUl9KSVRfQkFDS1JFRkVSRU5DRVMpCisgICAgICAgICYmICFwYXR0ZXJuLm1fY29udGFp
bnNCYWNrcmVmZXJlbmNlcworI2VuZGlmCisgICAgICAgICkgewogICAgICAgICBZYXJyOjpqaXRD
b21waWxlKHBhdHRlcm4sIG1fcGF0dGVyblN0cmluZywgY2hhclNpemUsIHZtLCBtX3JlZ0V4cEpJ
VENvZGUpOwogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5mYWlsdXJlUmVhc29uKCkpIHsK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpAQCAtMzYxLDcgKzM2NSwxMSBAQCB2b2lk
IFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlhCiAgICAgfQogCiAjaWYgRU5BQkxF
KFlBUlJfSklUKQotICAgIGlmICghcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMgJiYg
IXBhdHRlcm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oKSAmJiBWTTo6Y2FuVXNlUmVn
RXhwSklUKCkpIHsKKyAgICBpZiAoIXBhdHRlcm4uY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRl
cm4oKSAmJiBWTTo6Y2FuVXNlUmVnRXhwSklUKCkKKyNpZiAhRU5BQkxFKFlBUlJfSklUX0JBQ0tS
RUZFUkVOQ0VTKQorICAgICAgICAmJiAhcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMK
KyNlbmRpZgorICAgICAgICApIHsKICAgICAgICAgWWFycjo6aml0Q29tcGlsZShwYXR0ZXJuLCBt
X3BhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCB2bSwgbV9yZWdFeHBKSVRDb2RlLCBZYXJyOjpNYXRj
aE9ubHkpOwogICAgICAgICBpZiAoIW1fcmVnRXhwSklUQ29kZS5mYWlsdXJlUmVhc29uKCkpIHsK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKSVRDb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJDYW5vbmljYWxpemUuaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw3IEBAIHN0cnVjdCBDYW5vbmljYWxpemF0aW9uUmFuZ2UgewogZXh0ZXJu
IGNvbnN0IHNpemVfdCBVQ1MyX0NBTk9OSUNBTElaQVRJT05fUkFOR0VTOwogZXh0ZXJuIGNvbnN0
IFVDaGFyMzIqIGNvbnN0IHVjczJDaGFyYWN0ZXJTZXRJbmZvW107CiBleHRlcm4gY29uc3QgQ2Fu
b25pY2FsaXphdGlvblJhbmdlIHVjczJSYW5nZUluZm9bXTsKK2V4dGVybiBjb25zdCB1aW50MTZf
dCBjYW5vbmljYWxUYWJsZUxDaGFyWzI1Nl07CiAKIGV4dGVybiBjb25zdCBzaXplX3QgVU5JQ09E
RV9DQU5PTklDQUxJWkFUSU9OX1JBTkdFUzsKIGV4dGVybiBjb25zdCBVQ2hhcjMyKiBjb25zdCB1
bmljb2RlQ2hhcmFjdGVyU2V0SW5mb1tdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJDYW5vbmljYWxpemVVQ1MyLmNwcAkocmV2aXNpb24gMjM1NTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MzMsNSArNTMzLDI0IEBAIGNvbnN0IENhbm9uaWNhbGl6YXRpb25S
YW5nZSB1Y3MyUmFuZ2VJbmYKICAgICB7IDB4ZmY1YiwgMHhmZmZmLCAweDAwMDAsIENhbm9uaWNh
bGl6ZVVuaXF1ZSB9LAogfTsKIAorY29uc3QgdWludDE2X3QgY2Fub25pY2FsVGFibGVMQ2hhclsy
NTZdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4
MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAg
MHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgx
OSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAweDIwLCAweDIxLCAw
eDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJi
LCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4
MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2Qs
IDB4M2UsIDB4M2YsCisgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwK
KyAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4
LCAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAorICAgIDB4NjAsIDB4
NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEs
IDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsCisgICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1
MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwgMHg1YSwgMHg3YiwgMHg3Yywg
MHg3ZCwgMHg3ZSwgMHg3ZiwKKyAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1
LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAw
eDhmLAorICAgIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcs
IDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisgICAgMHhh
MCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwg
MHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKKyAgICAweGIwLCAweGIxLCAweGIy
LCAweGIzLCAweGI0LCAweDM5YywgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwg
MHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKKyAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0
LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAw
eGNlLCAweGNmLAorICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYs
IDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCisg
ICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwg
MHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICAweGQwLCAweGQx
LCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGY3LCAweGQ4LCAweGQ5LCAweGRhLCAw
eGRiLCAweGRjLCAweGRkLCAweGRlLCAweDE3OAorfTsKKwogfSB9IC8vIEpTQzo6WWFycgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyQ2Fub25pY2FsaXpl
VUNTMi5qcwkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckNhbm9uaWNhbGl6ZVVDUzIuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsMjQg
QEAgZnVuY3Rpb24gY3JlYXRlVGFibGVzKHByZWZpeCwgbWF4VmFsdWUsIAogICAgIH0KICAgICBw
cmludCgifTsiKTsKICAgICBwcmludCgpOworICAgIC8vIENyZWF0ZSBjYW5vbmljYWwgdGFibGUg
Zm9yIExDaGFyIGRvbWFpbgorICAgIGxldCBsaW5lID0gImNvbnN0IHVpbnQxNl90IGNhbm9uaWNh
bFRhYmxlTENoYXJbMjU2XSA9IHsiOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKKyAgICAgICAgaWYgKCEoaSAlIDE2KSkgeworICAgICAgICAgICAgcHJpbnQobGluZSk7Cisg
ICAgICAgICAgICBsaW5lID0gIiAgICAiOworICAgICAgICB9CisgICAgICAgIGxldCBjYW5vbmlj
YWxDaGFyID0gY2Fub25pY2FsaXplKGkpOworICAgICAgICBsaW5lID0gbGluZSArIChjYW5vbmlj
YWxDaGFyIDwgMTYgPyAiMHgwIiA6ICIweCIpICsgY2Fub25pY2FsQ2hhci50b1N0cmluZygxNik7
CisgICAgICAgIGlmICgoaSAlIDE2KSAhPSAxNSkKKyAgICAgICAgICAgIGxpbmUgKz0gIiwgIjsK
KyAgICAgICAgZWxzZSBpZiAoaSAhPSAyNTUpCisgICAgICAgICAgICBsaW5lICs9ICIsIjsKKyAg
ICB9CisgICAgcHJpbnQobGluZSk7CisgICAgcHJpbnQoIn07Iik7CisgICAgcHJpbnQoKTsKKyAg
ICAKIH0KIAogcHJpbnRIZWFkZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCShyZXZpc2lvbiAyMzU1NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCwxMiBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAgIHJldHVybiBicmFuY2gz
MihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOwogICAgIH0KIAorICAgIEp1bXAgY2hlY2tO
b3RFbm91Z2hJbnB1dChSZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCisgICAgeworICAgICAg
ICBhZGQzMihpbmRleCwgYWRkaXRpb25hbEFtb3VudCk7CisgICAgICAgIHJldHVybiBicmFuY2gz
MihBYm92ZSwgYWRkaXRpb25hbEFtb3VudCwgbGVuZ3RoKTsKKyAgICB9CisKICAgICBKdW1wIGNo
ZWNrSW5wdXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
aW5kZXgsIGxlbmd0aCk7CkBAIC01NDYsNiArNTUyLDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
OiBwdWJsaWMgWWFyckpJVEluZm8KICAgICB9CiAjZW5kaWYKIAorICAgIHZvaWQgcmVhZENoYXJh
Y3RlckRvbnREZWNvZGVTdXJyb2dhdGVzKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFj
dGVyT2Zmc2V0LCBSZWdpc3RlcklEIHJlc3VsdFJlZywgUmVnaXN0ZXJJRCBpbmRleFJlZyA9IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGluZGV4UmVn
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQorICAgICAgICAg
ICAgbG9hZDgoYWRkcmVzcywgcmVzdWx0UmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgfQorICAgIAogICAgIHZv
aWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNl
dCwgUmVnaXN0ZXJJRCByZXN1bHRSZWcsIFJlZ2lzdGVySUQgaW5kZXhSZWcgPSBpbmRleCkKICAg
ICB7CiAgICAgICAgIEJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRk
cmVzcyhuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7CkBAIC0x
MTA2LDYgKzExMjIsMjI4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJVElu
Zm8KICAgICAgICAgYmFja3RyYWNrVGVybURlZmF1bHQob3BJbmRleCk7CiAgICAgfQogCisjaWYg
RU5BQkxFKFlBUlJfSklUX0JBQ0tSRUZFUkVOQ0VTKQorICAgIHZvaWQgbWF0Y2hCYWNrcmVmZXJl
bmNlKHNpemVfdCBvcEluZGV4LCBKdW1wTGlzdCYgY2hhcmFjdGVyTWF0Y2hGYWlscywgUmVnaXN0
ZXJJRCBjaGFyYWN0ZXIsIFJlZ2lzdGVySUQgcGF0dGVybkluZGV4LCBSZWdpc3RlcklEIHBhdHRl
cm5DaGFyYWN0ZXIpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07
CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICB1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQgPSB0ZXJtLT5iYWNrUmVmZXJlbmNlU3VicGF0dGVybklkOworCisgICAg
ICAgIExhYmVsIGxvb3AodGhpcyk7CisKKyAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXJEb250RGVj
b2RlU3Vycm9nYXRlcygwLCBwYXR0ZXJuQ2hhcmFjdGVyLCBwYXR0ZXJuSW5kZXgpOworICAgICAg
ICAgICAgcmVhZENoYXJhY3RlckRvbnREZWNvZGVTdXJyb2dhdGVzKG1fY2hlY2tlZE9mZnNldCAt
IHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CisgICAgICAgIAorICAgICAgICBpZiAo
IW1fcGF0dGVybi5pZ25vcmVDYXNlKCkpCisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSnVtcCBjaGFyYWN0ZXJzTWF0Y2ggPSBicmFu
Y2gzMihFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIEV4
dGVuZGVkQWRkcmVzcyBjaGFyYWN0ZXJUYWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKKyAgICAgICAgICAgIGxvYWQx
NihjaGFyYWN0ZXJUYWJsZUVudHJ5LCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgRXh0ZW5kZWRB
ZGRyZXNzIHBhdHRlcm5UYWJsZUVudHJ5KHBhdHRlcm5DaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7CisgICAgICAgICAgICBsb2FkMTYo
cGF0dGVyblRhYmxlRW50cnksIHBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAgICAgICAgY2hhcmFj
dGVyTWF0Y2hGYWlscy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVy
bkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyc01hdGNoLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eCk7CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAg
ICAgCisgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIEFkZHJlc3Mob3V0
cHV0LCAoKHN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKS5saW5rVG8obG9v
cCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBnZW5lcmF0ZUJhY2tSZWZlcmVuY2Uoc2l6ZV90
IG9wSW5kZXgpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07Cisg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworCisgICAgICAgIGlmIChtX3Bh
dHRlcm4uaWdub3JlQ2FzZSgpICYmIG1fY2hhclNpemUgIT0gQ2hhcjgpIHsKKyAgICAgICAgICAg
IG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2U7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJu
SWQgPSB0ZXJtLT5iYWNrUmVmZXJlbmNlU3VicGF0dGVybklkOworICAgICAgICB1bnNpZ25lZCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOworCisgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gcmVnVDA7CisgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gcmVnVDE7CisgICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgcGF0dGVyblRlbXAgPSByZWdUMjsKKworICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdp
bkluZGV4KCkpOworICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJG
aXhlZENvdW50IHx8IHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkKKyAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworCisgICAgICAg
IEp1bXBMaXN0IG1hdGNoZXM7CisKKyAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBR
dWFudGlmaWVyTm9uR3JlZWR5KSB7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQs
IChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHBhdHRlcm5JbmRleCk7CisgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkg
KiBzaXplb2YoaW50KSksIHBhdHRlcm5UZW1wKTsKKworICAgICAgICAgICAgLy8gQW4gZW1wdHkg
bWF0Y2ggaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCisgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50IHx8IHRl
cm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcGF0dGVybkluZGV4
LCBwYXR0ZXJuVGVtcCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBK
dW1wIHplcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBw
YXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJh
bmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAg
ICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShUcnVzdGVkSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAgICAgICAgICAgICAg
IG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgdHJ5Tm9uWmVyb01hdGNo
LmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHRlcm0tPnF1YW50aXR5VHlwZSkgeworICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50
OiB7CisgICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhpcyk7CisKKyAgICAgICAgICAgIC8v
IFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5kIGluZGV4IGF0IHRoaXMgcG9p
bnQKKyAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAg
ICAgICAgaWYgKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24pCisgICAgICAg
ICAgICAgICAgc3ViMzIoSW1tMzIoKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRp
b24pLnVuc2FmZUdldCgpKSwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoY2hlY2tOb3RFbm91Z2hJbnB1dChwYXR0ZXJuVGVtcCkpOworCisgICAgICAgICAgICBt
YXRjaEJhY2tyZWZlcmVuY2Uob3BJbmRleCwgb3AubV9qdW1wcywgY2hhcmFjdGVyT3JUZW1wLCBw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKworICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQgIT0gMSkgeworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1v
dW50SW5kZXgoKSwgY2hhcmFjdGVyT3JUZW1wKTsKKyAgICAgICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CisgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKGNoYXJhY3Rlck9yVGVtcCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7CisgICAgICAgICAgICAgICAg
bWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQudW5zYWZlR2V0KCkpLCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHBh
dHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0cHV0LCAoKHN1
YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpLCBwYXR0ZXJuVGVtcCk7CisgICAg
ICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bWF0Y2hlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIFF1YW50aWZpZXJHcmVlZHk6IHsKKyAgICAgICAgICAgIEp1bXBMaXN0IGluY29t
cGxldGVNYXRjaGVzOworCisgICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhpcyk7CisKKyAg
ICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5kIGluZGV4
IGF0IHRoaXMgcG9pbnQKKyAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRl
bXApOworICAgICAgICAgICAgaWYgKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRp
b24pCisgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0t
PmlucHV0UG9zaXRpb24pLnVuc2FmZUdldCgpKSwgcGF0dGVyblRlbXApOworICAgICAgICAgICAg
bWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RFbm91Z2hJbnB1dChwYXR0ZXJuVGVtcCkpOworCisgICAg
ICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJbmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNo
YXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisKKyAgICAgICAgICAg
IGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0Jh
Y2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgY2hhcmFjdGVyT3JUZW1wKTsKKyAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsKKyAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgSW1tMzIodGVy
bS0+cXVhbnRpdHlNYXhDb3VudC51bnNhZmVHZXQoKSksIGNoYXJhY3Rlck9yVGVtcCkpOworICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybklkIDw8IDEpICogc2l6
ZW9mKGludCkpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0
cHV0LCAoKHN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpLCBwYXR0ZXJuVGVt
cCk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgaW5kZXggaW4gZnJhbWUgZm9yIHJl
c3RvcmluZyBhZnRlciBhIHBhcnRpYWwgbWF0Y2gKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShp
bmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBqdW1wKG91dGVyTG9vcCk7CisKKyAgICAg
ICAgICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBsb2FkRnJv
bUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKworICAgICAgICAgICAgbWF0Y2hlcy5saW5rKHRo
aXMpOworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBRdWFudGlmaWVyTm9uR3JlZWR5OiB7Cisg
ICAgICAgICAgICBKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKKworICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwo
KTsKKworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybklkIDw8
IDEpICogc2l6ZW9mKGludCkpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3Mob3V0cHV0LCAoKHN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpLCBw
YXR0ZXJuVGVtcCk7CisKKyAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3Nm
dWwgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycworICAgICAgICAgICAgSnVtcCB6ZXJvTGVu
Z3RoTWF0Y2ggPSBicmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4
KTsKKyAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNo
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEpLCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0
Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICB0cnlOb25aZXJvTWF0Y2gubGluayh0aGlzKTsKKworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgaGF2ZSBpbnB1dCByZW1haW5pbmcgdG8gbWF0Y2gKKyAgICAgICAgICAgIHN1
YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgaWYgKG1fY2hlY2tl
ZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24pCisgICAgICAgICAgICAgICAgc3ViMzIoSW1t
MzIoKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24pLnVuc2FmZUdldCgpKSwg
cGF0dGVyblRlbXApOworICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RFbm91Z2hJ
bnB1dChwYXR0ZXJuVGVtcCkpOworCisgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdp
bkluZGV4KCkpOworCisgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJbmRleCwgaW5j
b21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVt
cCk7CisKKyAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgICAg
IGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpi
ZWdpbkluZGV4KCksIGluZGV4KTsKKworICAgICAgICAgICAgbWF0Y2hlcy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lk
IGJhY2t0cmFja0JhY2tSZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgpCisgICAgeworICAgICAgICBZ
YXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0g
b3AubV90ZXJtOworCisgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tS
ZWZlcmVuY2VTdWJwYXR0ZXJuSWQ7CisKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
KHRoaXMpOworICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcExp
c3QgZmFpbHVyZXM7CisKKyAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAgICAgc3dpdGNoICh0ZXJtLT5xdWFudGl0eVR5
cGUpIHsKKyAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoKKyAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBRdWFudGlmaWVyR3JlZWR5OiB7CisgICAgICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBh
dHRlcm5TdGFydEluZGV4ID0gcmVnVDE7CisgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBh
dHRlcm5FbmRJbmRleE9yTGVuID0gcmVnVDI7CisKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1h
dGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBtYXRjaEFtb3VudCkpOworCisgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHBh
dHRlcm5TdGFydEluZGV4KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1dCwgKChz
dWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSwgcGF0dGVybkVuZEluZGV4T3JM
ZW4pOworICAgICAgICAgICAgc3ViMzIocGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRl
eE9yTGVuKTsKKyAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5FbmRJbmRleE9yTGVuLCBpbmRleCk7
CisKKyAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKG1hdGNoQW1vdW50LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAg
ICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBRdWFudGlmaWVyTm9uR3JlZWR5OiB7CisgICAgICAgICAgICBj
b25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisKKyAgICAgICAgICAgIGxvYWRG
cm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZl
cmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgaWYg
KHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBJbW0zMih0ZXJtLT5x
dWFudGl0eU1heENvdW50LnVuc2FmZUdldCgpKSwgbWF0Y2hBbW91bnQpKTsKKyAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKG1hdGNoQW1vdW50LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIGp1bXAo
b3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5mYWxsdGhyb3VnaCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgdm9pZCBnZW5lcmF0ZVBhdHRl
cm5DaGFyYWN0ZXJPbmNlKHNpemVfdCBvcEluZGV4KQogICAgIHsKICAgICAgICAgWWFyck9wJiBv
cCA9IG1fb3BzW29wSW5kZXhdOwpAQCAtMTg1NCwxMyArMjA5MiwxOSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRm9yd2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgIG1f
ZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OkZvcndhcmRSZWZlcmVuY2U7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuOgogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNh
bEFzc2VydGlvbjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisK
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJhY2tSZWZlcmVuY2U6CisjaWYgRU5BQkxF
KFlBUlJfSklUX0JBQ0tSRUZFUkVOQ0VTKQorICAgICAgICAgICAgZ2VuZXJhdGVCYWNrUmVmZXJl
bmNlKG9wSW5kZXgpOworI2Vsc2UKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZh
aWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2U7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRG90U3RhckVuY2xvc3VyZToKICAgICAgICAg
ICAgIGdlbmVyYXRlRG90U3RhckVuY2xvc3VyZShvcEluZGV4KTsKQEAgLTE5MjAsMTggKzIxNjQs
MjMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVu
Y2U6CisgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRGYWlsdXJlUmVhc29uOjpGb3J3
YXJkUmVmZXJlbmNlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQYXR0ZXJu
VGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVEb3RTdGFy
RW5jbG9zdXJlOgotICAgICAgICAgICAgYmFja3RyYWNrRG90U3RhckVuY2xvc3VyZShvcEluZGV4
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVC
YWNrUmVmZXJlbmNlOgorI2lmIEVOQUJMRShZQVJSX0pJVF9CQUNLUkVGRVJFTkNFUykKKyAgICAg
ICAgICAgIGJhY2t0cmFja0JhY2tSZWZlcmVuY2Uob3BJbmRleCk7CisjZWxzZQogICAgICAgICAg
ICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6QmFja1JlZmVyZW5jZTsKKyNl
bmRpZgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlw
ZURvdFN0YXJFbmNsb3N1cmU6CisgICAgICAgICAgICBiYWNrdHJhY2tEb3RTdGFyRW5jbG9zdXJl
KG9wSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTY2
LDYgKzM4MTUsMTUgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICBpZiAo
bV9wYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcworI2lmIEVOQUJMRShZQVJSX0pJVF9C
QUNLUkVGRVJFTkNFUykKKyAgICAgICAgICAgICYmIChjb21waWxlTW9kZSA9PSBNYXRjaE9ubHkg
fHwgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgbV9jaGFyU2l6ZSAhPSBDaGFyOCkpCisjZW5k
aWYKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFj
a1dpdGhGYWlsdXJlUmVhc29uKEpJVEZhaWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2UpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y29tcGlsZSBiZWZvcmUgZ2VuZXJhdGluZyBjb2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNlZCBv
biBjb21waWxhdGlvbiB0aGF0CiAgICAgICAgIC8vIGFyZSB1c2VkIGR1cmluZyBnZW5lcmF0aW9u
LgogICAgICAgICBvcENvbXBpbGVCb2R5KG1fcGF0dGVybi5tX2JvZHkpOwpAQCAtMzcxMyw2ICsz
OTcxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkFzc2VydCBFT0wi
KTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZUJhY2tSZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiQmFja1Jl
ZmVyZW5jZSBwYXR0ZXJuICMldSIsIHRlcm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0ZXJuSWQpOwor
ICAgICAgICAgICAgICAgIHRlcm0tPmR1bXBRdWFudGlmaWVyKG91dCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hh
cmFjdGVyOgogICAgICAgICAgICAgICAgIG91dC5wcmludCgiVHlwZVBhdHRlcm5DaGFyYWN0ZXIg
Iik7CiAgICAgICAgICAgICAgICAgZHVtcFVDaGFyMzIob3V0LCB0ZXJtLT5wYXR0ZXJuQ2hhcmFj
dGVyKTsKQEAgLTM3MzksNyArNDAwMiw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6
Ci0gICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQmFja1JlZmVyZW5jZToKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIlR5cGVGb3J3YXJkUmVmZXJlbmNlIDxub3QgaGFuZGxlZD4i
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zODUzLDcgKzQxMTgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4oMCk7CiAKICAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3NlcnRp
b25FbmQ6Ci0gICAgICAgICAgICBvdXQucHJpbnQoIk9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVu
ZCVzXG4iLCB0ZXJtLT5pbnZlcnQoKSA/ICIgaW52ZXJ0ZWQiIDogIiIpOworICAgICAgICAgICAg
b3V0LnByaW50ZigiT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kJXNcbiIsIHRlcm0tPmludmVy
dCgpID8gIiBpbnZlcnRlZCIgOiAiIik7CiAgICAgICAgICAgICByZXR1cm4oMCk7CiAKICAgICAg
ICAgY2FzZSBPcE1hdGNoRmFpbGVkOgpAQCAtMzkxNyw3ICs0MTgyLDEwIEBAIHN0YXRpYyB2b2lk
IGR1bXBDb21waWxlRmFpbHVyZShKSVRGYWlsdXIKICAgICAgICAgZGF0YUxvZygiQ2FuJ3QgSklU
IGEgcGF0dGVybiBkZWNvZGluZyBzdXJyb2dhdGUgcGFpcnNcbiIpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEpJVEZhaWx1cmVSZWFzb246OkJhY2tSZWZlcmVuY2U6Ci0gICAgICAgIGRhdGFM
b2coIkNhbid0IEpJVCBhIHBhdHRlcm4gY29udGFpbmluZyBiYWNrIHJlZmVyZW5jZXNcbiIpOwor
ICAgICAgICBkYXRhTG9nKCJDYW4ndCBKSVQgc29tZSBwYXR0ZXJucyBjb250YWluaW5nIGJhY2sg
cmVmZXJlbmNlc1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURmFpbHVyZVJlYXNv
bjo6Rm9yd2FyZFJlZmVyZW5jZToKKyAgICAgICAgZGF0YUxvZygiQ2FuJ3QgSklUIGEgcGF0dGVy
biBjb250YWluaW5nIGZvcndhcmQgcmVmZXJlbmNlc1xuIik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSklURmFpbHVyZVJlYXNvbjo6VmFyaWFibGVDb3VudGVkUGFyZW50aGVzaXNXaXRoTm9u
WmVyb01pbmltdW06CiAgICAgICAgIGRhdGFMb2coIkNhbid0IEpJVCBhIHBhdHRlcm4gY29udGFp
bmluZyBhIHZhcmlhYmxlIGNvdW50ZWQgcGFyZW50aGVzaXMgd2l0aCBhIG5vbi16ZXJvIG1pbmlt
dW1cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24g
MjM1NTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5hbWVzcGFjZSBZYXJyIHsKIGVudW0gY2xhc3MgSklU
RmFpbHVyZVJlYXNvbiA6IHVpbnQ4X3QgewogICAgIERlY29kZVN1cnJvZ2F0ZVBhaXIsCiAgICAg
QmFja1JlZmVyZW5jZSwKKyAgICBGb3J3YXJkUmVmZXJlbmNlLAogICAgIFZhcmlhYmxlQ291bnRl
ZFBhcmVudGhlc2lzV2l0aE5vblplcm9NaW5pbXVtLAogICAgIFBhcmVudGhlc2l6ZWRTdWJwYXR0
ZXJuLAogICAgIEZpeGVkQ291bnRQYXJlbnRoZXNpemVkU3VicGF0dGVybiwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjM1NTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpA
QCAtNTU1LDggKzU1NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnRwdHJfdCBiZWdpbjsgLy8g
Tm90IHJlYWxseSBuZWVkZWQgZm9yIGdyZWVkeSBxdWFudGlmaWVycy4KICAgICAgICAgdWludHB0
cl90IG1hdGNoQW1vdW50OyAvLyBOb3QgcmVhbGx5IG5lZWRlZCBmb3IgZml4ZWQgcXVhbnRpZmll
cnMuCiAKLSAgICAgICAgdW5zaWduZWQgYmVnaW5JbmRleCgpIHsgcmV0dXJuIG9mZnNldG9mKEJh
Y2tUcmFja0luZm9CYWNrUmVmZXJlbmNlLCBiZWdpbikgLyBzaXplb2YodWludHB0cl90KTsgfQot
ICAgICAgICB1bnNpZ25lZCBtYXRjaEFtb3VudEluZGV4KCkgeyByZXR1cm4gb2Zmc2V0b2YoQmFj
a1RyYWNrSW5mb0JhY2tSZWZlcmVuY2UsIG1hdGNoQW1vdW50KSAvIHNpemVvZih1aW50cHRyX3Qp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBiZWdpbkluZGV4KCkgeyByZXR1cm4gb2Zmc2V0
b2YoQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2UsIGJlZ2luKSAvIHNpemVvZih1aW50cHRyX3Qp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBtYXRjaEFtb3VudEluZGV4KCkgeyByZXR1cm4g
b2Zmc2V0b2YoQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2UsIG1hdGNoQW1vdW50KSAvIHNpemVv
Zih1aW50cHRyX3QpOyB9CiAgICAgfTsKIAogICAgIHN0cnVjdCBCYWNrVHJhY2tJbmZvQWx0ZXJu
YXRpdmUgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNTU2MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMDktMDEgIE1pY2hhZWwgU2Fi
b2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgWUFSUjogSklUIFJlZ0V4cHMgd2l0
aCBiYWNrIHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MDg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIEVOQUJMRV9ZQVJSX0pJVF9CQUNLUkVGRVJFTkNFUyB0byBlbmFibGUg
UmVnRXhwIEpJVCdpbmcgb2YgYmFjayByZWZlcmVuY2VzCisgICAgICAgIGZvciA2NCBiaXQgcGxh
dGZvcm1zIG9ubHkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxOC0wOC0zMSAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBPcHRp
b25TZXQgfD0gYW5kIC09IG9wZXJhdG9ycyB3aXRoIGFkZCgpIGFuZCByZW1vdmUoKSBmdW5jdGlv
bnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjM1NTYxKQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTczLDggKzk3Myw5IEBACiAKICNpZiBFTkFC
TEUoWUFSUl9KSVQpCiAjaWYgQ1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRP
V1MpKQotLyogRW5hYmxlIEpJVCdpbmcgUmVndWxhciBFeHByZXNzaW9ucyB0aGF0IGhhdmUgbmVz
dGVkIHBhcmVudGhlc2lzLiAqLworLyogRW5hYmxlIEpJVCdpbmcgUmVndWxhciBFeHByZXNzaW9u
cyB0aGF0IGhhdmUgbmVzdGVkIHBhcmVudGhlc2lzIGFuZCBiYWNrIHJlZmVyZW5jZXMuICovCiAj
ZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TIDEKKyNkZWZpbmUg
RU5BQkxFX1lBUlJfSklUX0JBQ0tSRUZFUkVOQ0VTIDEKICNlbmRpZgogI2VuZGlmCiAK
</data>
<flag name="review"
          id="366321"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>