<?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>113656</bug_id>
          
          <creation_ts>2013-03-31 01:02:27 -0700</creation_ts>
          <short_desc>fourthTier: FTL JIT should supply TBAA meta-data to LLVM</short_desc>
          <delta_ts>2013-03-31 21:33:45 -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>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866752</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 01:02:27 -0700</bug_when>
    <thetext>We should get this right early, so that we don&apos;t have a bad time trying to put it in later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866753</commentid>
    <comment_count>1</comment_count>
      <attachid>195889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 01:03:35 -0700</bug_when>
    <thetext>Created attachment 195889
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866794</commentid>
    <comment_count>2</comment_count>
      <attachid>195900</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 11:37:39 -0700</bug_when>
    <thetext>Created attachment 195900
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866803</commentid>
    <comment_count>3</comment_count>
      <attachid>195900</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-31 12:43:24 -0700</bug_when>
    <thetext>Comment on attachment 195900
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:117
&gt; +        

static const char* negSplit = &quot;_neg_&quot;;

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:118
&gt; +        size_t stringLength = m_heapNameLength + (negative ? 5 : 1) + numHexlets;

negative ? sizeof(negSplit) : 1

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:124
&gt; +            memcpy(characters + m_heapNameLength, &quot;_neg_&quot;, 5);

memcpy(characters + m_heapNameLength, negSplit, sizeof(negSplit))

feel free to choose a better name than negsplit though :D

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];

Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866806</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 12:48:47 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 195900 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195900&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:117
&gt; &gt; +        
&gt; 
&gt; static const char* negSplit = &quot;_neg_&quot;;

Will do this and all of those other things.  Can&apos;t think of a better name than negSplit so I&apos;ll use that.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:118
&gt; &gt; +        size_t stringLength = m_heapNameLength + (negative ? 5 : 1) + numHexlets;
&gt; 
&gt; negative ? sizeof(negSplit) : 1
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:124
&gt; &gt; +            memcpy(characters + m_heapNameLength, &quot;_neg_&quot;, 5);
&gt; 
&gt; memcpy(characters + m_heapNameLength, negSplit, sizeof(negSplit))
&gt; 
&gt; feel free to choose a better name than negsplit though :D
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt; &gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];
&gt; 
&gt; Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.

Interesting point.  My thinking is that pointers to globals can already be accessed through other means.  I think of this nasty code as being, from an information flow standpoint, just like saying:

class MyAwesomeClass {
     MyAwesomeClass(void* foo) : m_foo(foo) { }
    void* m_foo;
}

new MyAwesomeClass(addressOfGlobal(blah))

We do analogous equivalents to MyAwesomeClass all over the place in the compiler already.  DFG::Node is an example of an awesome class that has a pointer to globals for GetGlobalVar and PutGlobalVar...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866841</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 16:27:19 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866876</commentid>
    <comment_count>6</comment_count>
      <attachid>195900</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-03-31 19:53:08 -0700</bug_when>
    <thetext>Comment on attachment 195900
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:113
&gt; +        // The crazy way of testing of index &gt;= 2 ** power
&gt; +        // (where I use ** to denote pow()).
&gt; +        if ((index &gt;&gt; 1) &gt;&gt; (power - 1))

This seems like it would prefer to be in a helper function.

&gt;&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt;&gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];
&gt; 
&gt; Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.

There is toASCIIHexValue that you could use here.

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:29
&gt; +#include &lt;wtf/Platform.h&gt;

You shouldn&apos;t have to include this.

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:169
&gt; +    struct MyHashTraits : WTF::GenericHashTraits&lt;ptrdiff_t&gt; {

This is not the best name in the world.

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:216
&gt; +private:
&gt; +    
&gt; +    // The trick here is that the indexed heap is &quot;indexed&quot; by a pointer-width

Extra newline.

&gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:95
&gt; +    unsigned m_tbaaKind;
&gt; +    
&gt; +};

Extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866894</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 21:21:49 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 195900 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195900&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:113
&gt; &gt; +        // The crazy way of testing of index &gt;= 2 ** power
&gt; &gt; +        // (where I use ** to denote pow()).
&gt; &gt; +        if ((index &gt;&gt; 1) &gt;&gt; (power - 1))
&gt; 
&gt; This seems like it would prefer to be in a helper function.

Well, sort of; this relies on power never being 0.  I&apos;ll add WTF::isGreaterThanNonZeroPowerOfTwo().

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt; &gt;&gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];
&gt; &gt; 
&gt; &gt; Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.
&gt; 
&gt; There is toASCIIHexValue that you could use here.

Will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:29
&gt; &gt; +#include &lt;wtf/Platform.h&gt;
&gt; 
&gt; You shouldn&apos;t have to include this.

OK.  Stay tuned for a big patch to remove those.  This is a pattern we used in the DFG.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:169
&gt; &gt; +    struct MyHashTraits : WTF::GenericHashTraits&lt;ptrdiff_t&gt; {
&gt; 
&gt; This is not the best name in the world.

Will rename to WithoutZeroOrOneHashTraits.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:216
&gt; &gt; +private:
&gt; &gt; +    
&gt; &gt; +    // The trick here is that the indexed heap is &quot;indexed&quot; by a pointer-width
&gt; 
&gt; Extra newline.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:95
&gt; &gt; +    unsigned m_tbaaKind;
&gt; &gt; +    
&gt; &gt; +};
&gt; 
&gt; Extra newline.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866895</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 21:32:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 195900 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195900&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:113
&gt; &gt; &gt; +        // The crazy way of testing of index &gt;= 2 ** power
&gt; &gt; &gt; +        // (where I use ** to denote pow()).
&gt; &gt; &gt; +        if ((index &gt;&gt; 1) &gt;&gt; (power - 1))
&gt; &gt; 
&gt; &gt; This seems like it would prefer to be in a helper function.
&gt; 
&gt; Well, sort of; this relies on power never being 0.  I&apos;ll add WTF::isGreaterThanNonZeroPowerOfTwo().
&gt; 
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt; &gt; &gt;&gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];
&gt; &gt; &gt; 
&gt; &gt; &gt; Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.
&gt; &gt; 
&gt; &gt; There is toASCIIHexValue that you could use here.
&gt; 
&gt; Will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:29
&gt; &gt; &gt; +#include &lt;wtf/Platform.h&gt;
&gt; &gt; 
&gt; &gt; You shouldn&apos;t have to include this.
&gt; 
&gt; OK.  Stay tuned for a big patch to remove those.  This is a pattern we used in the DFG.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:169
&gt; &gt; &gt; +    struct MyHashTraits : WTF::GenericHashTraits&lt;ptrdiff_t&gt; {
&gt; &gt; 
&gt; &gt; This is not the best name in the world.
&gt; 
&gt; Will rename to WithoutZeroOrOneHashTraits.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:216
&gt; &gt; &gt; +private:
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    // The trick here is that the indexed heap is &quot;indexed&quot; by a pointer-width
&gt; &gt; 
&gt; &gt; Extra newline.
&gt; 
&gt; OK.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:95
&gt; &gt; &gt; +    unsigned m_tbaaKind;
&gt; &gt; &gt; +    
&gt; &gt; &gt; +};
&gt; &gt; 
&gt; &gt; Extra newline.
&gt; 
&gt; OK.

Landed everything except the #include &lt;wtf/Platform.h&gt; thingy in http://trac.webkit.org/changeset/147299</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866896</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 21:33:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; (From update of attachment 195900 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195900&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:113
&gt; &gt; &gt; &gt; +        // The crazy way of testing of index &gt;= 2 ** power
&gt; &gt; &gt; &gt; +        // (where I use ** to denote pow()).
&gt; &gt; &gt; &gt; +        if ((index &gt;&gt; 1) &gt;&gt; (power - 1))
&gt; &gt; &gt; 
&gt; &gt; &gt; This seems like it would prefer to be in a helper function.
&gt; &gt; 
&gt; &gt; Well, sort of; this relies on power never being 0.  I&apos;ll add WTF::isGreaterThanNonZeroPowerOfTwo().
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp:130
&gt; &gt; &gt; &gt;&gt; +            characters[stringLength - i - 1] = (&quot;0123456789ABCDEF&quot;)[accumulator &amp; 0xF];
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Slightly concerned about this leaking address space layout info, but this would be trivial to fix if it were a problem, and i&apos;m not sure if it is a problem without some bug already being present.
&gt; &gt; &gt; 
&gt; &gt; &gt; There is toASCIIHexValue that you could use here.
&gt; &gt; 
&gt; &gt; Will do.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:29
&gt; &gt; &gt; &gt; +#include &lt;wtf/Platform.h&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; You shouldn&apos;t have to include this.
&gt; &gt; 
&gt; &gt; OK.  Stay tuned for a big patch to remove those.  This is a pattern we used in the DFG.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:169
&gt; &gt; &gt; &gt; +    struct MyHashTraits : WTF::GenericHashTraits&lt;ptrdiff_t&gt; {
&gt; &gt; &gt; 
&gt; &gt; &gt; This is not the best name in the world.
&gt; &gt; 
&gt; &gt; Will rename to WithoutZeroOrOneHashTraits.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeap.h:216
&gt; &gt; &gt; &gt; +private:
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    // The trick here is that the indexed heap is &quot;indexed&quot; by a pointer-width
&gt; &gt; &gt; 
&gt; &gt; &gt; Extra newline.
&gt; &gt; 
&gt; &gt; OK.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h:95
&gt; &gt; &gt; &gt; +    unsigned m_tbaaKind;
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +};
&gt; &gt; &gt; 
&gt; &gt; &gt; Extra newline.
&gt; &gt; 
&gt; &gt; OK.
&gt; 
&gt; Landed everything except the #include &lt;wtf/Platform.h&gt; thingy in http://trac.webkit.org/changeset/147299

And really landed in http://trac.webkit.org/changeset/147300</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195889</attachid>
            <date>2013-03-31 01:03:35 -0700</date>
            <delta_ts>2013-03-31 11:37:39 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32290</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3Mjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEzLTAzLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgc3VwcGx5IFRCQUEgbWV0YS1kYXRhIHRvIExMVk0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzY1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
V29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjp0
YmFhTWV0YWRhdGFTbG93KToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmRlY29y
YXRlSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6
OkluZGV4ZWRBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFj
dEhlYXA6On5JbmRleGVkQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVk
QWJzdHJhY3RIZWFwOjphdFNsb3cpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFj
dEhlYXA6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJhY3RI
ZWFwOjpBYnNvbHV0ZUFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVB
YnN0cmFjdEhlYXA6On5BYnNvbHV0ZUFic3RyYWN0SGVhcCk6CisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChBYnN0cmFjdEhl
YXApOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmlzSW5pdGlhbGl6ZWQpOgorICAgICAgICAo
SlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
QWJzdHJhY3RIZWFwOjpwYXJlbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6
aGVhcE5hbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6dGJhYU1ldGFkYXRh
KToKKyAgICAgICAgKEFic3RyYWN0RmllbGQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0
RmllbGQ6OkFic3RyYWN0RmllbGQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0RmllbGQ6
OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0RmllbGQ6Om9mZnNldCk6
CisgICAgICAgIChJbmRleGVkQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRl
eGVkQWJzdHJhY3RIZWFwOjphdEFueUluZGV4KToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVk
QWJzdHJhY3RIZWFwOjphdCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVh
cDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6
cmV0dXJuSW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhl
YXA6Ok15SGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjpNeUhhc2hUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKEFic29sdXRlQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnNv
bHV0ZUFic3RyYWN0SGVhcDo6YXRBbnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnNv
bHV0ZUFic3RyYWN0SGVhcDo6YXQpOgorICAgICAgICAoSlNDOjpGVEw6OkFic29sdXRlQWJzdHJh
Y3RIZWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojp+QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6
CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphZGRyZXNz
Rm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6cGF5bG9hZEZvcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnRhZ0Zvcik6CisgICAgICAgIChMb3dl
ckRGR1RvTExWTSk6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAoRlRMKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQzMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojpsb2FkNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZFB0cik6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZTMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmVQdHIpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWRkcmVzcyk6CisgICAgICAgICogZnRsL0ZUTFR5cGVk
UG9pbnRlci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChUeXBlZFBvaW50ZXIp
OgorICAgICAgICAoSlNDOjpGVEw6OlR5cGVkUG9pbnRlcjo6VHlwZWRQb2ludGVyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpUeXBlZFBvaW50ZXI6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZU
TDo6VHlwZWRQb2ludGVyOjpoZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpUeXBlZFBvaW50ZXI6
OnZhbHVlKToKKwogMjAxMy0wMy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIGZvdXJ0aFRpZXI6IEZUTCBKSVQgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0
aGUgTWFyc2FnbGlhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXAu
aCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0xWYWx1ZSBBYnN0cmFjdEhl
YXA6OnRiYWFNZXRhZGF0YVNsb3coY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgcmVwb3Np
dG9yeSkgY29uc3QKK3sKKyAgICBMVmFsdWUgYXJndW1lbnRzW10gPSB7IExMVk1NRFN0cmluZyht
X2hlYXBOYW1lLCBzdHJsZW4obV9oZWFwTmFtZSkpLCBtX3BhcmVudC50YmFhTWV0YWRhdGEocmVw
b3NpdG9yeSkgfTsKKyAgICBtX3RiYWFNZXRhZGF0YSA9IExMVk1NRE1vZGUoYXJndW1lbnRzLCAy
KTsKKyAgICByZXR1cm4gbV90YmFhTWV0YWRhdGE7Cit9CisKK3ZvaWQgQWJzdHJhY3RIZWFwOjpk
ZWNvcmF0ZUluc3RydWN0aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgY29uc3QgQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeSYgcmVwb3NpdG9yeSkgY29uc3QKK3sKKyAgICBMTFZNU2V0TWV0YWRhdGEoaW5z
dHJ1Y3Rpb24sIHJlcG9zaXRvcnkubV90YmFhS2luZCwgdGJhYU1ldGFkYXRhKCkpOworfQorCitJ
bmRleGVkQWJzdHJhY3RIZWFwOjpJbmRleGVkQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCogcGFy
ZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSwgc2l6ZV90IGVsZW1lbnRTaXplKQorICAgIDogbV9o
ZWFwRm9yQW55SW5kZXgocGFyZW50LCBoZWFwTmFtZSkKKyAgICAsIG1faGVhcE5hbWVMZW5ndGgo
c3RybGVuKGhlYXBOYW1lKSkKKyAgICAsIG1fZWxlbWVudFNpemUoZWxlbWVudFNpemUpCit7Cit9
CisKK0luZGV4ZWRBYnN0cmFjdEhlYXA6On5JbmRleGVkQWJzdHJhY3RIZWFwKCkKK3sKK30KKwor
Y29uc3QgQWJzdHJhY3RGaWVsZCYgSW5kZXhlZEFic3RyYWN0SGVhcDo6YXRTbG93KHB0cmRpZmZf
dCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkg
Pj0gbV9zbWFsbEluZGljZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAoVU5MSUtFTFkoIW1fbGFy
Z2VJbmRpY2VzKSkKKyAgICAgICAgbV9sYXJnZUluZGljZXMgPSBhZG9wdFB0cihuZXcgTWFwVHlw
ZSgpKTsKKyAgICAKKyAgICBNYXBUeXBlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9sYXJnZUlu
ZGljZXMtPmZpbmQoaW5kZXgpOworICAgIGlmIChpdGVyICE9IG1fbGFyZ2VJbmRpY2VzLT5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOworICAgIAorICAgIE93blB0cjxB
YnN0cmFjdEZpZWxkPiBmaWVsZCA9IGFkb3B0UHRyKG5ldyBBYnN0cmFjdEZpZWxkKCkpOworICAg
IEFic3RyYWN0RmllbGQqIHJlc3VsdCA9IGZpZWxkLmdldCgpOworICAgIGluaXRpYWxpemUoKnJl
c3VsdCwgaW5kZXgpOworICAgIG1fbGFyZ2VJbmRpY2VzLmFkZChpbmRleCwgZmllbGQucmVsZWFz
ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6
OmluaXRpYWxpemUoQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBzaWduZWRJbmRleCkg
Y29uc3QKK3sKKyAgICAvLyBCdWlsZCB1cCBhIG5hbWUgb2YgdGhlIGZvcm06CisgICAgLy8KKyAg
ICAvLyAgICBoZWFwTmFtZV9oZXhJbmRleAorICAgIC8vCisgICAgLy8gb3I6CisgICAgLy8KKyAg
ICAvLyAgICBoZWFwTmFtZV9uZWdfaGV4SW5kZXgKKyAgICAvLworICAgIC8vIEZvciBleGFtcGxl
IGlmIHlvdSBhY2Nlc3MgYW4gaW5kZXhlZCBoZWFwIGNhbGxlZCBGb29CYXIgYXQgaW5kZXggNSwg
eW91J2xsCisgICAgLy8gZ2V0OgorICAgIC8vCisgICAgLy8gICAgRm9vQmFyXzUKKyAgICAvLwor
ICAgIC8vIE9yIGlmIHlvdSBhY2Nlc3MgYW4gaW5kZXhlZCBoZWFwIGNhbGxlZCBCbGFoIGF0IGlu
ZGV4IC0xMCwgeW91J2xsIGdldDoKKyAgICAvLworICAgIC8vICAgIEJsYWhfbmVnX0EKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgTExWTSB1c2VzIHRoZSBzdHJpbmcg
dG8gZGlzdGluZ3Vpc2ggdGhlIHR5cGVzLgorICAgIAorICAgIGJvb2wgbmVnYXRpdmU7CisgICAg
c2l6ZV90IGluZGV4OworICAgIGlmIChzaWduZWRJbmRleCA8IDApIHsKKyAgICAgICAgbmVnYXRp
dmUgPSB0cnVlOworICAgICAgICBpbmRleCA9IC1zaWduZWRJbmRleDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBuZWdhdGl2ZSA9IGZhbHNlOworICAgICAgICBpbmRleCA9IHNpZ25lZEluZGV4Owor
ICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHBvd2VyID0gNDsgcG93ZXIgPD0gc2l6ZW9m
KHZvaWQqKSAqIDg7IHBvd2VyICs9IDQpIHsKKyAgICAgICAgLy8gVGhlIGNyYXp5IHdheSBvZiB0
ZXN0aW5nIG9mIGluZGV4ID49IDIgKiogcG93ZXIKKyAgICAgICAgLy8gKHdoZXJlIEkgdXNlICoq
IHRvIGRlbm90ZSBwb3coKSkuCisgICAgICAgIGlmICgoaW5kZXggPj4gMSkgPj4gKHBvd2VyIC0g
MSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51
bUhleGxldHMgPSBwb3dlciA+PiAyOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHN0cmluZ0xl
bmd0aCA9IG1faGVhcE5hbWVMZW5ndGggKyAobmVnYXRpdmUgPyA1IDogMSkgKyBudW1IZXhsZXRz
OworICAgICAgICBjaGFyKiBjaGFyYWN0ZXJzOworICAgICAgICBtX2xhcmdlSW5kZXhOYW1lcy5h
cHBlbmQoQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChzdHJpbmdMZW5ndGgsIGNoYXJhY3RlcnMp
KTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweShjaGFyYWNlcnMsIG1faGVhcE5hbWUsIG1faGVh
cE5hbWVMZW5ndGgpOworICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICBtZW1jcHko
Y2hhcmFjdGVycyArIG1faGVhcE5hbWVMZW5ndGgsICJfbmVnXyIsIDUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjaGFyYWN0ZXJzW21faGVhcE5hbWVMZW5ndGhdID0gJ18nOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IGFjY3VtdWxhdG9yID0gaW5kZXg7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1IZXhsZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGNoYXJhY3Rl
cnNbc3RyaW5nTGVuZ3RoIC0gaSAtIDFdID0gKCIwMTIzNDU2Nzg5QUJDREVGIilbYWNjdW11bGF0
b3IgJiAweEZdOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZpZWxkLmluaXRpYWxpemUoJm1faGVhcEZvckFueUluZGV4LCBjaGFy
YWN0ZXJzLCBzaWduZWRJbmRleCAqIG1fZWxlbWVudFNpemUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0Fic29s
dXRlQWJzdHJhY3RIZWFwOjpBYnNvbHV0ZUFic3RyYWN0SGVhcChBYnN0cmFjdEhlYXAqIGhlYXAs
IGNvbnN0IGNoYXIqIGhlYXBOYW1lKQorICAgIDogbV9pbmRleGVkSGVhcChoZWFwLCBoZWFwTmFt
ZSwgMSkKK3sKK30KKworQWJzb2x1dGVBYnN0cmFjdEhlYXA6On5BYnNvbHV0ZUFic3RyYWN0SGVh
cCgpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQWJzdHJhY3RI
ZWFwX2gKKyNkZWZpbmUgRlRMQWJzdHJhY3RIZWFwX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvRml4ZWRB
cnJheS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKKy8vIFRoZSBGVEwgSklUIHRyaWVzIHRvIGFpZCBMTFZNJ3MgVEJBQS4gVGhl
IEZUTCdzIG5vdGlvbiBvZiBob3cgdGhpcworLy8gaGFwcGVucyBpcyB0aGUgQWJzdHJhY3RIZWFw
LiBBYnN0cmFjdEhlYXBzIGFyZSBhIHNpbXBsZSB0eXBlIHN5c3RlbQorLy8gd2l0aCBzdWItdHlw
aW5nLgorCitjbGFzcyBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OworCitjbGFzcyBBYnN0cmFjdEhl
YXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFic3RyYWN0SGVhcCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEFic3RyYWN0SGVhcCgpCisgICAgICAgIDogbV9w
YXJlbnQoMCkKKyAgICAgICAgLCBtX2hlYXBOYW1lKDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1l
KQorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX2hlYXBOYW1lKGhlYXBO
YW1lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Qg
eyByZXR1cm4gISFtX2hlYXBOYW1lOyB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKEFic3Ry
YWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSkKKyAgICB7CisgICAgICAgIG1f
cGFyZW50ID0gcGFyZW50OworICAgICAgICBtX2hlYXBOYW1lID0gaGVhcE5hbWU7CisgICAgfQor
CisgICAgQWJzdHJhY3RIZWFwKiBwYXJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICB9CisgICAg
CisgICAgY29uc3QgY2hhciogaGVhcE5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIHJldHVybiBtX2hlYXBOYW1lOworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgdGJhYU1ldGFkYXRhKGNvbnN0IEFic3RyYWN0SGVhcFJlcG9zaXRvcnkm
IHJlcG9zaXRvcnkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgp
KTsKKyAgICAgICAgaWYgKExJS0VMWShtX3RiYWFNZXRhZGF0YSkpCisgICAgICAgICAgICByZXR1
cm4gbV90YmFhTWV0YWRhdGE7CisgICAgICAgIHJldHVybiB0YmFhTWV0YWRhdGFTbG93KHJlcG9z
aXRvcnkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTFZhbHVl
IGluc3RydWN0aW9uLCBjb25zdCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5JikgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk7CisgICAgCisg
ICAgTFZhbHVlIHRiYWFNZXRhZGF0YVNsb3coY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYp
IGNvbnN0OworICAgIAorICAgIEFic3RyYWN0SGVhcCogbV9wYXJlbnQ7CisgICAgY29uc3QgY2hh
ciogbV9oZWFwTmFtZTsKKyAgICBtdXRhYmxlIExWYWx1ZSBtX3RiYWFNZXRhZGF0YTsKK307CisK
Ky8vIFRoaW5rIG9mICJBYnN0cmFjdEZpZWxkIiBhcyBiZWluZyBhbiAiQWJzdHJhY3RIZWFwV2l0
aE9mZnNldCIuIEkgd291bGQgaGF2ZSBuYW1lZAorLy8gaXQgdGhlIGxhdHRlciBleGNlcHQgdGhh
dCBJIGRvbid0IGxpa2UgdHlwaW5nIHRoYXQgbXVjaC4KK2NsYXNzIEFic3RyYWN0RmllbGQgOiBB
YnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIEFic3RyYWN0RmllbGQoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgQWJzdHJhY3RGaWVsZChBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hh
ciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogQWJzdHJhY3RIZWFwKHBh
cmVudCwgaGVhcE5hbWUpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBj
aGFyKiBoZWFwTmFtZSwgcHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFic3RyYWN0
SGVhcDo6aW5pdGlhbGl6ZShwYXJlbnQsIGhlYXBOYW1lKTsKKyAgICAgICAgbV9vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisK
K2NsYXNzIEluZGV4ZWRBYnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIEluZGV4ZWRBYnN0cmFj
dEhlYXAoQWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBzaXplX3Qg
ZWxlbWVudFNpemUpOworICAgIH5JbmRleGVkQWJzdHJhY3RIZWFwKCk7CisgICAgCisgICAgY29u
c3QgQWJzdHJhY3RIZWFwJiBhdEFueUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9oZWFwRm9yQW55
SW5kZXg7IH0KKyAgICAKKyAgICBjb25zdCBBYnN0cmFjdEZpZWxkJiBhdChwdHJkaWZmX3QgaW5k
ZXgpCisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX3Nt
YWxsSW5kaWNlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuSW5pdGlhbGl6ZWQo
bV9zbWFsbEluZGljZXNbaW5kZXhdLCBpbmRleCk7CisgICAgICAgIHJldHVybiBhdFNsb3coaW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBBYnN0cmFjdEZpZWxkJiBvcGVyYXRvcltdKHB0
cmRpZmZfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCitwcml2YXRlOgorICAg
IGNvbnN0IEFic3RyYWN0RmllbGQmIHJldHVybkluaXRpYWxpemVkKEFic3RyYWN0RmllbGQmIGZp
ZWxkLCBwdHJkaWZmX3QgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWZpZWxk
LmlzSW5pdGlhbGl6ZWQoKSkpCisgICAgICAgICAgICBpbml0aWFsaXplKGZpZWxkLCBpbmRleCk7
CisgICAgICAgIHJldHVybiBmaWVsZDsKKyAgICB9CisKKyAgICBjb25zdCBBYnN0cmFjdEZpZWxk
JiBhdFNsb3cocHRyZGlmZl90IGluZGV4KSBjb25zdDsKKyAgICB2b2lkIGluaXRpYWxpemUoQWJz
dHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBpbmRleCkgY29uc3Q7CisKKyAgICBBYnN0cmFj
dEhlYXAgbV9oZWFwRm9yQW55SW5kZXg7CisgICAgc2l6ZV90IG1faGVhcE5hbWVMZW5ndGg7Cisg
ICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CisgICAgRml4ZWRBcnJheTxBYnN0cmFjdEZpZWxkLCAx
Nj4gbV9zbWFsbEluZGljZXM7CisgICAgCisgICAgc3RydWN0IE15SGFzaFRyYWl0cyA6IFdURjo6
R2VuZXJpY0hhc2hUcmFpdHM8cHRyZGlmZl90PiB7CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShwdHJkaWZmX3QmIHNsb3QpIHsgc2xvdCA9IDE7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUocHRyZGlmZl90IHZhbHVlKSB7IHJldHVybiB2YWx1
ZSA9PSAxOyB9CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8cHRyZGlmZl90LCBPd25QdHI8
QWJzdHJhY3RGaWVsZD4sIFdURjo6SW50SGFzaDxwdHJkaWZmX3Q+LCBNeUhhc2hUcmFpdHM+IE1h
cFR5cGU7CisgICAgT3duUHRyPE1hcFR5cGU+IG1fbGFyZ2VJbmRpY2VzOworICAgIFZlY3RvcjxD
U3RyaW5nLCAxNj4gbGFyZ2VJbmRleE5hbWVzOworfTsKKworY2xhc3MgQWJzb2x1dGVBYnN0cmFj
dEhlYXAgeworcHVibGljOgorICAgIEFic29sdXRlQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCog
cGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgfkFic29sdXRlQWJzdHJhY3RIZWFw
KCk7CisgICAgCisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdEFueUFkZHJlc3MoKSBjb25zdCB7
IG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CisgICAgCisgICAgY29uc3QgQWJzdHJhY3RI
ZWFwJiBhdCh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXhlZEhl
YXAuYXQoYml0d2lzZV9jYXN0PHB0cmRpZmZfdD4oYWRkcmVzcykpOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBBYnN0cmFjdEhlYXAmIG9wZXJhdG9yW10odm9pZCogYWRkcmVzcykgeyByZXR1cm4g
YXQoYWRkcmVzcyk7IH0KKworcHJpdmF0ZToKKyAgICAKKyAgICAvLyBUaGUgdHJpY2sgaGVyZSBp
cyB0aGF0IHRoZSBpbmRleGVkIGhlYXAgaXMgImluZGV4ZWQiIGJ5IGEgcG9pbnRlci13aWR0aAor
ICAgIC8vIGludGVnZXIuIFBvaW50ZXJzIGFyZSB0aGVtc2VsdmVzIHBvaW50ZXItd2lkdGggaW50
ZWdlcnMuIFNvIHdlIGNhbiByZXVzZQorICAgIC8vIGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eS4K
KyAgICBJbmRleGVkQWJzdHJhY3RIZWFwIG1faW5kZXhlZEhlYXA7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMQWJzdHJhY3RIZWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5KCkKKyAgICA6IHJvb3QoMCwgInJvb3QiKQorCisjZGVmaW5lIEFC
U1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSkgLCBuYW1lKCZyb290LCAjbmFtZSkKKyAgICBG
T1JfRUFDSF9BQlNUUkFDVF9IRUFQKEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYg
QUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTgorCisjZGVmaW5lIEFCU1RSQUNUX0ZJRUxEX0RFQ0xB
UkFUSU9OKG5hbWUsIG9mZnNldCkgLCBuYW1lKCZyb290LCAjbmFtZSwgb2Zmc2V0KQorICAgIEZP
Ul9FQUNIX0FCU1RSQUNUX0ZJRUxEKEFCU1RSQUNUX0ZJRUxEX0RFQ0xBUkFUSU9OKQorI3VuZGVm
IEFCU1RSQUNUX0ZJRUxEX0RFQ0xBUkFUSU9OCisgICAgCisjZGVmaW5lIElOREVYRURfQUJTVFJB
Q1RfSEVBUF9ERUNMQVJBVElPTihuYW1lLCBzaXplKSAsIG5hbWUoJnJvb3QsICNuYW1lLCBzaXpl
KQorICAgIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChJTkRFWEVEX0FCU1RSQUNUX0hF
QVBfREVDTEFSQVRJT04pCisjdW5kZWYgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9O
CisgICAgCisjZGVmaW5lIEFCU09MVVRFX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSkg
LCBuYW1lKCZyb290LCAjbmFtZSkKKyAgICBGT1JfRUFDSF9BQlNPTFVURV9BQlNUUkFDVF9IRUFQ
KEFCU09MVVRFX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgQUJTT0xVVEVfQUJT
VFJBQ1RfSEVBUF9ERUNMQVJBVElPTgorCisgICAgLCBtX3RiYWFLaW5kKExMVk1HZXRNREtpbmRJ
RCgidGJhYSIsIHN0cmxlbigidGJhYSIpKSkKK3sKKyAgICBMVmFsdWUgYXJndW1lbnRzW10gPSB7
IExMVk1NRFN0cmluZyhyb290Lm1faGVhcE5hbWUsIHN0cmxlbihyb290Lm1faGVhcE5hbWUpKSB9
OworICAgIHJvb3QubV90YmFhTWV0YWRhdGEgPSBMTFZNTUROb2RlKCZhcmd1bWVudHMsIDEpOwor
fQorCitBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojp+QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSgpCit7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5X2gKKyNkZWZpbmUgRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworI2RlZmluZSBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQ
KG1hY3JvKSBcCisgICAgbWFjcm8odHlwZWRBcnJheUhlYXApCisKKyNkZWZpbmUgRk9SX0VBQ0hf
QUJTVFJBQ1RfRklFTEQobWFjcm8pIFwKKyAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5LCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpCisKKyNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCisgICAgbWFjcm8odmFyaWFibGVz
LCBzaXplb2YoUmVnaXN0ZXIpKSBcCisgICAgbWFjcm8ocHJvcGVydGllcywgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkgLyogaW5kZXhlZCBieSBpZGVudGlmaWVyTnVtYmVyICovIFwKKyAgICBtYWNy
byhpbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCisgICAg
bWFjcm8oaW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIHNpemVvZihkb3VibGUpKSBcCisgICAgbWFj
cm8oaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBc
CisgICAgbWFjcm8oaW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMsIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpCisgICAgCisjZGVmaW5lIEZPUl9FQUNIX0FCU09MVVRFX0FCU1RSQUNUX0hFQVAo
bWFjcm8pIFwKKyAgICBtYWNybyhnbG9iYWxWYXJpYWJsZXMsIHNpemVvZihSZWdpc3RlcikpCisg
ICAgCisvLyBUaGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIGNhY2hlYWJsZSBiZXR3ZWVuIGNvbXBp
bGF0aW9ucywgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS4KKy8vIERvaW5nIHNvIHNhdmVzIG9u
IGNyZWF0aW9uIG9mIG5vZGVzLiBCdXQgY2xlYXJpbmcgaXQgd2lsbCBzYXZlIG1lbW9yeS4KKwor
Y2xhc3MgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk7CitwdWJsaWM6CisgICAgQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSgpOworICAgIH5BYnN0cmFjdEhlYXBSZXBvc2l0b3J5KCk7CisgICAgCisgICAgQWJzdHJh
Y3RIZWFwIHJvb3Q7CisgICAgCisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFt
ZSkgQWJzdHJhY3RIZWFwIG5hbWU7CisgICAgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUChBQlNUUkFD
VF9IRUFQX0RFQ0xBUkFUSU9OKQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04KKwor
I2RlZmluZSBBQlNUUkFDVF9GSUVMRF9ERUNMQVJBVElPTihuYW1lLCBvZmZzZXQpIEFic3RyYWN0
RmllbGQgbmFtZTsKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9GSUVMRChBQlNUUkFDVF9GSUVMRF9E
RUNMQVJBVElPTikKKyN1bmRlZiBBQlNUUkFDVF9GSUVMRF9ERUNMQVJBVElPTgorICAgIAorI2Rl
ZmluZSBJTkRFWEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSwgc2l6ZSkgSW5kZXhl
ZEFic3RyYWN0SGVhcCBuYW1lOworICAgIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChJ
TkRFWEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgSU5ERVhFRF9BQlNUUkFD
VF9IRUFQX0RFQ0xBUkFUSU9OCisgICAgCisjZGVmaW5lIEFCU09MVVRFX0FCU1RSQUNUX0hFQVBf
REVDTEFSQVRJT04obmFtZSkgQWJzb2x1dGVBYnN0cmFjdEhlYXAgbmFtZTsKKyAgICBGT1JfRUFD
SF9BQlNPTFVURV9BQlNUUkFDVF9IRUFQKEFCU09MVVRFX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJ
T04pCisjdW5kZWYgQUJTT0xVVEVfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTgorCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBBYnN0cmFjdEhlYXA7CisgICAgCisgICAgdW5zaWduZWQgbV90
YmFhS2luZDsKKyAgICAKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNDcyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExPdXRwdXQu
aCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKQEAgLTY4LDcgKzY5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUsIG5hbWUuZGF0YSgpLCBmdW5jdGlvblR5cGUo
bV9vdXQuaW50NjQsIG1fb3V0LmludFB0cikpOwogICAgICAgICBzZXRGdW5jdGlvbkNhbGxpbmdD
b252KG1fZnRsU3RhdGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOwogICAgICAgICAKLSAgICAg
ICAgbV9vdXQuaW5pdGlhbGl6ZShtX2Z0bFN0YXRlLm1vZHVsZSwgbV9mdGxTdGF0ZS5mdW5jdGlv
bik7CisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5tb2R1bGUsIG1fZnRsU3Rh
dGUuZnVuY3Rpb24sIG1faGVhcHMpOwogICAgICAgICAKICAgICAgICAgbV9wcm9sb2d1ZSA9IGFw
cGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG1fcHJvbG9ndWUpOwpAQCAtNzMxLDE3ICs3MzIsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
bG93SW50MzIoZWRnZSk7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBhZGRyZXNzRm9yKExWYWx1
ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBMVmFsdWUgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwg
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlh
Ymxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsKICAgICB9CiAgICAgTFZhbHVlIHBheWxvYWRGb3IoTFZh
bHVlIGJhc2UsIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZChi
YXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgfQogICAgIExWYWx1
ZSB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIH0KICAgICBM
VmFsdWUgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKICAgICB7CkBAIC03NjEsNiArNzYyLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBTdGF0ZSYgbV9mdGxTdGF0
ZTsKKyAgICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5IG1faGVhcHM7CiAgICAgT3V0cHV0IG1fb3V0
OwogICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE0NzI4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIApAQCAtNDQsNiArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAvLwogLy8gV2Ugc2F5IHRoYXQgYSAicG9pbnRlciIgaXMgd2hhdCBMTFZNIGNv
bnNpZGVycyB0byBiZSBhIHBvaW50ZXItd2lkdGggaW50ZWdlci4KIC8vCisvLyBXZSBzYXkgdGhh
dCBhICJ0eXBlZCBwb2ludGVyIiBpcyBhIHBvaW50ZXIgcGx1cyBUQkFBIG1ldGEtZGF0YSAoaS5l
LiBhbiBBYnN0cmFjdEhlYXApLgorLy8KIC8vIFdlIHNheSB0aGF0ICJnZXQiIGFuZCAic2V0IiBh
cmUgd2hhdCBMTFZNIGNvbnNpZGVycyB0byBiZSAibG9hZCIgYW5kICJzdG9yZSIuIEdldAogLy8g
YW5kIHNldCB0YWtlIHJlZmVyZW5jZXMuCiAvLwpAQCAtNjcsNyArNzAsOSBAQCBwdWJsaWM6CiAg
ICAgICAgICwgaW50MzJaZXJvKGNvbnN0SW50KGludDMyLCAwLCBTaWduRXh0ZW5kKSkKICAgICAg
ICAgLCBpbnQ2NFplcm8oY29uc3RJbnQoaW50NjQsIDAsIFNpZ25FeHRlbmQpKQogICAgICAgICAs
IGludFB0clplcm8oY29uc3RJbnQoaW50UHRyLCAwLCBTaWduRXh0ZW5kKSkKKyAgICAgICAgLCBt
X21vZHVsZSgwKQogICAgICAgICAsIG1fZnVuY3Rpb24oMCkKKyAgICAgICAgLCBtX2hlYXBzKDAp
CiAgICAgICAgICwgbV9idWlsZGVyKExMVk1DcmVhdGVCdWlsZGVyKCkpCiAgICAgICAgICwgbV9i
bG9jaygwKQogICAgICAgICAsIG1fbmV4dEJsb2NrKDApCkBAIC04MSwxMCArODYsMTEgQEAgcHVi
bGljOgogICAgICAgICBMTFZNRGlzcG9zZUJ1aWxkZXIobV9idWlsZGVyKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBpbml0aWFsaXplKExNb2R1bGUgbW9kdWxlLCBMVmFsdWUgZnVuY3Rpb24pCisg
ICAgdm9pZCBpbml0aWFsaXplKExNb2R1bGUgbW9kdWxlLCBMVmFsdWUgZnVuY3Rpb24sIEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkmIGhlYXBzKQogICAgIHsKICAgICAgICAgbV9tb2R1bGUgPSBtb2R1
bGU7CiAgICAgICAgIG1fZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgICAgICAgbV9oZWFwcyA9ICZo
ZWFwczsKICAgICB9CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgYXBwZW5kVG8oTEJhc2ljQmxvY2sg
YmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykKQEAgLTEzOSwyMCArMTQ1LDQ0IEBAIHB1Ymxp
YzoKICAgICBMVmFsdWUgZ2V0KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZCht
X2J1aWxkZXIsIHJlZmVyZW5jZSk7IH0KICAgICB2b2lkIHNldChMVmFsdWUgdmFsdWUsIExWYWx1
ZSByZWZlcmVuY2UpIHsgYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9
CiAgICAgCi0gICAgTFZhbHVlIGxvYWQoTFZhbHVlIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQs
IExUeXBlIHJlZlR5cGUpCisgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIHB0
cmRpZmZfdCBvZmZzZXQsIExUeXBlIHJlZlR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0
KGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCBvZmZzZXQgPyBhZGQocG9pbnRlciwgY29uc3RJbnRQ
dHIob2Zmc2V0KSkgOiBwb2ludGVyLCByZWZUeXBlKSk7Ci0gICAgfQotICAgIHZvaWQgc3RvcmUo
TFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCwgTFR5cGUgcmVm
VHlwZSkKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGdldChidWlsZEludFRvUHRyKAorICAgICAg
ICAgICAgbV9idWlsZGVyLAorICAgICAgICAgICAgb2Zmc2V0ID8gYWRkKHBvaW50ZXIudmFsdWUo
KSwgY29uc3RJbnRQdHIob2Zmc2V0KSkgOiB2cG9pbnRlci52YWx1ZSgpLAorICAgICAgICAgICAg
cmVmVHlwZSkpOworICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJl
c3VsdCwgKm1faGVhcHMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB2b2lk
IHN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZz
ZXQsIExUeXBlIHJlZlR5cGUpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KGJ1
aWxkSW50VG9QdHIoCisgICAgICAgICAgICBtX2J1aWxkZXIsCisgICAgICAgICAgICBvZmZzZXQg
PyBhZGQocG9pbnRlci52YWx1ZSgpLCBjb25zdEludFB0cihvZmZzZXQpKSA6IHZwb2ludGVyLnZh
bHVlKCksCisgICAgICAgICAgICByZWZUeXBlKSk7CisgICAgICAgIHBvaW50ZXIuaGVhcCgpLmRl
Y29yYXRlSW5zdHJ1Y3Rpb24ocmVzdWx0LCAqbV9oZWFwcyk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb2FkMzIoVHlwZWRQb2ludGVyIHBvaW50ZXIs
IHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIG9mZnNldCwgcmVm
MzIpOyB9CisgICAgTFZhbHVlIGxvYWQ2NChUeXBlZFBvaW50ZXIgcG9pbnRlciwgcHRyZGlmZl90
IG9mZnNldCA9IDApIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgb2Zmc2V0LCByZWY2NCk7IH0KKyAg
ICBMVmFsdWUgbG9hZFB0cihUeXBlZFBvaW50ZXIgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9
IDApIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgb2Zmc2V0LCByZWZQdHIpOyB9CisgICAgdm9pZCBz
dG9yZTMyKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZz
ZXQgPSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBvZmZzZXQsIHJlZjMyKTsgfQorICAgIHZv
aWQgc3RvcmU2NChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBwdHJkaWZmX3Qg
b2Zmc2V0ID0gMCkgeyBzdG9yZSh2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0LCByZWY2NCk7IH0KKyAg
ICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIHB0cmRp
ZmZfdCBvZmZzZXQgPSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBvZmZzZXQsIHJlZlB0cik7
IH0KKyAgICAgICAgCisgICAgTFZhbHVlIGxvYWQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHJldHVybiBsb2FkMzIoVHlw
ZWRQb2ludGVyKGZpZWxkLCBiYXNlKSwgZmllbGQub2Zmc2V0KCkgKyBvZmZzZXQpOyB9CisgICAg
TFZhbHVlIGxvYWQ2NChMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0
cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHJldHVybiBsb2FkNjQoVHlwZWRQb2ludGVyKGZpZWxkLCBi
YXNlKSwgZmllbGQub2Zmc2V0KCkgKyBvZmZzZXQpOyB9CisgICAgTFZhbHVlIGxvYWRQdHIoTFZh
bHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkLCBwdHJkaWZmX3Qgb2Zmc2V0ID0g
MCkgeyByZXR1cm4gbG9hZFB0cihUeXBlZFBvaW50ZXIoZmllbGQsIGJhc2UpLCBmaWVsZC5vZmZz
ZXQoKSArIG9mZnNldCk7IH0KKyAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
YmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7
IHN0b3JlMzIodmFsdWUsIFR5cGVkUG9pbnRlcihmaWVsZCwgYmFzZSksIGZpZWxkLm9mZnNldCgp
ICsgb2Zmc2V0KTsgfQorICAgIHZvaWQgc3RvcmU2NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNl
LCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgc3Rv
cmU2NCh2YWx1ZSwgVHlwZWRQb2ludGVyKGZpZWxkLCBiYXNlKSwgZmllbGQub2Zmc2V0KCkgKyBv
ZmZzZXQpOyB9CisgICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBj
b25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgc3RvcmVQ
dHIodmFsdWUsIFR5cGVkUG9pbnRlcihmaWVsZCwgYmFzZSksIGZpZWxkLm9mZnNldCgpICsgb2Zm
c2V0KTsgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzKExWYWx1ZSBiYXNlLCBjb25z
dCBBYnNyYWN0RmllbGQmIGZpZWxkLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIHNldCh2YWx1ZSwgYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIG9mZnNldCA/IGFkZChwb2lu
dGVyLCBjb25zdEludFB0cihvZmZzZXQpKSA6IHBvaW50ZXIsIHJlZlR5cGUpKTsKKyAgICAgICAg
b2Zmc2V0ICs9IGZpZWxkLm9mZnNldCgpOworICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKGZp
ZWxkLCBvZmZzZXQgPyBtX291dC5hZGQoYmFzZSwgY29uc3RJbnRQdHIob2Zmc2V0KSkgOiBiYXNl
KTsKICAgICB9Ci0gICAgTFZhbHVlIGxvYWQzMihMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9m
ZnNldCA9IDApIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgb2Zmc2V0LCByZWYzMik7IH0KLSAgICBM
VmFsdWUgbG9hZDY0KExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyByZXR1
cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJlZjY0KTsgfQotICAgIExWYWx1ZSBsb2FkUHRyKExW
YWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVy
LCBvZmZzZXQsIHJlZlB0cik7IH0KLSAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIs
IG9mZnNldCwgcmVmMzIpOyB9Ci0gICAgdm9pZCBzdG9yZTY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBv
ZmZzZXQsIHJlZjY0KTsgfQotICAgIHZvaWQgc3RvcmVQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
cG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9m
ZnNldCwgcmVmUHRyKTsgfQogICAgIAogICAgIExWYWx1ZSBlcXVhbChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50RVEsIGxlZnQs
IHJpZ2h0KTsgfQogICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50TkUsIGxlZnQsIHJpZ2h0KTsg
fQpAQCAtMjIxLDYgKzI1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBMTW9kdWxlIG1fbW9kdWxl
OwogICAgIExWYWx1ZSBtX2Z1bmN0aW9uOworICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkqIG1f
aGVhcHM7CiAgICAgTEJ1aWxkZXIgbV9idWlsZGVyOwogICAgIExCYXNpY0Jsb2NrIG1fYmxvY2s7
CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFR5cGVkUG9pbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVHlwZWRQb2ludGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFR5cGVkUG9pbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGVExUeXBlZFBvaW50ZXJfaAorI2RlZmluZSBGVExUeXBlZFBvaW50ZXJfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBUeXBlZFBvaW50ZXIgeworcHVi
bGljOgorICAgIFR5cGVkUG9pbnRlcigpCisgICAgICAgIDogbV9oZWFwKDApCisgICAgICAgICwg
bV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVHlwZWRQb2ludGVyKGNvbnN0IEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHZhbHVlKQorICAgICAgICA6IG1faGVhcCgmaGVhcCkK
KyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hlYXAgPT0gIW1fdmFs
dWUpOworICAgICAgICByZXR1cm4gIW1faGVhcDsKKyAgICB9CisgICAgCisgICAgY29uc3QgQWJz
dHJhY3RIZWFwJiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgY29uc3QgTFZh
bHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIGNv
bnN0IEFic3RyYWN0SGVhcCogbV9oZWFwOworICAgIExWYWx1ZSBtX3ZhbHVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExUeXBlZFBvaW50ZXJfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195900</attachid>
            <date>2013-03-31 11:37:39 -0700</date>
            <delta_ts>2013-03-31 19:53:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50069</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3Mjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBA
QAorMjAxMy0wMy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBKSVQgc2hvdWxkIHN1cHBseSBUQkFBIG1ldGEtZGF0YSB0byBMTFZN
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBwZXJmb3JtaW5nIHN0cm9uZyB0eXBpbmcgb24gdGhlIExM
Vk0gSVIgdGhhdCB0aGUgRlRMCisgICAgICAgIGdlbmVyYXRlcywgYnkgdXNpbmcgVEJBQSBtZXRh
LWRhdGEuIFRoaXMgd2lsbCBwZXJtaXQgTExWTSB0byBkbyBhZ2dyZXNzaXZlCisgICAgICAgIEdW
TiwgbG9hZCBlbGltaW5hdGlvbiwgYW5kIExJQ00gb3B0aW1pemF0aW9uIGV2ZW4gaWYgaXQgc2Vl
cyBwb2ludGVyIHN0b3JlCisgICAgICAgIHNpZGUtZWZmZWN0cy4gVGhlIGdvYWwgaXMgdG8gcHJl
Y2lzZWx5IG1vZGVsIGFsbCBsb2FkcyBhbmQgc3RvcmVzIHdlIGVtaXQsCisgICAgICAgIGV4Y2Vw
dCBmb3IgdGhlIHN1cGVyIGNyYXp5IG9uZXMgKEdldEJ5SWQgdGhhdCBjYW4gZ28gYWxsLW91dCBw
b2x5bW9ycGhpYywKKyAgICAgICAgb3IgZm9yIGV4YW1wbGUgYSBDYWxsIHdoZXJlIHdlIGtub3cg
bm90aGluZykuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBpbnRy
b2R1Y2luZyB0aGUgbm90aW9uIG9mIGFuIEFic3RyYWN0SGVhcAorICAgICAgICB0eXBlc3lzdGVt
LiBBbiBBYnN0cmFjdEhlYXAgaXMgYSBzdWJzZXQgb2YgYWxsIHBvc3NpYmxlIG1lbW9yeSBsb2Nh
dGlvbnMKKyAgICAgICAgdGhhdCB3ZSBtaWdodCBzdG9yZSB0by4gRm9yIGV4YW1wbGUsIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmUgYW5kCisgICAgICAgIEpTT2JqZWN0OjptX2J1dHRlcmZseSBhcmUgdHdv
IGRpc2pvaW50IEFic3RyYWN0SGVhcHMgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAgICAgYSBz
dG9yZSB0byBvbmUgY2Fubm90IGNsb2JiZXIgdGhlIG90aGVyLiBBYnN0cmFjdEhlYXBzIGZvbGxv
dyBhCisgICAgICAgIHNpbmdsZS1pbmhlcml0YW5jZSBoaWVyYXJjaHkuIFRoZXJlIGlzIHRoZSBy
b290IGhlYXAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvCisgICAgICAgIGFueSBwb3NzaWJsZSBtZW1v
cnkgbG9jYXRpb24gYWNjZXNzaWJsZSB0byB0aGUgSlMgZW5naW5lLCBhbmQgdGhlbiB0aGVyZQor
ICAgICAgICBhcmUgaGVhcHMgZm9yIGFsbCBpbnRlcm5hbCBvYmplY3QgZmllbGRzLCBhIGhlYXAg
Zm9yIGVhY2ggZ2xvYmFsIG9iamVjdCwKKyAgICAgICAgYW5kIHNvIG9uLgorICAgICAgICAKKyAg
ICAgICAgVGhlcmUgYXJlIHRocmVlIG90aGVyIHRpZGJpdHMgaGVyZSB0aGF0IG1ha2UgdGhpcyBz
b21ld2hhdCBtb3JlIGludGVyZXN0aW5nLgorICAgICAgICBXZSBoYXZlIGEgbm90aW9uIG9mIGFu
IEFic3RyYWN0SGVhcC13aXRoLW9mZnNldCwgY2FsbGVkIEFic3RyYWN0RmllbGQuCisgICAgICAg
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgYW4gQWJzdHJhY3RGaWVsZC4gVGhpcyBh
bGxvd3MgdXMgdG8gc2F5CisgICAgICAgIHRoaW5ncyBsaWtlIG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsgdGhpcyBib3RoCisgICAgICAgIGdpdmVzIHlvdSB0
aGUgb2Zmc2V0IG9mIEpTQ2VsbDo6bV9zdHJ1Y3R1cmUgYW5kIGFzY3JpYmVzIFRCQUEgbWV0YS1k
YXRhIGZvcgorICAgICAgICB0aGUgSlNDZWxsOjptX3N0cnVjdHVyZSBoZWFwIHRvIHRoZSBnZW5l
cmF0ZWQgbG9hZCBpbnN0cmN0aW9uLgorICAgICAgICAKKyAgICAgICAgQW5vdGhlciBmdW4gdGlk
Yml0IGlzIHRoZSBub3Rpb24gb2YgSW5kZXhlZCwgTnVtYmVyZWQsIGFuZCBBYnNvbHV0ZSBhYnN0
cmFjdAorICAgICAgICBoZWFwcy4gQW4gaW5kZXhlZCBhYnN0cmFjdCBoZWFwIGNvcnJlc3BvbmRz
IHRvIGEgc2V0IG9mIGxvY2F0aW9ucyB0aGF0IHlvdQorICAgICAgICBtaWdodCBhY2Nlc3MgYnkg
aW5kZXggZnJvbSBzb21lIGJhc2UuIFZpcnR1YWwgcmVnaXN0ZXJzIGFyZSBhIGdyZWF0IGV4YW1w
bGUuCisgICAgICAgIFRob3VnaCBJIGNhbGwgdGhlbSBqdXN0ICJ2YXJpYWJsZXMiIGluIHRoZSBG
VEwuIFdoZW4gd2UgYWNjZXNzIGEgdmlydHVhbAorICAgICAgICByZWdpc3Rlciwgd2Uga25vdyB0
aGF0IHdlIGFyZW4ndCBpbnRlcmZlcmluZyB3aXRoIGFjY2Vzc2VzIHRvCisgICAgICAgIFN0cnVj
dHVyZS1tYW5hZ2VkIG5hbWVkIHByb3BlcnRpZXMsIG9yIHdpdGggSlNDZWxsOjptX3N0cnVjdHVy
ZSwgb3Igd2l0aAorICAgICAgICBvdGhlciBzdWNoIGRpc2pvaW50IGhlYXBzLiBCdXQgd2UgYWxz
byBrbm93IHRoYXQgaWYgd2UgYWNjZXNzIGEgdmFyaWFibGUgYXQKKyAgICAgICAgb2Zmc2V0IFgg
YW5kIHRoZW4gYW5vdGhlciB2YXJpYWJsZSBhdCBvZmZzZXQgWSBhbmQgd2Uga25vdyB0aGF0IFgg
YW5kIFkgYXJlCisgICAgICAgIHVuZXF1YWwsIHRoZW4gdGhlc2UgdHdvIGFjY2Vzc2VzIGFyZSBv
biBkaXNqb2ludCBzdWJoZWFwcyBvZiB0aGUgdmFyaWFibGVzCisgICAgICAgIGhlYXAuIFRoaXMg
d29ya3Mgb3V0IG5hdHVyYWxseSBmb3IgaW50ZXJmZXJlbmNlIGJldHdlZW4sIHNheSwgc2NvcGVk
IHZhcmlhYmxlCisgICAgICAgIGFjY2VzcyBhbmQgbG9jYWwgdmFyaWFibGUgYWNjZXNzOiBpZiB5
b3UgYWNjZXNzIHNjb3BlZCB2YXJpYWJsZSByNSBhbmQgdGhlbgorICAgICAgICBhY2Nlc3MgYSBs
b2NhbCB2YXJpYWJsZSByNSwgdGhlc2UgbWlnaHQgaW50ZXJmZXJlIC0gYW5kIHRoZXkgd2lsbCBn
ZXQgdGhlCisgICAgICAgIHNhbWUgYWJzdHJhY3Qgc3ViaGVhcCBvZiB0aGUgdmFyaWFibGVzIGhl
YXAuIEluZGV4ZWRBYnN0cmFjdEhlYXBzCisgICAgICAgIGNvbnZlbmllbnRseSByZW1lbWJlciB0
aGUgc2l6ZSBvZiB0aGUgZWxlbWVudHMgYW5kIHdpbGwgZ2l2ZSB5b3UgYW4KKyAgICAgICAgQWJz
dHJhY3RGaWVsZCAoaS5lLiBoZWFwLXdpdGgtb2Zmc2V0KSBpZiB5b3UgZ2l2ZSBpdCBhbiBpbmRl
eC4gVGhpcyBpcyBncmVhdAorICAgICAgICBmb3IgY29udmVuaWVudGx5IHdyaXRpbmcgY29kZSB0
aGF0IGFjY2Vzc2VzIGNvbnRpZ3VvdXMgYXJyYXlzIG9mIHdlbGwtdHlwZWQKKyAgICAgICAgdGhp
bmdzLiBUaGlzIGFsbG93cyB5b3UgdG8gbGl0ZXJhbGx5IGRvIHRoaW5ncyBsaWtlCisgICAgICAg
IG1fb3V0LmxvYWQ2NChjYWxsRnJhbWVSZWdpc3RlciwgbV9oZWFwcy52YXJpYWJsZXNbb3BlcmFu
ZF0pIGFuZCB0aGUgcmlnaHQKKyAgICAgICAgdGhpbmcgd2lsbCBoYXBwZW4uIFlvdSBjYW4gYWxz
byBnZXQgdGhlIGhlYXAgdmFyaWFibGVzLmF0QW55SW5kZXgoKSwgaWYKKyAgICAgICAgeW91J3Jl
IGRvaW5nIGFuIGFjY2VzcyB3aXRoIGFuIHVua25vd24gaW5kZXguCisgICAgICAgIAorICAgICAg
ICBOdW1iZXJlZCBhbmQgQWJzb2x1dGUgYWJzdHJhY3QgaGVhcHMgYXJlIHJlbGF0ZWQgZXhjZXB0
IHRoYXQgdGhleSBkb24ndAorICAgICAgICBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgdXNlZCB0byBn
ZXQgdGhlIGFic3RyYWN0IHN1YmhlYXAgY29ycmVzcG9uZHMgdG8gYW55CisgICAgICAgIG1lYW5p
bmdmdWwgb2Zmc2V0IGZyb20gYW55IGJhc2UuIE51bWJlcmVkIGhlYXBzLCBsaWtlIHRoZSBwcm9w
ZXJ0aWVzIGhlYXAKKyAgICAgICAgKGZvciBuYW1lZCBwcm9wZXJ0aWVzIHRyYWNrZWQgYnkgU3Ry
dWN0dXJlKSwgYXJlICJudW1iZXJlZCIgKG5vdCBpbmRleGVkKQorICAgICAgICBieSB0aGUgcHJv
cGVydHlOdW1iZXIuIFNvIHlvdSBjYW4gZW1pdCBhIEdldEJ5T2Zmc2V0IGJ5IHNlcGFyYXRlbHkK
KyAgICAgICAgY29tcHV0aW5nIHRoZSBvZmZzZXQgYW5kIHRoZSBwcm9wZXJ0eU51bWJlciAoYm90
aCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEpLCBh
bmQgcGFzc2luZyB0aGUgb2Zmc2V0IGRpcmVjdGx5IHRvIE91dHB1dDo6YWRkcmVzcygpCisgICAg
ICAgIGFuZCBwYXNzaW5nIG1faGVhcHMucHJvcGVydGllc1twcm9wZXJ0eU51bWJlcl0gYXMgdGhl
IGZpZWxkLiBBYnNvbHV0ZSBoZWFwcworICAgICAgICBhcmUgc2ltaWxhciwgYnV0IGFyZSBrZXll
ZCBvbiBhYnNvbHV0ZSBhZGRyZXNzLiBUaGlzIGlzIGFwcHJvcHJpYXRlIGZvcgorICAgICAgICBn
bG9iYWwgdmFyaWFibGVzLCBhbmQgcG9zc2libHkgb3RoZXIgdGhpbmdzLgorICAgICAgICAKKyAg
ICAgICAgRmluYWxseSwgRlRMOjpPdXRwdXQgdW5kZXJzdGFuZHMgdGhlIG5vdGlvbiBvZiBhIHBv
aW50ZXItd2l0aC1UQkFBLWRhdGEsCisgICAgICAgIGFuZCBjYWxscyBpdCBhIFR5cGVkUG9pbnRl
ci4gVHlwZWRQb2ludGVyIGlzIGEgdHVwbGUgb2YgYSBMTFZNVmFsdWVSZWYKKyAgICAgICAgcmVm
ZXJlbmNpbmcgYW4gaW50cHRyIHZhbHVlIGFuZCBhIHBvaW50ZXIgdG8gYW4gQWJzdHJhY3RIZWFw
LiBBbGwgbG9hZCgpCisgICAgICAgIGFuZCBzdG9yZSgpIG9wZXJhdGlvbnMgbm93IHRha2UgYSBU
eXBlZFBvaW50ZXIsIGFuZCB3aWxsIHBlcmZvcm0gdGhlIGFjY2VzcworICAgICAgICBieSBjYXN0
aW5nIHRoZSBpbnRwdHIgdG8gYSBwb2ludGVyIG9mIHRoZSByaWdodCB0eXBlIGFuZCB0aGVuIGFz
Y3JpYmluZyB0aGUKKyAgICAgICAgVEJBQSBtZXRhLWRhdGEgZnJvbSB0aGUgQWJzdHJhY3RIZWFw
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6Om1k
S2luZElEKToKKyAgICAgICAgKEpTQzo6RlRMOjptZFN0cmluZyk6CisgICAgICAgIChKU0M6OkZU
TDo6bWROb2RlKToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6c2V0TWV0YWRh
dGEpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjp0YmFhTWV0YWRhdGFTbG93
KToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmRlY29yYXRlSW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OkluZGV4ZWRBYnN0cmFj
dEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6On5JbmRleGVk
QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFwOjph
dFNsb3cpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxp
emUpOgorICAgICAgICAoSlNDOjpGVEw6Ok51bWJlcmVkQWJzdHJhY3RIZWFwOjpOdW1iZXJlZEFi
c3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6TnVtYmVyZWRBYnN0cmFjdEhlYXA6On5O
dW1iZXJlZEFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFj
dEhlYXA6OkFic29sdXRlQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnNvbHV0
ZUFic3RyYWN0SGVhcDo6fkFic29sdXRlQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKiBmdGwvRlRM
QWJzdHJhY3RIZWFwLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEFic3RyYWN0
SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXApOgor
ICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6aXNJbml0aWFsaXplZCk6CisgICAgICAg
IChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6RlRM
OjpBYnN0cmFjdEhlYXA6OnBhcmVudCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFw
OjpoZWFwTmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjp0YmFhTWV0YWRh
dGEpOgorICAgICAgICAoQWJzdHJhY3RGaWVsZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJh
Y3RGaWVsZDo6QWJzdHJhY3RGaWVsZCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RGaWVs
ZDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RGaWVsZDo6b2Zmc2V0
KToKKyAgICAgICAgKEluZGV4ZWRBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6Oklu
ZGV4ZWRBYnN0cmFjdEhlYXA6OmF0QW55SW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4
ZWRBYnN0cmFjdEhlYXA6OmF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RI
ZWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6RlRMOjpJbmRleGVkQWJzdHJhY3RIZWFw
OjpyZXR1cm5Jbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0
SGVhcDo6TXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoSlND
OjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6Ok15SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUp
OgorICAgICAgICAoTnVtYmVyZWRBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6Ok51
bWJlcmVkQWJzdHJhY3RIZWFwOjphdEFueU51bWJlcik6CisgICAgICAgIChKU0M6OkZUTDo6TnVt
YmVyZWRBYnN0cmFjdEhlYXA6OmF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpOdW1iZXJlZEFic3Ry
YWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChBYnNvbHV0ZUFic3RyYWN0SGVhcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6OmF0QW55QWRkcmVzcyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6OmF0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6b3BlcmF0b3JbXSk6CisgICAgICAgICogZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVw
b3NpdG9yeSk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6fkFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6YWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OnBheWxvYWRGb3IpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0
YWdGb3IpOgorICAgICAgICAoTG93ZXJERkdUb0xMVk0pOgorICAgICAgICAqIGZ0bC9GVExPdXRw
dXQuaDoKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpPdXRwdXQp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0OjpzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZSk6CisgICAgICAgIChPdXRwdXQpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6OmxvYWQ2NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkUHRyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6c3RvcmU2NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZVB0cik6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0OjphZGRyZXNzKToKKyAgICAgICAgKiBmdGwvRlRMVHlwZWRQ
b2ludGVyLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFR5cGVkUG9pbnRlcik6
CisgICAgICAgIChKU0M6OkZUTDo6VHlwZWRQb2ludGVyOjpUeXBlZFBvaW50ZXIpOgorICAgICAg
ICAoSlNDOjpGVEw6OlR5cGVkUG9pbnRlcjo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRM
OjpUeXBlZFBvaW50ZXI6OmhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OlR5cGVkUG9pbnRlcjo6
dmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToKKwog
MjAxMy0wMy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZv
dXJ0aFRpZXI6IEZUTCBKSVQgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgTWFyc2FnbGlh
IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTQ3MjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw2ICsy
OTMsMTEgQEAKIAkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwNzE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkVBMEExNDE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTEzMTcwNjM2MzYwMEJCNzIyQyAvKiBGVExMTFZNSGVhZGVycy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIy
QyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEExNTE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovOyB9Owor
CQkwRkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE3MTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICovOyB9OworCQkwRkVBMEExRDE3MDhCMDA3
MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEExODE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJh
Y3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBB
MTkxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwICovOyB9
OworCQkwRkVBMEExRjE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBB
MUExNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkVBMEEyMDE3MDhC
MDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEExQjE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlw
ZWRQb2ludGVyLmggKi87IH07CiAJCTBGRUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFy
cmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNF
Q0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAv
KiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAv
KiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsgfTsKQEAgLTEyMjIsNiArMTIyNywxMSBAQAogCQkw
RkVBMEEwNzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMU3RhdGUuaDsgcGF0aCA9IGZ0bC9GVExTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEExMzE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExW
TUhlYWRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTExWTUhlYWRl
cnMuaDsgcGF0aCA9IGZ0bC9GVExMTFZNSGVhZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVBMEExNTE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU3RhdGUuY3BwOyBwYXRoID0gZnRsL0ZU
TFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBBMTcxNzA4QjAw
NzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGVExBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZnRsL0ZUTEFic3RyYWN0
SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTE4MTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMQWJzdHJhY3RIZWFwLmg7IHBhdGggPSBmdGwvRlRMQWJzdHJhY3RIZWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTE5MTcwOEIwMDcwMEJCNzIyQyAvKiBG
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOyBwYXRoID0gZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
Lmg7IHBhdGggPSBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVBMEExQjE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2lu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFR5cGVkUG9pbnRlci5o
OyBwYXRoID0gZnRsL0ZUTFR5cGVkUG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8q
IE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5
QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTkxLDYgKzIwMDEsMTAgQEAKIAkJMEZFQTA5RkMxNzA1
MTM3RjAwQkI3MjJDIC8qIGZ0bCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5j
cHAgKi8sCisJCQkJMEZFQTBBMTgxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5o
ICovLAorCQkJCTBGRUEwQTE5MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmNwcCAqLywKKwkJCQkwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oICovLAogCQkJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8sCiAJCQkJMEZFQTA5RkUxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TENhcGFiaWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFQTA5RkYxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TENhcGFiaWxpdGllcy5oICovLApAQCAtMjAwNCw2ICsyMDE4LDcgQEAKIAkJCQkwRkVBMEEwNjE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCiAJCQkJMEZFQTBBMTUxNzA2QkI5MDAw
QkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKIAkJCQkwRkVBMEEwNzE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMU3RhdGUuaCAqLywKKwkJCQkwRkVBMEExQjE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlw
ZWRQb2ludGVyLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0zMDg4LDYgKzMxMDMsNyBAQAogCQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNF
RDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
RkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5h
dG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERG
R0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzQzgyODE0MTE1RDRG
MDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzEsNiArMzE4Nyw3
IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4
aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUEwQTFGMTcwOEIw
MDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzIxNSw2ICszMjMyLDcgQEAKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FG
MTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbERhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NTZGQzkwRTIwMzFCMjAwREU3RDEyIC8qIEpT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTM4MzksNiArMzg1Nyw3
IEBACiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlmaWVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29t
cGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVBMEExRTE3MDhCMDA3MDBCQjcyMkMg
LyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZC
MTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDA4OCw2ICs0MTA3LDcgQEAKIAkJCQlCQ0NGMEQwQzBF
RjBCOEE1MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBGQ0E2QkMg
LyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNEE0MkUzRjBGNEY2MEVF
MDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NEExNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTQ3
MjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDIwIEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rp
b25UeXBlKExUeXBlIHIKICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFt
VHlwZXMsIDIsIHZhcmlhZGljaXR5KTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZEtp
bmRJRChjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIExMVk1HZXRNREtpbmRJRChzdHJpbmcs
IHN0cmxlbihzdHJpbmcpKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoY29uc3Qg
Y2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIExMVk1NRFN0cmluZyhzdHJp
bmcsIGxlbmd0aCk7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIq
IHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7IH0KK3N0
YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51bUFyZ3Mp
IHsgcmV0dXJuIExMVk1NRE5vZGUoYXJncywgbnVtQXJncyk7IH0KK3N0YXRpYyBpbmxpbmUgTFZh
bHVlIG1kTm9kZSgpIHsgcmV0dXJuIG1kTm9kZSgwLCAwKTsgfQorc3RhdGljIGlubGluZSBMVmFs
dWUgbWROb2RlKExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoJmFyZzEsIDEpOyB9CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKQoreworICAg
IExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKKyAgICByZXR1cm4gbWROb2RlKGFyZ3Ms
IDIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0TWV0YWRhdGEoTFZhbHVlIGluc3RydWN0
aW9uLCB1bnNpZ25lZCBraW5kLCBMVmFsdWUgbWV0YWRhdGEpIHsgTExWTVNldE1ldGFkYXRhKGlu
c3RydWN0aW9uLCBraW5kLCBtZXRhZGF0YSk7IH0KKwogc3RhdGljIGlubGluZSBMVmFsdWUgYWRk
RnVuY3Rpb24oTE1vZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIqIG5hbWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIExMVk1BZGRGdW5jdGlvbihtb2R1bGUsIG5hbWUsIHR5cGUpOyB9CiBzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0TGlua2FnZShMVmFsdWUgZ2xvYmFsLCBMTGlua2FnZSBsaW5rYWdlKSB7IExM
Vk1TZXRMaW5rYWdlKGdsb2JhbCwgbGlua2FnZSk7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRG
dW5jdGlvbkNhbGxpbmdDb252KExWYWx1ZSBmdW5jdGlvbiwgTENhbGxDb252IGNvbnZlbnRpb24p
IHsgTExWTVNldEZ1bmN0aW9uQ2FsbENvbnYoZnVuY3Rpb24sIGNvbnZlbnRpb24pOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExBYnN0cmFjdEhlYXAuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
QWJicmV2aWF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIK
KyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworTFZhbHVlIEFic3RyYWN0SGVhcDo6dGJhYU1ldGFkYXRhU2xvdyhjb25zdCBBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5JiByZXBvc2l0b3J5KSBjb25zdAoreworICAgIG1fdGJhYU1ldGFkYXRhID0g
bWROb2RlKG1kU3RyaW5nKG1faGVhcE5hbWUpLCBtX3BhcmVudC0+dGJhYU1ldGFkYXRhKHJlcG9z
aXRvcnkpKTsKKyAgICByZXR1cm4gbV90YmFhTWV0YWRhdGE7Cit9CisKK3ZvaWQgQWJzdHJhY3RI
ZWFwOjpkZWNvcmF0ZUluc3RydWN0aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgY29uc3QgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeSYgcmVwb3NpdG9yeSkgY29uc3QKK3sKKyAgICBpZiAoIU9wdGlvbnM6
OnVzZUZUTFRCQUEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNldE1ldGFkYXRhKGluc3RydWN0
aW9uLCByZXBvc2l0b3J5Lm1fdGJhYUtpbmQsIHRiYWFNZXRhZGF0YShyZXBvc2l0b3J5KSk7Cit9
CisKK0luZGV4ZWRBYnN0cmFjdEhlYXA6OkluZGV4ZWRBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFw
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBzaXplX3QgZWxlbWVudFNpemUpCisgICAg
OiBtX2hlYXBGb3JBbnlJbmRleChwYXJlbnQsIGhlYXBOYW1lKQorICAgICwgbV9oZWFwTmFtZUxl
bmd0aChzdHJsZW4oaGVhcE5hbWUpKQorICAgICwgbV9lbGVtZW50U2l6ZShlbGVtZW50U2l6ZSkK
K3sKK30KKworSW5kZXhlZEFic3RyYWN0SGVhcDo6fkluZGV4ZWRBYnN0cmFjdEhlYXAoKQorewor
fQorCitjb25zdCBBYnN0cmFjdEZpZWxkJiBJbmRleGVkQWJzdHJhY3RIZWFwOjphdFNsb3cocHRy
ZGlmZl90IGluZGV4KQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA+
PSBtX3NtYWxsSW5kaWNlcy5zaXplKCkpOworICAgIAorICAgIGlmIChVTkxJS0VMWSghbV9sYXJn
ZUluZGljZXMpKQorICAgICAgICBtX2xhcmdlSW5kaWNlcyA9IGFkb3B0UHRyKG5ldyBNYXBUeXBl
KCkpOworICAgIAorICAgIE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2xhcmdlSW5k
aWNlcy0+ZmluZChpbmRleCk7CisgICAgaWYgKGl0ZXIgIT0gbV9sYXJnZUluZGljZXMtPmVuZCgp
KQorICAgICAgICByZXR1cm4gKml0ZXItPnZhbHVlOworICAgIAorICAgIE93blB0cjxBYnN0cmFj
dEZpZWxkPiBmaWVsZCA9IGFkb3B0UHRyKG5ldyBBYnN0cmFjdEZpZWxkKCkpOworICAgIEFic3Ry
YWN0RmllbGQqIHJlc3VsdCA9IGZpZWxkLmdldCgpOworICAgIGluaXRpYWxpemUoKnJlc3VsdCwg
aW5kZXgpOworICAgIG1fbGFyZ2VJbmRpY2VzLT5hZGQoaW5kZXgsIGZpZWxkLnJlbGVhc2UoKSk7
CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK3ZvaWQgSW5kZXhlZEFic3RyYWN0SGVhcDo6aW5p
dGlhbGl6ZShBYnN0cmFjdEZpZWxkJiBmaWVsZCwgcHRyZGlmZl90IHNpZ25lZEluZGV4KQorewor
ICAgIC8vIEJ1aWxkIHVwIGEgbmFtZSBvZiB0aGUgZm9ybToKKyAgICAvLworICAgIC8vICAgIGhl
YXBOYW1lX2hleEluZGV4CisgICAgLy8KKyAgICAvLyBvcjoKKyAgICAvLworICAgIC8vICAgIGhl
YXBOYW1lX25lZ19oZXhJbmRleAorICAgIC8vCisgICAgLy8gRm9yIGV4YW1wbGUgaWYgeW91IGFj
Y2VzcyBhbiBpbmRleGVkIGhlYXAgY2FsbGVkIEZvb0JhciBhdCBpbmRleCA1LCB5b3UnbGwKKyAg
ICAvLyBnZXQ6CisgICAgLy8KKyAgICAvLyAgICBGb29CYXJfNQorICAgIC8vCisgICAgLy8gT3Ig
aWYgeW91IGFjY2VzcyBhbiBpbmRleGVkIGhlYXAgY2FsbGVkIEJsYWggYXQgaW5kZXggLTEwLCB5
b3UnbGwgZ2V0OgorICAgIC8vCisgICAgLy8gICAgQmxhaF9uZWdfQQorICAgIC8vCisgICAgLy8g
VGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBMTFZNIHVzZXMgdGhlIHN0cmluZyB0byBkaXN0aW5n
dWlzaCB0aGUgdHlwZXMuCisgICAgCisgICAgYm9vbCBuZWdhdGl2ZTsKKyAgICBzaXplX3QgaW5k
ZXg7CisgICAgaWYgKHNpZ25lZEluZGV4IDwgMCkgeworICAgICAgICBuZWdhdGl2ZSA9IHRydWU7
CisgICAgICAgIGluZGV4ID0gLXNpZ25lZEluZGV4OworICAgIH0gZWxzZSB7CisgICAgICAgIG5l
Z2F0aXZlID0gZmFsc2U7CisgICAgICAgIGluZGV4ID0gc2lnbmVkSW5kZXg7CisgICAgfQorICAg
IAorICAgIGZvciAodW5zaWduZWQgcG93ZXIgPSA0OyBwb3dlciA8PSBzaXplb2Yodm9pZCopICog
ODsgcG93ZXIgKz0gNCkgeworICAgICAgICAvLyBUaGUgY3Jhenkgd2F5IG9mIHRlc3Rpbmcgb2Yg
aW5kZXggPj0gMiAqKiBwb3dlcgorICAgICAgICAvLyAod2hlcmUgSSB1c2UgKiogdG8gZGVub3Rl
IHBvdygpKS4KKyAgICAgICAgaWYgKChpbmRleCA+PiAxKSA+PiAocG93ZXIgLSAxKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtSGV4bGV0cyA9
IHBvd2VyID4+IDI7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gbV9o
ZWFwTmFtZUxlbmd0aCArIChuZWdhdGl2ZSA/IDUgOiAxKSArIG51bUhleGxldHM7CisgICAgICAg
IGNoYXIqIGNoYXJhY3RlcnM7CisgICAgICAgIG1fbGFyZ2VJbmRleE5hbWVzLmFwcGVuZChDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCwgY2hhcmFjdGVycykpOworICAgICAg
ICAKKyAgICAgICAgbWVtY3B5KGNoYXJhY3RlcnMsIG1faGVhcEZvckFueUluZGV4LmhlYXBOYW1l
KCksIG1faGVhcE5hbWVMZW5ndGgpOworICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAg
ICBtZW1jcHkoY2hhcmFjdGVycyArIG1faGVhcE5hbWVMZW5ndGgsICJfbmVnXyIsIDUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjaGFyYWN0ZXJzW21faGVhcE5hbWVMZW5ndGhdID0gJ18n
OworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGFjY3VtdWxhdG9yID0gaW5kZXg7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1IZXhsZXRzOyArK2kpIHsKKyAgICAgICAgICAg
IGNoYXJhY3RlcnNbc3RyaW5nTGVuZ3RoIC0gaSAtIDFdID0gKCIwMTIzNDU2Nzg5QUJDREVGIilb
YWNjdW11bGF0b3IgJiAweEZdOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDQ7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpZWxkLmluaXRpYWxpemUoJm1faGVhcEZvckFueUlu
ZGV4LCBjaGFyYWN0ZXJzLCBzaWduZWRJbmRleCAqIG1fZWxlbWVudFNpemUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK051bWJlcmVkQWJzdHJhY3RIZWFwOjpOdW1iZXJlZEFic3RyYWN0SGVhcChBYnN0cmFjdEhl
YXAqIGhlYXAsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKQorICAgIDogbV9pbmRleGVkSGVhcChoZWFw
LCBoZWFwTmFtZSwgMSkKK3sKK30KKworTnVtYmVyZWRBYnN0cmFjdEhlYXA6On5OdW1iZXJlZEFi
c3RyYWN0SGVhcCgpCit7Cit9CisKK0Fic29sdXRlQWJzdHJhY3RIZWFwOjpBYnNvbHV0ZUFic3Ry
YWN0SGVhcChBYnN0cmFjdEhlYXAqIGhlYXAsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKQorICAgIDog
bV9pbmRleGVkSGVhcChoZWFwLCBoZWFwTmFtZSwgMSkKK3sKK30KKworQWJzb2x1dGVBYnN0cmFj
dEhlYXA6On5BYnNvbHV0ZUFic3RyYWN0SGVhcCgpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMQWJzdHJhY3RIZWFwX2gKKyNkZWZpbmUgRlRMQWJzdHJhY3RIZWFw
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jh
c2UuaD4KKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhlIEZUTCBKSVQgdHJp
ZXMgdG8gYWlkIExMVk0ncyBUQkFBLiBUaGUgRlRMJ3Mgbm90aW9uIG9mIGhvdyB0aGlzCisvLyBo
YXBwZW5zIGlzIHRoZSBBYnN0cmFjdEhlYXAuIEFic3RyYWN0SGVhcHMgYXJlIGEgc2ltcGxlIHR5
cGUgc3lzdGVtCisvLyB3aXRoIHN1Yi10eXBpbmcuCisKK2NsYXNzIEFic3RyYWN0SGVhcFJlcG9z
aXRvcnk7CisKK2NsYXNzIEFic3RyYWN0SGVhcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QWJzdHJhY3RIZWFwKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQWJz
dHJhY3RIZWFwKCkKKyAgICAgICAgOiBtX3BhcmVudCgwKQorICAgICAgICAsIG1faGVhcE5hbWUo
MCkKKyAgICAgICAgLCBtX3RiYWFNZXRhZGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
QWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSkK
KyAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9oZWFwTmFtZShoZWFwTmFt
ZSkKKyAgICAgICAgLCBtX3RiYWFNZXRhZGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBOYW1lOyB9CisgICAg
CisgICAgdm9pZCBpbml0aWFsaXplKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBo
ZWFwTmFtZSkKKyAgICB7CisgICAgICAgIG1fcGFyZW50ID0gcGFyZW50OworICAgICAgICBtX2hl
YXBOYW1lID0gaGVhcE5hbWU7CisgICAgfQorCisgICAgQWJzdHJhY3RIZWFwKiBwYXJlbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIHJl
dHVybiBtX3BhcmVudDsKKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogaGVhcE5hbWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgIHJl
dHVybiBtX2hlYXBOYW1lOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgdGJhYU1ldGFkYXRhKGNv
bnN0IEFic3RyYWN0SGVhcFJlcG9zaXRvcnkmIHJlcG9zaXRvcnkpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKKyAgICAgICAgaWYgKExJS0VMWSghIW1fdGJh
YU1ldGFkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBtX3RiYWFNZXRhZGF0YTsKKyAgICAgICAg
cmV0dXJuIHRiYWFNZXRhZGF0YVNsb3cocmVwb3NpdG9yeSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZGVjb3JhdGVJbnN0cnVjdGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIGNvbnN0IEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeTsKKyAgICAKKyAgICBMVmFsdWUgdGJhYU1ldGFkYXRhU2xvdyhj
b25zdCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5JikgY29uc3Q7CisgICAgCisgICAgQWJzdHJhY3RI
ZWFwKiBtX3BhcmVudDsKKyAgICBjb25zdCBjaGFyKiBtX2hlYXBOYW1lOworICAgIG11dGFibGUg
TFZhbHVlIG1fdGJhYU1ldGFkYXRhOworfTsKKworLy8gVGhpbmsgb2YgIkFic3RyYWN0RmllbGQi
IGFzIGJlaW5nIGFuICJBYnN0cmFjdEhlYXBXaXRoT2Zmc2V0Ii4gSSB3b3VsZCBoYXZlIG5hbWVk
CisvLyBpdCB0aGUgbGF0dGVyIGV4Y2VwdCB0aGF0IEkgZG9uJ3QgbGlrZSB0eXBpbmcgdGhhdCBt
dWNoLgorY2xhc3MgQWJzdHJhY3RGaWVsZCA6IHB1YmxpYyBBYnN0cmFjdEhlYXAgeworcHVibGlj
OgorICAgIEFic3RyYWN0RmllbGQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RG
aWVsZChBYnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZf
dCBvZmZzZXQpCisgICAgICAgIDogQWJzdHJhY3RIZWFwKHBhcmVudCwgaGVhcE5hbWUpCisgICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0
aWFsaXplKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSwgcHRyZGlm
Zl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZShwYXJl
bnQsIGhlYXBOYW1lKTsKKyAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5p
dGlhbGl6ZWQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK2NsYXNzIEluZGV4ZWRBYnN0cmFj
dEhlYXAgeworcHVibGljOgorICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwKiBw
YXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgIH5J
bmRleGVkQWJzdHJhY3RIZWFwKCk7CisgICAgCisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdEFu
eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9oZWFwRm9yQW55SW5kZXg7IH0KKyAgICAKKyAgICBj
b25zdCBBYnN0cmFjdEZpZWxkJiBhdChwdHJkaWZmX3QgaW5kZXgpCisgICAgeworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX3NtYWxsSW5kaWNlcy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmV0dXJuSW5pdGlhbGl6ZWQobV9zbWFsbEluZGljZXNbaW5kZXhd
LCBpbmRleCk7CisgICAgICAgIHJldHVybiBhdFNsb3coaW5kZXgpOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBBYnN0cmFjdEZpZWxkJiBvcGVyYXRvcltdKHB0cmRpZmZfdCBpbmRleCkgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IEFic3RyYWN0RmllbGQm
IHJldHVybkluaXRpYWxpemVkKEFic3RyYWN0RmllbGQmIGZpZWxkLCBwdHJkaWZmX3QgaW5kZXgp
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWZpZWxkLmlzSW5pdGlhbGl6ZWQoKSkpCisg
ICAgICAgICAgICBpbml0aWFsaXplKGZpZWxkLCBpbmRleCk7CisgICAgICAgIHJldHVybiBmaWVs
ZDsKKyAgICB9CisKKyAgICBjb25zdCBBYnN0cmFjdEZpZWxkJiBhdFNsb3cocHRyZGlmZl90IGlu
ZGV4KTsKKyAgICB2b2lkIGluaXRpYWxpemUoQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZf
dCBpbmRleCk7CisKKyAgICBBYnN0cmFjdEhlYXAgbV9oZWFwRm9yQW55SW5kZXg7CisgICAgc2l6
ZV90IG1faGVhcE5hbWVMZW5ndGg7CisgICAgc2l6ZV90IG1fZWxlbWVudFNpemU7CisgICAgRml4
ZWRBcnJheTxBYnN0cmFjdEZpZWxkLCAxNj4gbV9zbWFsbEluZGljZXM7CisgICAgCisgICAgc3Ry
dWN0IE15SGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8cHRyZGlmZl90PiB7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShwdHJkaWZmX3QmIHNsb3Qp
IHsgc2xvdCA9IDE7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUocHRyZGlm
Zl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAxOyB9CisgICAgfTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8cHRyZGlmZl90LCBPd25QdHI8QWJzdHJhY3RGaWVsZD4sIFdURjo6SW50SGFzaDxwdHJk
aWZmX3Q+LCBNeUhhc2hUcmFpdHM+IE1hcFR5cGU7CisgICAgT3duUHRyPE1hcFR5cGU+IG1fbGFy
Z2VJbmRpY2VzOworICAgIFZlY3RvcjxDU3RyaW5nLCAxNj4gbV9sYXJnZUluZGV4TmFtZXM7Cit9
OworCisvLyBBIG51bWJlcmVkIGFic3RyYWN0IGhlYXAgaXMgbGlrZSBhbiBpbmRleGVkIGFic3Ry
YWN0IGhlYXAsIGV4Y2VwdCB0aGF0IHlvdQorLy8gY2FuJ3QgcmVseSBvbiB0aGVyZSBiZWluZyBh
IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBudW1iZXIgeW91IHVzZSB0bworLy8gcmV0cmlldmUg
dGhlIHN1Yi1oZWFwLCBhbmQgdGhlIG9mZnNldCB0aGF0IHRoaXMgaGVhcCBoYXMuIChJbiBwYXJ0
aWN1bGFyLAorLy8gdGhlIHN1Yi1oZWFwcyBkb24ndCBoYXZlIGluZGljZXMuKQorCitjbGFzcyBO
dW1iZXJlZEFic3RyYWN0SGVhcCB7CitwdWJsaWM6CisgICAgTnVtYmVyZWRBYnN0cmFjdEhlYXAo
QWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKTsKKyAgICB+TnVtYmVy
ZWRBYnN0cmFjdEhlYXAoKTsKKyAgICAKKyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55TnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KKyAgICAK
KyAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0KHVuc2lnbmVkIG51bWJlcikgeyByZXR1cm4gbV9p
bmRleGVkSGVhcC5hdChudW1iZXIpOyB9CisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRv
cltdKHVuc2lnbmVkIG51bWJlcikgeyByZXR1cm4gYXQobnVtYmVyKTsgfQorCitwcml2YXRlOgor
ICAgIAorICAgIC8vIFdlIHVzZSB0aGUgZmFjdCB0aGF0IHRoZSBpbmRleGVkIGhlYXAgYWxyZWFk
eSBoYXMgYSBzdXBlcnNldCBvZiB0aGUKKyAgICAvLyBmdW5jdGlvbmFsaXR5IHdlIG5lZWQuCisg
ICAgSW5kZXhlZEFic3RyYWN0SGVhcCBtX2luZGV4ZWRIZWFwOworfTsKKworY2xhc3MgQWJzb2x1
dGVBYnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIEFic29sdXRlQWJzdHJhY3RIZWFwKEFic3Ry
YWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgfkFic29sdXRlQWJz
dHJhY3RIZWFwKCk7CisgICAgCisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBhdEFueUFkZHJlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4ZWRIZWFwLmF0QW55SW5kZXgoKTsgfQorICAgIAorICAg
IGNvbnN0IEFic3RyYWN0SGVhcCYgYXQodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2luZGV4ZWRIZWFwLmF0KGJpdHdpc2VfY2FzdDxwdHJkaWZmX3Q+KGFkZHJlc3MpKTsK
KyAgICB9CisgICAgCisgICAgY29uc3QgQWJzdHJhY3RIZWFwJiBvcGVyYXRvcltdKHZvaWQqIGFk
ZHJlc3MpIHsgcmV0dXJuIGF0KGFkZHJlc3MpOyB9CisKK3ByaXZhdGU6CisgICAgCisgICAgLy8g
VGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB0aGUgaW5kZXhlZCBoZWFwIGlzICJpbmRleGVkIiBieSBh
IHBvaW50ZXItd2lkdGgKKyAgICAvLyBpbnRlZ2VyLiBQb2ludGVycyBhcmUgdGhlbXNlbHZlcyBw
b2ludGVyLXdpZHRoIGludGVnZXJzLiBTbyB3ZSBjYW4gcmV1c2UKKyAgICAvLyBhbGwgb2YgdGhl
IGZ1bmN0aW9uYWxpdHkuCisgICAgSW5kZXhlZEFic3RyYWN0SGVhcCBtX2luZGV4ZWRIZWFwOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExBYnN0cmFjdEhlYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK0Fic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9z
aXRvcnkoKQorICAgIDogcm9vdCgwLCAicm9vdCIpCisKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9E
RUNMQVJBVElPTihuYW1lKSAsIG5hbWUoJnJvb3QsICNuYW1lKQorICAgIEZPUl9FQUNIX0FCU1RS
QUNUX0hFQVAoQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTikKKyN1bmRlZiBBQlNUUkFDVF9IRUFQ
X0RFQ0xBUkFUSU9OCisKKyNkZWZpbmUgQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04obmFtZSwg
b2Zmc2V0KSAsIG5hbWUoJnJvb3QsICNuYW1lLCBvZmZzZXQpCisgICAgRk9SX0VBQ0hfQUJTVFJB
Q1RfRklFTEQoQUJTVFJBQ1RfRklFTERfREVDTEFSQVRJT04pCisjdW5kZWYgQUJTVFJBQ1RfRklF
TERfREVDTEFSQVRJT04KKyAgICAKKyNkZWZpbmUgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0RFQ0xB
UkFUSU9OKG5hbWUsIHNpemUpICwgbmFtZSgmcm9vdCwgI25hbWUsIHNpemUpCisgICAgRk9SX0VB
Q0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKElOREVYRURfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElP
TikKKyN1bmRlZiBJTkRFWEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04KKyAgICAKKyNkZWZp
bmUgTlVNQkVSRURfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTihuYW1lKSAsIG5hbWUoJnJvb3Qs
ICNuYW1lKQorICAgIEZPUl9FQUNIX05VTUJFUkVEX0FCU1RSQUNUX0hFQVAoTlVNQkVSRURfQUJT
VFJBQ1RfSEVBUF9ERUNMQVJBVElPTikKKyN1bmRlZiBOVU1CRVJFRF9BQlNUUkFDVF9IRUFQX0RF
Q0xBUkFUSU9OCisKKyNkZWZpbmUgQUJTT0xVVEVfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTihu
YW1lKSAsIG5hbWUoJnJvb3QsICNuYW1lKQorICAgIEZPUl9FQUNIX0FCU09MVVRFX0FCU1RSQUNU
X0hFQVAoQUJTT0xVVEVfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTikKKyN1bmRlZiBBQlNPTFVU
RV9BQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OCisKKyAgICAsIG1fdGJhYUtpbmQobWRLaW5kSUQo
InRiYWEiKSkKK3sKKyAgICByb290Lm1fdGJhYU1ldGFkYXRhID0gbWROb2RlKG1kU3RyaW5nKHJv
b3QubV9oZWFwTmFtZSkpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKG1fdGJhYUtpbmQpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJvb3QubV90YmFhTWV0YWRhdGEpOworfQorCitBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5Ojp+QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSgpCit7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeV9oCisjZGVmaW5lIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnlfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKKyNkZWZpbmUgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUChtYWNybykgXAorICAg
IG1hY3JvKHR5cGVkQXJyYXlQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8obGVuZ3RoKQorCisjZGVm
aW5lIEZPUl9FQUNIX0FCU1RSQUNUX0ZJRUxEKG1hY3JvKSBcCisgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTT2JqZWN0
X2J1dHRlcmZseSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSBcCisgICAgbWFjcm8oQnV0
dGVyZmx5X3B1YmxpY0xlbmd0aCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKQor
CisjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAorICAgIG1h
Y3JvKHZhcmlhYmxlcywgc2l6ZW9mKFJlZ2lzdGVyKSkgXAorICAgIG1hY3JvKGluZGV4ZWRJbnQz
MlByb3BlcnRpZXMsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhpbmRleGVk
RG91YmxlUHJvcGVydGllcywgc2l6ZW9mKGRvdWJsZSkpIFwKKyAgICBtYWNybyhpbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMsIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhp
bmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcywgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkKKyAg
ICAKKyNkZWZpbmUgRk9SX0VBQ0hfTlVNQkVSRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAorICAg
IG1hY3JvKHByb3BlcnRpZXMpCisgICAgCisjZGVmaW5lIEZPUl9FQUNIX0FCU09MVVRFX0FCU1RS
QUNUX0hFQVAobWFjcm8pIFwKKyAgICBtYWNybyhnbG9iYWxWYXJpYWJsZXMpCisgICAgCisvLyBU
aGlzIGNsYXNzIGlzIG1lYW50IHRvIGJlIGNhY2hlYWJsZSBiZXR3ZWVuIGNvbXBpbGF0aW9ucywg
YnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS4KKy8vIERvaW5nIHNvIHNhdmVzIG9uIGNyZWF0aW9u
IG9mIG5vZGVzLiBCdXQgY2xlYXJpbmcgaXQgd2lsbCBzYXZlIG1lbW9yeS4KKworY2xhc3MgQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeSk7CitwdWJsaWM6CisgICAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSgpOwor
ICAgIH5BYnN0cmFjdEhlYXBSZXBvc2l0b3J5KCk7CisgICAgCisgICAgQWJzdHJhY3RIZWFwIHJv
b3Q7CisgICAgCisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSkgQWJzdHJh
Y3RIZWFwIG5hbWU7CisgICAgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUChBQlNUUkFDVF9IRUFQX0RF
Q0xBUkFUSU9OKQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04KKworI2RlZmluZSBB
QlNUUkFDVF9GSUVMRF9ERUNMQVJBVElPTihuYW1lLCBvZmZzZXQpIEFic3RyYWN0RmllbGQgbmFt
ZTsKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9GSUVMRChBQlNUUkFDVF9GSUVMRF9ERUNMQVJBVElP
TikKKyN1bmRlZiBBQlNUUkFDVF9GSUVMRF9ERUNMQVJBVElPTgorICAgIAorI2RlZmluZSBJTkRF
WEVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSwgc2l6ZSkgSW5kZXhlZEFic3RyYWN0
SGVhcCBuYW1lOworICAgIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChJTkRFWEVEX0FC
U1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0RF
Q0xBUkFUSU9OCisgICAgCisjZGVmaW5lIE5VTUJFUkVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJ
T04obmFtZSkgTnVtYmVyZWRBYnN0cmFjdEhlYXAgbmFtZTsKKyAgICBGT1JfRUFDSF9OVU1CRVJF
RF9BQlNUUkFDVF9IRUFQKE5VTUJFUkVEX0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5k
ZWYgTlVNQkVSRURfQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTgorCisjZGVmaW5lIEFCU09MVVRF
X0FCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSkgQWJzb2x1dGVBYnN0cmFjdEhlYXAgbmFt
ZTsKKyAgICBGT1JfRUFDSF9BQlNPTFVURV9BQlNUUkFDVF9IRUFQKEFCU09MVVRFX0FCU1RSQUNU
X0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgQUJTT0xVVEVfQUJTVFJBQ1RfSEVBUF9ERUNMQVJB
VElPTgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBYnN0cmFjdEhlYXA7CisgICAgCisg
ICAgdW5zaWduZWQgbV90YmFhS2luZDsKKyAgICAKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNDcyODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RTdGF0ZS5oIgorI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKQEAgLTY4LDcgKzY5
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUsIG5hbWUuZGF0YSgp
LCBmdW5jdGlvblR5cGUobV9vdXQuaW50NjQsIG1fb3V0LmludFB0cikpOwogICAgICAgICBzZXRG
dW5jdGlvbkNhbGxpbmdDb252KG1fZnRsU3RhdGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOwog
ICAgICAgICAKLSAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZShtX2Z0bFN0YXRlLm1vZHVsZSwgbV9m
dGxTdGF0ZS5mdW5jdGlvbik7CisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5t
b2R1bGUsIG1fZnRsU3RhdGUuZnVuY3Rpb24sIG1faGVhcHMpOwogICAgICAgICAKICAgICAgICAg
bV9wcm9sb2d1ZSA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwpAQCAtNzMxLDI3ICs3MzIsMjcgQEAgcHJp
dmF0ZToKICAgICAgICAgbG93SW50MzIoZWRnZSk7CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBh
ZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICBUeXBlZFBvaW50ZXIgYWRk
cmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVz
cyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsKICAgICB9Ci0gICAg
TFZhbHVlIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9p
bnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX291dC5hZGQoYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIob3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQs
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OwogICAgIH0KLSAgICBMVmFsdWUgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAg
ICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX291dC5hZGQoYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIob3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFu
ZCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsK
ICAgICB9Ci0gICAgTFZhbHVlIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAgfQotICAgIExWYWx1ZSBwYXlsb2FkRm9y
KGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHBheWxvYWRGb3IobV9jYWxsRnJhbWUsIG9wZXJhbmQpOwog
ICAgIH0KLSAgICBMVmFsdWUgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0
YWdGb3IoaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2FsbEZy
YW1lLCBvcGVyYW5kKTsKICAgICB9CkBAIC03NjEsNiArNzYyLDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBTdGF0ZSYgbV9mdGxTdGF0ZTsKKyAgICBBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5IG1faGVhcHM7CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIAogICAgIExC
YXNpY0Jsb2NrIG1fcHJvbG9ndWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgJKHJldmlzaW9uIDE0NzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDQsMTIgKzQ2LDE4IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vCiAvLyBXZSBzYXkgdGhhdCBhICJwb2ludGVy
IiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgog
Ly8KKy8vIFdlIHNheSB0aGF0IGEgInR5cGVkIHBvaW50ZXIiIGlzIGEgcG9pbnRlciB0aGF0IGNh
cnJpZXMgVEJBQSBtZXRhLWRhdGEgKGkuZS4gYW4KKy8vIEFic3RyYWN0SGVhcCkuIFRoZXNlIHNo
b3VsZCB1c3VhbGx5IG5vdCBoYXZlIGZ1cnRoZXIgY29tcHV0YXRpb24gcGVyZm9ybWVkIG9uIHRo
ZW0KKy8vIHByaW9yIHRvIGFjY2VzcywgdGhvdWdoIHRoZXJlIGFyZSBleGNlcHRpb25zIChsaWtl
IG9mZnNldHRpbmcgaW50byB0aGUgcGF5bG9hZCBvZgorLy8gYSB0eXBlZCBwb2ludGVyIHRvIGEg
SlNWYWx1ZSkuCisvLwogLy8gV2Ugc2F5IHRoYXQgImdldCIgYW5kICJzZXQiIGFyZSB3aGF0IExM
Vk0gY29uc2lkZXJzIHRvIGJlICJsb2FkIiBhbmQgInN0b3JlIi4gR2V0CiAvLyBhbmQgc2V0IHRh
a2UgcmVmZXJlbmNlcy4KIC8vCi0vLyBXZSBzYXkgdGhhdCAibG9hZCIgYW5kICJzdG9yZSIgYXJl
IG9wZXJhdGlvbnMgdGhhdCB0YWtlIGEgcG9pbnRlciBhbmQgYW4gb2Zmc2V0LgotLy8gVGhlc2Ug
dHJhbnNsYXRlIHRoZSBwb2ludGVyICsgb2Zmc2V0IGludG8gYSByZWZlcmVuY2UgKG9yLCBhIHBv
aW50ZXIgaW4gTExWTS1zcGVhaykKLS8vIGFuZCB1c2UgZ2V0IGFuZCBzZXQgb24gdGhlbSAob3Is
IGxvYWQgYW5kIHN0b3JlIGluIExMVk0tc3BlYWspLgorLy8gV2Ugc2F5IHRoYXQgImxvYWQiIGFu
ZCAic3RvcmUiIGFyZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBhIHR5cGVkIHBvaW50ZXIuIFRoZXNl
CisvLyBvcGVyYXRpb25zIHRyYW5zbGF0ZSB0aGUgcG9pbnRlciBpbnRvIGEgcmVmZXJlbmNlIChv
ciwgYSBwb2ludGVyIGluIExMVk0tc3BlYWspLAorLy8gZW1pdCBnZXQgb3Igc2V0IG9uIHRoZSBy
ZWZlcmVuY2UgKG9yLCBsb2FkIGFuZCBzdG9yZSBpbiBMTFZNLXNwZWFrKSwgYW5kIGFwcGx5IHRo
ZQorLy8gVEJBQSBtZXRhLWRhdGEgdG8gdGhlIGdldCBvciBzZXQuCiAKIGNsYXNzIE91dHB1dCB7
CiBwdWJsaWM6CkBAIC02Nyw3ICs3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBpbnQzMlplcm8o
Y29uc3RJbnQoaW50MzIsIDAsIFNpZ25FeHRlbmQpKQogICAgICAgICAsIGludDY0WmVybyhjb25z
dEludChpbnQ2NCwgMCwgU2lnbkV4dGVuZCkpCiAgICAgICAgICwgaW50UHRyWmVybyhjb25zdElu
dChpbnRQdHIsIDAsIFNpZ25FeHRlbmQpKQorICAgICAgICAsIG1fbW9kdWxlKDApCiAgICAgICAg
ICwgbV9mdW5jdGlvbigwKQorICAgICAgICAsIG1faGVhcHMoMCkKICAgICAgICAgLCBtX2J1aWxk
ZXIoTExWTUNyZWF0ZUJ1aWxkZXIoKSkKICAgICAgICAgLCBtX2Jsb2NrKDApCiAgICAgICAgICwg
bV9uZXh0QmxvY2soMCkKQEAgLTgxLDEwICs5MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIExMVk1E
aXNwb3NlQnVpbGRlcihtX2J1aWxkZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxp
emUoTE1vZHVsZSBtb2R1bGUsIExWYWx1ZSBmdW5jdGlvbikKKyAgICB2b2lkIGluaXRpYWxpemUo
TE1vZHVsZSBtb2R1bGUsIExWYWx1ZSBmdW5jdGlvbiwgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYg
aGVhcHMpCiAgICAgewogICAgICAgICBtX21vZHVsZSA9IG1vZHVsZTsKICAgICAgICAgbV9mdW5j
dGlvbiA9IGZ1bmN0aW9uOworICAgICAgICBtX2hlYXBzID0gJmhlYXBzOwogICAgIH0KICAgICAK
ICAgICBMQmFzaWNCbG9jayBhcHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaywgTEJhc2ljQmxvY2sg
bmV4dEJsb2NrKQpAQCAtMTM3LDIyICsxNDgsNDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBjYXN0
VG9JbnQzMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGludDMyKTsgfQog
ICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2Fk
KG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQotICAgIHZvaWQgc2V0KExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIHJlZmVyZW5jZSkgeyBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7
IH0KKyAgICBMVmFsdWUgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1
cm4gYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2UpOyB9CisgICAgCisgICAg
TFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCisgICAgewor
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCBwb2lu
dGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKKyAgICAgICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJ
bnN0cnVjdGlvbihyZXN1bHQsICptX2hlYXBzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgdm9pZCBzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBM
VHlwZSByZWZUeXBlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHNldCh2YWx1ZSwg
YnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOworICAg
ICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMp
OworICAgIH0KICAgICAKLSAgICBMVmFsdWUgbG9hZChMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90
IG9mZnNldCwgTFR5cGUgcmVmVHlwZSkKKyAgICBMVmFsdWUgbG9hZDMyKFR5cGVkUG9pbnRlciBw
b2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIHJlZjMyKTsgfQorICAgIExWYWx1ZSBsb2Fk
NjQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmNjQpOyB9
CisgICAgTFZhbHVlIGxvYWRQdHIoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQo
cG9pbnRlciwgcmVmUHRyKTsgfQorICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIFR5cGVk
UG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCByZWYzMik7IH0KKyAgICB2
b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyBzdG9yZSh2
YWx1ZSwgcG9pbnRlciwgcmVmNjQpOyB9CisgICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUs
IFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCByZWZQdHIpOyB9
CisKKyAgICAvLyBDb25zdHJ1Y3QgYW4gYWRkcmVzcyBieSBvZmZzZXR0aW5nIGJhc2UgYnkgdGhl
IHJlcXVlc3RlZCBhbW91bnQgYW5kIGFzY3JpYmluZworICAgIC8vIHRoZSByZXF1ZXN0ZWQgYWJz
dHJhY3QgaGVhcCB0byBpdC4KKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyhjb25zdCBBYnN0cmFj
dEhlYXAmIGhlYXAsIExWYWx1ZSBiYXNlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIG9mZnNldCA/IGFkZChw
b2ludGVyLCBjb25zdEludFB0cihvZmZzZXQpKSA6IHBvaW50ZXIsIHJlZlR5cGUpKTsKKyAgICAg
ICAgcmV0dXJuIFR5cGVkUG9pbnRlcihoZWFwLCBvZmZzZXQgPyBhZGQoYmFzZSwgY29uc3RJbnRQ
dHIob2Zmc2V0KSkgOiBiYXNlKTsKICAgICB9Ci0gICAgdm9pZCBzdG9yZShMVmFsdWUgdmFsdWUs
IExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0LCBMVHlwZSByZWZUeXBlKQorICAgIC8v
IENvbnN0cnVjdCBhbiBhZGRyZXNzIGJ5IG9mZnNldHRpbmcgYmFzZSBieSB0aGUgYW1vdW50IHNw
ZWNpZmllZCBieSB0aGUgZmllbGQsCisgICAgLy8gYW5kIG9wdGlvbmFsbHkgYW4gYWRkaXRpb25h
bCBhbW91bnQgKHVzZSB0aGlzIHdpdGggY2FyZSksIGFuZCB0aGVuIGNyZWF0aW5nCisgICAgLy8g
YSBUeXBlZFBvaW50ZXIgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgYXMgdGhlIGhlYXAuCisgICAgVHlw
ZWRQb2ludGVyIGFkZHJlc3MoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxk
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAgICAgIHNldCh2YWx1ZSwgYnVpbGRJ
bnRUb1B0cihtX2J1aWxkZXIsIG9mZnNldCA/IGFkZChwb2ludGVyLCBjb25zdEludFB0cihvZmZz
ZXQpKSA6IHBvaW50ZXIsIHJlZlR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3MoZmllbGQs
IGJhc2UsIG9mZnNldCArIGZpZWxkLm9mZnNldCgpKTsKICAgICB9Ci0gICAgTFZhbHVlIGxvYWQz
MihMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgcmV0dXJuIGxvYWQocG9p
bnRlciwgb2Zmc2V0LCByZWYzMik7IH0KLSAgICBMVmFsdWUgbG9hZDY0KExWYWx1ZSBwb2ludGVy
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJl
ZjY0KTsgfQotICAgIExWYWx1ZSBsb2FkUHRyKExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zm
c2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJlZlB0cik7IH0KLSAgICB2
b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNl
dCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmMzIpOyB9Ci0gICAgdm9p
ZCBzdG9yZTY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQg
PSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBvZmZzZXQsIHJlZjY0KTsgfQotICAgIHZvaWQg
c3RvcmVQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9
IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmUHRyKTsgfQorICAgIAorICAg
IExWYWx1ZSBsb2FkMzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7
IHJldHVybiBsb2FkMzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQ2
NChMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ2
NChhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUgYmFz
ZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWRQdHIoYWRkcmVzcyhi
YXNlLCBmaWVsZCkpOyB9CisgICAgdm9pZCBzdG9yZTMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJh
c2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0b3JlMzIodmFsdWUsIGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQorICAgIHZvaWQgc3RvcmU2NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBi
YXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZTY0KHZhbHVlLCBhZGRyZXNz
KGJhc2UsIGZpZWxkKSk7IH0KKyAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0b3JlUHRyKHZhbHVlLCBhZGRy
ZXNzKGJhc2UsIGZpZWxkKSk7IH0KICAgICAKICAgICBMVmFsdWUgZXF1YWwoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludEVRLCBs
ZWZ0LCByaWdodCk7IH0KICAgICBMVmFsdWUgbm90RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludE5FLCBsZWZ0LCByaWdo
dCk7IH0KQEAgLTIyMSw2ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTE1vZHVsZSBtX21v
ZHVsZTsKICAgICBMVmFsdWUgbV9mdW5jdGlvbjsKKyAgICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
KiBtX2hlYXBzOwogICAgIExCdWlsZGVyIG1fYnVpbGRlcjsKICAgICBMQmFzaWNCbG9jayBtX2Js
b2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dEJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUeXBlZFBvaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFR5cGVkUG9pbnRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUeXBlZFBvaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMVHlwZWRQb2ludGVyX2gKKyNkZWZpbmUgRlRMVHlwZWRQb2ludGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgVHlwZWRQb2ludGVyIHsK
K3B1YmxpYzoKKyAgICBUeXBlZFBvaW50ZXIoKQorICAgICAgICA6IG1faGVhcCgwKQorICAgICAg
ICAsIG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlcihjb25z
dCBBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSB2YWx1ZSkKKyAgICAgICAgOiBtX2hlYXAoJmhl
YXApCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9oZWFwID09ICFt
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuICFtX2hlYXA7CisgICAgfQorICAgIAorICAgIGNvbnN0
IEFic3RyYWN0SGVhcCYgaGVhcCgpIGNvbnN0IHsgcmV0dXJuICptX2hlYXA7IH0KKyAgICBMVmFs
dWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgQWJzdHJhY3RIZWFwKiBtX2hlYXA7CisgICAgTFZhbHVlIG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTFR5cGVkUG9pbnRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE0NzI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2Up
IFwKICAgICBcCiAgICAgdihib29sLCB1c2VFeHBlcmltZW50YWxGVEwsIGZhbHNlKSBcCisgICAg
dihib29sLCB1c2VGVExUQkFBLCB0cnVlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlUHJv
ZmlsZXIsIGZhbHNlKSBcCiAgICAgXAo=
</data>
<flag name="review"
          id="217866"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>