<?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>155328</bug_id>
          
          <creation_ts>2016-03-10 15:02:43 -0800</creation_ts>
          <short_desc>[JSC] Add ArrayBuffer::tryCreate and change the callsites where it is needed</short_desc>
          <delta_ts>2016-03-21 08:59:30 -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>WebKit Local 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joonghun Park">jh718.park</reporter>
          <assigned_to name="Joonghun Park">jh718.park</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>roger_fong</cc>
    
    <cc>saam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1173374</commentid>
    <comment_count>0</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-10 15:02:43 -0800</bug_when>
    <thetext>Add ArrayBuffer::tryCreate in which it can return null, and it ensures that ArrayBuffer::create doesn&apos;t return null.
And change the callsites to use ArrayBuffer::tryCreate where it cares about null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175623</commentid>
    <comment_count>1</comment_count>
      <attachid>274260</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-16 20:18:48 -0700</bug_when>
    <thetext>Created attachment 274260
&lt;WIP&gt; Change callsites going to be proceeded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175974</commentid>
    <comment_count>2</comment_count>
      <attachid>274352</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-17 18:37:48 -0700</bug_when>
    <thetext>Created attachment 274352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176043</commentid>
    <comment_count>3</comment_count>
      <attachid>274375</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-17 22:58:39 -0700</bug_when>
    <thetext>Created attachment 274375
Fix build break of Win port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176073</commentid>
    <comment_count>4</comment_count>
      <attachid>274375</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-17 23:44:51 -0700</bug_when>
    <thetext>Comment on attachment 274375
Fix build break of Win port

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

Not sure why the DataCue changes are in here. They look OK, but not sure you intended to mix them in with ArrayBuffer.

Looks generally good but a lot of suggestions for improvement. In some of the tryCreate call sites, I am unclear where the code to handle null is and whether the error policy is what we want.

&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:163
&gt;      return create(numElements, elementByteSize, ArrayBufferContents::ZeroInitialize);

I suggest this instead:

    auto buffer  = tryCreate(numElements, elementByteSize);
    if (!buffer)
        CRASH();
    return buffer.releaseNonNull();

&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:178
&gt; -RefPtr&lt;ArrayBuffer&gt; ArrayBuffer::create(const void* source, unsigned byteLength)
&gt; +Ref&lt;ArrayBuffer&gt; ArrayBuffer::create(const void* source, unsigned byteLength)
&gt;  {
&gt;      ArrayBufferContents contents;
&gt;      ArrayBufferContents::tryAllocate(byteLength, 1, ArrayBufferContents::ZeroInitialize, contents);
&gt;      if (!contents.m_data)
&gt; -        return nullptr;
&gt; -    auto buffer = adoptRef(*new ArrayBuffer(contents));
&gt; -    ASSERT(!byteLength || source);
&gt; -    memcpy(buffer-&gt;data(), source, byteLength);
&gt; -    return WTFMove(buffer);
&gt; +        CRASH();
&gt; +    return ArrayBuffer::createInternal(contents, source, byteLength);
&gt;  }

I suggest this instead:

    auto buffer = tryCreate(source, byteLength);
    if (!buffer)
        CRASH();
    return buffer.releaseNonNull();

&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:212
&gt; +    return ArrayBuffer::createInternal(contents, source, byteLength);

Just &quot;createInternal&quot;, not &quot;ArrayBuffer::createInternal&quot;.

&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:232
&gt; +Ref&lt;ArrayBuffer&gt; ArrayBuffer::create(unsigned numElements, unsigned elementByteSize, ArrayBufferContents::InitializationPolicy policy)
&gt; +{
&gt; +    ArrayBufferContents contents;
&gt; +    ArrayBufferContents::tryAllocate(numElements, elementByteSize, policy, contents);
&gt; +    if (!contents.m_data)
&gt; +        CRASH();
&gt; +    return adoptRef(*new ArrayBuffer(contents));
&gt; +}

I suggest not adding this function, or making it a cover that calls through to tryCreate as above.

&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:237
&gt; +    ASSERT(!byteLength || source);

I’d put the assertion on the first line of the function. Why not validate the arguments *before* doing anything else? Cleaner.

&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:100
&gt; +            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));

Is passing nullptr to resolve() the behavior we want when out of memory?

&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:177
&gt; +        promise.resolve&lt;RefPtr&lt;ArrayBuffer&gt;&gt;(ArrayBuffer::tryCreate(data.data(), data.size()));

Same question again.

&gt; Source/WebCore/Modules/fetch/FetchLoader.cpp:103
&gt; +        m_client.didFinishLoadingAsArrayBuffer(m_data ? m_data-&gt;createArrayBuffer() : ArrayBuffer::tryCreate(nullptr, 0));

Seems clear this should be create, not tryCreate. Is it really OK to pass a nullptr for the array buffer?

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:176
&gt; +    auto buffer = ArrayBuffer::tryCreate(result.data(), result.size());

Is passing nullptr to resolve() the behavior we want when out of memory?

&gt; Source/WebCore/fileapi/FileReaderLoader.cpp:280
&gt; +    return ArrayBuffer::create(*m_rawData.get());

No need for &quot;.get()&quot; here, just *m_rawData should do.

&gt; Source/WebCore/html/track/DataCue.cpp:88
&gt; +    return ArrayBuffer::create(*m_data.get());

No need for .get() here, just *m_data should do.

&gt; Source/WebCore/html/track/DataCue.h:82
&gt; +    const RefPtr&lt;SerializedPlatformRepresentation&gt; platformValue() const { return m_platformValue; }

This is the wrong return type. It should be SerializedPlatformRepresentation* because we are not transferring ownership.

&gt; Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm:147
&gt; +    auto dataArray = ArrayBuffer::tryCreate([data bytes], [data length]);

I think this should be create, not tryCreate.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:264
&gt; +            m_responseArrayBuffer = ArrayBuffer::tryCreate(nullptr, 0);

This should be create, not tryCreate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176110</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-18 01:18:01 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.cpp:100
&gt; &gt; +            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));
&gt; 
&gt; Is passing nullptr to resolve() the behavior we want when out of memory?

I think we  want to reject the promise, but this would be a change of behavior.
The current code is keeping the status quo and the behavior should be changed in bug 154849.
I am not sure how we can actually test that though.

&gt; &gt; Source/WebCore/Modules/fetch/FetchBody.cpp:177
&gt; &gt; +        promise.resolve&lt;RefPtr&lt;ArrayBuffer&gt;&gt;(ArrayBuffer::tryCreate(data.data(), data.size()));
&gt; 
&gt; Same question again.

Ditto.

&gt; &gt; Source/WebCore/Modules/fetch/FetchLoader.cpp:103
&gt; &gt; +        m_client.didFinishLoadingAsArrayBuffer(m_data ? m_data-&gt;createArrayBuffer() : ArrayBuffer::tryCreate(nullptr, 0));
&gt; 
&gt; Seems clear this should be create, not tryCreate. Is it really OK to pass a
&gt; nullptr for the array buffer?
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMPromise.h:176
&gt; &gt; +    auto buffer = ArrayBuffer::tryCreate(result.data(), result.size());

I would tend to keep calling tryCreate and making the loader fail if buffer is null.
That way, fetch would just reject the promise if any.
This can probably be handled here or in bug 154849.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176186</commentid>
    <comment_count>6</comment_count>
      <attachid>274421</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-18 09:34:19 -0700</bug_when>
    <thetext>Created attachment 274421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176188</commentid>
    <comment_count>7</comment_count>
      <attachid>274375</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-18 09:35:18 -0700</bug_when>
    <thetext>Comment on attachment 274375
Fix build break of Win port

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

Darin, Could you take a look at this change again? I think it still needs to be went over, though this patch got r+ previously.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:163
&gt;&gt;      return create(numElements, elementByteSize, ArrayBufferContents::ZeroInitialize);
&gt; 
&gt; I suggest this instead:
&gt; 
&gt;     auto buffer  = tryCreate(numElements, elementByteSize);
&gt;     if (!buffer)
&gt;         CRASH();
&gt;     return buffer.releaseNonNull();

Ok, I changed this one as commented.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:178
&gt;&gt;  }
&gt; 
&gt; I suggest this instead:
&gt; 
&gt;     auto buffer = tryCreate(source, byteLength);
&gt;     if (!buffer)
&gt;         CRASH();
&gt;     return buffer.releaseNonNull();

Ok, done.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:212
&gt;&gt; +    return ArrayBuffer::createInternal(contents, source, byteLength);
&gt; 
&gt; Just &quot;createInternal&quot;, not &quot;ArrayBuffer::createInternal&quot;.

Ok, I removed this redundant namespace.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:232
&gt;&gt; +}
&gt; 
&gt; I suggest not adding this function, or making it a cover that calls through to tryCreate as above.

I made this to call through to tryCreate as you commented.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayBuffer.h:237
&gt;&gt; +    ASSERT(!byteLength || source);
&gt; 
&gt; I’d put the assertion on the first line of the function. Why not validate the arguments *before* doing anything else? Cleaner.

I moved this ASSERT statement to the first line of the function as you said.

&gt;&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:100
&gt;&gt; +            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));
&gt; 
&gt; Is passing nullptr to resolve() the behavior we want when out of memory?

I thought that &quot;if (!buffer) return JSC::jsNull();&quot; statement in &quot;inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, JSC::ArrayBuffer* buffer)&quot; function handles null case,
so by calling ArrayBuffer::tryCreate it keeps the status quo. 

But if it&apos;s not right, then maybe I can change this part as to &quot;promise.resolve(ArrayBuffer::create(nullptr, 0).ptr());&quot;.
In addition, it seems that Youenn has a plan to change the behaviour to reject the promise in https://bugs.webkit.org/show_bug.cgi?id=154849, after this patch.

&gt;&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:177
&gt;&gt; +        promise.resolve&lt;RefPtr&lt;ArrayBuffer&gt;&gt;(ArrayBuffer::tryCreate(data.data(), data.size()));
&gt; 
&gt; Same question again.

ditto.

&gt;&gt; Source/WebCore/Modules/fetch/FetchLoader.cpp:103
&gt;&gt; +        m_client.didFinishLoadingAsArrayBuffer(m_data ? m_data-&gt;createArrayBuffer() : ArrayBuffer::tryCreate(nullptr, 0));
&gt; 
&gt; Seems clear this should be create, not tryCreate. Is it really OK to pass a nullptr for the array buffer?

ditto.

&gt;&gt; Source/WebCore/bindings/js/JSDOMPromise.h:176
&gt;&gt; +    auto buffer = ArrayBuffer::tryCreate(result.data(), result.size());
&gt; 
&gt; Is passing nullptr to resolve() the behavior we want when out of memory?

ditto.

&gt;&gt; Source/WebCore/fileapi/FileReaderLoader.cpp:280
&gt;&gt; +    return ArrayBuffer::create(*m_rawData.get());
&gt; 
&gt; No need for &quot;.get()&quot; here, just *m_rawData should do.

Done.

&gt;&gt; Source/WebCore/html/track/DataCue.cpp:88
&gt;&gt; +    return ArrayBuffer::create(*m_data.get());
&gt; 
&gt; No need for .get() here, just *m_data should do.

Done.

&gt;&gt; Source/WebCore/html/track/DataCue.h:82
&gt;&gt; +    const RefPtr&lt;SerializedPlatformRepresentation&gt; platformValue() const { return m_platformValue; }
&gt; 
&gt; This is the wrong return type. It should be SerializedPlatformRepresentation* because we are not transferring ownership.

Ok, I changed this to return raw pointer.

&gt;&gt; Source/WebCore/platform/mac/SerializedPlatformRepresentationMac.mm:147
&gt;&gt; +    auto dataArray = ArrayBuffer::tryCreate([data bytes], [data length]);
&gt; 
&gt; I think this should be create, not tryCreate.

I thought that &quot;if (!buffer) return JSC::jsNull();&quot; statement in &quot;inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, JSC::ArrayBuffer* buffer)&quot; function handles null case,
so by calling ArrayBuffer::tryCreate it keeps the status quo. 

But if it&apos;s not right, then maybe I can change this part as to &quot;promise.resolve(ArrayBuffer::create(nullptr, 0).ptr());&quot;.
In addition, it seems that Youenn has a plan to change the behaviour to reject the promise in https://bugs.webkit.org/show_bug.cgi?id=154849, after this patch.

&gt;&gt; Source/WebCore/xml/XMLHttpRequest.cpp:264
&gt;&gt; +            m_responseArrayBuffer = ArrayBuffer::tryCreate(nullptr, 0);
&gt; 
&gt; This should be create, not tryCreate.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176190</commentid>
    <comment_count>8</comment_count>
      <attachid>274375</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-18 09:40:55 -0700</bug_when>
    <thetext>Comment on attachment 274375
Fix build break of Win port

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

&gt;&gt;&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:100
&gt;&gt;&gt; +            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));
&gt;&gt; 
&gt;&gt; Is passing nullptr to resolve() the behavior we want when out of memory?
&gt; 
&gt; I thought that &quot;if (!buffer) return JSC::jsNull();&quot; statement in &quot;inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, JSC::ArrayBuffer* buffer)&quot; function handles null case,
&gt; so by calling ArrayBuffer::tryCreate it keeps the status quo. 
&gt; 
&gt; But if it&apos;s not right, then maybe I can change this part as to &quot;promise.resolve(ArrayBuffer::create(nullptr, 0).ptr());&quot;.
&gt; In addition, it seems that Youenn has a plan to change the behaviour to reject the promise in https://bugs.webkit.org/show_bug.cgi?id=154849, after this patch.

I agree with both of your points:

1) The code converts a nullptr into a JavaScript null.
2) Your patch does not change WebKit behavior.

But my question, for someone else I think, is whether this behavior is acceptable. Is it desirable to just send a null to the JavaScript when there is insufficient memory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176724</commentid>
    <comment_count>9</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-21 07:09:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 274375 [details]
&gt; Fix build break of Win port
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274375&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/fetch/FetchBody.cpp:100
&gt; &gt;&gt;&gt; +            promise.resolve(ArrayBuffer::tryCreate(nullptr, 0));
&gt; &gt;&gt; 
&gt; &gt;&gt; Is passing nullptr to resolve() the behavior we want when out of memory?
&gt; &gt; 
&gt; &gt; I thought that &quot;if (!buffer) return JSC::jsNull();&quot; statement in &quot;inline JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, JSC::ArrayBuffer* buffer)&quot; function handles null case,
&gt; &gt; so by calling ArrayBuffer::tryCreate it keeps the status quo. 
&gt; &gt; 
&gt; &gt; But if it&apos;s not right, then maybe I can change this part as to &quot;promise.resolve(ArrayBuffer::create(nullptr, 0).ptr());&quot;.
&gt; &gt; In addition, it seems that Youenn has a plan to change the behaviour to reject the promise in https://bugs.webkit.org/show_bug.cgi?id=154849, after this patch.
&gt; 
&gt; I agree with both of your points:
&gt; 
&gt; 1) The code converts a nullptr into a JavaScript null.
&gt; 2) Your patch does not change WebKit behavior.
&gt; 
&gt; But my question, for someone else I think, is whether this behavior is
&gt; acceptable. Is it desirable to just send a null to the JavaScript when there
&gt; is insufficient memory?

Maybe it is fine to land this change because it keeps status quo anyway, after that we can handle your question as separate bug, I think. To do that, I will rebase this patch .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176727</commentid>
    <comment_count>10</comment_count>
      <attachid>274591</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-21 07:16:26 -0700</bug_when>
    <thetext>Created attachment 274591
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176728</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-21 07:19:22 -0700</bug_when>
    <thetext>
&gt; &gt; But my question, for someone else I think, is whether this behavior is
&gt; &gt; acceptable. Is it desirable to just send a null to the JavaScript when there
&gt; &gt; is insufficient memory?
&gt; 
&gt; Maybe it is fine to land this change because it keeps status quo anyway,
&gt; after that we can handle your question as separate bug, I think. To do that,
&gt; I will rebase this patch .

Sounds good to me, landing this patch will help tackling the question Darin asked.

As of the particular question, we may consider that ArrayBuffer::create returning null is similar to throwing a JS exception.
Following the error handling of the specs, that could be translated to rejecting a promise, erroring a readable stream...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176748</commentid>
    <comment_count>12</comment_count>
      <attachid>274591</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-21 08:59:24 -0700</bug_when>
    <thetext>Comment on attachment 274591
Patch for landing

Clearing flags on attachment: 274591

Committed r198488: &lt;http://trac.webkit.org/changeset/198488&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176749</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-21 08:59:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274260</attachid>
            <date>2016-03-16 20:18:48 -0700</date>
            <delta_ts>2016-03-17 18:37:41 -0700</delta_ts>
            <desc>&lt;WIP&gt; Change callsites going to be proceeded</desc>
            <filename>bug-155328-20160317121747.patch</filename>
            <type>text/plain</type>
            <size>17942</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZDU1OWNkMjA2MWJhMzFmNTM4ZTgzNmQzMTEyODk4MDk2NmMxMTFhLi42MWRjM2M2NTM3MWQ1YTZm
N2IzZGFhOWM4ZDJiYTBhYmMyN2QwODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNi0wMy0xNiAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNo
YW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVJbnRlcm5hbCk6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6
CisKIDIwMTYtMDMtMTUgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0pTQ10gUmVtb3ZlIGhpbnQgZnJvbSBTbG93Q2FzZUVudHJ5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYjcxNTdhY2YyMTg0YjAyMmRkM2ZlZGQ5ZDNjMTZkODgyMDQ0MWQxMi4uNDM1Yzc0MjY0M2Zi
MDljMGZhZGFmZDFkZDg1NWU2Y2ZkMWZjZmIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBA
CisyMDE2LTAzLTE2ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbSlNDXSBBZGQgQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZSBhbmQgY2hhbmdlIHRoZSBj
YWxsc2l0ZXMgd2hlcmUgaXQgaXMgbmVlZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUzMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvdXJzLgorCisg
ICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmV0Y2hCb2R5Ojpwcm9jZXNzSWZFbXB0eU9yRGlzdHVyYmVkKToKKyAgICAgICAgKiBkb20vTWVz
c2FnZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2
ZW50KToKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50Lmg6CisgICAgICAgICogZmlsZWFwaS9G
aWxlUmVhZGVyTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJMb2FkZXI6
OmFycmF5QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKiBodG1sL3RyYWNrL0RhdGFDdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YUN1ZTo6RGF0YUN1ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhQ3VlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFDdWU6OnNldERhdGEpOgorICAg
ICAgICAqIGh0bWwvdHJhY2svRGF0YUN1ZS5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5k
RGF0YVRleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNr
OjphZGREYXRhQ3VlKToKKwogMjAxNi0wMy0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTk1NjYxKTogW0dUS10gdmVy
eSBzbG93IHNjcm9sbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyLmgKaW5kZXggYjNkN2VjNmM1MmZhODkyMjliZjI0OWRkNTk0YTlhYTZjOTFkZTY4NS4uMjM0
OGRkODcyMDBmZjhiYmExZDUxMzNkMDE1MTlmZjM1NDZmZjQ0YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCkBAIC05NywxNSArOTcsMTkgQEAgcHJpdmF0
ZToKIAogY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJy
YXlCdWZmZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUp
OwotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZm
ZXIqKTsKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgc3RhdGljIGlubGluZSBS
ZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxl
bWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRl
KEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0
ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBp
bmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAg
IHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5
QnVmZmVyPiBjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxl
bmd0aCwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CisgICAgc3RhdGljIGlubGlu
ZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5z
aWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gdHJ5Q3JlYXRlKEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGluZSBSZWZQdHI8
QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpOwogCiAgICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkIGFuZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZUFycmF5QnVmZmVyLgotICAg
IHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIHN0YXRp
YyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIHN0YXRpYyBpbmxpbmUg
UmVmUHRyPEFycmF5QnVmZmVyPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVs
ZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogCiAgICAgaW5saW5lIHZvaWQqIGRh
dGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwpAQCAtMTI4LDggKzEz
Miw5IEBAIHB1YmxpYzoKICAgICB+QXJyYXlCdWZmZXIoKSB7IH0KIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1l
bnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRp
YWxpemF0aW9uUG9saWN5KTsKLQorICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBj
cmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJy
YXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworICAgIHN0YXRpYyBpbmxp
bmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVJbnRlcm5hbChBcnJheUJ1ZmZlckNvbnRlbnRzJiwg
Y29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gdHJ5Q3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0
ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKICAgICBp
bmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGlubGluZSBSZWZQ
dHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBj
b25zdDsKICAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwpA
QCAtMTUzLDI2ICsxNTgsMjMgQEAgaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KQogICAgIHJldHVybiB4OwogfQogCi1SZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVy
biBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50
czo6WmVyb0luaXRpYWxpemUpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVyKQorUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKEFycmF5QnVmZmVyJiBvdGhlcikKIHsKLSAgICByZXR1cm4gQXJyYXlCdWZmZXI6
OmNyZWF0ZShvdGhlci0+ZGF0YSgpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICByZXR1cm4g
QXJyYXlCdWZmZXI6OmNyZWF0ZShvdGhlci5kYXRhKCksIG90aGVyLmJ5dGVMZW5ndGgoKSk7CiB9
CiAKLVJlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShjb25zdCB2b2lkKiBz
b3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogewogICAg
IEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRp
YWxpemUsIGNvbnRlbnRzKTsKICAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byBidWZmZXIgPSBhZG9wdFJlZigqbmV3IEFycmF5QnVmZmVy
KGNvbnRlbnRzKSk7Ci0gICAgQVNTRVJUKCFieXRlTGVuZ3RoIHx8IHNvdXJjZSk7Ci0gICAgbWVt
Y3B5KGJ1ZmZlci0+ZGF0YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwotICAgIHJldHVybiBXVEZN
b3ZlKGJ1ZmZlcik7CisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpj
cmVhdGVJbnRlcm5hbChjb250ZW50cywgc291cmNlLCBieXRlTGVuZ3RoKTsKIH0KIAogUmVmPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRl
bnRzKQpAQCAtMTkxLDEyICsxOTMsNTMgQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6
Y3JlYXRlRnJvbUJ5dGVzKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW4KICAgICBy
ZXR1cm4gY3JlYXRlKGNvbnRlbnRzKTsKIH0KIAotUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplKQorUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3Jl
YXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCit7Cisg
ICAgcmV0dXJuIHRyeUNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisKK1JlZlB0cjxBcnJheUJ1ZmZlcj4g
QXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShBcnJheUJ1ZmZlciYgb3RoZXIpCit7CisgICAgcmV0dXJu
IHRyeUNyZWF0ZShvdGhlci5kYXRhKCksIG90aGVyLmJ5dGVMZW5ndGgoKSk7Cit9CisKK1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2Us
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50
czsKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShieXRlTGVuZ3RoLCAxLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSwgY29udGVudHMpOworICAgIGlmICgh
Y29udGVudHMubV9kYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKGNvbnRlbnRzLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwor
fQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjpEb250SW5pdGlhbGl6ZSk7CiB9CiAKLVJlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
LCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3kpCitSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJu
IHRyeUNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6
OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3kpCit7CisgICAg
QXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBwb2xpY3ksIGNvbnRlbnRz
KTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOworfQorCitSZWY8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVJbnRlcm5hbChBcnJheUJ1ZmZlckNvbnRlbnRzJiBj
b250ZW50cywgY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAg
IGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOworICAg
IEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3VyY2UpOworICAgIG1lbWNweShidWZmZXItPmRhdGEo
KSwgc291cmNlLCBieXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMs
IHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6
YXRpb25Qb2xpY3kgcG9saWN5KQogewogICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7
CiAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1l
bnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKaW5k
ZXggMjUzNzI2OTY1YTY2Mjc0MWZjY2YwZmE2MmYwZTFiMjQwMGVkZDhlNy4uYjAyYWRlODg2ZjA3
OWFlMGU5Zjk3NzYyNTlkZjlmMTMxYjAyZjNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaApA
QCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Pgog
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICAg
IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZl
ci5yZWxlYXNlKCksIDAsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoQm9keS5jcHAKaW5kZXggMWVmYTE5N2MzNjZiNmM3NWIwOTgwMzRhOTgzNTVhMTUxMzk3MmJj
Yy4uNTI1NDJhOTYyODgzMDE3MTEyY2VkMzRhMTdiODQ3M2I1MWRmZGFkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcApAQCAtOTgsNyArOTgsNyBAQCBib29s
IEZldGNoQm9keTo6cHJvY2Vzc0lmRW1wdHlPckRpc3R1cmJlZChDb25zdW1lcjo6VHlwZSB0eXBl
LCBEZWZlcnJlZFdyYXBwZXImCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdDxFeGNlcHRpb25D
b2RlPihTWU5UQVhfRVJSKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNl
IENvbnN1bWVyOjpUeXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHByb21pc2UucmVzb2x2
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgIHByb21pc2Uu
cmVzb2x2ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG51bGxwdHIsIDApKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCmluZGV4IGRlNDA4NGZkYmMz
ZjcxOTZjYjczZmI1YmI2ZWQxOWFlZTQzYzQzMmQuLjZhYmM4NmNkMGRlMzVlYjI1YWE3ZDJkZDcw
NmFjYTQyZGU3ZGQ0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCkBAIC0xMDIs
NyArMTAyLDcgQEAgTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoUGFzc1JlZlB0cjxCbG9iPiBk
YXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKIHsKIH0KIAotTWVzc2FnZUV2ZW50OjpNZXNzYWdl
RXZlbnQoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQor
TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoUmVmPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0
IFN0cmluZyYgb3JpZ2luKQogICAgIDogRXZlbnQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwg
ZmFsc2UsIGZhbHNlKQogICAgICwgbV9kYXRhVHlwZShEYXRhVHlwZUFycmF5QnVmZmVyKQogICAg
ICwgbV9kYXRhQXNBcnJheUJ1ZmZlcihXVEZNb3ZlKGRhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VF
dmVudC5oCmluZGV4IGM4ODgxNDg2ZmE3YzIzNjBiZWZlOGIwMTNmYzI1NmZjY2MyMjFkZmIuLjA2
OGNiOGU0ZWFiODNhNTRlN2FlZGUyZGU2MzdhYTFlOTdjYzk3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVzc2FnZUV2ZW50KGRhdGEsIG9yaWdpbikpOwogICAgIH0KLSAg
ICBzdGF0aWMgUmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRlKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBk
YXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiA9IFN0cmluZygpKQorICAgIHN0YXRpYyBSZWY8TWVz
c2FnZUV2ZW50PiBjcmVhdGUoUmVmPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYg
b3JpZ2luID0gU3RyaW5nKCkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZXNzYWdlRXZlbnQoV1RGTW92ZShkYXRhKSwgb3JpZ2luKSk7CiAgICAgfQpAQCAtMTI3LDcgKzEy
Nyw3IEBAIHByaXZhdGU6CiAKICAgICBleHBsaWNpdCBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5n
JiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbik7CiAgICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50
KFBhc3NSZWZQdHI8QmxvYj4gZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIGV4cGxp
Y2l0IE1lc3NhZ2VFdmVudChSZWZQdHI8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29uc3QgU3RyaW5n
JiBvcmlnaW4pOworICAgIGV4cGxpY2l0IE1lc3NhZ2VFdmVudChSZWY8QXJyYXlCdWZmZXI+JiYg
ZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwogCiAgICAgRGF0YVR5cGUgbV9kYXRhVHlwZTsK
ICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RhdGFBc1NjcmlwdFZhbHVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKaW5kZXggYTgwYTJhYjEyZTA3
NDE4MWEwZGJkNTBhZmQ5NmNkNmQ4ZmI5MTA4Zi4uZDUyNTI2NzZlZGYzYTE5MWVhZjcyYTdhODcy
MDEwZGFiODgwOTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXIuY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVy
TG9hZGVyOjphcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX3Jhd0Rh
dGE7CiAKICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIGNvcHkuCi0gICAgcmV0dXJuIEFycmF5
QnVmZmVyOjpjcmVhdGUobV9yYXdEYXRhLmdldCgpKTsKKyAgICByZXR1cm4gQXJyYXlCdWZmZXI6
OmNyZWF0ZSgqbV9yYXdEYXRhLmdldCgpKTsKIH0KIAogU3RyaW5nIEZpbGVSZWFkZXJMb2FkZXI6
OnN0cmluZ1Jlc3VsdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0Rh
dGFDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmNwcAppbmRleCAy
ZjQ4MDRhZDExMmMwMmFjODllNjJhYWYzODY1YWRlYzJhMWZlMWMyLi45ZDdmNzE0NWJmNTM0OGI2
MjRkMmJiNWZjYTRhYjg1YzFkYTYzMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0RhdGFDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1
ZS5jcHAKQEAgLTUwLDEwICs1MCwxMCBAQCBEYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0CiB9CiAKICNp
ZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLURhdGFDdWU6OkRhdGFDdWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1l
JiBlbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IHBsYXRm
b3JtVmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK0RhdGFDdWU6OkRhdGFDdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4mJiBw
bGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgOiBUZXh0VHJhY2tDdWUoY29u
dGV4dCwgc3RhcnQsIGVuZCkKICAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9wbGF0Zm9ybVZh
bHVlKHBsYXRmb3JtVmFsdWUpCisgICAgLCBtX3BsYXRmb3JtVmFsdWUoV1RGTW92ZShwbGF0Zm9y
bVZhbHVlKSkKIHsKIH0KIApAQCAtNzMsNyArNzMsNyBAQCBEYXRhQ3VlOjp+RGF0YUN1ZSgpCiAj
ZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gRGF0YUN1ZTo6ZGF0YSgpIGNvbnN0
CitSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFDdWU6OmRhdGEoKSBjb25zdAogewogI2lmIEVOQUJM
RShEQVRBQ1VFX1ZBTFVFKQogICAgIGlmIChtX3BsYXRmb3JtVmFsdWUpCkBAIC04Myw3ICs4Myw3
IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFDdWU6OmRhdGEoKSBjb25zdAogICAgIGlm
ICghbV9kYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKG1fZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVh
dGUoKm1fZGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgRGF0YUN1ZTo6c2V0RGF0YShBcnJheUJ1ZmZl
ciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0YUN1
ZTo6c2V0RGF0YShBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV92
YWx1ZSA9IEpTQzo6SlNWYWx1ZSgpOwogI2VuZGlmCiAKLSAgICBtX2RhdGEgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGRhdGEpOworICAgIG1fZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoKmRhdGEp
OwogfQogCiBEYXRhQ3VlKiB0b0RhdGFDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svRGF0YUN1ZS5oCmluZGV4IDIwMDc5NGRiNWI4ZTQ2ZDJkZjI5MDQwZDQ0MGRlMTM2
OThlZjMzOTUuLjdkZjIzNmE0Y2I4ZGI5YzUzYWM4ZGM3OGEyNWI0NDAwZjhlMjI4MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5oCkBAIC02MSw5ICs2MSw5IEBAIHB1YmxpYzoKICAg
ICB9CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLSAgICBzdGF0aWMgUmVmPERhdGFDdWU+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUm
IHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkUGxhdGZv
cm1SZXByZXNlbnRhdGlvbj4gcGxhdGZvcm1WYWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAg
IHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWZQdHI8
U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+JiYgcGxhdGZvcm1WYWx1ZSwgY29uc3Qg
U3RyaW5nJiB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1
ZShjb250ZXh0LCBzdGFydCwgZW5kLCBwbGF0Zm9ybVZhbHVlLCB0eXBlKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERhdGFDdWUoY29udGV4dCwgc3RhcnQsIGVuZCwgV1RGTW92ZShw
bGF0Zm9ybVZhbHVlKSwgdHlwZSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0IFN0
cmluZyYgdHlwZSkKQEAgLTc1LDExICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0
YUN1ZSgpOwogICAgIEN1ZVR5cGUgY3VlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIERh
dGE7IH0KIAotICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGRhdGEoKSBjb25zdDsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IGRhdGEoKSBjb25zdDsKICAgICB2b2lkIHNldERhdGEoQXJyYXlC
dWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLSAg
ICBjb25zdCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0
Zm9ybVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVZhbHVlOyB9CisgICAgY29uc3Qg
UmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9ybVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVZhbHVlOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdmFs
dWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlKTsKQEAgLTk2LDcgKzk2LDcgQEAgcHJvdGVjdGVkOgogICAgIERh
dGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kLCBBcnJheUJ1ZmZlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRp
YVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qgdm9pZCosIHVuc2lnbmVk
KTsKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLSAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4sIGNvbnN0IFN0cmlu
ZyYpOworICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3Jt
UmVwcmVzZW50YXRpb24+JiYsIGNvbnN0IFN0cmluZyYpOwogICAgIERhdGFDdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCmluZGV4IDk1YzAz
MDI2ZTkwZDVlMWIyMThhYjE5MWYxNzhjZjA0MzU3MGYzZjEuLjI0MGQ2NjY0NTkyZjQwYjE3ODdm
YzFiNjE5NGQwNTU2MmVkYjY1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcApAQCAtNjUsMTggKzY1LDE4IEBAIHZvaWQgSW5iYW5k
RGF0YVRleHRUcmFjazo6YWRkRGF0YUN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgY29uc3Qg
TWVkaWFUaW1lJiBzCiAgICAgaWYgKG1faW5jb21wbGV0ZUN1ZU1hcC5maW5kKHBsYXRmb3JtVmFs
dWUuZ2V0KCkpICE9IG1faW5jb21wbGV0ZUN1ZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPERhdGFDdWU+IGN1ZSA9IERhdGFDdWU6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBzdGFydCwgZW5kLCBwbGF0Zm9ybVZhbHVlLCB0eXBlKTsKLSAgICBpZiAo
aGFzQ3VlKGN1ZS5nZXQoKSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJhdGlvbikpIHsKKyAgICBh
dXRvIGN1ZSA9IERhdGFDdWU6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzdGFy
dCwgZW5kLCBwbGF0Zm9ybVZhbHVlLmNvcHlSZWYoKSwgdHlwZSk7CisgICAgaWYgKGhhc0N1ZShj
dWUucHRyKCksIFRleHRUcmFja0N1ZTo6SWdub3JlRHVyYXRpb24pKSB7CiAgICAgICAgIExPRyhN
ZWRpYSwgIkluYmFuZERhdGFUZXh0VHJhY2s6OmFkZERhdGFDdWUgaWdub3JpbmcgYWxyZWFkeSBh
ZGRlZCBjdWU6IHN0YXJ0PSVzLCBlbmQ9JXNcbiIsIHRvU3RyaW5nKGN1ZS0+c3RhcnRUaW1lKCkp
LnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGN1ZS0+ZW5kVGltZSgpKS51dGY4KCkuZGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChlbmQuaXNQb3NpdGl2ZUluZmluaXRl
KCkgJiYgbWVkaWFFbGVtZW50KCkpIHsKICAgICAgICAgY3VlLT5zZXRFbmRUaW1lKG1lZGlhRWxl
bWVudCgpLT5kdXJhdGlvbk1lZGlhVGltZSgpKTsKLSAgICAgICAgbV9pbmNvbXBsZXRlQ3VlTWFw
LmFkZChwbGF0Zm9ybVZhbHVlLCBjdWUpOworICAgICAgICBtX2luY29tcGxldGVDdWVNYXAuYWRk
KFdURk1vdmUocGxhdGZvcm1WYWx1ZSksIGN1ZS5jb3B5UmVmKCkpOwogICAgIH0KIAotICAgIGFk
ZEN1ZShjdWUucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBhZGRDdWUoV1RG
TW92ZShjdWUpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIH0KIAogdm9pZCBJbmJhbmREYXRhVGV4
dFRyYWNrOjp1cGRhdGVEYXRhQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBNZWRp
YVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGluRW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwcnBQbGF0Zm9ybVZhbHVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274352</attachid>
            <date>2016-03-17 18:37:48 -0700</date>
            <delta_ts>2016-03-17 22:58:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155328-20160318103715.patch</filename>
            <type>text/plain</type>
            <size>28576</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZDU1OWNkMjA2MWJhMzFmNTM4ZTgzNmQzMTEyODk4MDk2NmMxMTFhLi5mNGRmOTc2YjcxMWVhNzE0
ZjM1Y2QwNjQ2ZjA0ZWQzM2IyMTQxOThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wMy0xNyAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNo
YW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNUeXBlZEFycmF5LmNwcDoKKyAg
ICAgICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlQXJy
YXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFy
cmF5QnVmZmVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRl
VW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgorCiAyMDE2LTAzLTE1ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBo
aW50IGZyb20gU2xvd0Nhc2VFbnRyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI3MTU3YWNmMjE4NGIwMjJkZDNm
ZWRkOWQzYzE2ZDg4MjA0NDFkMTIuLjVjNDM0MDM0NzZhMTYxMWZmOGFjYjUzYWJmZDk5YjdlOGQ4
YTZlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxNi0wMy0xNyAgSm9vbmdodW4g
UGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5
QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNoYW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5l
ZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyBuZXcgYmVoYXZpb3Vycy4KKworICAgICAgICAqIE1vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6cHJvY2Vzc0lmRW1w
dHlPckRpc3R1cmJlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNvbnN1bWVUZXh0
KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZldGNoTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXI+Pik6CisgICAgICAg
ICogZG9tL01lc3NhZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6
Ok1lc3NhZ2VFdmVudCk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5oOgorICAgICAgICAq
IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRl
ckxvYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZm
ZXJEYXRhSW1wbCk6CisgICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFDdWU6OkRhdGFDdWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUN1ZTo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpzZXREYXRhKToKKyAgICAgICAgKiBo
dG1sL3RyYWNrL0RhdGFDdWUuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZERhdGFUZXh0
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kRGF0YVRleHRUcmFjazo6YWRkRGF0
YUN1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFWRldy
YXBwZXI6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
QXJyYXlCdWZmZXIpOgorCiAyMDE2LTAzLTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxOTU2NjEpOiBbR1RLXSB2ZXJ5
IHNsb3cgc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VHlwZWRBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVHlwZWRBcnJheS5j
cHAKaW5kZXggMmZlYTkzZmQ1ZWU3ODI2Y2UxODQxOTcxMmUwMTdmMzU3NTJmOGJmOC4uMjYyOWFj
OTQ3MjYwNTU4N2ZjYTE1MzhlYjA3NjZjZDk2ODgzZWMyNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNUeXBlZEFycmF5LmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIEpTT2JqZWN0UmVm
IEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkoSlNDb250ZXh0UmVmIGN0eCwgSlNUeXBlZEFycmF5VHlw
ZSBhcnJheVR5cGUsCiAKICAgICB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUgPSBlbGVtZW50U2l6
ZSh0b1R5cGVkQXJyYXlUeXBlKGFycmF5VHlwZSkpOwogCi0gICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgZWxlbWVudEJ5dGVTaXplKTsK
KyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLCBlbGVtZW50
Qnl0ZVNpemUpOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjcmVhdGVUeXBlZEFycmF5KGV4ZWMs
IGFycmF5VHlwZSwgV1RGTW92ZShidWZmZXIpLCAwLCBsZW5ndGgpOwogICAgIGlmIChoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlk
VGhyb3cpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjkyLDcgKzI5Miw3IEBAIEpTT2Jq
ZWN0UmVmIEpTT2JqZWN0TWFrZUFycmF5QnVmZmVyV2l0aEJ5dGVzTm9Db3B5KEpTQ29udGV4dFJl
ZiBjdHgsIHZvaWQqIGJ5dGVzCiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CiAKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMoYnl0ZXMsIGJ5dGVMZW5ndGgsIFs9
XSh2b2lkKiBwKSB7CisgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5
dGVzKGJ5dGVzLCBieXRlTGVuZ3RoLCBbPV0odm9pZCogcCkgewogICAgICAgICBpZiAoYnl0ZXNE
ZWFsbG9jYXRvcikKICAgICAgICAgICAgIGJ5dGVzRGVhbGxvY2F0b3IocCwgZGVhbGxvY2F0b3JD
b250ZXh0KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5oCmluZGV4IGIzZDdlYzZjNTJmYTg5MjI5YmYyNDlkZDU5NGE5YWE2YzkxZGU2ODUuLjIz
NDhkZDg3MjAwZmY4YmJhMWQ1MTMzZDAxNTE5ZmYzNTQ2ZmY0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaApAQCAtOTcsMTUgKzk3LDE5IEBAIHByaXZh
dGU6CiAKIGNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFy
cmF5QnVmZmVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7Ci0gICAgc3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25z
dCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIHN0YXRpYyBpbmxpbmUg
UmVmPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0
ZShBcnJheUJ1ZmZlciYpOworICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVh
dGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKICAgICBzdGF0aWMg
aW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAg
ICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lk
KiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKICAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJh
eUJ1ZmZlcj4gY3JlYXRlRnJvbUJ5dGVzKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1bmN0aW9uJiYpOworICAgIHN0YXRpYyBpbmxp
bmUgUmVmUHRyPEFycmF5QnVmZmVyPiB0cnlDcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlC
dWZmZXI+IHRyeUNyZWF0ZShBcnJheUJ1ZmZlciYpOworICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PEFycmF5QnVmZmVyPiB0cnlDcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCBhbmQgU2hhcmVkQnVmZmVyOjpjcmVhdGVBcnJheUJ1ZmZlci4KLSAg
ICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0
aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBu
dW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5l
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKIAogICAgIGlubGluZSB2b2lkKiBk
YXRhKCk7CiAgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsKQEAgLTEyOCw4ICsx
MzIsOSBAQCBwdWJsaWM6CiAgICAgfkFycmF5QnVmZmVyKCkgeyB9CiAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0
aWFsaXphdGlvblBvbGljeSk7Ci0KKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFy
cmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKKyAgICBzdGF0aWMgaW5s
aW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRlSW50ZXJuYWwoQXJyYXlCdWZmZXJDb250ZW50cyYs
IGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CisgICAgc3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlC
dWZmZXI+IHRyeUNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSk7CiAgICAg
aW5saW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBpbmxpbmUgUmVm
UHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkg
Y29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsK
QEAgLTE1MywyNiArMTU4LDIzIEBAIGludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKICAgICByZXR1cm4geDsKIH0KIAotUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1
cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVu
dHM6Olplcm9Jbml0aWFsaXplKTsKIH0KIAotUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciYgb3RoZXIpCiB7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVy
OjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgcmV0dXJu
IEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXIuZGF0YSgpLCBvdGhlci5ieXRlTGVuZ3RoKCkpOwog
fQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKICAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwogICAgIEFycmF5QnVmZmVyQ29udGVudHM6
OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0
aWFsaXplLCBjb250ZW50cyk7CiAgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZl
cihjb250ZW50cykpOwotICAgIEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3VyY2UpOwotICAgIG1l
bWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKLSAgICByZXR1cm4gV1RG
TW92ZShidWZmZXIpOworICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6
Y3JlYXRlSW50ZXJuYWwoY29udGVudHMsIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CiB9CiAKIFJlZjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250
ZW50cykKQEAgLTE5MSwxMiArMTkzLDUzIEBAIFJlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6
OmNyZWF0ZUZyb21CeXRlcyhjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuCiAgICAg
cmV0dXJuIGNyZWF0ZShjb250ZW50cyk7CiB9CiAKLVJlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVk
IGVsZW1lbnRCeXRlU2l6ZSkKK1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnRyeUNy
ZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQorewor
ICAgIHJldHVybiB0cnlDcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUpOworfQorCitSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoQXJyYXlCdWZmZXImIG90aGVyKQoreworICAgIHJldHVy
biB0cnlDcmVhdGUob3RoZXIuZGF0YSgpLCBvdGhlci5ieXRlTGVuZ3RoKCkpOworfQorCitSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoY29uc3Qgdm9pZCogc291cmNl
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVu
dHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwg
QXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAo
IWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEFy
cmF5QnVmZmVyOjpjcmVhdGVJbnRlcm5hbChjb250ZW50cywgc291cmNlLCBieXRlTGVuZ3RoKTsK
K30KKworUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJl
dHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250
ZW50czo6RG9udEluaXRpYWxpemUpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQorUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVy
biB0cnlDcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250
ZW50czo6RG9udEluaXRpYWxpemUpOworfQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwg
QXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAg
IEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50
cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKK30KKworUmVmPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlSW50ZXJuYWwoQXJyYXlCdWZmZXJDb250ZW50cyYg
Y29udGVudHMsIGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBhdXRvIGJ1ZmZlciA9IGFkb3B0UmVmKCpuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAg
ICBBU1NFUlQoIWJ5dGVMZW5ndGggfHwgc291cmNlKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRh
KCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxp
emF0aW9uUG9saWN5IHBvbGljeSkKIHsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRz
OwogICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVt
ZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCmlu
ZGV4IDI1MzcyNjk2NWE2NjI3NDFmY2NmMGZhNjJmMGUxYjI0MDBlZGQ4ZTcuLmE4NzM3ZWVlMTgw
NmNhOGQzODY0MDkxMTZmMmQyZGQzNjYxZTM2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgK
QEAgLTQyLDcgKzQyLDcgQEAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmlj
VHlwZWRBcnJheVZpZXcoCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogUmVmUHRyPEdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKSk7CisgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0
aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIucmVsZWFzZSgp
LCAwLCBsZW5ndGgpOwpAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+PgogR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciA9Ci0gICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwg
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgQXJyYXlCdWZmZXI6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlci5yZWxlYXNlKCksIDAsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNw
cAppbmRleCBjZjQ1NmYzZWY4N2EzNzA3OThmMDA1Njk1YjUwNTEzZWJkYzUzNzYzLi4yYmUwM2Y4
OGI5YWU1ODU0YTRkMDQ0Zjk1MWUwMDJhOWZkMzg4ODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAK
QEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBsZW5ndGggPSAwOwog
ICAgIH0KICAgICAKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVy
OjpjcmVhdGUobGVuZ3RoLCAxKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUobGVuZ3RoLCAxKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCmluZGV4IDFlZmExOTdjMzY2YjZjNzVi
MDk4MDM0YTk4MzU1YTE1MTM5NzJiY2MuLmM4Zjk5ODhiODJjZmE1MmE4NjBhNDI0ZjI4ZjFlODRl
MTg0ZmNjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAK
QEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBGZXRjaEJvZHk6OnByb2Nlc3NJZkVtcHR5T3JEaXN0dXJi
ZWQoQ29uc3VtZXI6OlR5cGUgdHlwZSwgRGVmZXJyZWRXcmFwcGVyJgogICAgICAgICAgICAgcHJv
bWlzZS5yZWplY3Q8RXhjZXB0aW9uQ29kZT4oU1lOVEFYX0VSUik7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBDb25zdW1lcjo6VHlwZTo6QXJyYXlCdWZmZXI6Ci0gICAg
ICAgICAgICBwcm9taXNlLnJlc29sdmUoQXJyYXlCdWZmZXI6OmNyZWF0ZShudWxscHRyLCAwKSk7
CisgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShudWxs
cHRyLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQg
RmV0Y2hCb2R5Ojpjb25zdW1lVGV4dChDb25zdW1lcjo6VHlwZSB0eXBlLCBEZWZlcnJlZFdyYXBw
ZXImJiBwcm9taXNlKQogCiAgICAgaWYgKHR5cGUgPT0gQ29uc3VtZXI6OlR5cGU6OkFycmF5QnVm
ZmVyKSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhID0gZXh0cmFjdEZyb21UZXh0KCk7Ci0g
ICAgICAgIHByb21pc2UucmVzb2x2ZTxSZWZQdHI8QXJyYXlCdWZmZXI+PihBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOworICAgICAgICBwcm9taXNlLnJlc29s
dmU8UmVmUHRyPEFycmF5QnVmZmVyPj4oQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgY29u
dGVudFR5cGUgPSBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUoZXh0cmFjdE1JTUVUeXBlRnJv
bU1lZGlhVHlwZShtX21pbWVUeXBlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hMb2FkZXIuY3BwCmluZGV4IDk3YmM5Nzc4Mzk4NThjMGEwM2JlNzY4MmUzZDBjMzViODU1
ZDExZWIuLjgzNGE3YWRmNGZhN2JhYjEyMGEwMDYyMThiY2JiOTY4YzY1OTg0YTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hMb2FkZXIuY3BwCkBAIC0xMDAsNyArMTAw
LDcgQEAgdm9pZCBGZXRjaExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogdmFsdWUs
IGludCBzaXplKQogdm9pZCBGZXRjaExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBs
b25nLCBkb3VibGUpCiB7CiAgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpBcnJheUJ1ZmZlcikKLSAg
ICAgICAgbV9jbGllbnQuZGlkRmluaXNoTG9hZGluZ0FzQXJyYXlCdWZmZXIobV9kYXRhID8gbV9k
YXRhLT5jcmVhdGVBcnJheUJ1ZmZlcigpIDogQXJyYXlCdWZmZXI6OmNyZWF0ZShudWxscHRyLCAw
KSk7CisgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRpbmdBc0FycmF5QnVmZmVyKG1fZGF0
YSA/IG1fZGF0YS0+Y3JlYXRlQXJyYXlCdWZmZXIoKSA6IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUo
bnVsbHB0ciwgMCkpOwogICAgIGVsc2UKICAgICAgICAgbV9jbGllbnQuZGlkRmluaXNoTG9hZGlu
Z0FzVGV4dChtX2RhdGEgPyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoQVNDSUlMaXRlcmFs
KCJ0ZXh0L3BsYWluIiksICJVVEYtOCIpLT5kZWNvZGVBbmRGbHVzaChtX2RhdGEtPmRhdGEoKSwg
bV9kYXRhLT5zaXplKCkpOiBTdHJpbmcoKSk7CiAgICAgbV9kYXRhID0gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKaW5kZXggNzM5ZWQ4YTlkYzBlNzJk
ODliM2FlNzNlYmFmZDYyODUxNTY1MzIyNi4uNTAzMDljZDI2OTFlZGUzM2Q0ZTFjMmQ1Zjk4ZTA5
MDdlNjgzZDYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Q
cm9taXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgK
QEAgLTE3Miw3ICsxNzIsNyBAQCBpbmxpbmUgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlc29sdmU8
VmVjdG9yPHVuc2lnbmVkIGNoYXI+Pihjb25zdCBWZWN0b3I8dW5zaWduZQogICAgIEFTU0VSVCht
X2dsb2JhbE9iamVjdCk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUocmVzdWx0
LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
dHJ5Q3JlYXRlKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAgIHJlc29sdmUoKmV4
ZWMsIHRvSlMoZXhlYywgbV9nbG9iYWxPYmplY3QuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCmluZGV4IGRlNDA4NGZkYmMzZjcxOTZjYjcz
ZmI1YmI2ZWQxOWFlZTQzYzQzMmQuLjZhYmM4NmNkMGRlMzVlYjI1YWE3ZDJkZDcwNmFjYTQyZGU3
ZGQ0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCkBAIC0xMDIsNyArMTAyLDcg
QEAgTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoUGFzc1JlZlB0cjxCbG9iPiBkYXRhLCBjb25z
dCBTdHJpbmcmIG9yaWdpbikKIHsKIH0KIAotTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoUmVm
UHRyPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQorTWVzc2FnZUV2
ZW50OjpNZXNzYWdlRXZlbnQoUmVmPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYg
b3JpZ2luKQogICAgIDogRXZlbnQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZmFsc2UsIGZh
bHNlKQogICAgICwgbV9kYXRhVHlwZShEYXRhVHlwZUFycmF5QnVmZmVyKQogICAgICwgbV9kYXRh
QXNBcnJheUJ1ZmZlcihXVEZNb3ZlKGRhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCmlu
ZGV4IGM4ODgxNDg2ZmE3YzIzNjBiZWZlOGIwMTNmYzI1NmZjY2MyMjFkZmIuLjA2OGNiOGU0ZWFi
ODNhNTRlN2FlZGUyZGU2MzdhYTFlOTdjYzk3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50
LmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTWVzc2FnZUV2ZW50KGRhdGEsIG9yaWdpbikpOwogICAgIH0KLSAgICBzdGF0aWMg
UmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRlKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBkYXRhLCBjb25z
dCBTdHJpbmcmIG9yaWdpbiA9IFN0cmluZygpKQorICAgIHN0YXRpYyBSZWY8TWVzc2FnZUV2ZW50
PiBjcmVhdGUoUmVmPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luID0g
U3RyaW5nKCkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZXNzYWdlRXZl
bnQoV1RGTW92ZShkYXRhKSwgb3JpZ2luKSk7CiAgICAgfQpAQCAtMTI3LDcgKzEyNyw3IEBAIHBy
aXZhdGU6CiAKICAgICBleHBsaWNpdCBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBTdHJpbmcmIG9yaWdpbik7CiAgICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KFBhc3NSZWZQ
dHI8QmxvYj4gZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIGV4cGxpY2l0IE1lc3Nh
Z2VFdmVudChSZWZQdHI8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4p
OworICAgIGV4cGxpY2l0IE1lc3NhZ2VFdmVudChSZWY8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29u
c3QgU3RyaW5nJiBvcmlnaW4pOwogCiAgICAgRGF0YVR5cGUgbV9kYXRhVHlwZTsKICAgICBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RhdGFBc1NjcmlwdFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKaW5kZXggYTgwYTJhYjEyZTA3NDE4MWEwZGJk
NTBhZmQ5NmNkNmQ4ZmI5MTA4Zi4uMzBhMWYyYzE0MWY2ZTJlZjE3ZTNlNGY4YTQ3MGJlZWRlNWUz
Mzg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCkBA
IC0xNTcsNyArMTU3LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UodW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYKICAgICB9CiAKICAgICBB
U1NFUlQoIW1fcmF3RGF0YSk7Ci0gICAgbV9yYXdEYXRhID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSwgMSk7CisgICAgbV9yYXdEYXRhID0gQXJyYXlC
dWZmZXI6OnRyeUNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSwgMSk7CiAKICAg
ICBpZiAoIW1fcmF3RGF0YSkgewogICAgICAgICBmYWlsZWQoRmlsZUVycm9yOjpOT1RfUkVBREFC
TEVfRVJSKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5ld0xlbmd0aCA9IHN0ZDo6
bWF4KG5ld0xlbmd0aCwgbV90b3RhbEJ5dGVzICsgbV90b3RhbEJ5dGVzIC8gNCArIDEpOwotICAg
ICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBuZXdEYXRhID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShuZXdMZW5ndGgsIDEpOworICAgICAgICAgICAgYXV0byBuZXdEYXRhID0gQXJyYXlCdWZmZXI6
OnRyeUNyZWF0ZShuZXdMZW5ndGgsIDEpOwogICAgICAgICAgICAgaWYgKCFuZXdEYXRhKSB7CiAg
ICAgICAgICAgICAgICAgLy8gTm90IGVub3VnaCBtZW1vcnkuCiAgICAgICAgICAgICAgICAgZmFp
bGVkKEZpbGVFcnJvcjo6Tk9UX1JFQURBQkxFX0VSUik7CkBAIC0yNzcsNyArMjc3LDcgQEAgUmVm
UHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyTG9hZGVyOjphcnJheUJ1ZmZlclJlc3VsdCgpIGNv
bnN0CiAgICAgICAgIHJldHVybiBtX3Jhd0RhdGE7CiAKICAgICAvLyBPdGhlcndpc2UsIHJldHVy
biBhIGNvcHkuCi0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUobV9yYXdEYXRhLmdldCgp
KTsKKyAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZSgqbV9yYXdEYXRhLmdldCgpKTsKIH0K
IAogU3RyaW5nIEZpbGVSZWFkZXJMb2FkZXI6OnN0cmluZ1Jlc3VsdCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKaW5kZXggZTViMDg2N2QwN2MzNmI2ODQ0ZmFk
ZWJmMjU1NjA0ODA5NDJmMWE3Ny4uNmJkMjNjZTdjNGE5YmVjZDk1MDRmZjhmNjQ3YjkwNTAyNTE3
NmFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcApAQCAt
NjksNyArNjksNyBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChj
b25zdCB2b2lkKiBkYXRhLCBHQzNEc2l6ZWlwdHIgYnl0ZUxlbgogICAgICAgICBtX2J5dGVMZW5n
dGggPSBieXRlTGVuZ3RoOwogICAgICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKICAgICAg
ICAgaWYgKGJ5dGVMZW5ndGgpIHsKLSAgICAgICAgICAgIG1fZWxlbWVudEFycmF5QnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZShieXRlTGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIG1fZWxlbWVu
dEFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShieXRlTGVuZ3RoLCAxKTsKICAg
ICAgICAgICAgIGlmICghbV9lbGVtZW50QXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBt
X2J5dGVMZW5ndGggPSAwOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwCmluZGV4IDJmNDgwNGFkMTEyYzAyYWM4OWU2MmFhZjM4
NjVhZGVjMmExZmUxYzIuLjlkN2Y3MTQ1YmY1MzQ4YjYyNGQyYmI1ZmNhNGFiODVjMWRhNjMzNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmNwcApAQCAtNTAsMTAgKzUwLDEwIEBA
IERhdGFDdWU6OkRhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TWVkaWFUaW1lJiBzdGFydCwgY29uc3QKIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQot
RGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4gcGxhdGZvcm1WYWx1ZSwgY29uc3QgU3RyaW5nJiB0
eXBlKQorRGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBj
b25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgUmVmUHRyPFNlcmlh
bGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiYmIHBsYXRmb3JtVmFsdWUsIGNvbnN0IFN0cmlu
ZyYgdHlwZSkKICAgICA6IFRleHRUcmFja0N1ZShjb250ZXh0LCBzdGFydCwgZW5kKQogICAgICwg
bV90eXBlKHR5cGUpCi0gICAgLCBtX3BsYXRmb3JtVmFsdWUocGxhdGZvcm1WYWx1ZSkKKyAgICAs
IG1fcGxhdGZvcm1WYWx1ZShXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpKQogewogfQogCkBAIC03Myw3
ICs3Myw3IEBAIERhdGFDdWU6On5EYXRhQ3VlKCkKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBEYXRhQ3VlOjpkYXRhKCkgY29uc3QKK1JlZlB0cjxBcnJheUJ1ZmZlcj4gRGF0
YUN1ZTo6ZGF0YSgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKERBVEFDVUVfVkFMVUUpCiAgICAgaWYg
KG1fcGxhdGZvcm1WYWx1ZSkKQEAgLTgzLDcgKzgzLDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gRGF0YUN1ZTo6ZGF0YSgpIGNvbnN0CiAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUobV9kYXRhLmdldCgp
KTsKKyAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZSgqbV9kYXRhLmdldCgpKTsKIH0KIAog
dm9pZCBEYXRhQ3VlOjpzZXREYXRhKEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBEYXRhQ3VlOjpzZXREYXRhKEFycmF5QnVmZmVyKiBk
YXRhLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBtX3ZhbHVlID0gSlNDOjpKU1ZhbHVlKCk7CiAj
ZW5kaWYKIAotICAgIG1fZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YSk7CisgICAgbV9k
YXRhID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSgqZGF0YSk7CiB9CiAKIERhdGFDdWUqIHRvRGF0YUN1
ZShUZXh0VHJhY2tDdWUqIGN1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKaW5kZXgg
MjAwNzk0ZGI1YjhlNDZkMmRmMjkwNDBkNDQwZGUxMzY5OGVmMzM5NS4uN2RmMjM2YTRjYjhkYjlj
NTNhYzhkYzc4YTI1YjQ0MDBmOGUyMjgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmgKQEAgLTYxLDkgKzYxLDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VF
X1ZBTFVFKQotICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9y
bVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFy
dCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNl
bnRhdGlvbj4mJiBwbGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIHBs
YXRmb3JtVmFsdWUsIHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1
ZShjb250ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCB0eXBlKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNzUsMTEgKzc1
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhQ3VlKCk7CiAgICAgQ3VlVHlwZSBjdWVU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRGF0YTsgfQogCi0gICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShBcnJheUJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsK
IAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQotICAgIGNvbnN0IFBhc3NSZWZQdHI8U2VyaWFs
aXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3BsYXRmb3JtVmFsdWU7IH0KKyAgICBjb25zdCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3Jt
UmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
VmFsdWU7IH0KIAogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0
OwogICAgIHZvaWQgc2V0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwpAQCAt
OTYsNyArOTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5
QnVmZmVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIERhdGFDdWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlh
VGltZSYgZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQpOwogI2lmIEVOQUJMRShEQVRBQ1VFX1ZB
TFVFKQotICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0
Zm9ybVJlcHJlc2VudGF0aW9uPiwgY29uc3QgU3RyaW5nJik7CisgICAgRGF0YUN1ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1l
JiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4mJiwgY29uc3Qg
U3RyaW5nJik7CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSwgY29uc3Qg
U3RyaW5nJik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kRGF0YVRleHRUcmFjay5jcHAKaW5kZXggOTVjMDMwMjZlOTBkNWUxYjIxOGFiMTkxZjE3OGNm
MDQzNTcwZjNmMS4uMjQwZDY2NjQ1OTJmNDBiMTc4N2ZjMWI2MTk0ZDA1NTYyZWRiNjVlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3Bw
CkBAIC02NSwxOCArNjUsMTggQEAgdm9pZCBJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRhQ3Vl
KEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHMKICAgICBpZiAobV9p
bmNvbXBsZXRlQ3VlTWFwLmZpbmQocGxhdGZvcm1WYWx1ZS5nZXQoKSkgIT0gbV9pbmNvbXBsZXRl
Q3VlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RGF0YUN1ZT4gY3Vl
ID0gRGF0YUN1ZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQs
IHBsYXRmb3JtVmFsdWUsIHR5cGUpOwotICAgIGlmIChoYXNDdWUoY3VlLmdldCgpLCBUZXh0VHJh
Y2tDdWU6Oklnbm9yZUR1cmF0aW9uKSkgeworICAgIGF1dG8gY3VlID0gRGF0YUN1ZTo6Y3JlYXRl
KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIHBsYXRmb3JtVmFsdWUuY29w
eVJlZigpLCB0eXBlKTsKKyAgICBpZiAoaGFzQ3VlKGN1ZS5wdHIoKSwgVGV4dFRyYWNrQ3VlOjpJ
Z25vcmVEdXJhdGlvbikpIHsKICAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kRGF0YVRleHRUcmFj
azo6YWRkRGF0YUN1ZSBpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JXMsIGVuZD0l
c1xuIiwgdG9TdHJpbmcoY3VlLT5zdGFydFRpbWUoKSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmco
Y3VlLT5lbmRUaW1lKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKGVuZC5pc1Bvc2l0aXZlSW5maW5pdGUoKSAmJiBtZWRpYUVsZW1lbnQoKSkgewog
ICAgICAgICBjdWUtPnNldEVuZFRpbWUobWVkaWFFbGVtZW50KCktPmR1cmF0aW9uTWVkaWFUaW1l
KCkpOwotICAgICAgICBtX2luY29tcGxldGVDdWVNYXAuYWRkKHBsYXRmb3JtVmFsdWUsIGN1ZSk7
CisgICAgICAgIG1faW5jb21wbGV0ZUN1ZU1hcC5hZGQoV1RGTW92ZShwbGF0Zm9ybVZhbHVlKSwg
Y3VlLmNvcHlSZWYoKSk7CiAgICAgfQogCi0gICAgYWRkQ3VlKGN1ZS5yZWxlYXNlKCksIEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIGFkZEN1ZShXVEZNb3ZlKGN1ZSksIEFTU0VSVF9OT19FWENF
UFRJT04pOwogfQogCiB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OnVwZGF0ZURhdGFDdWUoSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlh
VGltZSYgaW5FbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+
IHBycFBsYXRmb3JtVmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Yu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCBkNTY5MDIyZTdmZTQ4OTQ4
YmYwZjU5YjA3ZWQ4ODlhZmI1NjU4MTVmLi5lMzNjZGI0NDUzZjI1MjE1ZWM2M2Q1OTk2YmM1MzNh
YjgxNjU3MzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTE4NzIsMTQgKzE4NzIsMTQgQEAgYm9v
bCBBVkZXcmFwcGVyOjpzaG91bGRXYWl0Rm9yTG9hZGluZ09mUmVzb3VyY2UoQVZDRkFzc2V0UmVz
b3VyY2VMb2FkaW5nUmVxdWVzdFIKICAgICAgICAgLy8gQ3JlYXRlIGFuIGluaXREYXRhIHdpdGgg
dGhlIGZvbGxvd2luZyBsYXlvdXQ6CiAgICAgICAgIC8vIFs0IGJ5dGVzOiBrZXlVUkkgc2l6ZV0s
IFtrZXlVUkkgc2l6ZSBieXRlczoga2V5VVJJXQogICAgICAgICB1bnNpZ25lZCBrZXlVUklTaXpl
ID0ga2V5VVJJLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoNCArIGtleVVSSVNp
emUsIDEpOwotICAgICAgICBSZWZQdHI8SlNDOjpEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0gSlND
OjpEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBpbml0RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGUoNCArIGtleVVSSVNpemUsIDEpOworICAgICAgICBhdXRvIGluaXREYXRhVmlldyA9IEpT
Qzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5
dGVMZW5ndGgoKSk7CiAgICAgICAgIGluaXREYXRhVmlldy0+c2V0PHVpbnQzMl90PigwLCBrZXlV
UklTaXplLCB0cnVlKTsKIAotICAgICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleVVSSUFycmF5
ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgNCwga2V5VVJJLmxlbmd0aCgp
KTsKKyAgICAgICAgYXV0byBrZXlVUklBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERh
dGFCdWZmZXIsIDQsIGtleVVSSS5sZW5ndGgoKSk7CiAgICAgICAgIGtleVVSSUFycmF5LT5zZXRS
YW5nZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oU3RyaW5nVmlldyhrZXlVUkkp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpLmdldCgpKSwga2V5VVJJLmxlbmd0aCgpIC8gc2l6ZW9m
KHVuc2lnbmVkIGNoYXIpLCAwKTsKIAotICAgICAgICBSZWZQdHI8VWludDhBcnJheT4gaW5pdERh
dGEgPSBVaW50OEFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVy
LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBhdXRvIGluaXREYXRhID0gVWludDhBcnJheTo6Y3Jl
YXRlKGluaXREYXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAg
ICAgICAgaWYgKCFtX293bmVyLT5wbGF5ZXIoKS0+a2V5TmVlZGVkKGluaXREYXRhLmdldCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9u
TWFjLm1tCmluZGV4IGE2ZjY5NjE2NDhmZTYxMGNiZGMwNDIwYzg4YWYzZWI3Yjk5ZmQzOWUuLjY5
YWQ0MTdkMDJiMjM1Zjg5YWRkOTdjMmFjNmEzNDc4YmYwNWVmYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3Jt
UmVwcmVzZW50YXRpb25NYWMubW0KQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgSlNWYWx1ZSAq
anNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChpZCB2YWx1ZSwgSlNDb250ZXh0ICpjb250ZXh0KQog
CiBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwg
SlNDb250ZXh0ICpjb250ZXh0KQogewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YUFycmF5
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pOworICAg
IGF1dG8gZGF0YUFycmF5ID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShbZGF0YSBieXRlc10sIFtk
YXRhIGxlbmd0aF0pOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKFtjb250ZXh0
IEpTR2xvYmFsQ29udGV4dFJlZl0pOwogICAgIEpTQzo6SlNWYWx1ZSBhcnJheSA9IHRvSlMoZXhl
YywgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLCBkYXRhQXJyYXkuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAKaW5kZXggMDA0MTQzZWZlOTA5ZDEwZWY5NjllMjJlYzU1YWZkZTFiY2E1NDE2ZC4uY2QzOWFm
MTNkZjYxNzFiZjE3MzE5MmU2ZDYzOTlmZTNjOTBlOTgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC0yNjEsNyArMjYxLDcgQEAgQXJyYXlCdWZmZXIqIFhNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZUFycmF5QnVmZmVyKCkKICAgICAgICAgaWYgKG1fYmluYXJ5UmVzcG9u
c2VCdWlsZGVyKQogICAgICAgICAgICAgbV9yZXNwb25zZUFycmF5QnVmZmVyID0gbV9iaW5hcnlS
ZXNwb25zZUJ1aWxkZXItPmNyZWF0ZUFycmF5QnVmZmVyKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fcmVzcG9uc2VBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobnVsbHB0
ciwgMCk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlQXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6
dHJ5Q3JlYXRlKG51bGxwdHIsIDApOwogICAgICAgICBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlciA9
IG51bGxwdHI7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274375</attachid>
            <date>2016-03-17 22:58:39 -0700</date>
            <delta_ts>2016-03-18 09:34:11 -0700</delta_ts>
            <desc>Fix build break of Win port</desc>
            <filename>bug-155328-20160318145837.patch</filename>
            <type>text/plain</type>
            <size>26622</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YjUxMmI5NjI1YmM3OWNjYzQ2ZGZmOTY1MzM2ZWFmYjJlZWRlMzViLi4yZjk5NTcxOGQ3NWEyZDg1
ZmE0MWYwY2RmMWQ3MDc1NDMxYjhlYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wMy0xNyAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNo
YW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNUeXBlZEFycmF5LmNwcDoKKyAg
ICAgICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlQXJy
YXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFy
cmF5QnVmZmVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRl
VW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgorCiAyMDE2LTAzLTE3ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIE1ha2UgQ1NF
J3MgSW1wdXJlRGF0YSBmYXN0ZXIgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYmxvY2tzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZTI5MDIxMmZiOTNmYjI3M2U5OTg2MGRjMzQ2YjVjYmNlNmU1NjMyMi4uOGNjMTFh
NDJmMGQxZmRmOTAyNTdlZWIwMmU3NTRkMGNmZDUyMWRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQwIEBACisyMDE2LTAzLTE3ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNv
bT4KKworICAgICAgICBbSlNDXSBBZGQgQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZSBhbmQgY2hhbmdl
IHRoZSBjYWxsc2l0ZXMgd2hlcmUgaXQgaXMgbmVlZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUzMjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvdXJz
LgorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5Ojpwcm9jZXNzSWZFbXB0eU9yRGlzdHVyYmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZldGNoQm9keTo6Y29uc3VtZVRleHQpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gv
RmV0Y2hMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hMb2FkZXI6OmRpZEZpbmlz
aExvYWRpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y2hhcj4+KToKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBk
b20vTWVzc2FnZUV2ZW50Lmg6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyOjphcnJheUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKToKKyAgICAgICAgKiBodG1s
L3RyYWNrL0RhdGFDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUN1ZTo6RGF0YUN1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFDdWU6OnNldERhdGEpOgorICAgICAgICAqIGh0bWwvdHJhY2svRGF0YUN1ZS5oOgorICAgICAg
ICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRhQ3VlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VBcnJh
eUJ1ZmZlcik6CisKIDIwMTYtMDMtMTcgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBJbWFnZXMgaW4gZmVlZCBvbiBlYmF5LmNvbSBqaWdnbGUgd2hlbiBvbmUgaXMg
aG92ZXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJy
YXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCmluZGV4
IDJmZWE5M2ZkNWVlNzgyNmNlMTg0MTk3MTJlMDE3ZjM1NzUyZjhiZjguLjI2MjlhYzk0NzI2MDU1
ODdmY2ExNTM4ZWIwNzY2Y2Q5Njg4M2VjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNUeXBlZEFycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVHlwZWRBcnJheS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBKU09iamVjdFJlZiBKU09iamVj
dE1ha2VUeXBlZEFycmF5KEpTQ29udGV4dFJlZiBjdHgsIEpTVHlwZWRBcnJheVR5cGUgYXJyYXlU
eXBlLAogCiAgICAgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplID0gZWxlbWVudFNpemUodG9UeXBl
ZEFycmF5VHlwZShhcnJheVR5cGUpKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIGVsZW1lbnRCeXRlU2l6ZSk7CisgICAgYXV0
byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxlbmd0aCwgZWxlbWVudEJ5dGVTaXpl
KTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY3JlYXRlVHlwZWRBcnJheShleGVjLCBhcnJheVR5
cGUsIFdURk1vdmUoYnVmZmVyKSwgMCwgbGVuZ3RoKTsKICAgICBpZiAoaGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQoZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI5Miw3ICsyOTIsNyBAQCBKU09iamVjdFJlZiBK
U09iamVjdE1ha2VBcnJheUJ1ZmZlcldpdGhCeXRlc05vQ29weShKU0NvbnRleHRSZWYgY3R4LCB2
b2lkKiBieXRlcwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKGV4ZWMpOwogCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKGJ5dGVzLCBieXRlTGVuZ3RoLCBbPV0odm9pZCog
cCkgeworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhieXRl
cywgYnl0ZUxlbmd0aCwgWz1dKHZvaWQqIHApIHsKICAgICAgICAgaWYgKGJ5dGVzRGVhbGxvY2F0
b3IpCiAgICAgICAgICAgICBieXRlc0RlYWxsb2NhdG9yKHAsIGRlYWxsb2NhdG9yQ29udGV4dCk7
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaApp
bmRleCBiM2Q3ZWM2YzUyZmE4OTIyOWJmMjQ5ZGQ1OTRhOWFhNmM5MWRlNjg1Li4yMzQ4ZGQ4NzIw
MGZmOGJiYTFkNTEzM2QwMTUxOWZmMzU0NmZmNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKQEAgLTk3LDE1ICs5NywxOSBAQCBwcml2YXRlOgogCiBj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4gewogcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVh
dGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAg
c3RhdGljIGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwot
ICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJh
eUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0
ZVNpemUpOworICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlC
dWZmZXImKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBS
ZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgc3RhdGlj
IGlubGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZmZXI+
IGNyZWF0ZUZyb21CeXRlcyhjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoLCBB
cnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiYmKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpOworICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiB0
cnlDcmVhdGUoQXJyYXlCdWZmZXImKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gdHJ5Q3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7
CiAKICAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQgYW5kIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQXJyYXlCdWZmZXIuCi0gICAgc3RhdGlj
IGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGlu
ZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBSZWZQdHI8
QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMs
IHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwog
ICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CkBAIC0xMjgsOCArMTMyLDkgQEAg
cHVibGljOgogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBp
bmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRp
b25Qb2xpY3kpOwotCisgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZl
ckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSk7CisgICAgc3RhdGljIGlubGluZSBSZWY8
QXJyYXlCdWZmZXI+IGNyZWF0ZUludGVybmFsKEFycmF5QnVmZmVyQ29udGVudHMmLCBjb25zdCB2
b2lkKiwgdW5zaWduZWQpOworICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiB0
cnlDcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwg
QXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOwogICAgIGlubGluZSBB
cnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgaW5saW5lIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Owog
ICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7CkBAIC0xNTMs
MjYgKzE1OCwyMyBAQCBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0
LCBpbnQgcmlnaHQpCiAgICAgcmV0dXJuIHg7CiB9CiAKLVJlZlB0cjxBcnJheUJ1ZmZlcj4gQXJy
YXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplKQorUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNyZWF0
ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJv
SW5pdGlhbGl6ZSk7CiB9CiAKLVJlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZShBcnJheUJ1ZmZlciogb3RoZXIpCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVh
dGUoQXJyYXlCdWZmZXImIG90aGVyKQogewotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KG90aGVyLT5kYXRhKCksIG90aGVyLT5ieXRlTGVuZ3RoKCkpOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKG90aGVyLmRhdGEoKSwgb3RoZXIuYnl0ZUxlbmd0aCgpKTsKIH0KIAotUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwg
dW5zaWduZWQgYnl0ZUxlbmd0aCkKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7CiAgICAgQXJyYXlC
dWZmZXJDb250ZW50cyBjb250ZW50czsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxv
Y2F0ZShieXRlTGVuZ3RoLCAxLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSwg
Y29udGVudHMpOwogICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0UmVmKCpuZXcgQXJyYXlCdWZmZXIoY29udGVu
dHMpKTsKLSAgICBBU1NFUlQoIWJ5dGVMZW5ndGggfHwgc291cmNlKTsKLSAgICBtZW1jcHkoYnVm
ZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIFdURk1vdmUoYnVm
ZmVyKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZUlu
dGVybmFsKGNvbnRlbnRzLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwogfQogCiBSZWY8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCkBA
IC0xOTEsMTIgKzE5Myw1MyBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVG
cm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbgogICAgIHJldHVybiBj
cmVhdGUoY29udGVudHMpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpj
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50
Qnl0ZVNpemUpCitSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1
cm4gdHJ5Q3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29u
dGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKEFycmF5QnVmZmVyJiBvdGhlcikKK3sKKyAgICByZXR1cm4gdHJ5Q3Jl
YXRlKG90aGVyLmRhdGEoKSwgb3RoZXIuYnl0ZUxlbmd0aCgpKTsKK30KKworUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAg
IEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVm
ZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50
cy5tX2RhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlSW50ZXJuYWwoY29udGVudHMsIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Cit9CisKK1Jl
ZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1cm4gY3Jl
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRv
bnRJbml0aWFsaXplKTsKIH0KIAotUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5
QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gdHJ5Q3Jl
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRv
bnRJbml0aWFsaXplKTsKK30KKworUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVm
ZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9j
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAg
IGlmICghY29udGVudHMubV9kYXRhKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK1JlZjxBcnJheUJ1ZmZlcj4g
QXJyYXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRz
LCBjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgYXV0byBi
dWZmZXIgPSBhZG9wdFJlZigqbmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgQVNTRVJU
KCFieXRlTGVuZ3RoIHx8IHNvdXJjZSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBzb3Vy
Y2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK1JlZlB0cjxBcnJheUJ1
ZmZlcj4gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3kpCiB7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKICAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVT
aXplLCBwb2xpY3ksIGNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAppbmRleCAyNTM3
MjY5NjVhNjYyNzQxZmNjZjBmYTYyZjBlMWIyNDAwZWRkOGU3Li5hODczN2VlZTE4MDZjYThkMzg2
NDA5MTE2ZjJkMmRkMzY2MWUzNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCkBAIC00Miw3
ICs0Miw3IEBAIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3KAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KIFJlZlB0cjxHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkp
OworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLnJlbGVhc2UoKSwgMCwgbGVu
Z3RoKTsKQEAgLTc1LDcgKzc1LDcgQEAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPj4KIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQot
ICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgICAgIEFycmF5QnVmZmVyOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIucmVsZWFzZSgpLCAwLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
Y2Y0NTZmM2VmODdhMzcwNzk4ZjAwNTY5NWI1MDUxM2ViZGM1Mzc2My4uMmJlMDNmODhiOWFlNTg1
NGE0ZDA0NGY5NTFlMDAyYTlmZDM4ODg1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCkBAIC05Miw3
ICs5Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFy
cmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICB9CiAg
ICAgCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGxlbmd0aCwgMSk7CisgICAgYXV0byBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGxl
bmd0aCwgMSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAppbmRleCAzMWRkMGVlZTc3MmE4MjdmZTMyOTgyNGYw
ZTc3MjdhNjg1MzM1MTMyLi42Y2U1NmRlNjZlODI4NmU4ZmQyZDBlODJlYzhkZGQ4NmQ5ZjJmYTI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCkBAIC05Nyw3
ICs5Nyw3IEBAIGJvb2wgRmV0Y2hCb2R5Ojpwcm9jZXNzSWZFbXB0eU9yRGlzdHVyYmVkKENvbnN1
bWVyOjpUeXBlIHR5cGUsIERlZmVycmVkV3JhcHBlciYKICAgICAgICAgICAgIHByb21pc2UucmVq
ZWN0PEV4Y2VwdGlvbkNvZGU+KFNZTlRBWF9FUlIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGNhc2UgQ29uc3VtZXI6OlR5cGU6OkFycmF5QnVmZmVyOgotICAgICAgICAgICAg
cHJvbWlzZS5yZXNvbHZlKEFycmF5QnVmZmVyOjpjcmVhdGUobnVsbHB0ciwgMCkpOworICAgICAg
ICAgICAgcHJvbWlzZS5yZXNvbHZlKEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobnVsbHB0ciwgMCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEZldGNoQm9k
eTo6Y29uc3VtZVRleHQoQ29uc3VtZXI6OlR5cGUgdHlwZSwgRGVmZXJyZWRXcmFwcGVyJiYgcHJv
bWlzZSkKIAogICAgIGlmICh0eXBlID09IENvbnN1bWVyOjpUeXBlOjpBcnJheUJ1ZmZlcikgewog
ICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YSA9IGV4dHJhY3RGcm9tVGV4dCgpOwotICAgICAgICBw
cm9taXNlLnJlc29sdmU8UmVmUHRyPEFycmF5QnVmZmVyPj4oQXJyYXlCdWZmZXI6OmNyZWF0ZShk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlPFJlZlB0
cjxBcnJheUJ1ZmZlcj4+KEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgU3RyaW5nIGNvbnRlbnRUeXBl
ID0gQmxvYjo6bm9ybWFsaXplZENvbnRlbnRUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUobV9taW1lVHlwZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoTG9h
ZGVyLmNwcAppbmRleCA5N2JjOTc3ODM5ODU4YzBhMDNiZTc2ODJlM2QwYzM1Yjg1NWQxMWViLi44
MzRhN2FkZjRmYTdiYWIxMjBhMDA2MjE4YmNiYjk2OGM2NTk4NGE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgRmV0Y2hMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIHZhbHVlLCBpbnQgc2l6
ZSkKIHZvaWQgRmV0Y2hMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZywgZG91
YmxlKQogewogICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6QXJyYXlCdWZmZXIpCi0gICAgICAgIG1f
Y2xpZW50LmRpZEZpbmlzaExvYWRpbmdBc0FycmF5QnVmZmVyKG1fZGF0YSA/IG1fZGF0YS0+Y3Jl
YXRlQXJyYXlCdWZmZXIoKSA6IEFycmF5QnVmZmVyOjpjcmVhdGUobnVsbHB0ciwgMCkpOworICAg
ICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nQXNBcnJheUJ1ZmZlcihtX2RhdGEgPyBtX2Rh
dGEtPmNyZWF0ZUFycmF5QnVmZmVyKCkgOiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG51bGxwdHIs
IDApKTsKICAgICBlbHNlCiAgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRpbmdBc1RleHQo
bV9kYXRhID8gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKEFTQ0lJTGl0ZXJhbCgidGV4dC9w
bGFpbiIpLCAiVVRGLTgiKS0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+
c2l6ZSgpKTogU3RyaW5nKCkpOwogICAgIG1fZGF0YSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCmluZGV4IGJlZWQ2MDZiZDdhMDQ1YTI4ZjQ3N2U3
NjEyNjY0NjYyODdmMjY5ZDAuLjU3Y2IzYmQ3NjgyOTY3MzVlOGMzMjVjYzdhOTliYzEzMjY3ZTRj
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCkBAIC0xNzMs
NyArMTczLDcgQEAgaW5saW5lIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZXNvbHZlPFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPj4oY29uc3QgVmVjdG9yPHVuc2lnbmUKICAgICBBU1NFUlQobV9nbG9iYWxP
YmplY3QpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpOworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0
ZShyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKICAgICByZXNvbHZlKCpleGVjLCB0b0pT
KGV4ZWMsIG1fZ2xvYmFsT2JqZWN0LmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcAppbmRleCBkZTQwODRmZGJjM2Y3MTk2Y2I3M2ZiNWJiNmVk
MTlhZWU0M2M0MzJkLi42YWJjODZjZDBkZTM1ZWIyNWFhN2QyZGQ3MDZhY2E0MmRlN2RkNGY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIE1lc3Nh
Z2VFdmVudDo6TWVzc2FnZUV2ZW50KFBhc3NSZWZQdHI8QmxvYj4gZGF0YSwgY29uc3QgU3RyaW5n
JiBvcmlnaW4pCiB7CiB9CiAKLU1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KFJlZlB0cjxBcnJh
eUJ1ZmZlcj4mJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKK01lc3NhZ2VFdmVudDo6TWVz
c2FnZUV2ZW50KFJlZjxBcnJheUJ1ZmZlcj4mJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbikK
ICAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGZhbHNlLCBmYWxzZSkKICAg
ICAsIG1fZGF0YVR5cGUoRGF0YVR5cGVBcnJheUJ1ZmZlcikKICAgICAsIG1fZGF0YUFzQXJyYXlC
dWZmZXIoV1RGTW92ZShkYXRhKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAppbmRleCBjODg4
MTQ4NmZhN2MyMzYwYmVmZThiMDEzZmMyNTZmY2NjMjIxZGZiLi4wNjhjYjhlNGVhYjgzYTU0ZTdh
ZWRlMmRlNjM3YWExZTk3Y2M5NzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCkBAIC03
MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE1lc3NhZ2VFdmVudChkYXRhLCBvcmlnaW4pKTsKICAgICB9Ci0gICAgc3RhdGljIFJlZjxNZXNz
YWdlRXZlbnQ+IGNyZWF0ZShSZWZQdHI8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29uc3QgU3RyaW5n
JiBvcmlnaW4gPSBTdHJpbmcoKSkKKyAgICBzdGF0aWMgUmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRl
KFJlZjxBcnJheUJ1ZmZlcj4mJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiA9IFN0cmluZygp
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVzc2FnZUV2ZW50KFdURk1v
dmUoZGF0YSksIG9yaWdpbikpOwogICAgIH0KQEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgog
CiAgICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4pOwogICAgIGV4cGxpY2l0IE1lc3NhZ2VFdmVudChQYXNzUmVmUHRyPEJsb2I+
IGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKLSAgICBleHBsaWNpdCBNZXNzYWdlRXZlbnQo
UmVmUHRyPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKKyAgICBl
eHBsaWNpdCBNZXNzYWdlRXZlbnQoUmVmPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luKTsKIAogICAgIERhdGFUeXBlIG1fZGF0YVR5cGU7CiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgbV9kYXRhQXNTY3JpcHRWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwCmluZGV4IGE4MGEyYWIxMmUwNzQxODFhMGRiZDUwYWZkOTZj
ZDZkOGZiOTEwOGYuLjMwYTFmMmMxNDFmNmUyZWYxN2UzZTRmOGE0NzBiZWVkZTVlMzM4OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcApAQCAtMTU3LDcg
KzE1Nyw3IEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2ln
bmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmCiAgICAgfQogCiAgICAgQVNTRVJUKCFt
X3Jhd0RhdGEpOwotICAgIG1fcmF3RGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGxlbmd0aCksIDEpOworICAgIG1fcmF3RGF0YSA9IEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIDEpOwogCiAgICAgaWYgKCFt
X3Jhd0RhdGEpIHsKICAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6Tk9UX1JFQURBQkxFX0VSUik7
CkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXdMZW5ndGggPSBzdGQ6Om1heChuZXdM
ZW5ndGgsIG1fdG90YWxCeXRlcyArIG1fdG90YWxCeXRlcyAvIDQgKyAxKTsKLSAgICAgICAgICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3RGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUobmV3TGVu
Z3RoLCAxKTsKKyAgICAgICAgICAgIGF1dG8gbmV3RGF0YSA9IEFycmF5QnVmZmVyOjp0cnlDcmVh
dGUobmV3TGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGlmICghbmV3RGF0YSkgewogICAgICAgICAg
ICAgICAgIC8vIE5vdCBlbm91Z2ggbWVtb3J5LgogICAgICAgICAgICAgICAgIGZhaWxlZChGaWxl
RXJyb3I6Ok5PVF9SRUFEQUJMRV9FUlIpOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gRmlsZVJlYWRlckxvYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAogICAg
ICAgICByZXR1cm4gbV9yYXdEYXRhOwogCiAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBjb3B5
LgotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fcmF3RGF0YS5nZXQoKSk7CisgICAg
cmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoKm1fcmF3RGF0YS5nZXQoKSk7CiB9CiAKIFN0cmlu
ZyBGaWxlUmVhZGVyTG9hZGVyOjpzdHJpbmdSZXN1bHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuY3BwCmluZGV4IGU1YjA4NjdkMDdjMzZiNjg0NGZhZGViZjI1NTYw
NDgwOTQyZjFhNzcuLjZiZDIzY2U3YzRhOWJlY2Q5NTA0ZmY4ZjY0N2I5MDUwMjUxNzZhYWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKQEAgLTY5LDcgKzY5
LDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoY29uc3Qgdm9p
ZCogZGF0YSwgR0MzRHNpemVpcHRyIGJ5dGVMZW4KICAgICAgICAgbV9ieXRlTGVuZ3RoID0gYnl0
ZUxlbmd0aDsKICAgICAgICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAgICAgICAgIGlmIChi
eXRlTGVuZ3RoKSB7Ci0gICAgICAgICAgICBtX2VsZW1lbnRBcnJheUJ1ZmZlciA9IEFycmF5QnVm
ZmVyOjpjcmVhdGUoYnl0ZUxlbmd0aCwgMSk7CisgICAgICAgICAgICBtX2VsZW1lbnRBcnJheUJ1
ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoYnl0ZUxlbmd0aCwgMSk7CiAgICAgICAgICAg
ICBpZiAoIW1fZWxlbWVudEFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgbV9ieXRlTGVu
Z3RoID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9EYXRhQ3VlLmNwcAppbmRleCAxMGJlMjlmOWZlYTQzMWVhYjFiY2NiN2NhMTk2M2I4Y2Jj
NDc0NzcyLi43ZWMxYTMxYmEwNTg1MDViYzc1Mzg2NjQwODFiNGMxOTU0ODZmOTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKQEAgLTUwLDEwICs1MCwxMCBAQCBEYXRhQ3Vl
OjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoREFUQUNVRV9WQUxVRSkKLURhdGFDdWU6
OkRhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBsYXRm
b3JtUmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKK0Rh
dGFDdWU6OkRhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxh
dGZvcm1SZXByZXNlbnRhdGlvbj4mJiBwbGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUp
CiAgICAgOiBUZXh0VHJhY2tDdWUoY29udGV4dCwgc3RhcnQsIGVuZCkKICAgICAsIG1fdHlwZSh0
eXBlKQotICAgICwgbV9wbGF0Zm9ybVZhbHVlKHBsYXRmb3JtVmFsdWUpCisgICAgLCBtX3BsYXRm
b3JtVmFsdWUoV1RGTW92ZShwbGF0Zm9ybVZhbHVlKSkKIHsKIH0KIApAQCAtNzUsNyArNzUsNyBA
QCBEYXRhQ3VlOjp+RGF0YUN1ZSgpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gRGF0YUN1ZTo6ZGF0YSgpIGNvbnN0CitSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFDdWU6OmRh
dGEoKSBjb25zdAogewogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogICAgIGlmIChtX3BsYXRm
b3JtVmFsdWUpCkBAIC04NSw3ICs4NSw3IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFD
dWU6OmRhdGEoKSBjb25zdAogICAgIGlmICghbV9kYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS5nZXQoKSk7CisgICAg
cmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoKm1fZGF0YS5nZXQoKSk7CiB9CiAKIHZvaWQgRGF0
YUN1ZTo6c2V0RGF0YShBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
MDIsNyArMTAyLDcgQEAgdm9pZCBEYXRhQ3VlOjpzZXREYXRhKEFycmF5QnVmZmVyKiBkYXRhLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICBtX3ZhbHVlID0gSlNDOjpKU1ZhbHVlKCk7CiAjZW5kaWYK
IAotICAgIG1fZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YSk7CisgICAgbV9kYXRhID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZSgqZGF0YSk7CiB9CiAKIERhdGFDdWUqIHRvRGF0YUN1ZShUZXh0
VHJhY2tDdWUqIGN1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0
YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKaW5kZXggMjAwNzk0
ZGI1YjhlNDZkMmRmMjkwNDBkNDQwZGUxMzY5OGVmMzM5NS4uN2RmMjM2YTRjYjhkYjljNTNhYzhk
Yzc4YTI1YjQ0MDBmOGUyMjgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKQEAg
LTYxLDkgKzYxLDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVF
KQotICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9ybVZhbHVl
LCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29u
c3QgTWVkaWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlv
bj4mJiBwbGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIHBsYXRmb3Jt
VmFsdWUsIHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1ZShjb250
ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCB0eXBlKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNzUsMTEgKzc1LDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhQ3VlKCk7CiAgICAgQ3VlVHlwZSBjdWVUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRGF0YTsgfQogCi0gICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gZGF0YSgpIGNvbnN0OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0RGF0YShBcnJheUJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKIAogI2lm
IEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQotICAgIGNvbnN0IFBhc3NSZWZQdHI8U2VyaWFsaXplZFBs
YXRmb3JtUmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtVmFsdWU7IH0KKyAgICBjb25zdCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVz
ZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtVmFsdWU7
IH0KIAogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OwogICAg
IHZvaWQgc2V0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwpAQCAtOTYsNyAr
OTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5QnVmZmVy
KiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIERhdGFDdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQpOwogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQot
ICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3Rh
cnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJl
cHJlc2VudGF0aW9uPiwgY29uc3QgU3RyaW5nJik7CisgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQs
IFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4mJiwgY29uc3QgU3RyaW5n
Jik7CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNWYWx1ZSwgY29uc3QgU3RyaW5n
Jik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmREYXRhVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0
YVRleHRUcmFjay5jcHAKaW5kZXggOTVjMDMwMjZlOTBkNWUxYjIxOGFiMTkxZjE3OGNmMDQzNTcw
ZjNmMS4uMjQwZDY2NjQ1OTJmNDBiMTc4N2ZjMWI2MTk0ZDA1NTYyZWRiNjVlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCkBAIC02
NSwxOCArNjUsMTggQEAgdm9pZCBJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRhQ3VlKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHMKICAgICBpZiAobV9pbmNvbXBs
ZXRlQ3VlTWFwLmZpbmQocGxhdGZvcm1WYWx1ZS5nZXQoKSkgIT0gbV9pbmNvbXBsZXRlQ3VlTWFw
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RGF0YUN1ZT4gY3VlID0gRGF0
YUN1ZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIHBsYXRm
b3JtVmFsdWUsIHR5cGUpOwotICAgIGlmIChoYXNDdWUoY3VlLmdldCgpLCBUZXh0VHJhY2tDdWU6
Oklnbm9yZUR1cmF0aW9uKSkgeworICAgIGF1dG8gY3VlID0gRGF0YUN1ZTo6Y3JlYXRlKCpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIHBsYXRmb3JtVmFsdWUuY29weVJlZigp
LCB0eXBlKTsKKyAgICBpZiAoaGFzQ3VlKGN1ZS5wdHIoKSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVE
dXJhdGlvbikpIHsKICAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kRGF0YVRleHRUcmFjazo6YWRk
RGF0YUN1ZSBpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JXMsIGVuZD0lc1xuIiwg
dG9TdHJpbmcoY3VlLT5zdGFydFRpbWUoKSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcoY3VlLT5l
bmRUaW1lKCkpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKGVuZC5pc1Bvc2l0aXZlSW5maW5pdGUoKSAmJiBtZWRpYUVsZW1lbnQoKSkgewogICAgICAg
ICBjdWUtPnNldEVuZFRpbWUobWVkaWFFbGVtZW50KCktPmR1cmF0aW9uTWVkaWFUaW1lKCkpOwot
ICAgICAgICBtX2luY29tcGxldGVDdWVNYXAuYWRkKHBsYXRmb3JtVmFsdWUsIGN1ZSk7CisgICAg
ICAgIG1faW5jb21wbGV0ZUN1ZU1hcC5hZGQoV1RGTW92ZShwbGF0Zm9ybVZhbHVlKSwgY3VlLmNv
cHlSZWYoKSk7CiAgICAgfQogCi0gICAgYWRkQ3VlKGN1ZS5yZWxlYXNlKCksIEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgIGFkZEN1ZShXVEZNb3ZlKGN1ZSksIEFTU0VSVF9OT19FWENFUFRJT04p
OwogfQogCiB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OnVwZGF0ZURhdGFDdWUoSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSosIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
aW5FbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IHBycFBs
YXRmb3JtVmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Vy
aWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0KaW5kZXggYTZm
Njk2MTY0OGZlNjEwY2JkYzA0MjBjODhhZjNlYjdiOTlmZDM5ZS4uNjlhZDQxN2QwMmIyMzVmODlh
ZGQ5N2MyYWM2YTM0NzhiZjA1ZWZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1h
Yy5tbQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aFZhbHVl
SW5Db250ZXh0KGlkIHZhbHVlLCBKU0NvbnRleHQgKmNvbnRleHQpCiAKIHN0YXRpYyBKU1ZhbHVl
ICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNEYXRhICpkYXRhLCBKU0NvbnRleHQgKmNvbnRl
eHQpCiB7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CisgICAgYXV0byBkYXRhQXJyYXkg
PSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CiAK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0
UmVmXSk7CiAgICAgSlNDOjpKU1ZhbHVlIGFycmF5ID0gdG9KUyhleGVjLCBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJh
eS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAwMDQxNDNl
ZmU5MDlkMTBlZjk2OWUyMmVjNTVhZmRlMWJjYTU0MTZkLi5jZDM5YWYxM2RmNjE3MWJmMTczMTky
ZTZkNjM5OWZlM2M5MGU5ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
QEAgLTI2MSw3ICsyNjEsNyBAQCBBcnJheUJ1ZmZlciogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
QXJyYXlCdWZmZXIoKQogICAgICAgICBpZiAobV9iaW5hcnlSZXNwb25zZUJ1aWxkZXIpCiAgICAg
ICAgICAgICBtX3Jlc3BvbnNlQXJyYXlCdWZmZXIgPSBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci0+
Y3JlYXRlQXJyYXlCdWZmZXIoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZXNwb25z
ZUFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShudWxscHRyLCAwKTsKKyAgICAgICAg
ICAgIG1fcmVzcG9uc2VBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobnVsbHB0
ciwgMCk7CiAgICAgICAgIG1fYmluYXJ5UmVzcG9uc2VCdWlsZGVyID0gbnVsbHB0cjsKICAgICB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274421</attachid>
            <date>2016-03-18 09:34:19 -0700</date>
            <delta_ts>2016-03-21 07:16:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155328-20160319013329.patch</filename>
            <type>text/plain</type>
            <size>27397</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
ZTk2ZjI3ODc0YWRjNjNlMDZkMzk3MzdjYzlkMDQ1ZDQwOTBlZThjLi41ZjQ5NTE2MzUwNjMxMWI3
ODAzOGJhYWNhZWVhMjIyOWQxNWE1MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wMy0xOCAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNo
YW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBBUEkvSlNUeXBlZEFycmF5LmNwcDoKKyAgICAg
ICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlQXJyYXlC
dWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuaDoK
KyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgorCiAyMDE2LTAzLTE4ICBDc2FiYSBPc3p0
cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBzcGVjdWxh
dGl2ZSBjbG9vcCBidWlsZGZpeCBhZnRlciByMTk4MzY0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJmMzQ1MmFj
NWIzMzZmNmMyM2QzZDg2NDNmYmJjZWM4ZDZjMzJjOWMuLmE1YTNhNmYyMDg2ZmVjMjJmMjRjYjFj
ZDc2NzcyMDhjNDE0NjZkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNi0wMy0x
OCAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0pT
Q10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNoYW5nZSB0aGUgY2FsbHNpdGVzIHdo
ZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgYmVoYXZpb3Vycy4KKworICAgICAgICAqIE1vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6cHJv
Y2Vzc0lmRW1wdHlPckRpc3R1cmJlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNv
bnN1bWVUZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXI+Pik6
CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlUmVhZGVyTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVJlYWRlckxvYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3Nv
Y2lhdGVCdWZmZXJEYXRhSW1wbCk6CisgICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFDdWU6OkRhdGFDdWUpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YUN1ZTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFDdWU6OmN1ZUNvbnRlbnRzTWF0Y2gpOgorICAgICAgICAqIGh0
bWwvdHJhY2svRGF0YUN1ZS5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRU
cmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRh
Q3VlKToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZERhdGFUZXh0VHJhY2s6OnJlbW92ZUN1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9u
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKwog
MjAxNi0wMy0xOCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtNYWNdW2NtYWtlXSBVbnJldmlld2VkIHNwZWN1bGF0aXZlIGJ1aWxkZml4IGFmdGVyIHIx
OTc2MzMuIEp1c3QgZm9yIGZ1bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNUeXBlZEFycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNUeXBlZEFy
cmF5LmNwcAppbmRleCAyZmVhOTNmZDVlZTc4MjZjZTE4NDE5NzEyZTAxN2YzNTc1MmY4YmY4Li4y
NjI5YWM5NDcyNjA1NTg3ZmNhMTUzOGViMDc2NmNkOTY4ODNlYzI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVHlwZWRBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheShKU0NvbnRleHRSZWYgY3R4LCBKU1R5cGVkQXJy
YXlUeXBlIGFycmF5VHlwZSwKIAogICAgIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSA9IGVsZW1l
bnRTaXplKHRvVHlwZWRBcnJheVR5cGUoYXJyYXlUeXBlKSk7CiAKLSAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBlbGVtZW50Qnl0ZVNp
emUpOworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIGVs
ZW1lbnRCeXRlU2l6ZSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJyYXko
ZXhlYywgYXJyYXlUeXBlLCBXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAgaWYgKGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVz
OjpEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yOTIsNyArMjkyLDcgQEAg
SlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkoSlNDb250
ZXh0UmVmIGN0eCwgdm9pZCogYnl0ZXMKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhieXRlcywgYnl0ZUxlbmd0
aCwgWz1dKHZvaWQqIHApIHsKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVG
cm9tQnl0ZXMoYnl0ZXMsIGJ5dGVMZW5ndGgsIFs9XSh2b2lkKiBwKSB7CiAgICAgICAgIGlmIChi
eXRlc0RlYWxsb2NhdG9yKQogICAgICAgICAgICAgYnl0ZXNEZWFsbG9jYXRvcihwLCBkZWFsbG9j
YXRvckNvbnRleHQpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmgKaW5kZXggYjNkN2VjNmM1MmZhODkyMjliZjI0OWRkNTk0YTlhYTZjOTFkZTY4
NS4uMzFkODdlNjQ0MTIwOTUyZWZlNjVkMDY4ZWY3M2I3MTNlOTA2MmUzYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCkBAIC05NywxNSArOTcsMTkgQEAg
cHJpdmF0ZToKIAogY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50
ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0
ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJy
YXlCdWZmZXIqKTsKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgc3RhdGljIGlu
bGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZmZXI+
IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0
YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYp
OwogICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVkKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUmVm
PEFycmF5QnVmZmVyPiBjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CisgICAgc3RhdGlj
IGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50
cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlKEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGluZSBS
ZWZQdHI8QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpOwogCiAgICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkIGFuZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZUFycmF5QnVmZmVy
LgotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAg
IHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIHN0YXRpYyBp
bmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogCiAgICAgaW5saW5lIHZv
aWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwpAQCAtMTI4
LDggKzEzMiw5IEBAIHB1YmxpYzoKICAgICB+QXJyYXlCdWZmZXIoKSB7IH0KIAogcHJpdmF0ZToK
LSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQorICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworICAgIHN0YXRp
YyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVJbnRlcm5hbChBcnJheUJ1ZmZlckNvbnRl
bnRzJiwgY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVt
ZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsK
ICAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGlubGlu
ZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQg
ZW5kKSBjb25zdDsKICAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0OwpAQCAtMTUzLDI2ICsxNTgsMjUgQEAgaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGlu
dCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQogICAgIHJldHVybiB4OwogfQogCi1SZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2ln
bmVkIGVsZW1lbnRCeXRlU2l6ZSkKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewotICAg
IHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJD
b250ZW50czo6WmVyb0luaXRpYWxpemUpOworICAgIGF1dG8gYnVmZmVyID0gdHJ5Q3JlYXRlKG51
bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICBD
UkFTSCgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKK1Jl
ZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciYgb3RoZXIpCiB7
Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5
dGVMZW5ndGgoKSk7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXIuZGF0YSgp
LCBvdGhlci5ieXRlTGVuZ3RoKCkpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorUmVm
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5z
aWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwot
ICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5
QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250
ZW50cy5tX2RhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gYnVmZmVyID0g
YWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotICAgIEFTU0VSVCghYnl0ZUxl
bmd0aCB8fCBzb3VyY2UpOwotICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRl
TGVuZ3RoKTsKLSAgICByZXR1cm4gV1RGTW92ZShidWZmZXIpOworICAgIGF1dG8gYnVmZmVyID0g
dHJ5Q3JlYXRlKHNvdXJjZSwgYnl0ZUxlbmd0aCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAg
IENSQVNIKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiBSZWY8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29u
dGVudHMpCkBAIC0xOTEsMTIgKzE5NSw1MiBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbgogICAg
IHJldHVybiBjcmVhdGUoY29udGVudHMpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5
QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCitSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK3sK
KyAgICByZXR1cm4gdHJ5Q3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5
QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKEFycmF5QnVmZmVyJiBvdGhlcikKK3sKKyAgICByZXR1
cm4gdHJ5Q3JlYXRlKG90aGVyLmRhdGEoKSwgb3RoZXIuYnl0ZUxlbmd0aCgpKTsKK30KKworUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJj
ZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRl
bnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEs
IEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYg
KCFjb250ZW50cy5tX2RhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBj
cmVhdGVJbnRlcm5hbChjb250ZW50cywgc291cmNlLCBieXRlTGVuZ3RoKTsKK30KKworUmVmPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVybiBjcmVhdGUo
bnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udElu
aXRpYWxpemUpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQorUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiB0cnlDcmVhdGUo
bnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udElu
aXRpYWxpemUpOworfQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJD
b250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIGF1dG8gYnVmZmVy
ID0gdHJ5Q3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpOworfQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVJbnRl
cm5hbChBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cywgY29uc3Qgdm9pZCogc291cmNlLCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3VyY2Up
OworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OworICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKKyAgICBy
ZXR1cm4gYnVmZmVyOworfQorCitSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0cnlD
cmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJy
YXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQogewogICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5
QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKaW5kZXggMjUzNzI2OTY1YTY2Mjc0MWZjY2YwZmE2MmYw
ZTFiMjQwMGVkZDhlNy4uYTg3MzdlZWUxODA2Y2E4ZDM4NjQwOTExNmYyZDJkZDM2NjFlMzY4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaApAQCAtNDIsNyArNDIsNyBAQCBHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5VmlldygKIHRlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CiBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0
aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlci5yZWxlYXNlKCksIDAsIGxlbmd0aCk7CkBAIC03NSw3ICs3NSw3IEBA
IFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+CiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgICAgQXJyYXlCdWZmZXI6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkp
OworICAgICAgICBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNp
emVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLnJlbGVhc2UoKSwgMCwg
bGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCmluZGV4IGNmNDU2ZjNlZjg3YTM3MDc5OGYwMDU2
OTViNTA1MTNlYmRjNTM3NjMuLjJiZTAzZjg4YjlhZTU4NTRhNGQwNDRmOTUxZTAwMmE5ZmQzODg4
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcApAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAgIGF1dG8g
YnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlmICghYnVm
ZmVyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5j
cHAKaW5kZXggMzFkZDBlZWU3NzJhODI3ZmUzMjk4MjRmMGU3NzI3YTY4NTMzNTEzMi4uNmNlNTZk
ZTY2ZTgyODZlOGZkMmQwZTgyZWM4ZGRkODZkOWYyZmEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcApAQCAtOTcsNyArOTcsNyBAQCBib29sIEZldGNoQm9k
eTo6cHJvY2Vzc0lmRW1wdHlPckRpc3R1cmJlZChDb25zdW1lcjo6VHlwZSB0eXBlLCBEZWZlcnJl
ZFdyYXBwZXImCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdDxFeGNlcHRpb25Db2RlPihTWU5U
QVhfRVJSKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIENvbnN1bWVy
OjpUeXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShBcnJheUJ1
ZmZlcjo6Y3JlYXRlKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShB
cnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG51bGxwdHIsIDApKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KENvbnN1bWVy
OjpUeXBlIHR5cGUsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCiAKICAgICBpZiAodHlwZSA9
PSBDb25zdW1lcjo6VHlwZTo6QXJyYXlCdWZmZXIpIHsKICAgICAgICAgVmVjdG9yPGNoYXI+IGRh
dGEgPSBleHRyYWN0RnJvbVRleHQoKTsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlPFJlZlB0cjxB
cnJheUJ1ZmZlcj4+KEFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KSk7CisgICAgICAgIHByb21pc2UucmVzb2x2ZTxSZWZQdHI8QXJyYXlCdWZmZXI+PihBcnJheUJ1
ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIFN0cmluZyBjb250ZW50VHlwZSA9IEJsb2I6Om5vcm1hbGl6ZWRDb250
ZW50VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fbWltZVR5cGUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKaW5kZXggOTdiYzk3Nzgz
OTg1OGMwYTAzYmU3NjgyZTNkMGMzNWI4NTVkMTFlYi4uODM0YTdhZGY0ZmE3YmFiMTIwYTAwNjIx
OGJjYmI5NjhjNjU5ODRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aExvYWRlci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEZldGNoTG9hZGVyOjpkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiB2YWx1ZSwgaW50IHNpemUpCiB2b2lkIEZldGNoTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcsIGRvdWJsZSkKIHsKICAgICBpZiAobV90eXBl
ID09IFR5cGU6OkFycmF5QnVmZmVyKQotICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5n
QXNBcnJheUJ1ZmZlcihtX2RhdGEgPyBtX2RhdGEtPmNyZWF0ZUFycmF5QnVmZmVyKCkgOiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKG51bGxwdHIsIDApKTsKKyAgICAgICAgbV9jbGllbnQuZGlkRmluaXNo
TG9hZGluZ0FzQXJyYXlCdWZmZXIobV9kYXRhID8gbV9kYXRhLT5jcmVhdGVBcnJheUJ1ZmZlcigp
IDogQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShudWxscHRyLCAwKSk7CiAgICAgZWxzZQogICAgICAg
ICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nQXNUZXh0KG1fZGF0YSA/IFRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZShBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSwgIlVURi04IiktPmRlY29k
ZUFuZEZsdXNoKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk6IFN0cmluZygpKTsKICAg
ICBtX2RhdGEgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21p
c2UuaAppbmRleCBiZWVkNjA2YmQ3YTA0NWEyOGY0NzdlNzYxMjY2NDY2Mjg3ZjI2OWQwLi41N2Ni
M2JkNzY4Mjk2NzM1ZThjMzI1Y2M3YTk5YmMxMzI2N2U0YzNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtMTczLDcgKzE3Myw3IEBAIGlubGluZSB2b2lk
IERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxWZWN0b3I8dW5zaWduZWQgY2hhcj4+KGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZShyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICBh
dXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUocmVzdWx0LmRhdGEoKSwgcmVzdWx0
LnNpemUoKSk7CiAgICAgcmVzb2x2ZSgqZXhlYywgdG9KUyhleGVjLCBtX2dsb2JhbE9iamVjdC5n
ZXQoKSwgYnVmZmVyLmdldCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAK
aW5kZXggZGU0MDg0ZmRiYzNmNzE5NmNiNzNmYjViYjZlZDE5YWVlNDNjNDMyZC4uNmFiYzg2Y2Qw
ZGUzNWViMjVhYTdkMmRkNzA2YWNhNDJkZTdkZDRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VF
dmVudC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChQ
YXNzUmVmUHRyPEJsb2I+IGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewogfQogCi1NZXNz
YWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChSZWZQdHI8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW4pCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChSZWY8QXJyYXlCdWZm
ZXI+JiYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgOiBFdmVudChldmVudE5hbWVz
KCkubWVzc2FnZUV2ZW50LCBmYWxzZSwgZmFsc2UpCiAgICAgLCBtX2RhdGFUeXBlKERhdGFUeXBl
QXJyYXlCdWZmZXIpCiAgICAgLCBtX2RhdGFBc0FycmF5QnVmZmVyKFdURk1vdmUoZGF0YSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZUV2ZW50LmgKaW5kZXggYzg4ODE0ODZmYTdjMjM2MGJlZmU4YjAxM2Zj
MjU2ZmNjYzIyMWRmYi4uMDY4Y2I4ZTRlYWI4M2E1NGU3YWVkZTJkZTYzN2FhMWU5N2NjOTczZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZXNzYWdlRXZlbnQoZGF0YSwgb3Jp
Z2luKSk7CiAgICAgfQotICAgIHN0YXRpYyBSZWY8TWVzc2FnZUV2ZW50PiBjcmVhdGUoUmVmUHRy
PEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luID0gU3RyaW5nKCkpCisg
ICAgc3RhdGljIFJlZjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZShSZWY8QXJyYXlCdWZmZXI+JiYgZGF0
YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4gPSBTdHJpbmcoKSkKICAgICB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE1lc3NhZ2VFdmVudChXVEZNb3ZlKGRhdGEpLCBvcmlnaW4pKTsKICAg
ICB9CkBAIC0xMjcsNyArMTI3LDcgQEAgcHJpdmF0ZToKIAogICAgIGV4cGxpY2l0IE1lc3NhZ2VF
dmVudChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKICAgICBleHBs
aWNpdCBNZXNzYWdlRXZlbnQoUGFzc1JlZlB0cjxCbG9iPiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbik7Ci0gICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBk
YXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbik7CisgICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KFJl
ZjxBcnJheUJ1ZmZlcj4mJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbik7CiAKICAgICBEYXRh
VHlwZSBtX2RhdGFUeXBlOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGF0YUFzU2Ny
aXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcApp
bmRleCBhODBhMmFiMTJlMDc0MTgxYTBkYmQ1MGFmZDk2Y2Q2ZDhmYjkxMDhmLi40N2NhYWIxZTI5
MzAzYWQ4MjY5OWU3MjQ3NDFjNzJhMmRkNWM5NjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEZpbGVSZWFk
ZXJMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJgogICAgIH0KIAogICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKLSAgICBtX3Jhd0Rh
dGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpLCAx
KTsKKyAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihsZW5ndGgpLCAxKTsKIAogICAgIGlmICghbV9yYXdEYXRhKSB7CiAgICAgICAgIGZh
aWxlZChGaWxlRXJyb3I6Ok5PVF9SRUFEQUJMRV9FUlIpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHZv
aWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50
IGRhdGFMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbmV3TGVuZ3RoID0gc3RkOjptYXgobmV3TGVuZ3RoLCBtX3RvdGFsQnl0ZXMgKyBt
X3RvdGFsQnl0ZXMgLyA0ICsgMSk7Ci0gICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5l
d0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG5ld0xlbmd0aCwgMSk7CisgICAgICAgICAgICBh
dXRvIG5ld0RhdGEgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG5ld0xlbmd0aCwgMSk7CiAgICAg
ICAgICAgICBpZiAoIW5ld0RhdGEpIHsKICAgICAgICAgICAgICAgICAvLyBOb3QgZW5vdWdoIG1l
bW9yeS4KICAgICAgICAgICAgICAgICBmYWlsZWQoRmlsZUVycm9yOjpOT1RfUkVBREFCTEVfRVJS
KTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IEZpbGVSZWFkZXJMb2Fk
ZXI6OmFycmF5QnVmZmVyUmVzdWx0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fcmF3RGF0YTsK
IAogICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgY29weS4KLSAgICByZXR1cm4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShtX3Jhd0RhdGEuZ2V0KCkpOworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKCptX3Jhd0RhdGEpOwogfQogCiBTdHJpbmcgRmlsZVJlYWRlckxvYWRlcjo6c3RyaW5nUmVz
dWx0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAppbmRleCBl
NWIwODY3ZDA3YzM2YjY4NDRmYWRlYmYyNTU2MDQ4MDk0MmYxYTc3Li42YmQyM2NlN2M0YTliZWNk
OTUwNGZmOGY2NDdiOTA1MDI1MTc2YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RzaXplaXB0ciBieXRlTGVu
CiAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgICAgIGNsZWFyQ2FjaGVk
TWF4SW5kaWNlcygpOwogICAgICAgICBpZiAoYnl0ZUxlbmd0aCkgewotICAgICAgICAgICAgbV9l
bGVtZW50QXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5ndGgsIDEpOwor
ICAgICAgICAgICAgbV9lbGVtZW50QXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
KGJ5dGVMZW5ndGgsIDEpOwogICAgICAgICAgICAgaWYgKCFtX2VsZW1lbnRBcnJheUJ1ZmZlcikg
ewogICAgICAgICAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKaW5kZXggMTBiZTI5
ZjlmZWE0MzFlYWIxYmNjYjdjYTE5NjNiOGNiYzQ3NDc3Mi4uMzlhNzhhZGVlOTJlYTQ1YmRkNTdl
ZmMzYWY5NjQ0YmNiODM1ZDU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3Bw
CkBAIC01MCwxMCArNTAsMTAgQEAgRGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdAogfQogCiAjaWYgRU5B
QkxFKERBVEFDVUVfVkFMVUUpCi1EYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5k
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9ybVZh
bHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCitEYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+JiYgcGxhdGZv
cm1WYWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQs
IHN0YXJ0LCBlbmQpCiAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcGxhdGZvcm1WYWx1ZShw
bGF0Zm9ybVZhbHVlKQorICAgICwgbV9wbGF0Zm9ybVZhbHVlKFdURk1vdmUocGxhdGZvcm1WYWx1
ZSkpCiB7CiB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgRGF0YUN1ZTo6fkRhdGFDdWUoKQogI2VuZGlm
CiB9CiAKLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFDdWU6OmRhdGEoKSBjb25zdAorUmVm
UHRyPEFycmF5QnVmZmVyPiBEYXRhQ3VlOjpkYXRhKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoREFU
QUNVRV9WQUxVRSkKICAgICBpZiAobV9wbGF0Zm9ybVZhbHVlKQpAQCAtODUsNyArODUsNyBAQCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBEYXRhQ3VlOjpkYXRhKCkgY29uc3QKICAgICBpZiAoIW1f
ZGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQXJyYXlCdWZmZXI6
OmNyZWF0ZShtX2RhdGEuZ2V0KCkpOworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKCpt
X2RhdGEpOwogfQogCiB2b2lkIERhdGFDdWU6OnNldERhdGEoQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgRGF0YUN1ZTo6c2V0RGF0
YShBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV92YWx1ZSA9IEpT
Qzo6SlNWYWx1ZSgpOwogI2VuZGlmCiAKLSAgICBtX2RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGRhdGEpOworICAgIG1fZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoKmRhdGEpOwogfQogCiBE
YXRhQ3VlKiB0b0RhdGFDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCkBAIC0xMzIsMTAgKzEzMiwxMCBA
QCBib29sIERhdGFDdWU6OmN1ZUNvbnRlbnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUp
IGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVF
KQotICAgIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4gb3RoZXJQbGF0
Zm9ybVZhbHVlID0gZGF0YUN1ZS0+cGxhdGZvcm1WYWx1ZSgpOworICAgIGNvbnN0IFNlcmlhbGl6
ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uKiBvdGhlclBsYXRmb3JtVmFsdWUgPSBkYXRhQ3VlLT5w
bGF0Zm9ybVZhbHVlKCk7CiAgICAgaWYgKChvdGhlclBsYXRmb3JtVmFsdWUgJiYgIW1fcGxhdGZv
cm1WYWx1ZSkgfHwgKCFvdGhlclBsYXRmb3JtVmFsdWUgJiYgbV9wbGF0Zm9ybVZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BsYXRmb3JtVmFsdWUgJiYgIW1fcGxhdGZv
cm1WYWx1ZS0+aXNFcXVhbCgqb3RoZXJQbGF0Zm9ybVZhbHVlLmdldCgpKSkKKyAgICBpZiAobV9w
bGF0Zm9ybVZhbHVlICYmICFtX3BsYXRmb3JtVmFsdWUtPmlzRXF1YWwoKm90aGVyUGxhdGZvcm1W
YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUgPSB2YWx1ZShudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKaW5kZXgg
MjAwNzk0ZGI1YjhlNDZkMmRmMjkwNDBkNDQwZGUxMzY5OGVmMzM5NS4uZDcxZmI4MTE3MThiOTE0
MTY5ODFiNTU5ZWRlMzU4MmRjNDMyMDdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmgKQEAgLTYxLDkgKzYxLDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShEQVRBQ1VF
X1ZBTFVFKQotICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9y
bVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFy
dCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNl
bnRhdGlvbj4mJiBwbGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIHBs
YXRmb3JtVmFsdWUsIHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUN1
ZShjb250ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCB0eXBlKSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNzUsMTEgKzc1
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhQ3VlKCk7CiAgICAgQ3VlVHlwZSBjdWVU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRGF0YTsgfQogCi0gICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShBcnJheUJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsK
IAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQotICAgIGNvbnN0IFBhc3NSZWZQdHI8U2VyaWFs
aXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3BsYXRmb3JtVmFsdWU7IH0KKyAgICBjb25zdCBTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNl
bnRhdGlvbiogcGxhdGZvcm1WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1WYWx1ZS5n
ZXQoKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgdm9pZCBzZXRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CkBAIC05
Niw3ICs5Niw3IEBAIHByb3RlY3RlZDoKICAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgQXJyYXlC
dWZmZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgRGF0YUN1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFU
aW1lJiBlbmQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CiAjaWYgRU5BQkxFKERBVEFDVUVfVkFM
VUUpCi0gICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBsYXRm
b3JtUmVwcmVzZW50YXRpb24+LCBjb25zdCBTdHJpbmcmKTsKKyAgICBEYXRhQ3VlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiYmLCBjb25zdCBT
dHJpbmcmKTsKICAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRp
YVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgSlNDOjpKU1ZhbHVlLCBjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZERhdGFUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmREYXRhVGV4dFRyYWNrLmNwcAppbmRleCA5NWMwMzAyNmU5MGQ1ZTFiMjE4YWIxOTFmMTc4Y2Yw
NDM1NzBmM2YxLi4xM2FjYWQxMWFlYTAyMmI4ZTUwYTdjODI5YWJmNmY0OTFiNGVjYjBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHAK
QEAgLTY1LDE4ICs2NSwxOCBAQCB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OmFkZERhdGFDdWUo
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IE1lZGlhVGltZSYgcwogICAgIGlmIChtX2lu
Y29tcGxldGVDdWVNYXAuZmluZChwbGF0Zm9ybVZhbHVlLmdldCgpKSAhPSBtX2luY29tcGxldGVD
dWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhQ3VlPiBjdWUg
PSBEYXRhQ3VlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwg
cGxhdGZvcm1WYWx1ZSwgdHlwZSk7Ci0gICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCksIFRleHRUcmFj
a0N1ZTo6SWdub3JlRHVyYXRpb24pKSB7CisgICAgYXV0byBjdWUgPSBEYXRhQ3VlOjpjcmVhdGUo
KnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgcGxhdGZvcm1WYWx1ZS5jb3B5
UmVmKCksIHR5cGUpOworICAgIGlmIChoYXNDdWUoY3VlLnB0cigpLCBUZXh0VHJhY2tDdWU6Okln
bm9yZUR1cmF0aW9uKSkgewogICAgICAgICBMT0coTWVkaWEsICJJbmJhbmREYXRhVGV4dFRyYWNr
OjphZGREYXRhQ3VlIGlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3VlOiBzdGFydD0lcywgZW5kPSVz
XG4iLCB0b1N0cmluZyhjdWUtPnN0YXJ0VGltZSgpKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhj
dWUtPmVuZFRpbWUoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoZW5kLmlzUG9zaXRpdmVJbmZpbml0ZSgpICYmIG1lZGlhRWxlbWVudCgpKSB7CiAg
ICAgICAgIGN1ZS0+c2V0RW5kVGltZShtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb25NZWRpYVRpbWUo
KSk7Ci0gICAgICAgIG1faW5jb21wbGV0ZUN1ZU1hcC5hZGQocGxhdGZvcm1WYWx1ZSwgY3VlKTsK
KyAgICAgICAgbV9pbmNvbXBsZXRlQ3VlTWFwLmFkZChXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCBj
dWUuY29weVJlZigpKTsKICAgICB9CiAKLSAgICBhZGRDdWUoY3VlLnJlbGVhc2UoKSwgQVNTRVJU
X05PX0VYQ0VQVElPTik7CisgICAgYWRkQ3VlKFdURk1vdmUoY3VlKSwgQVNTRVJUX05PX0VYQ0VQ
VElPTik7CiB9CiAKIHZvaWQgSW5iYW5kRGF0YVRleHRUcmFjazo6dXBkYXRlRGF0YUN1ZShJbmJh
bmRUZXh0VHJhY2tQcml2YXRlKiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFU
aW1lJiBpbkVuZCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4g
cHJwUGxhdGZvcm1WYWx1ZSkKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgSW5iYW5kRGF0YVRl
eHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRUcmFja0N1ZSogY3VlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBBU1NFUlQoY3VlLT5jdWVUeXBlKCkgPT0gVGV4dFRyYWNrQ3VlOjpEYXRhKTsKIAot
ICAgIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4gcGxhdGZvcm1WYWx1
ZSA9IHRvRGF0YUN1ZShjdWUpLT5wbGF0Zm9ybVZhbHVlKCkuZ2V0KCk7Ci0gICAgYXV0byBpdGVy
ID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmQocGxhdGZvcm1WYWx1ZS5nZXQoKSk7CisgICAgU2Vy
aWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24qIHBsYXRmb3JtVmFsdWUgPSBjb25zdF9jYXN0
PFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uKj4odG9EYXRhQ3VlKGN1ZSktPnBsYXRm
b3JtVmFsdWUoKSk7CisgICAgYXV0byBpdGVyID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmQocGxh
dGZvcm1WYWx1ZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pbmNvbXBsZXRlQ3VlTWFwLmVuZCgpKQot
ICAgICAgICBtX2luY29tcGxldGVDdWVNYXAucmVtb3ZlKHBsYXRmb3JtVmFsdWUuZ2V0KCkpOwor
ICAgICAgICBtX2luY29tcGxldGVDdWVNYXAucmVtb3ZlKHBsYXRmb3JtVmFsdWUpOwogCiAgICAg
SW5iYW5kVGV4dFRyYWNrOjpyZW1vdmVDdWUoY3VlLCBlYyk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25N
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVw
cmVzZW50YXRpb25NYWMubW0KaW5kZXggYTZmNjk2MTY0OGZlNjEwY2JkYzA0MjBjODhhZjNlYjdi
OTlmZDM5ZS4uNjlhZDQxN2QwMmIyMzVmODlhZGQ5N2MyYWM2YTM0NzhiZjA1ZWZhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJl
c2VudGF0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJpYWxp
emVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRp
YyBKU1ZhbHVlICpqc1ZhbHVlV2l0aFZhbHVlSW5Db250ZXh0KGlkIHZhbHVlLCBKU0NvbnRleHQg
KmNvbnRleHQpCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQoTlNE
YXRhICpkYXRhLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVu
Z3RoXSk7CisgICAgYXV0byBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKFtkYXRh
IGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CiAgICAgSlNDOjpKU1ZhbHVlIGFycmF5
ID0gdG9KUyhleGVjLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJheS5nZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274591</attachid>
            <date>2016-03-21 07:16:26 -0700</date>
            <delta_ts>2016-03-21 08:59:24 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-155328-20160321231605.patch</filename>
            <type>text/plain</type>
            <size>27457</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NTM3Njk0NjVlZWQ4MzZiODA5NjgwNmY1ZmJjNGNmZjc2ODcyMTM0Li5kY2Y4OTAwYjBlYWRkNjk3
NWQ2NzcwNGI2NGI4M2NlYWIzNDU0MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wMy0yMSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNo
YW5nZSB0aGUgY2FsbHNpdGVzIHdoZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBBUEkvSlNUeXBlZEFycmF5LmNwcDoKKyAgICAg
ICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlQXJyYXlC
dWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuaDoK
KyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyOjp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgorCiAyMDE2LTAzLTIwICBEYW4gQmVybnN0
ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gRGV0ZXJtaW5lIFRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SIGZyb20gTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHJhdGhl
ciB0aGFuIGZyb20gTUFDX09TX1hfVkVSU0lPTl9NQUpPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA2YWQ2Mjk1
Y2QzNGI2Y2I1M2JkMWE0NjI0ODM2MjNhMDZiM2U4MDUuLjYxYjBmMTRhNTAzMTc2ODcwOWNiMThl
NWNhMWZiZTkyYjcyOGU3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNi0wMy0y
MSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0pT
Q10gQWRkIEFycmF5QnVmZmVyOjp0cnlDcmVhdGUgYW5kIGNoYW5nZSB0aGUgY2FsbHNpdGVzIHdo
ZXJlIGl0IGlzIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgYmVoYXZpb3Vycy4KKworICAgICAgICAqIE1vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6cHJv
Y2Vzc0lmRW1wdHlPckRpc3R1cmJlZCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmNv
bnN1bWVUZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZldGNoTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNoYXI+Pik6
CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlUmVhZGVyTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVJlYWRlckxvYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjphc3Nv
Y2lhdGVCdWZmZXJEYXRhSW1wbCk6CisgICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFDdWU6OkRhdGFDdWUpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YUN1ZTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFDdWU6OmN1ZUNvbnRlbnRzTWF0Y2gpOgorICAgICAgICAqIGh0
bWwvdHJhY2svRGF0YUN1ZS5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRU
cmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjphZGREYXRh
Q3VlKToKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZERhdGFUZXh0VHJhY2s6OnJlbW92ZUN1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9u
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KToKKwog
MjAxNi0wMi0wMyAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbY3NzLWdyaWRdIEZpeCBwZXJjZW50YWdlIHRyYWNrcycgc2l6ZSBjb21wdXRhdGlv
biBpbiBncmlkcyB3aXRoIGd1dHRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNUeXBlZEFycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNUeXBl
ZEFycmF5LmNwcAppbmRleCAyZmVhOTNmZDVlZTc4MjZjZTE4NDE5NzEyZTAxN2YzNTc1MmY4YmY4
Li4yNjI5YWM5NDcyNjA1NTg3ZmNhMTUzOGViMDc2NmNkOTY4ODNlYzI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVHlwZWRBcnJheS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgSlNP
YmplY3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheShKU0NvbnRleHRSZWYgY3R4LCBKU1R5cGVk
QXJyYXlUeXBlIGFycmF5VHlwZSwKIAogICAgIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSA9IGVs
ZW1lbnRTaXplKHRvVHlwZWRBcnJheVR5cGUoYXJyYXlUeXBlKSk7CiAKLSAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBlbGVtZW50Qnl0
ZVNpemUpOworICAgIGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgs
IGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJy
YXkoZXhlYywgYXJyYXlUeXBlLCBXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3Rh
dHVzOjpEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yOTIsNyArMjkyLDcg
QEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkoSlND
b250ZXh0UmVmIGN0eCwgdm9pZCogYnl0ZXMKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0
eCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKIAotICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhieXRlcywgYnl0ZUxl
bmd0aCwgWz1dKHZvaWQqIHApIHsKKyAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGVGcm9tQnl0ZXMoYnl0ZXMsIGJ5dGVMZW5ndGgsIFs9XSh2b2lkKiBwKSB7CiAgICAgICAgIGlm
IChieXRlc0RlYWxsb2NhdG9yKQogICAgICAgICAgICAgYnl0ZXNEZWFsbG9jYXRvcihwLCBkZWFs
bG9jYXRvckNvbnRleHQpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKaW5kZXggYjNkN2VjNmM1MmZhODkyMjliZjI0OWRkNTk0YTlhYTZjOTFk
ZTY4NS4uMzFkODdlNjQ0MTIwOTUyZWZlNjVkMDY4ZWY3M2I3MTNlOTA2MmUzYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCkBAIC05NywxNSArOTcsMTkg
QEAgcHJpdmF0ZToKIAogY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNv
dW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50
Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
QXJyYXlCdWZmZXIqKTsKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgc3RhdGlj
IGlubGluZSBSZWY8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5z
aWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZjxBcnJheUJ1ZmZl
cj4gY3JlYXRlKEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGluZSBSZWY8QXJyYXlCdWZm
ZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAg
IHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYpOwogICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVkKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUg
UmVmPEFycmF5QnVmZmVyPiBjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CisgICAgc3Rh
dGljIGlubGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlKEFycmF5QnVmZmVyJik7CisgICAgc3RhdGljIGlubGlu
ZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHRyeUNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpOwogCiAgICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFy
cmF5OjpjcmVhdGVVbmluaXRpYWxpemVkIGFuZCBTaGFyZWRCdWZmZXI6OmNyZWF0ZUFycmF5QnVm
ZmVyLgotICAgIHN0YXRpYyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOworICAgIHN0YXRp
YyBpbmxpbmUgUmVmUHRyPEFycmF5QnVmZmVyPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogCiAgICAgaW5saW5l
IHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwpAQCAt
MTI4LDggKzEzMiw5IEBAIHB1YmxpYzoKICAgICB+QXJyYXlCdWZmZXIoKSB7IH0KIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVu
dHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQorICAgIHN0YXRpYyBpbmxpbmUgUmVmPEFycmF5
QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRl
U2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworICAgIHN0
YXRpYyBpbmxpbmUgUmVmPEFycmF5QnVmZmVyPiBjcmVhdGVJbnRlcm5hbChBcnJheUJ1ZmZlckNv
bnRlbnRzJiwgY29uc3Qgdm9pZCosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gdHJ5Q3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
KTsKICAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGlu
bGluZSBSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWdu
ZWQgZW5kKSBjb25zdDsKICAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgp
IGNvbnN0OwpAQCAtMTUzLDI2ICsxNTgsMjUgQEAgaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVl
KGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQogICAgIHJldHVybiB4OwogfQogCi1SZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKK1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewot
ICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUpOworICAgIGF1dG8gYnVmZmVyID0gdHJ5Q3JlYXRl
KG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpOworICAgIGlmICghYnVmZmVyKQorICAgICAg
ICBDUkFTSCgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikK
K1JlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciYgb3RoZXIp
CiB7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXIt
PmJ5dGVMZW5ndGgoKSk7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXIuZGF0
YSgpLCBvdGhlci5ieXRlTGVuZ3RoKCkpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5
QnVmZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQor
UmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwg
dW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRz
OwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFy
cmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFj
b250ZW50cy5tX2RhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gYnVmZmVy
ID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotICAgIEFTU0VSVCghYnl0
ZUxlbmd0aCB8fCBzb3VyY2UpOwotICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBi
eXRlTGVuZ3RoKTsKLSAgICByZXR1cm4gV1RGTW92ZShidWZmZXIpOworICAgIGF1dG8gYnVmZmVy
ID0gdHJ5Q3JlYXRlKHNvdXJjZSwgYnl0ZUxlbmd0aCk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiBS
ZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYg
Y29udGVudHMpCkBAIC0xOTEsMTIgKzE5NSw1MiBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbgog
ICAgIHJldHVybiBjcmVhdGUoY29udGVudHMpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNp
Z25lZCBlbGVtZW50Qnl0ZVNpemUpCitSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkK
K3sKKyAgICByZXR1cm4gdHJ5Q3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFy
cmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKEFycmF5QnVmZmVyJiBvdGhlcikKK3sKKyAgICBy
ZXR1cm4gdHJ5Q3JlYXRlKG90aGVyLmRhdGEoKSwgb3RoZXIuYnl0ZUxlbmd0aCgpKTsKK30KKwor
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGNvbnN0IHZvaWQqIHNv
dXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNv
bnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgs
IDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAg
aWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBjcmVhdGVJbnRlcm5hbChjb250ZW50cywgc291cmNlLCBieXRlTGVuZ3RoKTsKK30KKworUmVm
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBu
dW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVybiBjcmVh
dGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9u
dEluaXRpYWxpemUpOwogfQogCi1SZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVh
dGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQorUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiB0cnlDcmVh
dGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9u
dEluaXRpYWxpemUpOworfQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIGF1dG8gYnVm
ZmVyID0gdHJ5Q3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpOworfQorCitSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVJ
bnRlcm5hbChBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cywgY29uc3Qgdm9pZCogc291cmNl
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFTU0VSVCghYnl0ZUxlbmd0aCB8fCBzb3Vy
Y2UpOworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKm5ldyBBcnJheUJ1ZmZlcihjb250ZW50
cykpOworICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKKyAg
ICByZXR1cm4gYnVmZmVyOworfQorCitSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjp0
cnlDcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwg
QXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQogewogICAg
IEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKaW5kZXggMjUzNzI2OTY1YTY2Mjc0MWZjY2YwZmE2
MmYwZTFiMjQwMGVkZDhlNy4uYTg3MzdlZWUxODA2Y2E4ZDM4NjQwOTExNmYyZDJkZDM2NjFlMzY4
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaApAQCAtNDIsNyArNDIsNyBAQCBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5VmlldygKIHRlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CiBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxl
bmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBhdXRvIGJ1ZmZlciA9
IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSkpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gY3JlYXRlKGJ1ZmZlci5yZWxlYXNlKCksIDAsIGxlbmd0aCk7CkBAIC03NSw3ICs3NSw3
IEBAIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+CiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgICAgQXJyYXlCdWZmZXI6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOworICAgICAgICBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLnJlbGVhc2UoKSwg
MCwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCmluZGV4IGNmNDU2ZjNlZjg3YTM3MDc5OGYw
MDU2OTViNTA1MTNlYmRjNTM3NjMuLjJiZTAzZjg4YjlhZTU4NTRhNGQwNDRmOTUxZTAwMmE5ZmQz
ODg4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcApAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAgIGF1
dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoZXhlYykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoQm9keS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eS5jcHAKaW5kZXggMzFkZDBlZWU3NzJhODI3ZmUzMjk4MjRmMGU3NzI3YTY4NTMzNTEzMi4uNmNl
NTZkZTY2ZTgyODZlOGZkMmQwZTgyZWM4ZGRkODZkOWYyZmEyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcApAQCAtOTcsNyArOTcsNyBAQCBib29sIEZldGNo
Qm9keTo6cHJvY2Vzc0lmRW1wdHlPckRpc3R1cmJlZChDb25zdW1lcjo6VHlwZSB0eXBlLCBEZWZl
cnJlZFdyYXBwZXImCiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdDxFeGNlcHRpb25Db2RlPihT
WU5UQVhfRVJSKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIENvbnN1
bWVyOjpUeXBlOjpBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKG51bGxwdHIsIDApKTsKKyAgICAgICAgICAgIHByb21pc2UucmVzb2x2
ZShBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG51bGxwdHIsIDApKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBGZXRjaEJvZHk6OmNvbnN1bWVUZXh0KENvbnN1
bWVyOjpUeXBlIHR5cGUsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UpCiAKICAgICBpZiAodHlw
ZSA9PSBDb25zdW1lcjo6VHlwZTo6QXJyYXlCdWZmZXIpIHsKICAgICAgICAgVmVjdG9yPGNoYXI+
IGRhdGEgPSBleHRyYWN0RnJvbVRleHQoKTsKLSAgICAgICAgcHJvbWlzZS5yZXNvbHZlPFJlZlB0
cjxBcnJheUJ1ZmZlcj4+KEFycmF5QnVmZmVyOjpjcmVhdGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpKSk7CisgICAgICAgIHByb21pc2UucmVzb2x2ZTxSZWZQdHI8QXJyYXlCdWZmZXI+PihBcnJh
eUJ1ZmZlcjo6dHJ5Q3JlYXRlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIFN0cmluZyBjb250ZW50VHlwZSA9IEJsb2I6Om5vcm1hbGl6ZWRD
b250ZW50VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fbWltZVR5cGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKaW5kZXggOTdiYzk3
NzgzOTg1OGMwYTAzYmU3NjgyZTNkMGMzNWI4NTVkMTFlYi4uODM0YTdhZGY0ZmE3YmFiMTIwYTAw
NjIxOGJjYmI5NjhjNjU5ODRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaExvYWRlci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEZldGNoTG9hZGVyOjpkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiB2YWx1ZSwgaW50IHNpemUpCiB2b2lkIEZldGNoTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcsIGRvdWJsZSkKIHsKICAgICBpZiAobV90
eXBlID09IFR5cGU6OkFycmF5QnVmZmVyKQotICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2Fk
aW5nQXNBcnJheUJ1ZmZlcihtX2RhdGEgPyBtX2RhdGEtPmNyZWF0ZUFycmF5QnVmZmVyKCkgOiBB
cnJheUJ1ZmZlcjo6Y3JlYXRlKG51bGxwdHIsIDApKTsKKyAgICAgICAgbV9jbGllbnQuZGlkRmlu
aXNoTG9hZGluZ0FzQXJyYXlCdWZmZXIobV9kYXRhID8gbV9kYXRhLT5jcmVhdGVBcnJheUJ1ZmZl
cigpIDogQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShudWxscHRyLCAwKSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nQXNUZXh0KG1fZGF0YSA/IFRleHRSZXNvdXJj
ZURlY29kZXI6OmNyZWF0ZShBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSwgIlVURi04IiktPmRl
Y29kZUFuZEZsdXNoKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk6IFN0cmluZygpKTsK
ICAgICBtX2RhdGEgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Qcm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuaAppbmRleCBiZWVkNjA2YmQ3YTA0NWEyOGY0NzdlNzYxMjY2NDY2Mjg3ZjI2OWQwLi41
N2NiM2JkNzY4Mjk2NzM1ZThjMzI1Y2M3YTk5YmMxMzI2N2U0YzNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaApAQCAtMTczLDcgKzE3Myw3IEBAIGlubGluZSB2
b2lkIERlZmVycmVkV3JhcHBlcjo6cmVzb2x2ZTxWZWN0b3I8dW5zaWduZWQgY2hhcj4+KGNvbnN0
IFZlY3Rvcjx1bnNpZ25lCiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAg
ICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUocmVzdWx0LmRhdGEoKSwgcmVz
dWx0LnNpemUoKSk7CiAgICAgcmVzb2x2ZSgqZXhlYywgdG9KUyhleGVjLCBtX2dsb2JhbE9iamVj
dC5nZXQoKSwgYnVmZmVyLmdldCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5j
cHAKaW5kZXggZGU0MDg0ZmRiYzNmNzE5NmNiNzNmYjViYjZlZDE5YWVlNDNjNDMyZC4uNmFiYzg2
Y2QwZGUzNWViMjVhYTdkMmRkNzA2YWNhNDJkZTdkZDRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3Nh
Z2VFdmVudC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVu
dChQYXNzUmVmUHRyPEJsb2I+IGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewogfQogCi1N
ZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChSZWZQdHI8QXJyYXlCdWZmZXI+JiYgZGF0YSwgY29u
c3QgU3RyaW5nJiBvcmlnaW4pCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChSZWY8QXJyYXlC
dWZmZXI+JiYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgOiBFdmVudChldmVudE5h
bWVzKCkubWVzc2FnZUV2ZW50LCBmYWxzZSwgZmFsc2UpCiAgICAgLCBtX2RhdGFUeXBlKERhdGFU
eXBlQXJyYXlCdWZmZXIpCiAgICAgLCBtX2RhdGFBc0FycmF5QnVmZmVyKFdURk1vdmUoZGF0YSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgKaW5kZXggYzg4ODE0ODZmYTdjMjM2MGJlZmU4YjAx
M2ZjMjU2ZmNjYzIyMWRmYi4uMDY4Y2I4ZTRlYWI4M2E1NGU3YWVkZTJkZTYzN2FhMWU5N2NjOTcz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZXNzYWdlRXZlbnQoZGF0YSwg
b3JpZ2luKSk7CiAgICAgfQotICAgIHN0YXRpYyBSZWY8TWVzc2FnZUV2ZW50PiBjcmVhdGUoUmVm
UHRyPEFycmF5QnVmZmVyPiYmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luID0gU3RyaW5nKCkp
CisgICAgc3RhdGljIFJlZjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZShSZWY8QXJyYXlCdWZmZXI+JiYg
ZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4gPSBTdHJpbmcoKSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE1lc3NhZ2VFdmVudChXVEZNb3ZlKGRhdGEpLCBvcmlnaW4pKTsK
ICAgICB9CkBAIC0xMjcsNyArMTI3LDcgQEAgcHJpdmF0ZToKIAogICAgIGV4cGxpY2l0IE1lc3Nh
Z2VFdmVudChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKICAgICBl
eHBsaWNpdCBNZXNzYWdlRXZlbnQoUGFzc1JlZlB0cjxCbG9iPiBkYXRhLCBjb25zdCBTdHJpbmcm
IG9yaWdpbik7Ci0gICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KFJlZlB0cjxBcnJheUJ1ZmZlcj4m
JiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbik7CisgICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50
KFJlZjxBcnJheUJ1ZmZlcj4mJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbik7CiAKICAgICBE
YXRhVHlwZSBtX2RhdGFUeXBlOwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGF0YUFz
U2NyaXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFk
ZXJMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNw
cAppbmRleCBhODBhMmFiMTJlMDc0MTgxYTBkYmQ1MGFmZDk2Y2Q2ZDhmYjkxMDhmLi40N2NhYWIx
ZTI5MzAzYWQ4MjY5OWU3MjQ3NDFjNzJhMmRkNWM5NjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEZpbGVS
ZWFkZXJMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJgogICAgIH0KIAogICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKLSAgICBtX3Jh
d0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgp
LCAxKTsKKyAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsZW5ndGgpLCAxKTsKIAogICAgIGlmICghbV9yYXdEYXRhKSB7CiAgICAgICAg
IGZhaWxlZChGaWxlRXJyb3I6Ok5PVF9SRUFEQUJMRV9FUlIpOwpAQCAtMTk0LDcgKzE5NCw3IEBA
IHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbmV3TGVuZ3RoID0gc3RkOjptYXgobmV3TGVuZ3RoLCBtX3RvdGFsQnl0ZXMg
KyBtX3RvdGFsQnl0ZXMgLyA0ICsgMSk7Ci0gICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IG5ld0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG5ld0xlbmd0aCwgMSk7CisgICAgICAgICAg
ICBhdXRvIG5ld0RhdGEgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKG5ld0xlbmd0aCwgMSk7CiAg
ICAgICAgICAgICBpZiAoIW5ld0RhdGEpIHsKICAgICAgICAgICAgICAgICAvLyBOb3QgZW5vdWdo
IG1lbW9yeS4KICAgICAgICAgICAgICAgICBmYWlsZWQoRmlsZUVycm9yOjpOT1RfUkVBREFCTEVf
RVJSKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBSZWZQdHI8QXJyYXlCdWZmZXI+IEZpbGVSZWFkZXJM
b2FkZXI6OmFycmF5QnVmZmVyUmVzdWx0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fcmF3RGF0
YTsKIAogICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgY29weS4KLSAgICByZXR1cm4gQXJyYXlC
dWZmZXI6OmNyZWF0ZShtX3Jhd0RhdGEuZ2V0KCkpOworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKCptX3Jhd0RhdGEpOwogfQogCiBTdHJpbmcgRmlsZVJlYWRlckxvYWRlcjo6c3RyaW5n
UmVzdWx0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAppbmRl
eCBlNWIwODY3ZDA3YzM2YjY4NDRmYWRlYmYyNTU2MDQ4MDk0MmYxYTc3Li42YmQyM2NlN2M0YTli
ZWNkOTUwNGZmOGY2NDdiOTA1MDI1MTc2YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFz
c29jaWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RzaXplaXB0ciBieXRl
TGVuCiAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgICAgIGNsZWFyQ2Fj
aGVkTWF4SW5kaWNlcygpOwogICAgICAgICBpZiAoYnl0ZUxlbmd0aCkgewotICAgICAgICAgICAg
bV9lbGVtZW50QXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGJ5dGVMZW5ndGgsIDEp
OworICAgICAgICAgICAgbV9lbGVtZW50QXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3Jl
YXRlKGJ5dGVMZW5ndGgsIDEpOwogICAgICAgICAgICAgaWYgKCFtX2VsZW1lbnRBcnJheUJ1ZmZl
cikgewogICAgICAgICAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRh
Q3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKaW5kZXggMTBi
ZTI5ZjlmZWE0MzFlYWIxYmNjYjdjYTE5NjNiOGNiYzQ3NDc3Mi4uMzlhNzhhZGVlOTJlYTQ1YmRk
NTdlZmMzYWY5NjQ0YmNiODM1ZDU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9EYXRhQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUu
Y3BwCkBAIC01MCwxMCArNTAsMTAgQEAgRGF0YUN1ZTo6RGF0YUN1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdAogfQogCiAjaWYg
RU5BQkxFKERBVEFDVUVfVkFMVUUpCi1EYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0Zm9y
bVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCitEYXRhQ3VlOjpEYXRhQ3VlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlh
VGltZSYgZW5kLCBSZWZQdHI8U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+JiYgcGxh
dGZvcm1WYWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRl
eHQsIHN0YXJ0LCBlbmQpCiAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcGxhdGZvcm1WYWx1
ZShwbGF0Zm9ybVZhbHVlKQorICAgICwgbV9wbGF0Zm9ybVZhbHVlKFdURk1vdmUocGxhdGZvcm1W
YWx1ZSkpCiB7CiB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgRGF0YUN1ZTo6fkRhdGFDdWUoKQogI2Vu
ZGlmCiB9CiAKLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IERhdGFDdWU6OmRhdGEoKSBjb25zdAor
UmVmUHRyPEFycmF5QnVmZmVyPiBEYXRhQ3VlOjpkYXRhKCkgY29uc3QKIHsKICNpZiBFTkFCTEUo
REFUQUNVRV9WQUxVRSkKICAgICBpZiAobV9wbGF0Zm9ybVZhbHVlKQpAQCAtODUsNyArODUsNyBA
QCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBEYXRhQ3VlOjpkYXRhKCkgY29uc3QKICAgICBpZiAo
IW1fZGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShtX2RhdGEuZ2V0KCkpOworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KCptX2RhdGEpOwogfQogCiB2b2lkIERhdGFDdWU6OnNldERhdGEoQXJyYXlCdWZmZXIqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgRGF0YUN1ZTo6c2V0
RGF0YShBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgbV92YWx1ZSA9
IEpTQzo6SlNWYWx1ZSgpOwogI2VuZGlmCiAKLSAgICBtX2RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKGRhdGEpOworICAgIG1fZGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoKmRhdGEpOwogfQog
CiBEYXRhQ3VlKiB0b0RhdGFDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCkBAIC0xMzIsMTAgKzEzMiwx
MCBAQCBib29sIERhdGFDdWU6OmN1ZUNvbnRlbnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJiBj
dWUpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZB
TFVFKQotICAgIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4gb3RoZXJQ
bGF0Zm9ybVZhbHVlID0gZGF0YUN1ZS0+cGxhdGZvcm1WYWx1ZSgpOworICAgIGNvbnN0IFNlcmlh
bGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uKiBvdGhlclBsYXRmb3JtVmFsdWUgPSBkYXRhQ3Vl
LT5wbGF0Zm9ybVZhbHVlKCk7CiAgICAgaWYgKChvdGhlclBsYXRmb3JtVmFsdWUgJiYgIW1fcGxh
dGZvcm1WYWx1ZSkgfHwgKCFvdGhlclBsYXRmb3JtVmFsdWUgJiYgbV9wbGF0Zm9ybVZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BsYXRmb3JtVmFsdWUgJiYgIW1fcGxh
dGZvcm1WYWx1ZS0+aXNFcXVhbCgqb3RoZXJQbGF0Zm9ybVZhbHVlLmdldCgpKSkKKyAgICBpZiAo
bV9wbGF0Zm9ybVZhbHVlICYmICFtX3BsYXRmb3JtVmFsdWUtPmlzRXF1YWwoKm90aGVyUGxhdGZv
cm1WYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUgPSB2YWx1ZShudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKaW5k
ZXggMjAwNzk0ZGI1YjhlNDZkMmRmMjkwNDBkNDQwZGUxMzY5OGVmMzM5NS4uZDcxZmI4MTE3MThi
OTE0MTY5ODFiNTU5ZWRlMzU4MmRjNDMyMDdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRh
Q3VlLmgKQEAgLTYxLDkgKzYxLDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShEQVRB
Q1VFX1ZBTFVFKQotICAgIHN0YXRpYyBSZWY8RGF0YUN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiBwbGF0
Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXBy
ZXNlbnRhdGlvbj4mJiBwbGF0Zm9ybVZhbHVlLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQs
IHBsYXRmb3JtVmFsdWUsIHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YUN1ZShjb250ZXh0LCBzdGFydCwgZW5kLCBXVEZNb3ZlKHBsYXRmb3JtVmFsdWUpLCB0eXBlKSk7
CiAgICAgfQogCiAgICAgc3RhdGljIFJlZjxEYXRhQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1l
JiBlbmQsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNzUsMTEg
Kzc1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhQ3VlKCk7CiAgICAgQ3VlVHlwZSBj
dWVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRGF0YTsgfQogCi0gICAgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0
YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShBcnJheUJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUm
KTsKIAogI2lmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQotICAgIGNvbnN0IFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IHBsYXRmb3JtVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtVmFsdWU7IH0KKyAgICBjb25zdCBTZXJpYWxpemVkUGxhdGZvcm1SZXBy
ZXNlbnRhdGlvbiogcGxhdGZvcm1WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1WYWx1
ZS5nZXQoKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlKEpTQzo6RXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CkBA
IC05Niw3ICs5Niw3IEBAIHByb3RlY3RlZDoKICAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgQXJy
YXlCdWZmZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgRGF0YUN1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBlbmQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CiAjaWYgRU5BQkxFKERBVEFDVUVf
VkFMVUUpCi0gICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFU
aW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFBs
YXRmb3JtUmVwcmVzZW50YXRpb24+LCBjb25zdCBTdHJpbmcmKTsKKyAgICBEYXRhQ3VlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRp
bWUmIGVuZCwgUmVmUHRyPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uPiYmLCBjb25z
dCBTdHJpbmcmKTsKICAgICBEYXRhQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBTdHJpbmcmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmREYXRhVGV4dFRyYWNrLmNwcAppbmRleCA5NWMwMzAyNmU5MGQ1ZTFiMjE4YWIxOTFmMTc4
Y2YwNDM1NzBmM2YxLi4xM2FjYWQxMWFlYTAyMmI4ZTUwYTdjODI5YWJmNmY0OTFiNGVjYjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5j
cHAKQEAgLTY1LDE4ICs2NSwxOCBAQCB2b2lkIEluYmFuZERhdGFUZXh0VHJhY2s6OmFkZERhdGFD
dWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IE1lZGlhVGltZSYgcwogICAgIGlmICht
X2luY29tcGxldGVDdWVNYXAuZmluZChwbGF0Zm9ybVZhbHVlLmdldCgpKSAhPSBtX2luY29tcGxl
dGVDdWVNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhQ3VlPiBj
dWUgPSBEYXRhQ3VlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVu
ZCwgcGxhdGZvcm1WYWx1ZSwgdHlwZSk7Ci0gICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCksIFRleHRU
cmFja0N1ZTo6SWdub3JlRHVyYXRpb24pKSB7CisgICAgYXV0byBjdWUgPSBEYXRhQ3VlOjpjcmVh
dGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgcGxhdGZvcm1WYWx1ZS5j
b3B5UmVmKCksIHR5cGUpOworICAgIGlmIChoYXNDdWUoY3VlLnB0cigpLCBUZXh0VHJhY2tDdWU6
Oklnbm9yZUR1cmF0aW9uKSkgewogICAgICAgICBMT0coTWVkaWEsICJJbmJhbmREYXRhVGV4dFRy
YWNrOjphZGREYXRhQ3VlIGlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3VlOiBzdGFydD0lcywgZW5k
PSVzXG4iLCB0b1N0cmluZyhjdWUtPnN0YXJ0VGltZSgpKS51dGY4KCkuZGF0YSgpLCB0b1N0cmlu
ZyhjdWUtPmVuZFRpbWUoKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoZW5kLmlzUG9zaXRpdmVJbmZpbml0ZSgpICYmIG1lZGlhRWxlbWVudCgpKSB7
CiAgICAgICAgIGN1ZS0+c2V0RW5kVGltZShtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb25NZWRpYVRp
bWUoKSk7Ci0gICAgICAgIG1faW5jb21wbGV0ZUN1ZU1hcC5hZGQocGxhdGZvcm1WYWx1ZSwgY3Vl
KTsKKyAgICAgICAgbV9pbmNvbXBsZXRlQ3VlTWFwLmFkZChXVEZNb3ZlKHBsYXRmb3JtVmFsdWUp
LCBjdWUuY29weVJlZigpKTsKICAgICB9CiAKLSAgICBhZGRDdWUoY3VlLnJlbGVhc2UoKSwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CisgICAgYWRkQ3VlKFdURk1vdmUoY3VlKSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CiB9CiAKIHZvaWQgSW5iYW5kRGF0YVRleHRUcmFjazo6dXBkYXRlRGF0YUN1ZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBpbkVuZCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlv
bj4gcHJwUGxhdGZvcm1WYWx1ZSkKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgSW5iYW5kRGF0
YVRleHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRUcmFja0N1ZSogY3VlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBBU1NFUlQoY3VlLT5jdWVUeXBlKCkgPT0gVGV4dFRyYWNrQ3VlOjpEYXRhKTsK
IAotICAgIFJlZlB0cjxTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbj4gcGxhdGZvcm1W
YWx1ZSA9IHRvRGF0YUN1ZShjdWUpLT5wbGF0Zm9ybVZhbHVlKCkuZ2V0KCk7Ci0gICAgYXV0byBp
dGVyID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmQocGxhdGZvcm1WYWx1ZS5nZXQoKSk7CisgICAg
U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24qIHBsYXRmb3JtVmFsdWUgPSBjb25zdF9j
YXN0PFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uKj4odG9EYXRhQ3VlKGN1ZSktPnBs
YXRmb3JtVmFsdWUoKSk7CisgICAgYXV0byBpdGVyID0gbV9pbmNvbXBsZXRlQ3VlTWFwLmZpbmQo
cGxhdGZvcm1WYWx1ZSk7CiAgICAgaWYgKGl0ZXIgIT0gbV9pbmNvbXBsZXRlQ3VlTWFwLmVuZCgp
KQotICAgICAgICBtX2luY29tcGxldGVDdWVNYXAucmVtb3ZlKHBsYXRmb3JtVmFsdWUuZ2V0KCkp
OworICAgICAgICBtX2luY29tcGxldGVDdWVNYXAucmVtb3ZlKHBsYXRmb3JtVmFsdWUpOwogCiAg
ICAgSW5iYW5kVGV4dFRyYWNrOjpyZW1vdmVDdWUoY3VlLCBlYyk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRp
b25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3Jt
UmVwcmVzZW50YXRpb25NYWMubW0KaW5kZXggYTZmNjk2MTY0OGZlNjEwY2JkYzA0MjBjODhhZjNl
YjdiOTlmZDM5ZS4uNjlhZDQxN2QwMmIyMzVmODlhZGQ5N2MyYWM2YTM0NzhiZjA1ZWZhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJl
cHJlc2VudGF0aW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJp
YWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0
YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aFZhbHVlSW5Db250ZXh0KGlkIHZhbHVlLCBKU0NvbnRl
eHQgKmNvbnRleHQpCiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQo
TlNEYXRhICpkYXRhLCBKU0NvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKFtkYXRhIGJ5dGVzXSwgW2RhdGEg
bGVuZ3RoXSk7CisgICAgYXV0byBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKFtk
YXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CiAgICAgSlNDOjpKU1ZhbHVlIGFy
cmF5ID0gdG9KUyhleGVjLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJheS5nZXQoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>