<?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>136520</bug_id>
          
          <creation_ts>2014-09-03 19:40:08 -0700</creation_ts>
          <short_desc>Beef up the DFG&apos;s CFG analyses to include iterated dominance frontiers and more user-friendly BlockSets</short_desc>
          <delta_ts>2015-06-01 21:50:49 -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>
          
          <blocked>136331</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033113</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 19:40:08 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033114</commentid>
    <comment_count>1</comment_count>
      <attachid>237606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 19:43:39 -0700</bug_when>
    <thetext>Created attachment 237606
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033116</commentid>
    <comment_count>2</comment_count>
      <attachid>237606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 19:45:05 -0700</bug_when>
    <thetext>Comment on attachment 237606
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGDominators.h:105
&gt; +    // Visits all blocks in the dominance frontier of the given block. This often
&gt; +    // visits the same block multiple times, so it&apos;s up to the callback to prune
&gt; +    // accordingly.

This comment is wrong, I&apos;ve removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033117</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-03 19:46:22 -0700</bug_when>
    <thetext>Attachment 237606 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:148:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:164:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 16 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>1033122</commentid>
    <comment_count>4</comment_count>
      <attachid>237608</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 20:20:48 -0700</bug_when>
    <thetext>Created attachment 237608
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033123</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-03 20:22:11 -0700</bug_when>
    <thetext>Attachment 237608 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:110:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:154:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGDominators.h:170:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 16 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>1033250</commentid>
    <comment_count>6</comment_count>
      <attachid>237608</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-04 11:23:05 -0700</bug_when>
    <thetext>Comment on attachment 237608
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGDominators.h:154
&gt; +                for (unsigned successorIndex = block-&gt;numSuccessors(); successorIndex--;) {

Over-indented.

&gt; Source/JavaScriptCore/dfg/DFGDominators.h:170
&gt; +                    if (functor(otherBlock))

Ditto.

&gt; Source/WTF/wtf/BitVector.cpp:225
&gt; +    return false;

&quot;return true&quot; please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033302</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-04 14:09:23 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/173279</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237606</attachid>
            <date>2014-09-03 19:43:39 -0700</date>
            <delta_ts>2014-09-03 20:20:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32704</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE0LTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmVlZiB1cCB0aGUgREZHJ3MgQ0ZHIGFuYWx5c2VzIHRvIGluY2x1ZGUgaXRlcmF0ZWQgZG9taW5h
bmNlIGZyb250aWVycyBhbmQgbW9yZSB1c2VyLWZyaWVuZGx5IEJsb2NrU2V0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NTIwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgY29kZSB0
byBjb21wdXRlIGl0ZXJhdGVkIGRvbWluYW5jZSBmcm9udGllcnMuIFRoaXMgaW52b2x2ZXMgdXNp
bmcgQmxvY2tTZXQgYSBsb3QsIHNvCisgICAgICAgIHRoaXMgcGF0Y2ggYWxzbyBtYWtlcyBCbG9j
a1NldCBhIGxvdCBtb3JlIHVzZXItZnJpZW5kbHkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja1Nl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0OjpkdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHQmxvY2tTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6aXRlcmF0b3I6
Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0OjppdGVyYXRvcjo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6Okl0ZXJhYmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAg
KEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
QmxvY2tTZXQ6Oml0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0FkZGVyOjpCbG9j
a0FkZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0FkZGVyOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKiBkZmcvREZHRG9t
aW5hdG9ycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6c3RyaWN0RG9taW5h
dG9yc09mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpkb21pbmF0b3JzT2YpOgor
ICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkp
OgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc0RvbWluYXRlZEJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9udGllck9mKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjppdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YpOgor
ICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmg6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5h
dG9yczo6Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpmb3JBbGxEb21pbmF0b3JzT2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRv
cnM6OmZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkpOgorICAgICAgICAoSlNDOjpERkc6
OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KToKKyAgICAgICAgKEpTQzo6REZH
OjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAg
ICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
bkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3Jz
Ojpmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9j
a0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2U6OnJ1bik6CisKIDIwMTQtMDktMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWVuYWJsZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIGFuZCBwb2x5bW9ycGhpYyBj
YWxsIGlubGluaW5nLCBub3cgdGhhdCBhIGJ1bmNoIG9mIHRoZSBidWdzCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNw
cAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCiAgICAgZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAorICAgIGRmZy9ERkdCbG9ja1NldC5jcHAKICAgICBkZmcvREZHQmxvY2tXb3JrbGlz
dC5jcHAKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCiAgICAgZGZnL0RGR0NGQVBoYXNl
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lv
biAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1NldC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tXb3JrbGlzdC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiIC8+CkBA
IC05OTgsNiArOTk5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9j
a01hcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9j
a1dvcmtsaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tT
ZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1NldElubGlu
ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJlY3Rp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNl
ci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw2
ICs0ODEsOCBAQAogCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNkYxNkMxREIw
MTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRkJFMEY3NzE2
QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8q
IERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkJGMTU4QzE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1
OEExOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCAqLzsgfTsKKwkJMEZCRjE1OEQx
OUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8q
IERGR0Jsb2NrU2V0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQkZERDA0MTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQkZERDAyMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNw
cCAqLzsgfTsKIAkJMEZCRkREMDUxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFs
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0
MDYsNiArMjQwOCw4IEBACiAJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkUwRjZGMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJF
MEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcv
REZHVW5pZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkJG
MTU4QTE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tTZXQuY3BwOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCRjE1OEIxOUI3QTUzMTAw
Njk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCbG9ja1NldElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRkREMDIxOTZDOTJCRjAwN0E1
QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
UGhhbnRvbVJlbW92YWxQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BoYW50b21SZW1vdmFsUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODI3LDcgKzQ4MzEsOSBAQAog
CQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICovLAogCQkJ
CTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCAqLywKKwkJ
CQkwRkJGMTU4QTE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwICovLAogCQkJCTBG
QzNDQ0Y3MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovLAorCQkJCTBGQkYxNThC
MTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCAqLywKIAkJCQkwRkMzQ0NG
ODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZDM0ND
RjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjgzNjRC
NTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCkBAIC01OTIxLDYg
KzU5MjcsNyBAQAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURv
bWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8q
IERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIx
RTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBp
biBIZWFkZXJzICovLApAQCAtNzQxNiw2ICs3NDIzLDcgQEAKIAkJCQkwRjEzRTA0RTE2MTY0QTFG
MDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNB
MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZCRjE1OEMxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZF
IC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4
NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE3MzIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4g
QmxvY2tMaXN0OworCiBzdHJ1Y3QgVW5saW5rZWRCbG9jayB7CiAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBCbG9j
a1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBj
b21tYSgiICIpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9zZXQuZmluZEJp
dCgwLCB0cnVlKTsgYmxvY2tJbmRleCA8IG1fc2V0LnNpemUoKTsgYmxvY2tJbmRleCA9IG1fc2V0
LmZpbmRCaXQoYmxvY2tJbmRleCArIDEsIHRydWUpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICIjIiwgYmxvY2tJbmRleCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja1NldC5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBHcmFwaDsKKwogY2xhc3MgQmxv
Y2tTZXQgewogcHVibGljOgogICAgIEJsb2NrU2V0KCkgeyB9CkBAIC00OSwxMCArNTEsOTggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KGJsb2NrLT5pbmRleCk7CiAgICAgfQog
ICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9y
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAgICAgLCBtX3NldChu
dWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4ID0gbV9zZXQtPm1fc2V0LmZpbmRCaXQobV9pbmRleCArIDEsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQmxvY2tT
ZXQ7CisgICAgICAgIAorICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICAgICAgY29uc3QgQmxv
Y2tTZXQqIG1fc2V0OworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworICAgIAorICAg
IGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKEdyYXBoJiBn
cmFwaCwgY29uc3QgQmxvY2tTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9ncmFwaChncmFwaCkK
KyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aXRlcmF0b3IgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0Lm1fZ3JhcGggPSAmbV9ncmFwaDsK
KyAgICAgICAgICAgIHJlc3VsdC5tX3NldCA9ICZtX3NldDsKKyAgICAgICAgICAgIHJlc3VsdC5t
X2luZGV4ID0gbV9zZXQubV9zZXQuZmluZEJpdCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgICAg
IHJlc3VsdC5tX2dyYXBoID0gJm1fZ3JhcGg7CisgICAgICAgICAgICByZXN1bHQubV9zZXQgPSAm
bV9zZXQ7CisgICAgICAgICAgICByZXN1bHQubV9pbmRleCA9IG1fc2V0Lm1fc2V0LnNpemUoKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgICAgIGNvbnN0IEJsb2NrU2V0JiBt
X3NldDsKKyAgICB9OworICAgIAorICAgIEl0ZXJhYmxlIGl0ZXJhYmxlKEdyYXBoJiBncmFwaCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZShncmFwaCwgKnRoaXMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKIHByaXZh
dGU6CiAgICAgQml0VmVjdG9yIG1fc2V0OwogfTsKIAorY2xhc3MgQmxvY2tBZGRlciB7CitwdWJs
aWM6CisgICAgQmxvY2tBZGRlcihCbG9ja1NldCYgc2V0KQorICAgICAgICA6IG1fc2V0KHNldCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoYmxvY2spOworICAgIH0K
K3ByaXZhdGU6CisgICAgQmxvY2tTZXQmIG1fc2V0OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja1NldElubGluZXNfaAorI2RlZmluZSBERkdCbG9j
a1NldElubGluZXNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9j
a1NldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworaW5saW5lIEJhc2ljQmxvY2sqIEJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFwaC0+YmxvY2sobV9pbmRleCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQmxvY2tTZXRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDAsNiArNDAwLDQ4IEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgfQogfQogCitCbG9ja1NldCBEb21pbmF0b3JzOjpzdHJpY3REb21pbmF0b3JzT2YoQmFz
aWNCbG9jayogdG8pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbFN0
cmljdERvbWluYXRvcnNPZih0bywgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3JzOjpkb21pbmF0b3JzT2YoQmFzaWNCbG9jayog
dG8pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbERvbWluYXRvcnNP
Zih0bywgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9j
a1NldCBEb21pbmF0b3JzOjpibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZy
b20pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nrc1N0cmlj
dGx5RG9taW5hdGVkQnkoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3JzOjpibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Js
b2NrKiBmcm9tKSBjb25zdAoreworICAgIEJsb2NrU2V0IHJlc3VsdDsKKyAgICBmb3JBbGxCbG9j
a3NEb21pbmF0ZWRCeShmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6OmRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNC
bG9jayogZnJvbSkgY29uc3QKK3sKKyAgICBCbG9ja1NldCByZXN1bHQ7CisgICAgZm9yQWxsQmxv
Y2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbChmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6Oml0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZihjb25zdCBCbG9ja0xpc3QmIGZyb20pIGNvbnN0Cit7CisgICAgQmxv
Y2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mSW1wbChmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIGJvb2wgRG9taW5hdG9yczo6bmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pIGNvbnN0CiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IHRvOyBi
bG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHQmxv
Y2tTZXQuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTU3LDExICs1
NywxMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURv
bWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9kYXRhW3RvXS5pZG9tUGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2Rh
dGFbYmxvY2tdLmlkb21QYXJlbnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbERv
bWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QK
KyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2Nr
ID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQorICAgICAgICAgICAgZnVuY3RvcihibG9jayk7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JBbGxCbG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDE2PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtmcm9t
XS5pZG9tS2lkcyk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAg
ICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3Rvciht
X2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnko
QmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoZnJvbSk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAg
ICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3Rv
cihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBC
bG9ja1NldCBzdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0OworICAgIEJs
b2NrU2V0IGRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3Q7CisgICAgQmxvY2tTZXQg
YmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICBC
bG9ja1NldCBibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICAK
KyAgICAvLyBWaXNpdHMgYWxsIGJsb2NrcyBpbiB0aGUgZG9taW5hbmNlIGZyb250aWVyIG9mIHRo
ZSBnaXZlbiBibG9jay4gVGhpcyBvZnRlbgorICAgIC8vIHZpc2l0cyB0aGUgc2FtZSBibG9jayBt
dWx0aXBsZSB0aW1lcywgc28gaXQncyB1cCB0byB0aGUgY2FsbGJhY2sgdG8gcHJ1bmUKKyAgICAv
LyBhY2NvcmRpbmdseS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICBCYXNpY0Jsb2NrKiBm
cm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQmxvY2tT
ZXQgc2V0OworICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAor
ICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsK
KyAgICAgICAgICAgICAgICBpZiAoc2V0LmFkZChibG9jaykpCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIEJsb2Nr
U2V0IGRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRl
cmF0ZWREb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBCbG9ja1NldCBzZXQ7Cisg
ICAgICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAg
ICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5hZGQoYmxvY2spKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAg
CisgICAgQmxvY2tTZXQgaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IEJsb2NrTGlz
dCYgZnJvbSkgY29uc3Q7CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgogICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pIGNvbnN0OwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAor
ICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAor
ICAgIHsKKyAgICAgICAgZm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShmcm9tLCBbJl0g
KEJhc2ljQmxvY2sqIGJsb2NrKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNj
ZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvID0gYmxvY2stPnN1Y2Nlc3Nvcihz
dWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5hdGVzKGZyb20s
IHRvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG8pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250
aWVyT2ZJbXBsKAorICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBCbG9ja0xpc3Qgd29ya2xpc3QgPSBmcm9t
OworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxs
QmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbChibG9jaywgWyZdIChCYXNpY0Jsb2NrKiBv
dGhlckJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdG9yKG90aGVyQmxvY2sp
KQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG90aGVyQmxvY2spOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHN0cnVjdCBC
bG9ja0RhdGEgewogICAgICAgICBCbG9ja0RhdGEoKQogICAgICAgICAgICAgOiBpZG9tUGFyZW50
KG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2OSwyNCArMzY5LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9j
a0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVk
ZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICBpZiAobV9kb21pbmF0b3Jz
LmlzVmFsaWQoKSkgewotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6
Iik7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmICghdGhpcy0+YmxvY2soaSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXModGhpcy0+Ymxv
Y2soaSksIGJsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91
dC5wcmludCgiICMiLCBpKTsKLSAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0g
ICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczoiKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KCF0aGlzLT5ibG9jayhpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgdGhpcy0+YmxvY2soaSkpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwot
ICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2Nr
KSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9k
b21pbmF0b3JzLmJsb2Nrc0RvbWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CisgICAgICAgIG91dC5w
cmludChwcmVmaXgsICIgIERvbWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWlu
YW5jZUZyb250aWVyT2YoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWRE
b21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9CiAg
ICAgaWYgKG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewogICAgICAgICBpZiAoY29uc3QgTmF0
dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczMjI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKLSNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgog
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgpAQCAtNjksMTMgKzY5LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAKLSAgICAgICAgICAg
IGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuY29udGFpbnMoYmxvY2spKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5pdGVyYWJs
ZShtX2dyYXBoKSkgewogICAgICAgICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxv
Y2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjQ4KQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxNC0wOS0wMyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJlZWYgdXAgdGhlIERGRydzIENGRyBh
bmFseXNlcyB0byBpbmNsdWRlIGl0ZXJhdGVkIGRvbWluYW5jZSBmcm9udGllcnMgYW5kIG1vcmUg
dXNlci1mcmllbmRseSBCbG9ja1NldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNjUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgR2l2ZSBCaXRWZWN0b3IgYSB3YXkgdG8gcXVpY2tseSBm
aW5kIHRoZSBuZXh0IHNldCAob3IgdW5zZXQpIGJpdC4gTWFrZSBCaXRWZWN0b3IgZXF1YWxpdHkK
KyAgICAgICAgZmFzdGVyLiBGaXggYSBtaW5vciBjbG9zdXJlIGdvb2YgaW4gU3BlY3RydW0uCisK
KyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpl
cXVhbHNTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2VG
YXN0KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZVNpbXBsZSk6Cisg
ICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbmRC
aXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbmRCaXRGYXN0KToKKyAgICAgICAgKFdU
Rjo6Qml0VmVjdG9yOjpmaW5kQml0U2ltcGxlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpm
aW5kQml0SW5Xb3JkKToKKyAgICAgICAgKiB3dGYvU3BlY3RydW0uaDoKKyAgICAgICAgKFdURjo6
U3BlY3RydW06OnJlbW92ZUlmKToKKwogMjAxNC0wOS0wMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIEdldCByaWQgb2YgSElHSF9EUElfQ0FOVkFTIGxlZnRvdmVy
cwpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDUwIEBAIHNp
emVfdCBCaXRWZWN0b3I6OmJpdENvdW50U2xvdygpIGNvbnN0CiAKIGJvb2wgQml0VmVjdG9yOjpl
cXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAogeworICAgIGJvb2wg
cmVzdWx0ID0gZXF1YWxzU2xvd0Nhc2VGYXN0KG90aGVyKTsKKyAgICBBU1NFUlQocmVzdWx0ID09
IGVxdWFsc1Nsb3dDYXNlU2ltcGxlKG90aGVyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBCaXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNlRmFzdChjb25zdCBCaXRWZWN0b3ImIG90aGVy
KSBjb25zdAoreworICAgIGlmIChpc0lubGluZSgpICE9IG90aGVyLmlzSW5saW5lKCkpCisgICAg
ICAgIHJldHVybiBlcXVhbHNTbG93Q2FzZVNpbXBsZShvdGhlcik7CisgICAgCisgICAgY29uc3Qg
T3V0T2ZMaW5lQml0cyogbXlCaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgIGNvbnN0IE91dE9m
TGluZUJpdHMqIG90aGVyQml0cyA9IG90aGVyLm91dE9mTGluZUJpdHMoKTsKKyAgICAKKyAgICBz
aXplX3QgbXlOdW1Xb3JkcyA9IG15Qml0cy0+bnVtV29yZHMoKTsKKyAgICBzaXplX3Qgb3RoZXJO
dW1Xb3JkcyA9IG90aGVyQml0cy0+bnVtV29yZHMoKTsKKyAgICBzaXplX3QgbWluTnVtV29yZHM7
CisgICAgc2l6ZV90IG1heE51bVdvcmRzOworICAgIAorICAgIGNvbnN0IE91dE9mTGluZUJpdHMq
IGxvbmdlckJpdHM7CisgICAgaWYgKG15TnVtV29yZHMgPCBvdGhlck51bVdvcmRzKSB7CisgICAg
ICAgIG1pbk51bVdvcmRzID0gbXlOdW1Xb3JkczsKKyAgICAgICAgbWF4TnVtV29yZHMgPSBvdGhl
ck51bVdvcmRzOworICAgICAgICBsb25nZXJCaXRzID0gb3RoZXJCaXRzOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1pbk51bVdvcmRzID0gb3RoZXJOdW1Xb3JkczsKKyAgICAgICAgbWF4TnVtV29y
ZHMgPSBteU51bVdvcmRzOworICAgICAgICBsb25nZXJCaXRzID0gbXlCaXRzOworICAgIH0KKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gbWluTnVtV29yZHM7IGkgPCBtYXhOdW1Xb3JkczsgKytp
KSB7CisgICAgICAgIGlmIChsb25nZXJCaXRzLT5iaXRzKClbaV0pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBtaW5OdW1Xb3Jkczsg
aS0tOykgeworICAgICAgICBpZiAobXlCaXRzLT5iaXRzKClbaV0gIT0gb3RoZXJCaXRzLT5iaXRz
KClbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2VTaW1wbGUoY29uc3QgQml0
VmVjdG9yJiBvdGhlcikgY29uc3QKK3sKICAgICAvLyBUaGlzIGlzIHJlYWxseSBjaGVlc3ksIGJ1
dCBwcm9iYWJseSBnb29kIGVub3VnaCBmb3Igbm93LgogICAgIGZvciAodW5zaWduZWQgaSA9IHN0
ZDo6bWF4KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgewogICAgICAgICBpZiAoZ2V0KGkp
ICE9IG90aGVyLmdldChpKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAxNzMyMjYpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpA
QCAtMjE1LDYgKzIxNiwxOSBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gYml0Q291bnRTbG93
KCk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBmaW5kQml0KHNpemVfdCBpbmRleCwgYm9vbCB2
YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSBmaW5kQml0RmFzdChp
bmRleCwgdmFsdWUpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgc2l6ZV90IGV4cGVjdGVkUmVzdWx0ID0gZmluZEJpdFNpbXBsZShpbmRleCwgdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZFJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2coImZpbmRCaXQoIiwgaW5kZXgsICIsICIsIHZhbHVlLCAiKSBvbiAiLCAqdGhp
cywgIiBzaG91bGQgaGF2ZSBnb3R0ZW4gIiwgZXhwZWN0ZWRSZXN1bHQsICIgYnV0IGdvdCAiLCBy
ZXN1bHQsICJcbiIpOworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3Q7CiAgICAgCiAgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwpAQCAtMjg5
LDYgKzMwMyw2NCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gV1RGOjpiaXRDb3VudChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYml0cykpOwogICAgIH0KICAgICAKKyAgICBzaXplX3QgZmluZEJp
dEZhc3Qoc2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gc3RhcnRJbmRl
eDsKKyAgICAgICAgICAgIGZpbmRCaXRJbldvcmQobV9iaXRzT3JQb2ludGVyLCBpbmRleCwgbWF4
SW5saW5lQml0cygpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIGJpdHMgPSBvdXRPZkxp
bmVCaXRzKCk7CisgICAgICAgIAorICAgICAgICAvLyB2YWx1ZSA9IHRydWU6IGNhc3RzIHRvIDEs
IHRoZW4geG9ycyB0byAwLCB0aGVuIG5lZ2F0ZXMgdG8gMC4KKyAgICAgICAgLy8gdmFsdWUgPSBm
YWxzZTogY2FzdHMgdG8gMCwgdGhlbiB4b3JzIHRvIDEsIHRoZW4gbmVnYXRlcyB0byAtMSAoaS5l
LiBhbGwgb25lIGJpdHMpLgorICAgICAgICB1aW50cHRyX3Qgc2tpcFZhbHVlID0gLShzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHZhbHVlKSBeIDEpOworICAgICAgICBzaXplX3QgbnVtV29yZHMgPSBi
aXRzLT5udW1Xb3JkcygpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHdvcmRJbmRleCA9IHN0
YXJ0SW5kZXggLyBiaXRzSW5Qb2ludGVyKCk7CisgICAgICAgIHNpemVfdCBzdGFydEluZGV4SW5X
b3JkID0gc3RhcnRJbmRleCAtIHdvcmRJbmRleCAqIGJpdHNJblBvaW50ZXIoKTsKKyAgICAgICAg
CisgICAgICAgIHdoaWxlICh3b3JkSW5kZXggPCBudW1Xb3JkcykgeworICAgICAgICAgICAgdWlu
dHB0cl90IHdvcmQgPSBiaXRzLT5iaXRzKClbd29yZEluZGV4XTsKKyAgICAgICAgICAgIGlmICh3
b3JkICE9IHNraXBWYWx1ZSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0
SW5kZXhJbldvcmQ7CisgICAgICAgICAgICAgICAgaWYgKGZpbmRCaXRJbldvcmQod29yZCwgaW5k
ZXgsIGJpdHNJblBvaW50ZXIoKSwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
d29yZEluZGV4ICogYml0c0luUG9pbnRlcigpICsgaW5kZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHdvcmRJbmRleCsrOworICAgICAgICAgICAgc3RhcnRJbmRl
eEluV29yZCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBiaXRzLT5u
dW1CaXRzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBmaW5kQml0U2ltcGxlKHNpemVfdCBp
bmRleCwgYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IHNp
emUoKSkgeworICAgICAgICAgICAgaWYgKGdldChpbmRleCkgPT0gdmFsdWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBmaW5kQml0
SW5Xb3JkKHVpbnRwdHJfdCB3b3JkLCBzaXplX3QmIGluZGV4LCBzaXplX3QgZW5kSW5kZXgsIGJv
b2wgdmFsdWUpCisgICAgeworICAgICAgICB3b3JkID4+PSBpbmRleDsKKyAgICAgICAgCisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGVuZEluZGV4KSB7CisgICAgICAgICAgICBpZiAoKHdvcmQgJiAx
KSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICB3b3JkID4+PSAxOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSBlbmRJbmRleDsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKICAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9CkBA
IC0zMjQsNiArMzk2LDggQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IGJpdENvdW50U2xvdygpIGNvbnN0OwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29s
IGVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wg
ZXF1YWxzU2xvd0Nhc2VGYXN0KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0OworICAgIGJv
b2wgZXF1YWxzU2xvd0Nhc2VTaW1wbGUoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xvd0Nhc2UoKSBjb25zdDsKICAg
ICAKICAgICB1aW50cHRyX3QqIGJpdHMoKQpJbmRleDogU291cmNlL1dURi93dGYvU3BlY3RydW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCShyZXZpc2lvbiAxNzMy
MjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NyArMTEwLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAg
dm9pZCByZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgbV9t
YXAucmVtb3ZlSWYoW2Z1bmN0b3JdICh0eXBlbmFtZSBIYXNoTWFwPFQsIENvdW50ZXJUeXBlPjo6
S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgeworICAgICAgICBtX21hcC5yZW1vdmVJZihbJmZ1bmN0
b3JdICh0eXBlbmFtZSBIYXNoTWFwPFQsIENvdW50ZXJUeXBlPjo6S2V5VmFsdWVQYWlyVHlwZSYg
cGFpcikgewogICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKEtleUFuZENvdW50KHBhaXIu
a2V5LCBwYWlyLnZhbHVlKSk7CiAgICAgICAgICAgICB9KTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237608</attachid>
            <date>2014-09-03 20:20:48 -0700</date>
            <delta_ts>2014-09-04 11:23:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33121</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE0LTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QmVlZiB1cCB0aGUgREZHJ3MgQ0ZHIGFuYWx5c2VzIHRvIGluY2x1ZGUgaXRlcmF0ZWQgZG9taW5h
bmNlIGZyb250aWVycyBhbmQgbW9yZSB1c2VyLWZyaWVuZGx5IEJsb2NrU2V0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NTIwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgY29kZSB0
byBjb21wdXRlIGl0ZXJhdGVkIGRvbWluYW5jZSBmcm9udGllcnMuIFRoaXMgaW52b2x2ZXMgdXNp
bmcgQmxvY2tTZXQgYSBsb3QsIHNvCisgICAgICAgIHRoaXMgcGF0Y2ggYWxzbyBtYWtlcyBCbG9j
a1NldCBhIGxvdCBtb3JlIHVzZXItZnJpZW5kbHkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCbG9ja1Nl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0OjpkdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHQmxvY2tTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6aXRlcmF0b3I6
Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0OjppdGVyYXRvcjo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6Okl0ZXJhYmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAg
KEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
QmxvY2tTZXQ6Oml0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0FkZGVyOjpCbG9j
a0FkZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0FkZGVyOjpvcGVyYXRvcigpKToKKyAg
ICAgICAgKiBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKiBkZmcvREZHRG9t
aW5hdG9ycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6c3RyaWN0RG9taW5h
dG9yc09mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpkb21pbmF0b3JzT2YpOgor
ICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkp
OgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc0RvbWluYXRlZEJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9udGllck9mKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjppdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YpOgor
ICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmg6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5h
dG9yczo6Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpmb3JBbGxEb21pbmF0b3JzT2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRv
cnM6OmZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkpOgorICAgICAgICAoSlNDOjpERkc6
OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KToKKyAgICAgICAgKEpTQzo6REZH
OjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAg
ICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
bkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3Jz
Ojpmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9j
a0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2U6OnJ1bik6CisKIDIwMTQtMDktMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWVuYWJsZSBjYWxsIGVkZ2UgcHJvZmlsaW5nIGFuZCBwb2x5bW9ycGhpYyBj
YWxsIGlubGluaW5nLCBub3cgdGhhdCBhIGJ1bmNoIG9mIHRoZSBidWdzCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNw
cAogICAgIGRmZy9ERkdCaW5hcnlTd2l0Y2guY3BwCiAgICAgZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAorICAgIGRmZy9ERkdCbG9ja1NldC5jcHAKICAgICBkZmcvREZHQmxvY2tXb3JrbGlz
dC5jcHAKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCiAgICAgZGZnL0RGR0NGQVBoYXNl
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lv
biAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1NldC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tXb3JrbGlzdC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiIC8+CkBA
IC05OTgsNiArOTk5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9j
a01hcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9j
a1dvcmtsaXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tT
ZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1NldElubGlu
ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJlY3Rp
b24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNl
ci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw2
ICs0ODEsOCBAQAogCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNkYxNkMxREIw
MTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRkJFMEY3NzE2
QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8q
IERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkJGMTU4QzE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1
OEExOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCAqLzsgfTsKKwkJMEZCRjE1OEQx
OUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8q
IERGR0Jsb2NrU2V0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQkZERDA0MTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVt
b3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQkZERDAyMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNw
cCAqLzsgfTsKIAkJMEZCRkREMDUxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFs
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4
QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0
MDYsNiArMjQwOCw4IEBACiAJCTBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkUwRjZGMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJF
MEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcv
REZHVW5pZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkJG
MTU4QTE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tTZXQuY3BwOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCRjE1OEIxOUI3QTUzMTAw
Njk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdCbG9ja1NldElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRkREMDIxOTZDOTJCRjAwN0E1
QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
UGhhbnRvbVJlbW92YWxQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1BoYW50b21SZW1vdmFsUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODI3LDcgKzQ4MzEsOSBAQAog
CQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICov
LAogCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICovLAogCQkJ
CTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCAqLywKKwkJ
CQkwRkJGMTU4QTE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwICovLAogCQkJCTBG
QzNDQ0Y3MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovLAorCQkJCTBGQkYxNThC
MTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCAqLywKIAkJCQkwRkMzQ0NG
ODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZDM0ND
RjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCAqLywKIAkJCQkwRjgzNjRC
NTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCkBAIC01OTIxLDYg
KzU5MjcsNyBAQAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURv
bWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8q
IERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIx
RTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBp
biBIZWFkZXJzICovLApAQCAtNzQxNiw2ICs3NDIzLDcgQEAKIAkJCQkwRjEzRTA0RTE2MTY0QTFG
MDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNB
MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZCRjE1OEMxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZF
IC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4
NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE3MzIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4g
QmxvY2tMaXN0OworCiBzdHJ1Y3QgVW5saW5rZWRCbG9jayB7CiAgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKICAgICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBCbG9j
a1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBj
b21tYSgiICIpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9zZXQuZmluZEJp
dCgwLCB0cnVlKTsgYmxvY2tJbmRleCA8IG1fc2V0LnNpemUoKTsgYmxvY2tJbmRleCA9IG1fc2V0
LmZpbmRCaXQoYmxvY2tJbmRleCArIDEsIHRydWUpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICIjIiwgYmxvY2tJbmRleCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja1NldC5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBHcmFwaDsKKwogY2xhc3MgQmxv
Y2tTZXQgewogcHVibGljOgogICAgIEJsb2NrU2V0KCkgeyB9CkBAIC00OSwxMCArNTEsOTggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KGJsb2NrLT5pbmRleCk7CiAgICAgfQog
ICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9y
KCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAgICAgLCBtX3NldChu
dWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4ID0gbV9zZXQtPm1fc2V0LmZpbmRCaXQobV9pbmRleCArIDEsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQmxvY2tT
ZXQ7CisgICAgICAgIAorICAgICAgICBHcmFwaCogbV9ncmFwaDsKKyAgICAgICAgY29uc3QgQmxv
Y2tTZXQqIG1fc2V0OworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworICAgIAorICAg
IGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKEdyYXBoJiBn
cmFwaCwgY29uc3QgQmxvY2tTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9ncmFwaChncmFwaCkK
KyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aXRlcmF0b3IgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0Lm1fZ3JhcGggPSAmbV9ncmFwaDsK
KyAgICAgICAgICAgIHJlc3VsdC5tX3NldCA9ICZtX3NldDsKKyAgICAgICAgICAgIHJlc3VsdC5t
X2luZGV4ID0gbV9zZXQubV9zZXQuZmluZEJpdCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgICAg
IHJlc3VsdC5tX2dyYXBoID0gJm1fZ3JhcGg7CisgICAgICAgICAgICByZXN1bHQubV9zZXQgPSAm
bV9zZXQ7CisgICAgICAgICAgICByZXN1bHQubV9pbmRleCA9IG1fc2V0Lm1fc2V0LnNpemUoKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgICAgIGNvbnN0IEJsb2NrU2V0JiBt
X3NldDsKKyAgICB9OworICAgIAorICAgIEl0ZXJhYmxlIGl0ZXJhYmxlKEdyYXBoJiBncmFwaCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZShncmFwaCwgKnRoaXMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKIHByaXZh
dGU6CiAgICAgQml0VmVjdG9yIG1fc2V0OwogfTsKIAorY2xhc3MgQmxvY2tBZGRlciB7CitwdWJs
aWM6CisgICAgQmxvY2tBZGRlcihCbG9ja1NldCYgc2V0KQorICAgICAgICA6IG1fc2V0KHNldCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoYmxvY2spOworICAgIH0K
K3ByaXZhdGU6CisgICAgQmxvY2tTZXQmIG1fc2V0OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja1NldElubGluZXNfaAorI2RlZmluZSBERkdCbG9j
a1NldElubGluZXNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9j
a1NldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworaW5saW5lIEJhc2ljQmxvY2sqIEJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFwaC0+YmxvY2sobV9pbmRleCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQmxvY2tTZXRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDAsNiArNDAwLDQ4IEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgfQogfQogCitCbG9ja1NldCBEb21pbmF0b3JzOjpzdHJpY3REb21pbmF0b3JzT2YoQmFz
aWNCbG9jayogdG8pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbFN0
cmljdERvbWluYXRvcnNPZih0bywgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3JzOjpkb21pbmF0b3JzT2YoQmFzaWNCbG9jayog
dG8pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbERvbWluYXRvcnNP
Zih0bywgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9j
a1NldCBEb21pbmF0b3JzOjpibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZy
b20pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nrc1N0cmlj
dGx5RG9taW5hdGVkQnkoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3JzOjpibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Js
b2NrKiBmcm9tKSBjb25zdAoreworICAgIEJsb2NrU2V0IHJlc3VsdDsKKyAgICBmb3JBbGxCbG9j
a3NEb21pbmF0ZWRCeShmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6OmRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNC
bG9jayogZnJvbSkgY29uc3QKK3sKKyAgICBCbG9ja1NldCByZXN1bHQ7CisgICAgZm9yQWxsQmxv
Y2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbChmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6Oml0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZihjb25zdCBCbG9ja0xpc3QmIGZyb20pIGNvbnN0Cit7CisgICAgQmxv
Y2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mSW1wbChmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIGJvb2wgRG9taW5hdG9yczo6bmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pIGNvbnN0CiB7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IHRvOyBi
bG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHQmxv
Y2tTZXQuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTU3LDExICs1
NywxMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURv
bWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9kYXRhW3RvXS5pZG9tUGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2Rh
dGFbYmxvY2tdLmlkb21QYXJlbnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbERv
bWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QK
KyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2Nr
ID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQorICAgICAgICAgICAgZnVuY3RvcihibG9jayk7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JBbGxCbG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDE2PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtmcm9t
XS5pZG9tS2lkcyk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAg
ICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3Rvciht
X2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnko
QmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoZnJvbSk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAg
ICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3Rv
cihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBC
bG9ja1NldCBzdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0OworICAgIEJs
b2NrU2V0IGRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3Q7CisgICAgQmxvY2tTZXQg
YmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICBC
bG9ja1NldCBibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5E
b21pbmFuY2VGcm9udGllck9mKAorICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQmxvY2tTZXQgc2V0OworICAgICAg
ICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgZnJv
bSwKKyAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2V0LmFkZChibG9jaykpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2sp
OworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIEJsb2NrU2V0IGRvbWluYW5jZUZy
b250aWVyT2YoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKAorICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBCbG9ja1NldCBzZXQ7CisgICAgICAgIGZvckFsbEJs
b2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20s
CisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXNldC5hZGQoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgQmxvY2tTZXQg
aXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IEJsb2NrTGlzdCYgZnJvbSkgY29uc3Q7
CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRl
OgogICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pIGNvbnN0OwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICBCYXNpY0Js
b2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gUGFyYXBocmFzaW5nIGZyb20gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb21pbmF0
b3JfKGdyYXBoX3RoZW9yeSk6CisgICAgICAgIC8vICAgICAiVGhlIGRvbWluYW5jZSBmcm9udGll
ciBvZiBhIGJsb2NrICdmcm9tJyBpcyB0aGUgc2V0IG9mIGFsbCBibG9ja3MgJ3RvJyBzdWNoIHRo
YXQKKyAgICAgICAgLy8gICAgICdmcm9tJyBkb21pbmF0ZXMgYW4gaW1tZWRpYXRlIHByZWRlY2Vz
c29yIG9mICd0bycsIGJ1dCAnZnJvbScgZG9lcyBub3Qgc3RyaWN0bHkKKyAgICAgICAgLy8gICAg
IGRvbWluYXRlICd0bycuIgorICAgICAgICAvLworICAgICAgICAvLyBBIHVzZWZ1bCBjb3JuZXIg
Y2FzZSB0byByZW1lbWJlcjogYSBibG9jayBtYXkgYmUgaW4gaXRzIG93biBkb21pbmFuY2UgZnJv
bnRpZXIgaWYgaXQgaGFzCisgICAgICAgIC8vIGEgbG9vcCBlZGdlIHRvIGl0c2VsZiwgc2luY2Ug
aXQgZG9taW5hdGVzIGl0c2VsZiBhbmQgc28gaXQgZG9taW5hdGVzIGl0cyBvd24gaW1tZWRpYXRl
CisgICAgICAgIC8vIHByZWRlY2Vzc29yLCBhbmQgYSBibG9jayBuZXZlciBzdHJpY3RseSBkb21p
bmF0ZXMgaXRzZWxmLgorICAgICAgICAKKyAgICAgICAgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnko
ZnJvbSwgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJ
bmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0byA9IGJsb2NrLT5z
dWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmlj
dGx5RG9taW5hdGVzKGZyb20sIHRvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Io
dG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5JdGVy
YXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZy
b20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBCbG9ja0xp
c3Qgd29ya2xpc3QgPSBmcm9tOworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwor
ICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbChibG9jaywg
WyZdIChCYXNpY0Jsb2NrKiBvdGhlckJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChm
dW5jdG9yKG90aGVyQmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKG90aGVyQmxvY2spOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
ICAgIAogICAgIHN0cnVjdCBCbG9ja0RhdGEgewogICAgICAgICBCbG9ja0RhdGEoKQogICAgICAg
ICAgICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwyNCArMzY5LDEwIEBAIHZv
aWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnByaW50
KCIgIiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKICAg
ICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSkgewotICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBEb21pbmF0ZWQgYnk6Iik7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy0+YmxvY2soaSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXModGhpcy0+YmxvY2soaSksIGJsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKLSAgICAgICAgfQotICAgICAgICBv
dXQucHJpbnQoIlxuIik7Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczoi
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaWYgKCF0aGlzLT5ibG9jayhpKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgdGhp
cy0+YmxvY2soaSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0
LnByaW50KCIgIyIsIGkpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAg
ICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBtX2RvbWluYXRvcnMu
ZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIg
IERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0RvbWluYXRlZEJ5KGJsb2NrKSwgIlxu
Iik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYW5jZSBGcm9udGllcjogIiwg
bV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAiXG4iKTsKKyAgICAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250aWVyOiAiLCBtX2Rv
bWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykp
LCAiXG4iKTsKICAgICB9CiAgICAgaWYgKG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewogICAg
ICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJP
ZihibG9jaykpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2luY2x1ZGUg
IkRGR0Jsb2NrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgpAQCAtNjksMTMg
KzY5LDggQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMu
Y29udGFpbnMoYmxvY2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NUaGF0TmVlZEludmFsaWRh
dGlvblBvaW50cy5pdGVyYWJsZShtX2dyYXBoKSkgewogICAgICAgICAgICAgaW5zZXJ0SW52YWxp
ZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjQ4KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAx
NC0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJlZWYg
dXAgdGhlIERGRydzIENGRyBhbmFseXNlcyB0byBpbmNsdWRlIGl0ZXJhdGVkIGRvbWluYW5jZSBm
cm9udGllcnMgYW5kIG1vcmUgdXNlci1mcmllbmRseSBCbG9ja1NldHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjUyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgR2l2ZSBCaXRWZWN0b3Ig
YSB3YXkgdG8gcXVpY2tseSBmaW5kIHRoZSBuZXh0IHNldCAob3IgdW5zZXQpIGJpdC4gTWFrZSBC
aXRWZWN0b3IgZXF1YWxpdHkKKyAgICAgICAgZmFzdGVyLiBGaXggYSBtaW5vciBjbG9zdXJlIGdv
b2YgaW4gU3BlY3RydW0uCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6ZXF1YWxzU2xvd0Nhc2VGYXN0KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjplcXVhbHNT
bG93Q2FzZVNpbXBsZSk6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RG
OjpCaXRWZWN0b3I6OmZpbmRCaXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbmRCaXRG
YXN0KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpmaW5kQml0U2ltcGxlKToKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjpmaW5kQml0SW5Xb3JkKToKKyAgICAgICAgKiB3dGYvU3BlY3RydW0u
aDoKKyAgICAgICAgKFdURjo6U3BlY3RydW06OnJlbW92ZUlmKToKKwogMjAxNC0wOS0wMyAgRGFu
IEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEdldCByaWQgb2YgSElHSF9E
UElfQ0FOVkFTIGxlZnRvdmVycwpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAxNzMy
MjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNiArMTgzLDUwIEBAIHNpemVfdCBCaXRWZWN0b3I6OmJpdENvdW50U2xvdygpIGNvbnN0CiAK
IGJvb2wgQml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBj
b25zdAogeworICAgIGJvb2wgcmVzdWx0ID0gZXF1YWxzU2xvd0Nhc2VGYXN0KG90aGVyKTsKKyAg
ICBBU1NFUlQocmVzdWx0ID09IGVxdWFsc1Nsb3dDYXNlU2ltcGxlKG90aGVyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBCaXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNlRmFzdChjb25z
dCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc0lubGluZSgpICE9IG90aGVy
LmlzSW5saW5lKCkpCisgICAgICAgIHJldHVybiBlcXVhbHNTbG93Q2FzZVNpbXBsZShvdGhlcik7
CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogbXlCaXRzID0gb3V0T2ZMaW5lQml0cygp
OworICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG90aGVyQml0cyA9IG90aGVyLm91dE9mTGluZUJp
dHMoKTsKKyAgICAKKyAgICBzaXplX3QgbXlOdW1Xb3JkcyA9IG15Qml0cy0+bnVtV29yZHMoKTsK
KyAgICBzaXplX3Qgb3RoZXJOdW1Xb3JkcyA9IG90aGVyQml0cy0+bnVtV29yZHMoKTsKKyAgICBz
aXplX3QgbWluTnVtV29yZHM7CisgICAgc2l6ZV90IG1heE51bVdvcmRzOworICAgIAorICAgIGNv
bnN0IE91dE9mTGluZUJpdHMqIGxvbmdlckJpdHM7CisgICAgaWYgKG15TnVtV29yZHMgPCBvdGhl
ck51bVdvcmRzKSB7CisgICAgICAgIG1pbk51bVdvcmRzID0gbXlOdW1Xb3JkczsKKyAgICAgICAg
bWF4TnVtV29yZHMgPSBvdGhlck51bVdvcmRzOworICAgICAgICBsb25nZXJCaXRzID0gb3RoZXJC
aXRzOworICAgIH0gZWxzZSB7CisgICAgICAgIG1pbk51bVdvcmRzID0gb3RoZXJOdW1Xb3JkczsK
KyAgICAgICAgbWF4TnVtV29yZHMgPSBteU51bVdvcmRzOworICAgICAgICBsb25nZXJCaXRzID0g
bXlCaXRzOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gbWluTnVtV29yZHM7IGkg
PCBtYXhOdW1Xb3JkczsgKytpKSB7CisgICAgICAgIGlmIChsb25nZXJCaXRzLT5iaXRzKClbaV0p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAoc2l6ZV90
IGkgPSBtaW5OdW1Xb3JkczsgaS0tOykgeworICAgICAgICBpZiAobXlCaXRzLT5iaXRzKClbaV0g
IT0gb3RoZXJCaXRzLT5iaXRzKClbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nh
c2VTaW1wbGUoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3QKK3sKICAgICAvLyBUaGlzIGlz
IHJlYWxseSBjaGVlc3ksIGJ1dCBwcm9iYWJseSBnb29kIGVub3VnaCBmb3Igbm93LgogICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWF4KHNpemUoKSwgb3RoZXIuc2l6ZSgpKTsgaS0tOykgewog
ICAgICAgICBpZiAoZ2V0KGkpICE9IG90aGVyLmdldChpKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShy
ZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgpAQCAtMjE1LDYgKzIxNiwxOSBAQCBwdWJsaWM6IAogICAgICAgICBy
ZXR1cm4gYml0Q291bnRTbG93KCk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBmaW5kQml0KHNp
emVfdCBpbmRleCwgYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1
bHQgPSBmaW5kQml0RmFzdChpbmRleCwgdmFsdWUpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgeworICAgICAgICAgICAgc2l6ZV90IGV4cGVjdGVkUmVzdWx0ID0gZmluZEJpdFNpbXBs
ZShpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZFJlc3Vs
dCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coImZpbmRCaXQoIiwgaW5kZXgsICIsICIsIHZh
bHVlLCAiKSBvbiAiLCAqdGhpcywgIiBzaG91bGQgaGF2ZSBnb3R0ZW4gIiwgZXhwZWN0ZWRSZXN1
bHQsICIgYnV0IGdvdCAiLCByZXN1bHQsICJcbiIpOworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiAgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1w
dHlWYWx1ZSB9OwpAQCAtMjg5LDYgKzMwMyw2NCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
V1RGOjpiaXRDb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0cykpOwogICAgIH0KICAgICAK
KyAgICBzaXplX3QgZmluZEJpdEZhc3Qoc2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgICAgIGZpbmRCaXRJbldvcmQobV9iaXRzT3JQ
b2ludGVyLCBpbmRleCwgbWF4SW5saW5lQml0cygpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IE91dE9mTGluZUJp
dHMqIGJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgIAorICAgICAgICAvLyB2YWx1ZSA9
IHRydWU6IGNhc3RzIHRvIDEsIHRoZW4geG9ycyB0byAwLCB0aGVuIG5lZ2F0ZXMgdG8gMC4KKyAg
ICAgICAgLy8gdmFsdWUgPSBmYWxzZTogY2FzdHMgdG8gMCwgdGhlbiB4b3JzIHRvIDEsIHRoZW4g
bmVnYXRlcyB0byAtMSAoaS5lLiBhbGwgb25lIGJpdHMpLgorICAgICAgICB1aW50cHRyX3Qgc2tp
cFZhbHVlID0gLShzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSBeIDEpOworICAgICAgICBz
aXplX3QgbnVtV29yZHMgPSBiaXRzLT5udW1Xb3JkcygpOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IHdvcmRJbmRleCA9IHN0YXJ0SW5kZXggLyBiaXRzSW5Qb2ludGVyKCk7CisgICAgICAgIHNp
emVfdCBzdGFydEluZGV4SW5Xb3JkID0gc3RhcnRJbmRleCAtIHdvcmRJbmRleCAqIGJpdHNJblBv
aW50ZXIoKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh3b3JkSW5kZXggPCBudW1Xb3Jkcykg
eworICAgICAgICAgICAgdWludHB0cl90IHdvcmQgPSBiaXRzLT5iaXRzKClbd29yZEluZGV4XTsK
KyAgICAgICAgICAgIGlmICh3b3JkICE9IHNraXBWYWx1ZSkgeworICAgICAgICAgICAgICAgIHNp
emVfdCBpbmRleCA9IHN0YXJ0SW5kZXhJbldvcmQ7CisgICAgICAgICAgICAgICAgaWYgKGZpbmRC
aXRJbldvcmQod29yZCwgaW5kZXgsIGJpdHNJblBvaW50ZXIoKSwgdmFsdWUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd29yZEluZGV4ICogYml0c0luUG9pbnRlcigpICsgaW5kZXg7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdvcmRJbmRleCsrOworICAg
ICAgICAgICAgc3RhcnRJbmRleEluV29yZCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBiaXRzLT5udW1CaXRzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBmaW5k
Qml0U2ltcGxlKHNpemVfdCBpbmRleCwgYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IHdoaWxlIChpbmRleCA8IHNpemUoKSkgeworICAgICAgICAgICAgaWYgKGdldChpbmRleCkgPT0g
dmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgaW5kZXgr
KzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBmaW5kQml0SW5Xb3JkKHVpbnRwdHJfdCB3b3JkLCBzaXplX3QmIGluZGV4LCBz
aXplX3QgZW5kSW5kZXgsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICB3b3JkID4+PSBpbmRl
eDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZEluZGV4KSB7CisgICAgICAg
ICAgICBpZiAoKHdvcmQgJiAxKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAg
ICAgICB3b3JkID4+PSAxOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSBlbmRJbmRleDsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKICAgICBjbGFzcyBPdXRPZkxpbmVC
aXRzIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1CaXRzOyB9CkBAIC0zMjQsNiArMzk2LDggQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc2l6ZV90IGJpdENvdW50U2xvdygpIGNvbnN0OwogICAgIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgZXF1YWxzU2xvd0Nhc2VGYXN0KGNvbnN0IEJpdFZlY3RvciYgb3Ro
ZXIpIGNvbnN0OworICAgIGJvb2wgZXF1YWxzU2xvd0Nhc2VTaW1wbGUoY29uc3QgQml0VmVjdG9y
JiBvdGhlcikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHVpbnRwdHJfdCBoYXNoU2xv
d0Nhc2UoKSBjb25zdDsKICAgICAKICAgICB1aW50cHRyX3QqIGJpdHMoKQpJbmRleDogU291cmNl
L1dURi93dGYvU3BlY3RydW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1
bS5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCByZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQog
ICAgIHsKLSAgICAgICAgbV9tYXAucmVtb3ZlSWYoW2Z1bmN0b3JdICh0eXBlbmFtZSBIYXNoTWFw
PFQsIENvdW50ZXJUeXBlPjo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgeworICAgICAgICBtX21h
cC5yZW1vdmVJZihbJmZ1bmN0b3JdICh0eXBlbmFtZSBIYXNoTWFwPFQsIENvdW50ZXJUeXBlPjo6
S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgewogICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9y
KEtleUFuZENvdW50KHBhaXIua2V5LCBwYWlyLnZhbHVlKSk7CiAgICAgICAgICAgICB9KTsKICAg
ICB9Cg==
</data>
<flag name="review"
          id="262340"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>