<?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>107603</bug_id>
          
          <creation_ts>2013-01-22 17:29:57 -0800</creation_ts>
          <short_desc>Call XSSAuditor.filterToken() from threaded HTML parser</short_desc>
          <delta_ts>2013-02-07 05:02:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108394</dependson>
    
    <dependson>108531</dependson>
    
    <dependson>108557</dependson>
    
    <dependson>108655</dependson>
    
    <dependson>108666</dependson>
    
    <dependson>108698</dependson>
    
    <dependson>108726</dependson>
    
    <dependson>108880</dependson>
          <blocked>106127</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Tony Gentilcore">tonyg</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>tsepez</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>813607</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-01-22 17:29:57 -0800</bug_when>
    <thetext>Call XSSAuditor.filterToken() from threaded HTML parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813644</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-22 18:14:51 -0800</bug_when>
    <thetext>omg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813655</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 18:27:14 -0800</bug_when>
    <thetext>Using the atomic token probably isn&apos;t going to work.  The XSS filter needs to be able to call sourceForToken, which isn&apos;t going to work for atomic tokens.

I think that means we&apos;re going to need to run the XSS filter on the background thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813656</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-22 18:29:11 -0800</bug_when>
    <thetext>We should be able to deal with the HTMLNames dependency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814390</commentid>
    <comment_count>4</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-01-23 11:12:26 -0800</bug_when>
    <thetext>This is going to be pretty tricky. Adam and I discussed it offline and came up with the following sketch:
- HTMLDocumentParser creates the XSSAuditor on the main thread
- HTMLDocumentParser calls XSSAuditor::init() on the main thread
- Transfer ownership of the XSSAuditor to the parser thread when the parser thread is created
- Call filterToken() on the parser thread
- XSSAuditor&apos;s actions in filterToken()&apos;s didBlockScript block are queued up in the token steam and if the HTMLDocumentParser uses the token, it executes the action on the main thread.

The tricky part is sharing string data, particularly for POST data which may be large. One option is to parse on the main thread for POST data or just for large POST data.

The other question is whether we can break this into multiple patches so it isn&apos;t one monolithic switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814403</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-23 11:22:02 -0800</bug_when>
    <thetext>I think we should consider splitting the filterToken bits out into a separate object which does not depend on document, etc.  Or maybe the document, etc. parts are in an XSSFilterDelegate object.

In either case, I think we should make it easy to tell what parts are OK on the background thread vs. not. Obviously all of XSSFilter isn&apos;t, and I don&apos;t think per-function separation is going to work as well as whole-object separation would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822197</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-01-31 17:57:33 -0800</bug_when>
    <thetext>After the blocking patches, there are 3 non-thread safe dependencies left:
1. sourceForToken()/Document&apos;s TextResourceDecoder
2. Tokenizer&apos;s shouldAllowCDATA()
3. Documents&apos;s url()

#3 is easy, but I&apos;m trying to figure out the cleanest way to handle #1 and #2. Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822430</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-01 00:28:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; After the blocking patches, there are 3 non-thread safe dependencies left:
&gt; 1. sourceForToken()/Document&apos;s TextResourceDecoder

^^^ We should be able to get sourceForToken from the BackgroundHTMLParser.  As for TextResourceDecoder, we can get the name of the decoder and create a new one on the background thread.

&gt; 2. Tokenizer&apos;s shouldAllowCDATA()

^^^ This will also be available from the BackgroundHTMLParser&apos;s tokenizer.

&gt; 3. Documents&apos;s url()

^^^ As you say, this one is easy.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826788</commentid>
    <comment_count>8</comment_count>
      <attachid>186929</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-06 15:02:04 -0800</bug_when>
    <thetext>Created attachment 186929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826828</commentid>
    <comment_count>9</comment_count>
      <attachid>186929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 15:56:13 -0800</bug_when>
    <thetext>Comment on attachment 186929
Patch

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

&gt; Source/WebCore/html/parser/BackgroundHTMLParser.cpp:165
&gt; +        {

Why do we need these { } brackets?

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:531
&gt; +    ASSERT(decoder-&gt;hasOneRef());

Is the decoder itself safe to send to another thread?  Perhaps we should add a isSafeToSendToAnotherThread function to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826829</commentid>
    <comment_count>10</comment_count>
      <attachid>186929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 15:57:38 -0800</bug_when>
    <thetext>Comment on attachment 186929
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        With this patch we now pass 178 of 182 tests in http/tests/security/xssAuditor.

That&apos;s great!

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:528
&gt; +    Settings* settings = document()-&gt;settings();
&gt; +    bool usesEncodingDetector = settings &amp;&amp; settings-&gt;usesEncodingDetector();
&gt; +    String mimeType;
&gt; +    if (DocumentLoader* loader = document()-&gt;loader())
&gt; +        mimeType = loader-&gt;responseMIMEType();
&gt; +    String defaultTextEncodingName;
&gt; +    if (settings)
&gt; +        defaultTextEncodingName = settings-&gt;defaultTextEncodingName();
&gt; +    RefPtr&lt;TextResourceDecoder&gt; decoder = TextResourceDecoder::create(mimeType, defaultTextEncodingName, usesEncodingDetector);

Can we break this logic into a separate function that returns a PassRefPtr&lt;TextResourceDecoder&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826839</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-06 16:10:56 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 186929 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186929&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/BackgroundHTMLParser.cpp:165
&gt; &gt; +        {
&gt; 
&gt; Why do we need these { } brackets?

To delete the CompactHTMLToken off the stack so that the token passes the isSafeToSendToAnotherThread() test.

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:531
&gt; &gt; +    ASSERT(decoder-&gt;hasOneRef());
&gt; 
&gt; Is the decoder itself safe to send to another thread?  Perhaps we should add a isSafeToSendToAnotherThread function to it.

It looks safe to me. I don&apos;t see anything that we can validate (like Strings, RefPtrs, KURLs, etc). Would you mind double checking in case I missed something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826846</commentid>
    <comment_count>12</comment_count>
      <attachid>186929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:15:44 -0800</bug_when>
    <thetext>Comment on attachment 186929
Patch

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

&gt;&gt;&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:531
&gt;&gt;&gt; +    ASSERT(decoder-&gt;hasOneRef());
&gt;&gt; 
&gt;&gt; Is the decoder itself safe to send to another thread?  Perhaps we should add a isSafeToSendToAnotherThread function to it.
&gt; 
&gt; It looks safe to me. I don&apos;t see anything that we can validate (like Strings, RefPtrs, KURLs, etc). Would you mind double checking in case I missed something?

TextResourceDecoder has a HTMLMetaCharsetParser, which uses HTMLNames.  TextCodec has a bunch of subclasses, which I haven&apos;t studied in detail.  We might need to look at this more carefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826850</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:17:58 -0800</bug_when>
    <thetext>Looks like we need to make sure we&apos;re not going to use the HTMLMetaCharsetParser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826853</commentid>
    <comment_count>14</comment_count>
      <attachid>186929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:18:51 -0800</bug_when>
    <thetext>Comment on attachment 186929
Patch

The bulk of this change looks good, but we need to be more careful about moving the TextResourceDecoder between threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826854</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-06 16:19:13 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Looks like we need to make sure we&apos;re not going to use the HTMLMetaCharsetParser.

I think we&apos;re just gonna ned up taking the eventNames() per-thread AtomicString approach and not caring in the short-term.  We need to see how much of a perf-hit that would be, but it would dramatically simplify moving code between threads like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826855</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:20:21 -0800</bug_when>
    <thetext>Maybe, but HTMLMetaCharsetParser calls

    , m_assumedCodec(newTextCodec(Latin1Encoding()))

which might not be threadsafe either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826858</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:22:36 -0800</bug_when>
    <thetext>static String fullyDecodeString(const String&amp; string, const TextResourceDecoder* decoder)

in XSSAuditor.cpp calls:

    const TextEncoding&amp; encoding = decoder ? decoder-&gt;encoding() : UTF8Encoding();

It looks like we need only the TextEncoding, not the TextResourceDecoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826859</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 16:26:20 -0800</bug_when>
    <thetext>newTextCodec itself looks ok:

PassOwnPtr&lt;TextCodec&gt; newTextCodec(const TextEncoding&amp; encoding)
{
    MutexLocker lock(encodingRegistryMutex());

    ASSERT(textCodecMap);
    TextCodecFactory factory = textCodecMap-&gt;get(encoding.name());
    ASSERT(factory.function);
    return factory.function(encoding, factory.additionalData);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826886</commentid>
    <comment_count>19</comment_count>
      <attachid>186948</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-06 16:48:57 -0800</bug_when>
    <thetext>Created attachment 186948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826887</commentid>
    <comment_count>20</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-06 16:49:35 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; static String fullyDecodeString(const String&amp; string, const TextResourceDecoder* decoder)
&gt; 
&gt; in XSSAuditor.cpp calls:
&gt; 
&gt;     const TextEncoding&amp; encoding = decoder ? decoder-&gt;encoding() : UTF8Encoding();
&gt; 
&gt; It looks like we need only the TextEncoding, not the TextResourceDecoder.

I&apos;m really glad you noticed that! The patch is so much cleaner and safer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826888</commentid>
    <comment_count>21</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-06 16:50:29 -0800</bug_when>
    <thetext>Now we pass 180 of 182 tests. Two were failing in the previous patch due to creating the wrong decoder type. Now we use the proper one from the Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826945</commentid>
    <comment_count>22</comment_count>
      <attachid>186948</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-06 18:04:01 -0800</bug_when>
    <thetext>Comment on attachment 186948
Patch

Ah, much nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827341</commentid>
    <comment_count>23</comment_count>
      <attachid>186948</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 05:02:39 -0800</bug_when>
    <thetext>Comment on attachment 186948
Patch

Clearing flags on attachment: 186948

Committed r142099: &lt;http://trac.webkit.org/changeset/142099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827342</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 05:02:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186929</attachid>
            <date>2013-02-06 15:02:04 -0800</date>
            <delta_ts>2013-02-06 16:48:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107603-20130206145840.patch</filename>
            <type>text/plain</type>
            <size>17262</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1MDQzOWY5MjU5Yjgy
ZDgxNzUxOTY5ZmY3NzJmMzllMDQwYWJkYS4uYTJiNzhkYzZjMGYxMzU3NmEyZjk2ZmQwODIyMDk5
ZGVkYmJmZGZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAyLTA2ICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FsbCBYU1NBdWRp
dG9yLmZpbHRlclRva2VuKCkgZnJvbSB0aHJlYWRlZCBIVE1MIHBhcnNlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoIHdlIG5v
dyBwYXNzIDE3OCBvZiAxODIgdGVzdHMgaW4gaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
LgorCisgICAgICAgIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSBUZXh0UmVzb3VyY2VEZWNvZGVy
IGFuZCBYU1NBdWRpdG9yIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgcGFzc2luZyBvd25lcnNoaXAg
b2YgdGhlbSB0byB0aGUgQmFja2dyb3VuZEhUTUxQYXJzZXIKKyAgICAgICAgdXBvbiBpdHMgY3Jl
YXRpb24uCisKKyAgICAgICAgVGhlbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQgY2FsbHMgZmlsdGVy
VG9rZW4oKSBhbmQgc3RvcmVzIHRoZSByZXN1bHRpbmcgWFNTSW5mbyAoaWYgYW55KSBvbiB0aGUg
Q29tcGFjdEhUTUxUb2tlbiBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGhhbmRsZS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYmVjYXVzZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QmFja2dyb3VuZEhUTUxQYXJzZXI6OkJhY2tncm91bmRIVE1MUGFyc2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpwdW1wVG9rZW5pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsKToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKEJhY2tncm91bmRIVE1MUGFyc2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjpwdW1wVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
c3RhcnRCYWNrZ3JvdW5kUGFyc2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU291cmNl
VHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlVHJhY2tlcjo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNvdXJjZVRyYWNrZXI6OmVuZCk6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaDogQ2hhbmdlIHRoZSBIVE1MSW5wdXRTdHJl
YW0gYXJncyB0byBTZWdtZW50ZWRTdHJpbmcgYmVjYXVzZSB0aGUgYmFja2dyb3VuZCB0aHJlYWQg
b25seSBoYXMgYSBCYWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtLgorICAgICAgICAoSFRNTFNvdXJj
ZVRyYWNrZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlUGFyc2VyOjpwdW1wVG9rZW5pemVy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhTU0F1ZGl0b3I6OmluaXQpOiBDb3BpZXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXNTYWZlVG9T
ZW5kVG9Bbm90aGVyVGhyZWFkKCkgaGFwcHkuCisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOiBDaGVjayB0aGF0IGFsbCBTdHJpbmcgYW5k
IEtVUkwgbWVtYmVycyBhcmUgc2FmZSB0byBzZW5kIHRvIGFub3RoZXIgdGhyZWFkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oOgorICAgICAg
ICAoWFNTQXVkaXRvcik6CisKIDIwMTMtMDItMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDIw
MjUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRN
TFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBh
cnNlci5jcHAKaW5kZXggMTM0OTdmNWRlZDNlNGVjNzZhNTE3ZTc0NWEwNzFkODk0Y2JjNTIwZS4u
MTA0MDM0NWQ1M2NiM2E1YWI2NTVhZmFlNTQ0NTk0YjM5M2VmZGZlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcApAQCAtMzYs
NiArMzYsOCBAQAogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJNYXRoTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KQEAgLTcxLDEzICs3MywxNSBAQCBQYXJzZXJNYXA6OkJhY2tncm91bmRQYXJzZXJN
YXAmIFBhcnNlck1hcDo6YmFja2dyb3VuZFBhcnNlcnMoKQogICAgIHJldHVybiBtX2JhY2tncm91
bmRQYXJzZXJzOwogfQogCi1CYWNrZ3JvdW5kSFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJz
ZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERv
Y3VtZW50UGFyc2VyPiYgcGFyc2VyKQorQmFja2dyb3VuZEhUTUxQYXJzZXI6OkJhY2tncm91bmRI
VE1MUGFyc2VyKGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zLCBjb25zdCBXZWFrUHRy
PEhUTUxEb2N1bWVudFBhcnNlcj4mIHBhcnNlciwgUGFzc093blB0cjxYU1NBdWRpdG9yPiB4c3NB
dWRpdG9yLCBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIpCiAgICAgOiBt
X2luRm9yZWlnbkNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Rva2VuKGFkb3B0UHRyKG5ldyBIVE1M
VG9rZW4pKQogICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKG9wdGlvbnMp
KQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiAgICAg
LCBtX3BlbmRpbmdUb2tlbnMoYWRvcHRQdHIobmV3IENvbXBhY3RIVE1MVG9rZW5TdHJlYW0pKQor
ICAgICwgbV94c3NBdWRpdG9yKHhzc0F1ZGl0b3IpCisgICAgLCBtX2RlY29kZXIoZGVjb2RlcikK
IHsKIH0KIApAQCAtMTUyLDkgKzE1NiwyMCBAQCBib29sIEJhY2tncm91bmRIVE1MUGFyc2VyOjpz
aW11bGF0ZVRyZWVCdWlsZGVyKGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuKQogCiB2b2lk
IEJhY2tncm91bmRIVE1MUGFyc2VyOjpwdW1wVG9rZW5pemVyKCkKIHsKLSAgICB3aGlsZSAobV90
b2tlbml6ZXItPm5leHRUb2tlbihtX2lucHV0LmN1cnJlbnQoKSwgKm1fdG9rZW4uZ2V0KCkpKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDYWxsIG1feHNzQXVkaXRvci5maWx0ZXJUb2tlbihtX3Rva2Vu
KSBhbmQgcHV0IHJlc3VsdGluZyBYU1NJbmZvIGludG8gQ29tcGFjdEhUTUxUb2tlbi4KLSAgICAg
ICAgbV9wZW5kaW5nVG9rZW5zLT5hcHBlbmQoQ29tcGFjdEhUTUxUb2tlbihtX3Rva2VuLmdldCgp
LCBUZXh0UG9zaXRpb24obV9pbnB1dC5jdXJyZW50KCkuY3VycmVudExpbmUoKSwgbV9pbnB1dC5j
dXJyZW50KCkuY3VycmVudENvbHVtbigpKSkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IG1fc291cmNlVHJhY2tlci5zdGFydChtX2lucHV0LmN1cnJlbnQoKSwgbV90b2tlbml6ZXIuZ2V0
KCksICptX3Rva2VuKTsKKyAgICAgICAgaWYgKCFtX3Rva2VuaXplci0+bmV4dFRva2VuKG1faW5w
dXQuY3VycmVudCgpLCAqbV90b2tlbi5nZXQoKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgbV9zb3VyY2VUcmFja2VyLmVuZChtX2lucHV0LmN1cnJlbnQoKSwgbV90b2tlbml6ZXIuZ2V0
KCksICptX3Rva2VuKTsKKworICAgICAgICB7CisgICAgICAgICAgICBPd25QdHI8WFNTSW5mbz4g
eHNzSW5mbyA9IG1feHNzQXVkaXRvci0+ZmlsdGVyVG9rZW4oRmlsdGVyVG9rZW5SZXF1ZXN0KCpt
X3Rva2VuLCBtX3NvdXJjZVRyYWNrZXIsIG1fZGVjb2Rlci5nZXQoKSwgbV90b2tlbml6ZXItPnNo
b3VsZEFsbG93Q0RBVEEoKSkpOworICAgICAgICAgICAgQ29tcGFjdEhUTUxUb2tlbiB0b2tlbiht
X3Rva2VuLmdldCgpLCBUZXh0UG9zaXRpb24obV9pbnB1dC5jdXJyZW50KCkuY3VycmVudExpbmUo
KSwgbV9pbnB1dC5jdXJyZW50KCkuY3VycmVudENvbHVtbigpKSk7CisgICAgICAgICAgICBpZiAo
eHNzSW5mbykKKyAgICAgICAgICAgICAgICB0b2tlbi5zZXRYU1NJbmZvKHhzc0luZm8ucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Rva2Vucy0+YXBwZW5kKHRva2VuKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIG1fdG9rZW4tPmNsZWFyKCk7CiAKICAgICAgICAgaWYgKCFzaW11bGF0
ZVRyZWVCdWlsZGVyKG1fcGVuZGluZ1Rva2Vucy0+bGFzdCgpKSB8fCBtX3BlbmRpbmdUb2tlbnMt
PnNpemUoKSA+PSBwZW5kaW5nVG9rZW5MaW1pdCkKQEAgLTE4MSwxMCArMTk2LDEwIEBAIHZvaWQg
QmFja2dyb3VuZEhUTUxQYXJzZXI6OnNlbmRUb2tlbnNUb01haW5UaHJlYWQoKQogICAgIG1fcGVu
ZGluZ1Rva2VucyA9IGFkb3B0UHRyKG5ldyBDb21wYWN0SFRNTFRva2VuU3RyZWFtKTsKIH0KIAot
dm9pZCBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Y3JlYXRlUGFydGlhbChQYXJzZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zLCBjb25zdCBXZWFr
UHRyPEhUTUxEb2N1bWVudFBhcnNlcj4mIHBhcnNlcikKK3ZvaWQgQmFja2dyb3VuZEhUTUxQYXJz
ZXI6OmNyZWF0ZVBhcnRpYWwoUGFyc2VySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBIVE1M
UGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+
JiBwYXJzZXIsIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvciwgUGFzc1JlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKQogewogICAgIEFTU0VSVCghcGFyc2VyTWFwKCku
YmFja2dyb3VuZFBhcnNlcnMoKS5nZXQoaWRlbnRpZmllcikpOwotICAgIHBhcnNlck1hcCgpLmJh
Y2tncm91bmRQYXJzZXJzKCkuc2V0KGlkZW50aWZpZXIsIEJhY2tncm91bmRIVE1MUGFyc2VyOjpj
cmVhdGUob3B0aW9ucywgcGFyc2VyKSk7CisgICAgcGFyc2VyTWFwKCkuYmFja2dyb3VuZFBhcnNl
cnMoKS5zZXQoaWRlbnRpZmllciwgQmFja2dyb3VuZEhUTUxQYXJzZXI6OmNyZWF0ZShvcHRpb25z
LCBwYXJzZXIsIHhzc0F1ZGl0b3IsIGRlY29kZXIpKTsKIH0KIAogdm9pZCBCYWNrZ3JvdW5kSFRN
TFBhcnNlcjo6c3RvcFBhcnRpYWwoUGFyc2VySWRlbnRpZmllciBpZGVudGlmaWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmgKaW5kZXgg
NjdhMjA1YWIwZjQ4MzQ0ZGQ5MzJmNjVlMjhlOWNkOTI3NTE5ODlmYy4uODViYzZlMzhkOGZiYjYy
YmVhYWJkYTRlYzM0NzliN2ZjMGM5YTEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oCkBAIC0zMSwxNCArMzEsMTkgQEAKICNpbmNs
dWRlICJCYWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEhUTUxU
b2tlbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiSFRNTFNv
dXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKICNpbmNsdWRlICJIVE1MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBjb25zdCB2b2lkKiBQ
YXJzZXJJZGVudGlmaWVyOwogY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyOworY2xhc3MgWFNTQXVk
aXRvcjsKIAogY2xhc3MgQmFja2dyb3VuZEhUTUxQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtNDcsMTkgKzUyLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3VtZUZy
b20oY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiwgUGFzc093blB0cjxIVE1MVG9r
ZW4+LCBQYXNzT3duUHRyPEhUTUxUb2tlbml6ZXI+LCBIVE1MSW5wdXRDaGVja3BvaW50KTsKICAg
ICB2b2lkIGZpbmlzaCgpOwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8QmFja2dyb3VuZEhUTUxQ
YXJzZXI+IGNyZWF0ZShjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vh
a1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
QmFja2dyb3VuZEhUTUxQYXJzZXI+IGNyZWF0ZShjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0
aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIsIFBhc3NPd25Q
dHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvciwgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYWNrZ3JvdW5k
SFRNTFBhcnNlcihvcHRpb25zLCBwYXJzZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBCYWNrZ3JvdW5kSFRNTFBhcnNlcihvcHRpb25zLCBwYXJzZXIsIHhzc0F1ZGl0b3IsIGRlY29k
ZXIpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVQYXJ0aWFsKFBhcnNlcklkZW50
aWZpZXIsIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1l
bnRQYXJzZXI+Jik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlUGFydGlhbChQYXJzZXJJZGVudGlm
aWVyLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50
UGFyc2VyPiYsIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4sIFBhc3NSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4pOwogICAgIHN0YXRpYyB2b2lkIHN0b3BQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIp
OwogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFBhcnRpYWwoUGFyc2VySWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBpbnB1dCk7CiAgICAgc3RhdGljIHZvaWQgcmVzdW1lRnJvbVBhcnRpYWwoUGFyc2Vy
SWRlbnRpZmllciwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiwgUGFzc093blB0
cjxIVE1MVG9rZW4+LCBQYXNzT3duUHRyPEhUTUxUb2tlbml6ZXI+LCBIVE1MSW5wdXRDaGVja3Bv
aW50KTsKICAgICBzdGF0aWMgdm9pZCBmaW5pc2hQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIpOwog
CiBwcml2YXRlOgotICAgIEJhY2tncm91bmRIVE1MUGFyc2VyKGNvbnN0IEhUTUxQYXJzZXJPcHRp
b25zJiwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+Jik7CisgICAgQmFja2dyb3Vu
ZEhUTUxQYXJzZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmLCBjb25zdCBXZWFrUHRyPEhUTUxE
b2N1bWVudFBhcnNlcj4mLCBQYXNzT3duUHRyPFhTU0F1ZGl0b3I+LCBQYXNzUmVmUHRyPFRleHRS
ZXNvdXJjZURlY29kZXI+KTsKIAogICAgIHZvaWQgbWFya0VuZE9mRmlsZSgpOwogICAgIHZvaWQg
cHVtcFRva2VuaXplcigpOwpAQCAtNjksMTEgKzc0LDE0IEBAIHByaXZhdGU6CiAKICAgICBib29s
IG1faW5Gb3JlaWduQ29udGVudDsgLy8gRklYTUU6IFdlIG5lZWQgYSBzdGFjayBvZiBmb3JlaWdu
IGNvbnRlbnQgbWFya2Vycy4KICAgICBCYWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtIG1faW5wdXQ7
CisgICAgSFRNTFNvdXJjZVRyYWNrZXIgbV9zb3VyY2VUcmFja2VyOwogICAgIE93blB0cjxIVE1M
VG9rZW4+IG1fdG9rZW47CiAgICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwog
ICAgIEhUTUxQYXJzZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICBXZWFrUHRyPEhUTUxEb2N1bWVu
dFBhcnNlcj4gbV9wYXJzZXI7CiAgICAgT3duUHRyPENvbXBhY3RIVE1MVG9rZW5TdHJlYW0+IG1f
cGVuZGluZ1Rva2VuczsKKyAgICBPd25QdHI8WFNTQXVkaXRvcj4gbV94c3NBdWRpdG9yOworICAg
IFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiB9OwogCiBjbGFzcyBQYXJz
ZXJNYXAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKaW5kZXggMjU1ZDczMWM0ZTNjYmU5ZjBjNDJhZDVkMmRlNzY5NzUxNTM1OTVhOS4u
NTQ1Y2VkZDFmYzc2MzQ1Nzc1NGM0NzM3MjUwMTE3YzRkZmI1YzkyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiQ29tcGFjdEhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkNvbnRlbnRT
ZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMzY4LDEzICszNjksMTMgQEAgdm9pZCBI
VE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAK
ICAgICB3aGlsZSAoY2FuVGFrZU5leHRUb2tlbihtb2RlLCBzZXNzaW9uKSAmJiAhc2Vzc2lvbi5u
ZWVkc1lpZWxkKSB7CiAgICAgICAgIGlmICghaXNQYXJzaW5nRnJhZ21lbnQoKSkKLSAgICAgICAg
ICAgIG1fc291cmNlVHJhY2tlci5zdGFydChtX2lucHV0LCBtX3Rva2VuaXplci5nZXQoKSwgdG9r
ZW4oKSk7CisgICAgICAgICAgICBtX3NvdXJjZVRyYWNrZXIuc3RhcnQobV9pbnB1dC5jdXJyZW50
KCksIG1fdG9rZW5pemVyLmdldCgpLCB0b2tlbigpKTsKIAogICAgICAgICBpZiAoIW1fdG9rZW5p
emVyLT5uZXh0VG9rZW4obV9pbnB1dC5jdXJyZW50KCksIHRva2VuKCkpKQogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgaWYgKCFpc1BhcnNpbmdGcmFnbWVudCgpKSB7Ci0gICAgICAgICAg
ICBtX3NvdXJjZVRyYWNrZXIuZW5kKG1faW5wdXQsIG1fdG9rZW5pemVyLmdldCgpLCB0b2tlbigp
KTsKKyAgICAgICAgICAgIG1fc291cmNlVHJhY2tlci5lbmQobV9pbnB1dC5jdXJyZW50KCksIG1f
dG9rZW5pemVyLmdldCgpLCB0b2tlbigpKTsKIAogICAgICAgICAgICAgLy8gV2UgZG8gbm90IFhT
UyBmaWx0ZXIgaW5uZXJIVE1MLCB3aGljaCBtZWFucyB3ZSAoaW50ZW50aW9uYWxseSkgZmFpbAog
ICAgICAgICAgICAgLy8gaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2RvbS13cml0ZS1p
bm5lckhUTUwuaHRtbApAQCAtNTExLDkgKzUxMiwyNSBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6c3RhcnRCYWNrZ3JvdW5kUGFyc2VyKCkKICAgICBBU1NFUlQoIW1faGF2ZUJhY2tncm91bmRQ
YXJzZXIpOwogICAgIG1faGF2ZUJhY2tncm91bmRQYXJzZXIgPSB0cnVlOwogCi0gICAgUGFyc2Vy
SWRlbnRpZmllciBpZGVudGlmaWVyID0gUGFyc2VyTWFwOjppZGVudGlmaWVyRm9yUGFyc2VyKHRo
aXMpOwogICAgIFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwYXJzZXIgPSBtX3dlYWtGYWN0
b3J5LmNyZWF0ZVdlYWtQdHIoKTsKLSAgICBIVE1MUGFyc2VyVGhyZWFkOjpzaGFyZWQoKS0+cG9z
dFRhc2soYmluZCgmQmFja2dyb3VuZEhUTUxQYXJzZXI6OmNyZWF0ZVBhcnRpYWwsIGlkZW50aWZp
ZXIsIG1fb3B0aW9ucywgcGFyc2VyKSk7CisKKyAgICBPd25QdHI8WFNTQXVkaXRvcj4geHNzQXVk
aXRvciA9IGFkb3B0UHRyKG5ldyBYU1NBdWRpdG9yKTsKKyAgICB4c3NBdWRpdG9yLT5pbml0KGRv
Y3VtZW50KCkpOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKTsKKyAgICBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gc2V0dGluZ3MgJiYgc2V0dGlu
Z3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIGlm
IChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZG9jdW1lbnQoKS0+bG9hZGVyKCkpCisgICAgICAg
IG1pbWVUeXBlID0gbG9hZGVyLT5yZXNwb25zZU1JTUVUeXBlKCk7CisgICAgU3RyaW5nIGRlZmF1
bHRUZXh0RW5jb2RpbmdOYW1lOworICAgIGlmIChzZXR0aW5ncykKKyAgICAgICAgZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUgPSBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKTsKKyAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29k
ZXI6OmNyZWF0ZShtaW1lVHlwZSwgZGVmYXVsdFRleHRFbmNvZGluZ05hbWUsIHVzZXNFbmNvZGlu
Z0RldGVjdG9yKTsKKworICAgIEFTU0VSVCh4c3NBdWRpdG9yLT5pc1NhZmVUb1NlbmRUb0Fub3Ro
ZXJUaHJlYWQoKSk7CisgICAgQVNTRVJUKGRlY29kZXItPmhhc09uZVJlZigpKTsKKyAgICBQYXJz
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBQYXJzZXJNYXA6OmlkZW50aWZpZXJGb3JQYXJzZXIo
dGhpcyk7CisgICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVkKCktPnBvc3RUYXNrKGJpbmQoJkJh
Y2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsLCBpZGVudGlmaWVyLCBtX29wdGlvbnMs
IHBhcnNlciwgeHNzQXVkaXRvci5yZWxlYXNlKCksIGRlY29kZXIucmVsZWFzZSgpKSk7CiB9CiAK
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpzdG9wQmFja2dyb3VuZFBhcnNlcigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHAKaW5kZXggYjA0
MmRkNjU3ZWE0ZjIwNzk1MjJjMDdjNmY0NWEwN2Y0OWE2OGIxOS4uODk4ODVjM2UxY2UyZjE1ZTNi
ODRkZGNkNGE5ZjExMWUzOGMzMjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcApAQCAtMzQsNyArMzQsNyBAQCBIVE1MU291cmNlVHJh
Y2tlcjo6SFRNTFNvdXJjZVRyYWNrZXIoKQogewogfQogCi12b2lkIEhUTUxTb3VyY2VUcmFja2Vy
OjpzdGFydChjb25zdCBIVE1MSW5wdXRTdHJlYW0mIGlucHV0LCBIVE1MVG9rZW5pemVyKiB0b2tl
bml6ZXIsIEhUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxTb3VyY2VUcmFja2VyOjpzdGFydChT
ZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBI
VE1MVG9rZW4mIHRva2VuKQogewogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OlVuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgbV9wcmV2aW91c1NvdXJjZS5jbGVhcigpOwpA
QCAtNDMsMTYgKzQzLDE2IEBAIHZvaWQgSFRNTFNvdXJjZVRyYWNrZXI6OnN0YXJ0KGNvbnN0IEhU
TUxJbnB1dFN0cmVhbSYgaW5wdXQsIEhUTUxUb2tlbml6ZXIqIHRva2VuCiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fcHJldmlvdXNTb3VyY2UuYXBwZW5kKG1fY3VycmVudFNvdXJjZSk7CiAKLSAgICBt
X2N1cnJlbnRTb3VyY2UgPSBpbnB1dC5jdXJyZW50KCk7CisgICAgbV9jdXJyZW50U291cmNlID0g
Y3VycmVudElucHV0OwogICAgIHRva2VuLnNldEJhc2VPZmZzZXQobV9jdXJyZW50U291cmNlLm51
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX3ByZXZpb3VzU291cmNlLmxlbmd0aCgpKTsK
IH0KIAotdm9pZCBIVE1MU291cmNlVHJhY2tlcjo6ZW5kKGNvbnN0IEhUTUxJbnB1dFN0cmVhbSYg
aW5wdXQsIEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTFNvdXJjZVRyYWNrZXI6OmVuZChTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRJbnB1dCwgSFRN
TFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MVG9rZW4mIHRva2VuKQogewogICAgIG1fY2FjaGVk
U291cmNlRm9yVG9rZW4gPSBTdHJpbmcoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHdvcmsgc2hv
dWxkIHJlYWxseSBiZSBkb25lIGJ5IHRoZSBIVE1MVG9rZW5pemVyLgotICAgIHRva2VuLmVuZChp
bnB1dC5jdXJyZW50KCkubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAtIHRva2VuaXplci0+
bnVtYmVyT2ZCdWZmZXJlZENoYXJhY3RlcnMoKSk7CisgICAgdG9rZW4uZW5kKGN1cnJlbnRJbnB1
dC5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpIC0gdG9rZW5pemVyLT5udW1iZXJPZkJ1ZmZl
cmVkQ2hhcmFjdGVycygpKTsKIH0KIAogU3RyaW5nIEhUTUxTb3VyY2VUcmFja2VyOjpzb3VyY2VG
b3JUb2tlbihjb25zdCBIVE1MVG9rZW4mIHRva2VuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmgKaW5kZXggOTVkNmQzM2I1OThiMzliMTNhMzFhZDg2
NGIyMTlmNDlhNjczOTMwYi4uNDI5NTYxOGJhZDMwNGU2ODBmN2FlN2ViYzU4ZmEyMDYxMDA0ZGQy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNr
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5o
CkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIEhUTUxTb3VyY2VUcmFja2VyX2gKICNkZWZpbmUg
SFRNTFNvdXJjZVRyYWNrZXJfaAogCi0jaW5jbHVkZSAiSFRNTElucHV0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
Miw4ICs0Miw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogT25jZSB3ZSBtb3ZlICJlbmQiIGlu
dG8gSFRNTFRva2VuaXplciwgcmVuYW1lICJzdGFydCIgdG8KICAgICAvLyBzb21ldGhpbmcgdGhh
dCBtYWtlcyBpdCBvYnZpb3VzIHRoYXQgdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtdWx0aXBs
ZQogICAgIC8vIHRpbWVzLgotICAgIHZvaWQgc3RhcnQoY29uc3QgSFRNTElucHV0U3RyZWFtJiwg
SFRNTFRva2VuaXplciosIEhUTUxUb2tlbiYpOwotICAgIHZvaWQgZW5kKGNvbnN0IEhUTUxJbnB1
dFN0cmVhbSYsIEhUTUxUb2tlbml6ZXIqLCBIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHN0YXJ0KFNl
Z21lbnRlZFN0cmluZyYsIEhUTUxUb2tlbml6ZXIqLCBIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGVu
ZChTZWdtZW50ZWRTdHJpbmcmLCBIVE1MVG9rZW5pemVyKiwgSFRNTFRva2VuJik7CiAKICAgICBT
dHJpbmcgc291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNlUGFyc2VyLmNwcAppbmRleCA1NjVj
YmY5ZjRkYzk5YmUzMTJiNjA5ZGIxZTY1Yjg0ZTFhYzJhNDIyLi4xMDZiZTMxNGE1NDMxNGUwOGQ1
MmJmOGUzYzE1ZDJhY2U5MjljNzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwCkBAIC01MSwxMCArNTEsMTAgQEAgdm9pZCBI
VE1MVmlld1NvdXJjZVBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCiB2b2lk
IEhUTUxWaWV3U291cmNlUGFyc2VyOjpwdW1wVG9rZW5pemVyKCkKIHsKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBtX3NvdXJjZVRyYWNrZXIuc3RhcnQobV9pbnB1dCwgbV90b2tlbml6ZXIu
Z2V0KCksIG1fdG9rZW4pOworICAgICAgICBtX3NvdXJjZVRyYWNrZXIuc3RhcnQobV9pbnB1dC5j
dXJyZW50KCksIG1fdG9rZW5pemVyLmdldCgpLCBtX3Rva2VuKTsKICAgICAgICAgaWYgKCFtX3Rv
a2VuaXplci0+bmV4dFRva2VuKG1faW5wdXQuY3VycmVudCgpLCBtX3Rva2VuKSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBtX3NvdXJjZVRyYWNrZXIuZW5kKG1faW5wdXQsIG1fdG9rZW5p
emVyLmdldCgpLCBtX3Rva2VuKTsKKyAgICAgICAgbV9zb3VyY2VUcmFja2VyLmVuZChtX2lucHV0
LmN1cnJlbnQoKSwgbV90b2tlbml6ZXIuZ2V0KCksIG1fdG9rZW4pOwogCiAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZFNvdXJjZShzb3VyY2VGb3JUb2tlbigpLCBtX3Rva2VuKTsKICAgICAgICAgdXBk
YXRlVG9rZW5pemVyU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1hTU0F1ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5jcHAKaW5kZXggNjlkMDMzYzljZmY2MWU4NzhjODBhMTBhZDdkNzIxYTFjYzRiMDM2YS4uOGMz
ZGMzOTMwYTM4ODE2M2Q0Y2YyNmVkYWFlY2Y3YzcyZjFjNjVlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFhTU0F1
ZGl0b3I6OmluaXQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGlmICghbV9pc0VuYWJsZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZG9jdW1lbnRVUkwgPSBkb2N1bWVudC0+dXJsKCk7Cisg
ICAgbV9kb2N1bWVudFVSTCA9IGRvY3VtZW50LT51cmwoKS5jb3B5KCk7CiAKICAgICAvLyBJbiB0
aGVvcnksIHRoZSBEb2N1bWVudCBjb3VsZCBoYXZlIGRldGFjaGVkIGZyb20gdGhlIEZyYW1lIGFm
dGVyIHRoZQogICAgIC8vIFhTU0F1ZGl0b3Igd2FzIGNvbnN0cnVjdGVkLgpAQCAtMjcwLDcgKzI3
MCw3IEBAIHZvaWQgWFNTQXVkaXRvcjo6aW5pdChEb2N1bWVudCogZG9jdW1lbnQpCiAKICAgICBp
ZiAoIW1fcmVwb3J0VVJMLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBNYXkgbmVlZCB0aGVzZSBm
b3IgcmVwb3J0aW5nIGxhdGVyIG9uLgotICAgICAgICBtX29yaWdpbmFsVVJMID0gbV9kb2N1bWVu
dFVSTDsKKyAgICAgICAgbV9vcmlnaW5hbFVSTCA9IG1fZG9jdW1lbnRVUkwuY29weSgpOwogICAg
ICAgICBtX29yaWdpbmFsSFRUUEJvZHkgPSBodHRwQm9keUFzU3RyaW5nOwogICAgIH0KIH0KQEAg
LTY2NCw0ICs2NjQsMTUgQEAgYm9vbCBYU1NBdWRpdG9yOjppc0xpa2VseVNhZmVSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gKG1fZG9jdW1lbnRVUkwuaG9zdCgpID09IHJl
c291cmNlVVJMLmhvc3QoKSAmJiByZXNvdXJjZVVSTC5xdWVyeSgpLmlzRW1wdHkoKSk7CiB9CiAK
K2Jvb2wgWFNTQXVkaXRvcjo6aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kb2N1bWVudFVSTC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKQor
ICAgICAgICAmJiBtX29yaWdpbmFsVVJMLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpCisg
ICAgICAgICYmIG1fb3JpZ2luYWxIVFRQQm9keS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
KQorICAgICAgICAmJiBtX2RlY29kZWRVUkwuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkK
KyAgICAgICAgJiYgbV9kZWNvZGVkSFRUUEJvZHkuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFk
KCkKKyAgICAgICAgJiYgbV9jYWNoZWREZWNvZGVkU25pcHBldC5pc1NhZmVUb1NlbmRUb0Fub3Ro
ZXJUaHJlYWQoKQorICAgICAgICAmJiBtX3JlcG9ydFVSTC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJU
aHJlYWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvWFNTQXVkaXRvci5oCmluZGV4IDk0OTk5NzdlZDQzMDVkYWRkMTQwMmNmZmViNzI3OWZh
YzVjYjJlYmUuLmNjNzRlOTE3ZmY0Nzk5MjhkNDJmODYxNWYwZjUzZjkxMWYzZjE3M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgKQEAgLTYwLDYgKzYwLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBpbml0KERvY3VtZW50Kik7CiAgICAgUGFzc093blB0cjxYU1NJbmZv
PiBmaWx0ZXJUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186948</attachid>
            <date>2013-02-06 16:48:57 -0800</date>
            <delta_ts>2013-02-07 05:02:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107603-20130206164533.patch</filename>
            <type>text/plain</type>
            <size>22080</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1MDQzOWY5MjU5Yjgy
ZDgxNzUxOTY5ZmY3NzJmMzllMDQwYWJkYS4uYWVmYWQ5OWZiNTVlZjgzMjZjMDE1N2ZkYzMwZmRj
MjljY2JhZTJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAyLTA2ICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FsbCBYU1NBdWRp
dG9yLmZpbHRlclRva2VuKCkgZnJvbSB0aHJlYWRlZCBIVE1MIHBhcnNlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjAzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoIHdlIG5v
dyBwYXNzIDE4MCBvZiAxODIgdGVzdHMgaW4gaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
LgorCisgICAgICAgIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYWFuIFhTU0F1ZGl0b3Igb24gdGhl
IG1haW4gdGhyZWFkIGFuZCBwYXNzaW5nIG93bmVyc2hpcCBvZiB0aGVtIHRvIHRoZSBCYWNrZ3Jv
dW5kSFRNTFBhcnNlciB1cG9uIGl0cyBjcmVhdGlvbi4KKworICAgICAgICBUaGVuIHRoZSBiYWNr
Z3JvdW5kIHRocmVhZCBjYWxscyBmaWx0ZXJUb2tlbigpIGFuZCBzdG9yZXMgdGhlIHJlc3VsdGlu
ZyBYU1NJbmZvIChpZiBhbnkpIG9uIHRoZSBDb21wYWN0SFRNTFRva2VuIGZvciB0aGUgbWFpbiB0
aHJlYWQgdG8gaGFuZGxlLgorCisgICAgICAgIFRoaXMgaW52b2x2ZWQgdHJpbW1pbmcgdGhlIFhT
U0F1ZGl0b3IgdG8gb25seSBkZXBlbmQgb24gdGhlIFRleHRFbmNvZGluZyBpbnN0ZWFkIG9mIHRo
ZSB3aG9sZSBUZXh0UmVzb3VyY2VEZWNvZGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9C
YWNrZ3JvdW5kSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5kSFRN
TFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFja2dy
b3VuZEhUTUxQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFja2dy
b3VuZEhUTUxQYXJzZXI6OmNyZWF0ZVBhcnRpYWwpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0Jh
Y2tncm91bmRIVE1MUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGUpOgorICAgICAgICAoQmFja2dyb3VuZEhU
TUxQYXJzZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpzdGFydEJhY2tncm91bmRQYXJz
ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VUcmFja2VyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU291cmNlVHJhY2tlcjo6ZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU291
cmNlVHJhY2tlci5oOiBDaGFuZ2UgdGhlIEhUTUxJbnB1dFN0cmVhbSBhcmdzIHRvIFNlZ21lbnRl
ZFN0cmluZyBiZWNhdXNlIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBvbmx5IGhhcyBhIEJhY2tncm91
bmRIVE1MSW5wdXRTdHJlYW0uCisgICAgICAgIChIVE1MU291cmNlVHJhY2tlcik6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFZpZXdTb3VyY2VQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZnVsbHlEZWNvZGVTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6WFNTQXVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpYU1NBdWRpdG9yOjppbml0KTogQ29waWVzIG5lY2Vzc2FyeSB0byBtYWtlIGlz
U2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGhhcHB5LgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1
ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
U0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOiBDaGVjayB0aGF0IGFs
bCBTdHJpbmcgYW5kIEtVUkwgbWVtYmVycyBhcmUgc2FmZSB0byBzZW5kIHRvIGFub3RoZXIgdGhy
ZWFkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJUb2tlblJl
cXVlc3Q6OkZpbHRlclRva2VuUmVxdWVzdCk6CisgICAgICAgIChGaWx0ZXJUb2tlblJlcXVlc3Qp
OgorICAgICAgICAoWFNTQXVkaXRvcik6CisKIDIwMTMtMDItMDYgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxNDIwMjUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNr
Z3JvdW5kSFRNTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3Jv
dW5kSFRNTFBhcnNlci5jcHAKaW5kZXggMTM0OTdmNWRlZDNlNGVjNzZhNTE3ZTc0NWEwNzFkODk0
Y2JjNTIwZS4uZmU4ZTMzMWJiM2NmYzgzYWUzNDQ5ZTNhMGVlYjBjODU1NDBkMjUxYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNw
cApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRl
ICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiWFNTQXVk
aXRvci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgpAQCAtNzEsMTMgKzcyLDE0
IEBAIFBhcnNlck1hcDo6QmFja2dyb3VuZFBhcnNlck1hcCYgUGFyc2VyTWFwOjpiYWNrZ3JvdW5k
UGFyc2VycygpCiAgICAgcmV0dXJuIG1fYmFja2dyb3VuZFBhcnNlcnM7CiB9CiAKLUJhY2tncm91
bmRIVE1MUGFyc2VyOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcihjb25zdCBIVE1MUGFyc2VyT3B0aW9u
cyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIpCitC
YWNrZ3JvdW5kSFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIoY29uc3QgSFRNTFBhcnNl
ck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYgcGFy
c2VyLCBQYXNzT3duUHRyPFhTU0F1ZGl0b3I+IHhzc0F1ZGl0b3IpCiAgICAgOiBtX2luRm9yZWln
bkNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Rva2VuKGFkb3B0UHRyKG5ldyBIVE1MVG9rZW4pKQog
ICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKG9wdGlvbnMpKQogICAgICwg
bV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3BlbmRp
bmdUb2tlbnMoYWRvcHRQdHIobmV3IENvbXBhY3RIVE1MVG9rZW5TdHJlYW0pKQorICAgICwgbV94
c3NBdWRpdG9yKHhzc0F1ZGl0b3IpCiB7CiB9CiAKQEAgLTE1Miw5ICsxNTQsMjAgQEAgYm9vbCBC
YWNrZ3JvdW5kSFRNTFBhcnNlcjo6c2ltdWxhdGVUcmVlQnVpbGRlcihjb25zdCBDb21wYWN0SFRN
TFRva2VuJiB0b2tlbikKIAogdm9pZCBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6cHVtcFRva2VuaXpl
cigpCiB7Ci0gICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4obV9pbnB1dC5jdXJyZW50
KCksICptX3Rva2VuLmdldCgpKSkgewotICAgICAgICAvLyBGSVhNRTogQ2FsbCBtX3hzc0F1ZGl0
b3IuZmlsdGVyVG9rZW4obV90b2tlbikgYW5kIHB1dCByZXN1bHRpbmcgWFNTSW5mbyBpbnRvIENv
bXBhY3RIVE1MVG9rZW4uCi0gICAgICAgIG1fcGVuZGluZ1Rva2Vucy0+YXBwZW5kKENvbXBhY3RI
VE1MVG9rZW4obV90b2tlbi5nZXQoKSwgVGV4dFBvc2l0aW9uKG1faW5wdXQuY3VycmVudCgpLmN1
cnJlbnRMaW5lKCksIG1faW5wdXQuY3VycmVudCgpLmN1cnJlbnRDb2x1bW4oKSkpKTsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBtX3NvdXJjZVRyYWNrZXIuc3RhcnQobV9pbnB1dC5jdXJy
ZW50KCksIG1fdG9rZW5pemVyLmdldCgpLCAqbV90b2tlbik7CisgICAgICAgIGlmICghbV90b2tl
bml6ZXItPm5leHRUb2tlbihtX2lucHV0LmN1cnJlbnQoKSwgKm1fdG9rZW4uZ2V0KCkpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc291cmNlVHJhY2tlci5lbmQobV9pbnB1dC5jdXJy
ZW50KCksIG1fdG9rZW5pemVyLmdldCgpLCAqbV90b2tlbik7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgT3duUHRyPFhTU0luZm8+IHhzc0luZm8gPSBtX3hzc0F1ZGl0b3ItPmZpbHRlclRva2Vu
KEZpbHRlclRva2VuUmVxdWVzdCgqbV90b2tlbiwgbV9zb3VyY2VUcmFja2VyLCBtX3Rva2VuaXpl
ci0+c2hvdWxkQWxsb3dDREFUQSgpKSk7CisgICAgICAgICAgICBDb21wYWN0SFRNTFRva2VuIHRv
a2VuKG1fdG9rZW4uZ2V0KCksIFRleHRQb3NpdGlvbihtX2lucHV0LmN1cnJlbnQoKS5jdXJyZW50
TGluZSgpLCBtX2lucHV0LmN1cnJlbnQoKS5jdXJyZW50Q29sdW1uKCkpKTsKKyAgICAgICAgICAg
IGlmICh4c3NJbmZvKQorICAgICAgICAgICAgICAgIHRva2VuLnNldFhTU0luZm8oeHNzSW5mby5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgbV9wZW5kaW5nVG9rZW5zLT5hcHBlbmQodG9rZW4pOwor
ICAgICAgICB9CisKICAgICAgICAgbV90b2tlbi0+Y2xlYXIoKTsKIAogICAgICAgICBpZiAoIXNp
bXVsYXRlVHJlZUJ1aWxkZXIobV9wZW5kaW5nVG9rZW5zLT5sYXN0KCkpIHx8IG1fcGVuZGluZ1Rv
a2Vucy0+c2l6ZSgpID49IHBlbmRpbmdUb2tlbkxpbWl0KQpAQCAtMTgxLDEwICsxOTQsMTAgQEAg
dm9pZCBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6c2VuZFRva2Vuc1RvTWFpblRocmVhZCgpCiAgICAg
bV9wZW5kaW5nVG9rZW5zID0gYWRvcHRQdHIobmV3IENvbXBhY3RIVE1MVG9rZW5TdHJlYW0pOwog
fQogCi12b2lkIEJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsKFBhcnNlcklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0
IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYgcGFyc2VyKQordm9pZCBCYWNrZ3JvdW5kSFRN
TFBhcnNlcjo6Y3JlYXRlUGFydGlhbChQYXJzZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zLCBjb25zdCBXZWFrUHRyPEhUTUxEb2N1bWVudFBh
cnNlcj4mIHBhcnNlciwgUGFzc093blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRpdG9yKQogewogICAg
IEFTU0VSVCghcGFyc2VyTWFwKCkuYmFja2dyb3VuZFBhcnNlcnMoKS5nZXQoaWRlbnRpZmllcikp
OwotICAgIHBhcnNlck1hcCgpLmJhY2tncm91bmRQYXJzZXJzKCkuc2V0KGlkZW50aWZpZXIsIEJh
Y2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGUob3B0aW9ucywgcGFyc2VyKSk7CisgICAgcGFyc2Vy
TWFwKCkuYmFja2dyb3VuZFBhcnNlcnMoKS5zZXQoaWRlbnRpZmllciwgQmFja2dyb3VuZEhUTUxQ
YXJzZXI6OmNyZWF0ZShvcHRpb25zLCBwYXJzZXIsIHhzc0F1ZGl0b3IpKTsKIH0KIAogdm9pZCBC
YWNrZ3JvdW5kSFRNTFBhcnNlcjo6c3RvcFBhcnRpYWwoUGFyc2VySWRlbnRpZmllciBpZGVudGlm
aWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhU
TUxQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFy
c2VyLmgKaW5kZXggNjdhMjA1YWIwZjQ4MzQ0ZGQ5MzJmNjVlMjhlOWNkOTI3NTE5ODlmYy4uNmQw
ZDhlMzY5YTNjODU1NzRhMzRhNWMyYWZlOTViZGNhNTA1YWRmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oCkBAIC0zMSwxNCArMzEs
MTggQEAKICNpbmNsdWRlICJCYWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
Q29tcGFjdEhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5j
bHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKICNpbmNs
dWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0eXBlZGVmIGNvbnN0IHZvaWQqIFBhcnNlcklkZW50aWZpZXI7CiBjbGFz
cyBIVE1MRG9jdW1lbnRQYXJzZXI7CitjbGFzcyBYU1NBdWRpdG9yOwogCiBjbGFzcyBCYWNrZ3Jv
dW5kSFRNTFBhcnNlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00NywxOSAr
NTEsMTkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzdW1lRnJvbShjb25zdCBXZWFrUHRyPEhUTUxE
b2N1bWVudFBhcnNlcj4mLCBQYXNzT3duUHRyPEhUTUxUb2tlbj4sIFBhc3NPd25QdHI8SFRNTFRv
a2VuaXplcj4sIEhUTUxJbnB1dENoZWNrcG9pbnQpOwogICAgIHZvaWQgZmluaXNoKCk7CiAKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxCYWNrZ3JvdW5kSFRNTFBhcnNlcj4gY3JlYXRlKGNvbnN0IEhU
TUxQYXJzZXJPcHRpb25zJiBvcHRpb25zLCBjb25zdCBXZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNl
cj4mIHBhcnNlcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxCYWNrZ3JvdW5kSFRNTFBhcnNlcj4g
Y3JlYXRlKGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zLCBjb25zdCBXZWFrUHRyPEhU
TUxEb2N1bWVudFBhcnNlcj4mIHBhcnNlciwgUGFzc093blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRp
dG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYWNrZ3JvdW5kSFRNTFBh
cnNlcihvcHRpb25zLCBwYXJzZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCYWNr
Z3JvdW5kSFRNTFBhcnNlcihvcHRpb25zLCBwYXJzZXIsIHhzc0F1ZGl0b3IpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBjcmVhdGVQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIsIGNvbnN0IEhU
TUxQYXJzZXJPcHRpb25zJiwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+Jik7Cisg
ICAgc3RhdGljIHZvaWQgY3JlYXRlUGFydGlhbChQYXJzZXJJZGVudGlmaWVyLCBjb25zdCBIVE1M
UGFyc2VyT3B0aW9ucyYsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYsIFBhc3NP
d25QdHI8WFNTQXVkaXRvcj4pOwogICAgIHN0YXRpYyB2b2lkIHN0b3BQYXJ0aWFsKFBhcnNlcklk
ZW50aWZpZXIpOwogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFBhcnRpYWwoUGFyc2VySWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbnB1dCk7CiAgICAgc3RhdGljIHZvaWQgcmVzdW1lRnJvbVBhcnRp
YWwoUGFyc2VySWRlbnRpZmllciwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+Jiwg
UGFzc093blB0cjxIVE1MVG9rZW4+LCBQYXNzT3duUHRyPEhUTUxUb2tlbml6ZXI+LCBIVE1MSW5w
dXRDaGVja3BvaW50KTsKICAgICBzdGF0aWMgdm9pZCBmaW5pc2hQYXJ0aWFsKFBhcnNlcklkZW50
aWZpZXIpOwogCiBwcml2YXRlOgotICAgIEJhY2tncm91bmRIVE1MUGFyc2VyKGNvbnN0IEhUTUxQ
YXJzZXJPcHRpb25zJiwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+Jik7CisgICAg
QmFja2dyb3VuZEhUTUxQYXJzZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmLCBjb25zdCBXZWFr
UHRyPEhUTUxEb2N1bWVudFBhcnNlcj4mLCBQYXNzT3duUHRyPFhTU0F1ZGl0b3I+KTsKIAogICAg
IHZvaWQgbWFya0VuZE9mRmlsZSgpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcigpOwpAQCAtNjks
MTEgKzczLDEzIEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faW5Gb3JlaWduQ29udGVudDsgLy8g
RklYTUU6IFdlIG5lZWQgYSBzdGFjayBvZiBmb3JlaWduIGNvbnRlbnQgbWFya2Vycy4KICAgICBC
YWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtIG1faW5wdXQ7CisgICAgSFRNTFNvdXJjZVRyYWNrZXIg
bV9zb3VyY2VUcmFja2VyOwogICAgIE93blB0cjxIVE1MVG9rZW4+IG1fdG9rZW47CiAgICAgT3du
UHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIEhUTUxQYXJzZXJPcHRpb25zIG1f
b3B0aW9uczsKICAgICBXZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CiAgICAg
T3duUHRyPENvbXBhY3RIVE1MVG9rZW5TdHJlYW0+IG1fcGVuZGluZ1Rva2VuczsKKyAgICBPd25Q
dHI8WFNTQXVkaXRvcj4gbV94c3NBdWRpdG9yOwogfTsKIAogY2xhc3MgUGFyc2VyTWFwIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmlu
ZGV4IDI1NWQ3MzFjNGUzY2JlOWYwYzQyYWQ1ZDJkZTc2OTc1MTUzNTk1YTkuLjIzZGU2Nzc5YjIz
YTZjMjdmN2QyMTM0NWIzN2ZhYmZkZjYxZTE0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkNvbXBhY3RIVE1MVG9rZW4uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTM2OCwxNyArMzY5LDE3IEBAIHZvaWQgSFRNTERvY3VtZW50
UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogCiAgICAgd2hpbGUg
KGNhblRha2VOZXh0VG9rZW4obW9kZSwgc2Vzc2lvbikgJiYgIXNlc3Npb24ubmVlZHNZaWVsZCkg
ewogICAgICAgICBpZiAoIWlzUGFyc2luZ0ZyYWdtZW50KCkpCi0gICAgICAgICAgICBtX3NvdXJj
ZVRyYWNrZXIuc3RhcnQobV9pbnB1dCwgbV90b2tlbml6ZXIuZ2V0KCksIHRva2VuKCkpOworICAg
ICAgICAgICAgbV9zb3VyY2VUcmFja2VyLnN0YXJ0KG1faW5wdXQuY3VycmVudCgpLCBtX3Rva2Vu
aXplci5nZXQoKSwgdG9rZW4oKSk7CiAKICAgICAgICAgaWYgKCFtX3Rva2VuaXplci0+bmV4dFRv
a2VuKG1faW5wdXQuY3VycmVudCgpLCB0b2tlbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGlmICghaXNQYXJzaW5nRnJhZ21lbnQoKSkgewotICAgICAgICAgICAgbV9zb3VyY2VU
cmFja2VyLmVuZChtX2lucHV0LCBtX3Rva2VuaXplci5nZXQoKSwgdG9rZW4oKSk7CisgICAgICAg
ICAgICBtX3NvdXJjZVRyYWNrZXIuZW5kKG1faW5wdXQuY3VycmVudCgpLCBtX3Rva2VuaXplci5n
ZXQoKSwgdG9rZW4oKSk7CiAKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBYU1MgZmlsdGVyIGlu
bmVySFRNTCwgd2hpY2ggbWVhbnMgd2UgKGludGVudGlvbmFsbHkpIGZhaWwKICAgICAgICAgICAg
IC8vIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9kb20td3JpdGUtaW5uZXJIVE1MLmh0
bWwKLSAgICAgICAgICAgIGlmIChPd25QdHI8WFNTSW5mbz4geHNzSW5mbyA9IG1feHNzQXVkaXRv
ci5maWx0ZXJUb2tlbihGaWx0ZXJUb2tlblJlcXVlc3QodG9rZW4oKSwgbV9zb3VyY2VUcmFja2Vy
LCBkb2N1bWVudCgpLT5kZWNvZGVyKCksIG1fdG9rZW5pemVyLT5zaG91bGRBbGxvd0NEQVRBKCkp
KSkKKyAgICAgICAgICAgIGlmIChPd25QdHI8WFNTSW5mbz4geHNzSW5mbyA9IG1feHNzQXVkaXRv
ci5maWx0ZXJUb2tlbihGaWx0ZXJUb2tlblJlcXVlc3QodG9rZW4oKSwgbV9zb3VyY2VUcmFja2Vy
LCBtX3Rva2VuaXplci0+c2hvdWxkQWxsb3dDREFUQSgpKSkpCiAgICAgICAgICAgICAgICAgbV94
c3NBdWRpdG9yRGVsZWdhdGUuZGlkQmxvY2tTY3JpcHQoKnhzc0luZm8pOwogICAgICAgICB9CiAK
QEAgLTUxMSw5ICs1MTIsMTIgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0QmFja2dy
b3VuZFBhcnNlcigpCiAgICAgQVNTRVJUKCFtX2hhdmVCYWNrZ3JvdW5kUGFyc2VyKTsKICAgICBt
X2hhdmVCYWNrZ3JvdW5kUGFyc2VyID0gdHJ1ZTsKIAotICAgIFBhcnNlcklkZW50aWZpZXIgaWRl
bnRpZmllciA9IFBhcnNlck1hcDo6aWRlbnRpZmllckZvclBhcnNlcih0aGlzKTsKICAgICBXZWFr
UHRyPEhUTUxEb2N1bWVudFBhcnNlcj4gcGFyc2VyID0gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFr
UHRyKCk7Ci0gICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVkKCktPnBvc3RUYXNrKGJpbmQoJkJh
Y2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsLCBpZGVudGlmaWVyLCBtX29wdGlvbnMs
IHBhcnNlcikpOworICAgIE93blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRpdG9yID0gYWRvcHRQdHIo
bmV3IFhTU0F1ZGl0b3IpOworICAgIHhzc0F1ZGl0b3ItPmluaXQoZG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKHhzc0F1ZGl0b3ItPmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKKyAgICBQ
YXJzZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBQYXJzZXJNYXA6OmlkZW50aWZpZXJGb3JQYXJz
ZXIodGhpcyk7CisgICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVkKCktPnBvc3RUYXNrKGJpbmQo
JkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsLCBpZGVudGlmaWVyLCBtX29wdGlv
bnMsIHBhcnNlciwgeHNzQXVkaXRvci5yZWxlYXNlKCkpKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnN0b3BCYWNrZ3JvdW5kUGFyc2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcAppbmRleCBiMDQyZGQ2NTdlYTRmMjA3OTUy
MmMwN2M2ZjQ1YTA3ZjQ5YTY4YjE5Li44OTg4NWMzZTFjZTJmMTVlM2I4NGRkY2Q0YTlmMTExZTM4
YzMyNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNl
VHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRy
YWNrZXIuY3BwCkBAIC0zNCw3ICszNCw3IEBAIEhUTUxTb3VyY2VUcmFja2VyOjpIVE1MU291cmNl
VHJhY2tlcigpCiB7CiB9CiAKLXZvaWQgSFRNTFNvdXJjZVRyYWNrZXI6OnN0YXJ0KGNvbnN0IEhU
TUxJbnB1dFN0cmVhbSYgaW5wdXQsIEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTFNvdXJjZVRyYWNrZXI6OnN0YXJ0KFNlZ21lbnRlZFN0cmluZyYg
Y3VycmVudElucHV0LCBIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxUb2tlbiYgdG9rZW4p
CiB7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6VW5pbml0aWFsaXpl
ZCkgewogICAgICAgICBtX3ByZXZpb3VzU291cmNlLmNsZWFyKCk7CkBAIC00MywxNiArNDMsMTYg
QEAgdm9pZCBIVE1MU291cmNlVHJhY2tlcjo6c3RhcnQoY29uc3QgSFRNTElucHV0U3RyZWFtJiBp
bnB1dCwgSFRNTFRva2VuaXplciogdG9rZW4KICAgICB9IGVsc2UKICAgICAgICAgbV9wcmV2aW91
c1NvdXJjZS5hcHBlbmQobV9jdXJyZW50U291cmNlKTsKIAotICAgIG1fY3VycmVudFNvdXJjZSA9
IGlucHV0LmN1cnJlbnQoKTsKKyAgICBtX2N1cnJlbnRTb3VyY2UgPSBjdXJyZW50SW5wdXQ7CiAg
ICAgdG9rZW4uc2V0QmFzZU9mZnNldChtX2N1cnJlbnRTb3VyY2UubnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWQoKSAtIG1fcHJldmlvdXNTb3VyY2UubGVuZ3RoKCkpOwogfQogCi12b2lkIEhUTUxT
b3VyY2VUcmFja2VyOjplbmQoY29uc3QgSFRNTElucHV0U3RyZWFtJiBpbnB1dCwgSFRNTFRva2Vu
aXplciogdG9rZW5pemVyLCBIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MU291cmNlVHJhY2tl
cjo6ZW5kKFNlZ21lbnRlZFN0cmluZyYgY3VycmVudElucHV0LCBIVE1MVG9rZW5pemVyKiB0b2tl
bml6ZXIsIEhUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgbV9jYWNoZWRTb3VyY2VGb3JUb2tlbiA9
IFN0cmluZygpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgd29yayBzaG91bGQgcmVhbGx5IGJlIGRv
bmUgYnkgdGhlIEhUTUxUb2tlbml6ZXIuCi0gICAgdG9rZW4uZW5kKGlucHV0LmN1cnJlbnQoKS5u
dW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpIC0gdG9rZW5pemVyLT5udW1iZXJPZkJ1ZmZlcmVk
Q2hhcmFjdGVycygpKTsKKyAgICB0b2tlbi5lbmQoY3VycmVudElucHV0Lm51bWJlck9mQ2hhcmFj
dGVyc0NvbnN1bWVkKCkgLSB0b2tlbml6ZXItPm51bWJlck9mQnVmZmVyZWRDaGFyYWN0ZXJzKCkp
OwogfQogCiBTdHJpbmcgSFRNTFNvdXJjZVRyYWNrZXI6OnNvdXJjZUZvclRva2VuKGNvbnN0IEhU
TUxUb2tlbiYgdG9rZW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU291cmNlVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJj
ZVRyYWNrZXIuaAppbmRleCA5NWQ2ZDMzYjU5OGIzOWIxM2EzMWFkODY0YjIxOWY0OWE2NzM5MzBi
Li40Mjk1NjE4YmFkMzA0ZTY4MGY3YWU3ZWJjNThmYTIwNjEwMDRkZDJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmgKQEAgLTI2LDggKzI2LDgg
QEAKICNpZm5kZWYgSFRNTFNvdXJjZVRyYWNrZXJfaAogI2RlZmluZSBIVE1MU291cmNlVHJhY2tl
cl9oCiAKLSNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MVG9rZW4u
aCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDggKzQyLDggQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBPbmNlIHdlIG1vdmUgImVuZCIgaW50byBIVE1MVG9rZW5pemVy
LCByZW5hbWUgInN0YXJ0IiB0bwogICAgIC8vIHNvbWV0aGluZyB0aGF0IG1ha2VzIGl0IG9idmlv
dXMgdGhhdCB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlCiAgICAgLy8gdGltZXMu
Ci0gICAgdm9pZCBzdGFydChjb25zdCBIVE1MSW5wdXRTdHJlYW0mLCBIVE1MVG9rZW5pemVyKiwg
SFRNTFRva2VuJik7Ci0gICAgdm9pZCBlbmQoY29uc3QgSFRNTElucHV0U3RyZWFtJiwgSFRNTFRv
a2VuaXplciosIEhUTUxUb2tlbiYpOworICAgIHZvaWQgc3RhcnQoU2VnbWVudGVkU3RyaW5nJiwg
SFRNTFRva2VuaXplciosIEhUTUxUb2tlbiYpOworICAgIHZvaWQgZW5kKFNlZ21lbnRlZFN0cmlu
ZyYsIEhUTUxUb2tlbml6ZXIqLCBIVE1MVG9rZW4mKTsKIAogICAgIFN0cmluZyBzb3VyY2VGb3JU
b2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwCmluZGV4IDU2NWNiZjlmNGRjOTliZTMxMmI2
MDlkYjFlNjViODRlMWFjMmE0MjIuLjEwNmJlMzE0YTU0MzE0ZTA4ZDUyYmY4ZTNjMTVkMmFjZTky
OWM3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291
cmNlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVmlld1Nv
dXJjZVBhcnNlci5jcHAKQEAgLTUxLDEwICs1MSwxMCBAQCB2b2lkIEhUTUxWaWV3U291cmNlUGFy
c2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikKIHZvaWQgSFRNTFZpZXdTb3VyY2VQ
YXJzZXI6OnB1bXBUb2tlbml6ZXIoKQogewogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIG1f
c291cmNlVHJhY2tlci5zdGFydChtX2lucHV0LCBtX3Rva2VuaXplci5nZXQoKSwgbV90b2tlbik7
CisgICAgICAgIG1fc291cmNlVHJhY2tlci5zdGFydChtX2lucHV0LmN1cnJlbnQoKSwgbV90b2tl
bml6ZXIuZ2V0KCksIG1fdG9rZW4pOwogICAgICAgICBpZiAoIW1fdG9rZW5pemVyLT5uZXh0VG9r
ZW4obV9pbnB1dC5jdXJyZW50KCksIG1fdG9rZW4pKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIG1fc291cmNlVHJhY2tlci5lbmQobV9pbnB1dCwgbV90b2tlbml6ZXIuZ2V0KCksIG1fdG9r
ZW4pOworICAgICAgICBtX3NvdXJjZVRyYWNrZXIuZW5kKG1faW5wdXQuY3VycmVudCgpLCBtX3Rv
a2VuaXplci5nZXQoKSwgbV90b2tlbik7CiAKICAgICAgICAgZG9jdW1lbnQoKS0+YWRkU291cmNl
KHNvdXJjZUZvclRva2VuKCksIG1fdG9rZW4pOwogICAgICAgICB1cGRhdGVUb2tlbml6ZXJTdGF0
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAppbmRleCA2OWQw
MzNjOWNmZjYxZTg3OGM4MGExMGFkN2Q3MjFhMWNjNGIwMzZhLi45ZGNjOGI1NDczN2JlN2FlNDU1
ZTZhMjJmZTBhMDA5MzgwMWU1NTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9YU1NBdWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NB
dWRpdG9yLmNwcApAQCAtMTYwLDkgKzE2MCw4IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGRlY29k
ZVN0YW5kYXJkVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zCiAg
ICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxFc2NhcGVTZXF1ZW5jZT4oc3RyaW5n
LCBlbmNvZGluZyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZnVsbHlEZWNvZGVTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCitzdGF0
aWMgU3RyaW5nIGZ1bGx5RGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcgPSBkZWNvZGVyID8gZGVjb2Rlci0+ZW5jb2RpbmcoKSA6IFVURjhFbmNvZGluZygpOwogICAg
IHNpemVfdCBvbGRXb3JraW5nU3RyaW5nTGVuZ3RoOwogICAgIFN0cmluZyB3b3JraW5nU3RyaW5n
ID0gc3RyaW5nOwogICAgIGRvIHsKQEAgLTE3OSw2ICsxNzgsNyBAQCBYU1NBdWRpdG9yOjpYU1NB
dWRpdG9yKCkKICAgICAsIG1feHNzUHJvdGVjdGlvbihYU1NQcm90ZWN0aW9uRW5hYmxlZCkKICAg
ICAsIG1fc3RhdGUoVW5pbml0aWFsaXplZCkKICAgICAsIG1fc2NyaXB0VGFnTmVzdGluZ0xldmVs
KDApCisgICAgLCBtX2VuY29kaW5nKFVURjhFbmNvZGluZygpKQogewogICAgIC8vIEFsdGhvdWdo
IHRlbXB0aW5nIHRvIGNhbGwgaW5pdCgpIGF0IHRoaXMgcG9pbnQsIHRoZSB2YXJpb3VzIG9iamVj
dHMKICAgICAvLyB3ZSB3YW50IHRvIHJlZmVyZW5jZSBtaWdodCBub3QgYWxsIGhhdmUgYmVlbiBj
b25zdHJ1Y3RlZCB5ZXQuCkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBYU1NBdWRpdG9yOjppbml0
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2RvY3VtZW50VVJMID0gZG9jdW1lbnQtPnVybCgpOworICAgIG1fZG9jdW1l
bnRVUkwgPSBkb2N1bWVudC0+dXJsKCkuY29weSgpOwogCiAgICAgLy8gSW4gdGhlb3J5LCB0aGUg
RG9jdW1lbnQgY291bGQgaGF2ZSBkZXRhY2hlZCBmcm9tIHRoZSBGcmFtZSBhZnRlciB0aGUKICAg
ICAvLyBYU1NBdWRpdG9yIHdhcyBjb25zdHJ1Y3RlZC4KQEAgLTIyMiw4ICsyMjIsMTAgQEAgdm9p
ZCBYU1NBdWRpdG9yOjppbml0KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBkb2N1bWVudC0+ZGVj
b2RlcigpOwotICAgIG1fZGVjb2RlZFVSTCA9IGZ1bGx5RGVjb2RlU3RyaW5nKG1fZG9jdW1lbnRV
Ukwuc3RyaW5nKCksIGRlY29kZXIpOworICAgIGlmIChkb2N1bWVudC0+ZGVjb2RlcigpKQorICAg
ICAgICBtX2VuY29kaW5nID0gZG9jdW1lbnQtPmRlY29kZXIoKS0+ZW5jb2RpbmcoKTsKKworICAg
IG1fZGVjb2RlZFVSTCA9IGZ1bGx5RGVjb2RlU3RyaW5nKG1fZG9jdW1lbnRVUkwuc3RyaW5nKCks
IG1fZW5jb2RpbmcpOwogICAgIGlmIChtX2RlY29kZWRVUkwuZmluZChpc1JlcXVpcmVkRm9ySW5q
ZWN0aW9uKSA9PSBub3RGb3VuZCkKICAgICAgICAgbV9kZWNvZGVkVVJMID0gU3RyaW5nKCk7CiAK
QEAgLTI1NCw3ICsyNTYsNyBAQCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogICAgICAgICBpZiAoaHR0cEJvZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGh0dHBCb2R5QXNTdHJpbmcgPSBodHRwQm9keS0+ZmxhdHRlblRvU3RyaW5nKCk7
CiAgICAgICAgICAgICBpZiAoIWh0dHBCb2R5QXNTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBmdWxseURlY29kZVN0cmluZyhodHRwQm9keUFz
U3RyaW5nLCBkZWNvZGVyKTsKKyAgICAgICAgICAgICAgICBtX2RlY29kZWRIVFRQQm9keSA9IGZ1
bGx5RGVjb2RlU3RyaW5nKGh0dHBCb2R5QXNTdHJpbmcsIG1fZW5jb2RpbmcpOwogICAgICAgICAg
ICAgICAgIGlmIChtX2RlY29kZWRIVFRQQm9keS5maW5kKGlzUmVxdWlyZWRGb3JJbmplY3Rpb24p
ID09IG5vdEZvdW5kKQogICAgICAgICAgICAgICAgICAgICBtX2RlY29kZWRIVFRQQm9keSA9IFN0
cmluZygpOwogICAgICAgICAgICAgICAgIGlmIChtX2RlY29kZWRIVFRQQm9keS5sZW5ndGgoKSA+
PSBtaW5pdW1MZW5ndGhGb3JTdWZmaXhUcmVlKQpAQCAtMjcwLDcgKzI3Miw3IEBAIHZvaWQgWFNT
QXVkaXRvcjo6aW5pdChEb2N1bWVudCogZG9jdW1lbnQpCiAKICAgICBpZiAoIW1fcmVwb3J0VVJM
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBNYXkgbmVlZCB0aGVzZSBmb3IgcmVwb3J0aW5nIGxh
dGVyIG9uLgotICAgICAgICBtX29yaWdpbmFsVVJMID0gbV9kb2N1bWVudFVSTDsKKyAgICAgICAg
bV9vcmlnaW5hbFVSTCA9IG1fZG9jdW1lbnRVUkwuY29weSgpOwogICAgICAgICBtX29yaWdpbmFs
SFRUUEJvZHkgPSBodHRwQm9keUFzU3RyaW5nOwogICAgIH0KIH0KQEAgLTUwNyw3ICs1MDksNyBA
QCBib29sIFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChjb25zdCBGaWx0ZXJU
b2tlblJlcXVlc3QmIHJlcXVlc3QsIGNvbgogU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlw
cGV0Rm9yTmFtZShjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8g
R3JhYiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGVxdWFsIHRvIHRoZSBsZW5ndGggb2Yg
dGhlIHRva2VuJ3MgbmFtZSBwbHVzIG9uZSAodG8gYWNjb3VudCBmb3IgdGhlICI8IikuCi0gICAg
cmV0dXJuIGZ1bGx5RGVjb2RlU3RyaW5nKHJlcXVlc3Quc291cmNlVHJhY2tlci5zb3VyY2VGb3JU
b2tlbihyZXF1ZXN0LnRva2VuKSwgcmVxdWVzdC5kZWNvZGVyKS5zdWJzdHJpbmcoMCwgcmVxdWVz
dC50b2tlbi5uYW1lKCkuc2l6ZSgpICsgMSk7CisgICAgcmV0dXJuIGZ1bGx5RGVjb2RlU3RyaW5n
KHJlcXVlc3Quc291cmNlVHJhY2tlci5zb3VyY2VGb3JUb2tlbihyZXF1ZXN0LnRva2VuKSwgbV9l
bmNvZGluZykuc3Vic3RyaW5nKDAsIHJlcXVlc3QudG9rZW4ubmFtZSgpLnNpemUoKSArIDEpOwog
fQogCiBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3Qg
RmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYg
YXR0cmlidXRlLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCkKQEAgLTUxOCw3ICs1MjAsNyBAQCBT
dHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgRmlsdGVy
VG9rZW5SZXF1ZXN0JiByZXF1ZXN0LAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ3JhYiBvbmUg
Y2hhcmFjdGVyIGJlZm9yZSB0aGUgbmFtZSBhbHNvLgogICAgIGludCBzdGFydCA9IGF0dHJpYnV0
ZS5tX25hbWVSYW5nZS5tX3N0YXJ0IC0gcmVxdWVzdC50b2tlbi5zdGFydEluZGV4KCk7CiAgICAg
aW50IGVuZCA9IGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQgLSByZXF1ZXN0LnRva2VuLnN0
YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmlu
ZyhyZXF1ZXN0LnNvdXJjZVRyYWNrZXIuc291cmNlRm9yVG9rZW4ocmVxdWVzdC50b2tlbikuc3Vi
c3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCksIHJlcXVlc3QuZGVjb2Rlcik7CisgICAgU3RyaW5n
IGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVTdHJpbmcocmVxdWVzdC5zb3VyY2VUcmFja2Vy
LnNvdXJjZUZvclRva2VuKHJlcXVlc3QudG9rZW4pLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3Rh
cnQpLCBtX2VuY29kaW5nKTsKICAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShrTWF4aW11bUZy
YWdtZW50TGVuZ3RoVGFyZ2V0KTsKICAgICBpZiAodHJlYXRtZW50ID09IFNyY0xpa2VBdHRyaWJ1
dGUpIHsKICAgICAgICAgaW50IHNsYXNoQ291bnQgPSAwOwpAQCAtNjI2LDcgKzYyOCw3IEBAIFN0
cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgRmlsdGVy
VG9rZW5SZXF1ZXN0JiByZXF1ZXN0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICByZXN1bHQgPSBmdWxseURlY29kZVN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRp
b24sIGZvdW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKSwgcmVxdWVzdC5kZWNvZGVyKTsKKyAg
ICAgICAgcmVzdWx0ID0gZnVsbHlEZWNvZGVTdHJpbmcoc3RyaW5nLnN1YnN0cmluZyhzdGFydFBv
c2l0aW9uLCBmb3VuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiksIG1fZW5jb2RpbmcpOwogICAg
ICAgICBzdGFydFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDE7CiAgICAgfQogICAgIHJldHVy
biByZXN1bHQ7CkBAIC02NjQsNCArNjY2LDE1IEBAIGJvb2wgWFNTQXVkaXRvcjo6aXNMaWtlbHlT
YWZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgcmV0dXJuIChtX2RvY3VtZW50VVJM
Lmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VVUkwucXVlcnkoKS5pc0Vt
cHR5KCkpOwogfQogCitib29sIFhTU0F1ZGl0b3I6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRVUkwuaXNTYWZlVG9TZW5kVG9Bbm90
aGVyVGhyZWFkKCkKKyAgICAgICAgJiYgbV9vcmlnaW5hbFVSTC5pc1NhZmVUb1NlbmRUb0Fub3Ro
ZXJUaHJlYWQoKQorICAgICAgICAmJiBtX29yaWdpbmFsSFRUUEJvZHkuaXNTYWZlVG9TZW5kVG9B
bm90aGVyVGhyZWFkKCkKKyAgICAgICAgJiYgbV9kZWNvZGVkVVJMLmlzU2FmZVRvU2VuZFRvQW5v
dGhlclRocmVhZCgpCisgICAgICAgICYmIG1fZGVjb2RlZEhUVFBCb2R5LmlzU2FmZVRvU2VuZFRv
QW5vdGhlclRocmVhZCgpCisgICAgICAgICYmIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQuaXNTYWZl
VG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkKKyAgICAgICAgJiYgbV9yZXBvcnRVUkwuaXNTYWZlVG9T
ZW5kVG9Bbm90aGVyVGhyZWFkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAppbmRleCA5NDk5OTc3ZWQ0MzA1ZGFkZDE0
MDJjZmZlYjcyNzlmYWM1Y2IyZWJlLi5kYzdlOTI5YTk0YmY2YmJiYTI2YzIyNzViZTRmMDQ1NWQ0
NDVmYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMu
aCIKICNpbmNsdWRlICJTdWZmaXhUcmVlLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYs
MjAgKzM3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
SFRNTERvY3VtZW50UGFyc2VyOwogY2xhc3MgSFRNTFNvdXJjZVRyYWNrZXI7Ci1jbGFzcyBUZXh0
UmVzb3VyY2VEZWNvZGVyOwogY2xhc3MgWFNTSW5mbzsKIAogc3RydWN0IEZpbHRlclRva2VuUmVx
dWVzdCB7Ci0gICAgRmlsdGVyVG9rZW5SZXF1ZXN0KEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3Vy
Y2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNv
ZGVyLCBib29sIHNob3VsZEFsbG93Q0RBVEEpCisgICAgRmlsdGVyVG9rZW5SZXF1ZXN0KEhUTUxU
b2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBib29sIHNob3Vs
ZEFsbG93Q0RBVEEpCiAgICAgICAgIDogdG9rZW4odG9rZW4pCiAgICAgICAgICwgc291cmNlVHJh
Y2tlcihzb3VyY2VUcmFja2VyKQotICAgICAgICAsIGRlY29kZXIoZGVjb2RlcikKICAgICAgICAg
LCBzaG91bGRBbGxvd0NEQVRBKHNob3VsZEFsbG93Q0RBVEEpCiAgICAgeyB9CiAKICAgICBIVE1M
VG9rZW4mIHRva2VuOwogICAgIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyOwotICAg
IGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXI7CiAgICAgYm9vbCBzaG91bGRBbGxv
d0NEQVRBOwogfTsKIApAQCAtNjAsNiArNTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXQo
RG9jdW1lbnQqKTsKICAgICBQYXNzT3duUHRyPFhTU0luZm8+IGZpbHRlclRva2VuKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFk
KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4aW11bUZy
YWdtZW50TGVuZ3RoVGFyZ2V0ID0gMTAwOwpAQCAtMTEzLDYgKzExMiw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQ7CiAgICAgdW5zaWduZWQgbV9zY3JpcHRU
YWdOZXN0aW5nTGV2ZWw7CiAgICAgS1VSTCBtX3JlcG9ydFVSTDsKKyAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKIH07CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>