<?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>137202</bug_id>
          
          <creation_ts>2014-09-28 19:09:31 -0700</creation_ts>
          <short_desc>Make StringView check the lifetime of the StringImpl it&apos;s created from</short_desc>
          <delta_ts>2014-10-07 09:27:28 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037854</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-28 19:09:31 -0700</bug_when>
    <thetext>Make StringView check the lifetime of the StringImpl it&apos;s created from</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038227</commentid>
    <comment_count>1</comment_count>
      <attachid>238929</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-30 09:22:30 -0700</bug_when>
    <thetext>Created attachment 238929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038228</commentid>
    <comment_count>2</comment_count>
      <attachid>238929</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-30 09:23:28 -0700</bug_when>
    <thetext>Comment on attachment 238929
Patch

This initial version isn’t quite right; I am getting a crash on launch that I have to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038241</commentid>
    <comment_count>3</comment_count>
      <attachid>238929</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-09-30 10:05:33 -0700</bug_when>
    <thetext>Comment on attachment 238929
Patch

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

&gt; Source/WTF/wtf/text/StringView.cpp:53
&gt; +static HashMap&lt;const StringImpl*, StringView::UnderlyingString*&gt;&amp; underlyingStrings()
&gt; +{
&gt; +    static NeverDestroyed&lt;HashMap&lt;const StringImpl*, StringView::UnderlyingString*&gt;&gt; map;
&gt; +    return map;
&gt; +}

I think access to and initialization of this data structure needs to be thread safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039021</commentid>
    <comment_count>4</comment_count>
      <attachid>238929</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-02 16:09:09 -0700</bug_when>
    <thetext>Comment on attachment 238929
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringView.cpp:53
&gt;&gt; +}
&gt; 
&gt; I think access to and initialization of this data structure needs to be thread safe.

Yes, I have that mostly done in my local copy of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039448</commentid>
    <comment_count>5</comment_count>
      <attachid>239262</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-03 21:58:54 -0700</bug_when>
    <thetext>Created attachment 239262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039453</commentid>
    <comment_count>6</comment_count>
      <attachid>239264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-03 22:14:56 -0700</bug_when>
    <thetext>Created attachment 239264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039597</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-05 08:42:56 -0700</bug_when>
    <thetext>Anders, you asked me to do this, so would you review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039610</commentid>
    <comment_count>8</comment_count>
      <attachid>239264</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-05 16:09:31 -0700</bug_when>
    <thetext>Comment on attachment 239264
Patch

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

&gt; Source/WTF/wtf/text/StringView.cpp:41
&gt; +    std::atomic_uint refCount { 1 };

I think this should be std::atomic&lt;unsigned&gt; instead.

&gt; Source/WTF/wtf/text/StringView.cpp:56
&gt; +static std::mutex&amp; underlyingStringsMutex()
&gt; +{
&gt; +    static NeverDestroyed&lt;std::mutex&gt; mutex;
&gt; +    return mutex;
&gt; +}

This mutex initialization still isn&apos;t thread safe. You need to do something like:

    static std::once_flag onceFlag;
    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;

    std::call_once(onceFlag, []{
        mutex.construct();
    });

    return mutex;

&gt; Source/WTF/wtf/text/StringView.cpp:107
&gt; +        auto result = underlyingStrings().add(string, nullptr);
&gt; +        if (result.isNewEntry)
&gt; +            result.iterator-&gt;value = new UnderlyingString(*string);
&gt; +        else
&gt; +            ++result.iterator-&gt;value-&gt;refCount;

I&apos;d write this as

auto&amp; underlyingStringSlot = underlyingStrings().add(string, nullptr).iterator-&gt;value;
if (!underlyingStringSlot)
    underlyingStringSlot = new UnderlyingString(*string);
else
    ++underlyingString-&gt;refCount;
underlyingStringSlot = underlyingStringSlot;

&gt; Source/WTF/wtf/text/StringView.h:142
&gt; +    // FIXME: It&apos;s peculiar that null strings are 16-bit and empty strings return 8-bit (according to the is8Bit function).

I agree - we should make them 8-bit strings as well.

&gt; Source/WTF/wtf/text/StringView.h:154
&gt; +    ASSERT(other.underlyingStringIsValid());

Should probably ASSERT that this != &amp;other here.

&gt; Source/WTF/wtf/text/StringView.h:174
&gt; +    ASSERT(other.underlyingStringIsValid());

Should probably ASSERT(this != &amp;other) here since that&apos;s already broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039970</commentid>
    <comment_count>9</comment_count>
      <attachid>239264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-06 23:22:48 -0700</bug_when>
    <thetext>Comment on attachment 239264
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringView.cpp:107
&gt;&gt; +            ++result.iterator-&gt;value-&gt;refCount;
&gt; 
&gt; I&apos;d write this as
&gt; 
&gt; auto&amp; underlyingStringSlot = underlyingStrings().add(string, nullptr).iterator-&gt;value;
&gt; if (!underlyingStringSlot)
&gt;     underlyingStringSlot = new UnderlyingString(*string);
&gt; else
&gt;     ++underlyingString-&gt;refCount;
&gt; underlyingStringSlot = underlyingStringSlot;

The one downside of that version is that there is no iterator lifetime checking on the reference. So if the UnderlyingString constructor, for example, modified the hash table, we would not get a runtime assertion. But I do like it better, and often wrote it that way before, so I’ll go with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039973</commentid>
    <comment_count>10</comment_count>
      <attachid>239398</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-06 23:36:40 -0700</bug_when>
    <thetext>Created attachment 239398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039977</commentid>
    <comment_count>11</comment_count>
      <attachid>239398</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-06 23:57:03 -0700</bug_when>
    <thetext>Comment on attachment 239398
Patch

Damn, I meant to land this, not upload it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039978</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-06 23:58:45 -0700</bug_when>
    <thetext>Committed r174388: &lt;http://trac.webkit.org/changeset/174388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040020</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-10-07 07:22:57 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Committed r174388: &lt;http://trac.webkit.org/changeset/174388&gt;

This has caused assertions on a number of layout tests on the Debug bots: https://build.webkit.org/builders/Apple%20MountainLion%20Debug%20WK2%20%28Tests%29/builds/19510

03:01:14.945 93722 worker/2 animations/change-keyframes-name.html crashed, (stderr lines):
03:01:14.945 93722   ASSERTION FAILED: underlyingStringIsValid()
03:01:14.945 93722   /Volumes/Data/slave/mountainlion-debug/build/WebKitBuild/Debug/usr/local/include/wtf/text/StringView.h(260) : const LChar *WTF::StringView::characters8() const
03:01:14.945 93722   1   0x10ee56270 WTFCrash
03:01:14.945 93722   2   0x1105c80df WTF::StringView::characters8() const
03:01:14.945 93722   3   0x110eed058 WebCore::TextRun::data8(unsigned int) const
03:01:14.945 93722   4   0x11244395f WebCore::WidthIterator::advance(int, WebCore::GlyphBuffer*)
03:01:14.945 93722   5   0x110d93357 WebCore::Font::getGlyphsAndAdvancesForSimpleText(WebCore::TextRun const&amp;, int, int, WebCore::GlyphBuffer&amp;, WebCore::Font::ForTextEmphasisOrNot) const
03:01:14.945 93722   6   0x110d93501 WebCore::Font::drawSimpleText(WebCore::GraphicsContext*, WebCore::TextRun const&amp;, WebCore::FloatPoint const&amp;, int, int) const
03:01:14.945 93722   7   0x110d6d341 WebCore::Font::drawText(WebCore::GraphicsContext*, WebCore::TextRun const&amp;, WebCore::FloatPoint const&amp;, int, int, WebCore::Font::CustomFontNotReadyAction) const
03:01:14.945 93722   8   0x110ee4d7e WebCore::GraphicsContext::drawText(WebCore::Font const&amp;, WebCore::TextRun const&amp;, WebCore::FloatPoint const&amp;, int, int)
03:01:14.945 93722   9   0x112039b0f WebCore::SimpleLineLayout::paintFlow(WebCore::RenderBlockFlow const&amp;, WebCore::SimpleLineLayout::Layout const&amp;, WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.945 93722   10  0x111baf5a8 WebCore::RenderBlockFlow::paintInlineChildren(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.945 93722   11  0x111b6973c WebCore::RenderBlock::paintContents(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.945 93722   12  0x111b6a40e WebCore::RenderBlock::paintObject(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   13  0x111b6957c WebCore::RenderBlock::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   14  0x111b69c80 WebCore::RenderBlock::paintChild(WebCore::RenderBox&amp;, WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::PaintInfo&amp;, bool)
03:01:14.946 93722   15  0x111b698b7 WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::PaintInfo&amp;, bool)
03:01:14.946 93722   16  0x111b69838 WebCore::RenderBlock::paintContents(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   17  0x111b6a40e WebCore::RenderBlock::paintObject(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   18  0x111b6957c WebCore::RenderBlock::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   19  0x111b69c80 WebCore::RenderBlock::paintChild(WebCore::RenderBox&amp;, WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::PaintInfo&amp;, bool)
03:01:14.946 93722   20  0x111b698b7 WebCore::RenderBlock::paintChildren(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::PaintInfo&amp;, bool)
03:01:14.946 93722   21  0x111b69838 WebCore::RenderBlock::paintContents(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   22  0x111b6a40e WebCore::RenderBlock::paintObject(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   23  0x111b6957c WebCore::RenderBlock::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;)
03:01:14.946 93722   24  0x111cbcbae WebCore::RenderLayer::paintForegroundForFragmentsWithPhase(WebCore::PaintPhase, WTF::Vector&lt;WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow&gt; const&amp;, WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int, WebCore::RenderObject*)
03:01:14.946 93722   25  0x111cba735 WebCore::RenderLayer::paintForegroundForFragments(WTF::Vector&lt;WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow&gt; const&amp;, WebCore::GraphicsContext*, WebCore::GraphicsContext*, WebCore::LayoutRect const&amp;, bool, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int, WebCore::RenderObject*, bool)
03:01:14.947 93722   26  0x111cb69b2 WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int)
03:01:14.947 93722   27  0x111cb601a WebCore::RenderLayer::paintLayerContentsAndReflection(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int)
03:01:14.947 93722   28  0x111cb4d43 WebCore::RenderLayer::paintLayer(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int)
03:01:14.947 93722   29  0x111cba423 WebCore::RenderLayer::paintList(WTF::Vector&lt;WebCore::RenderLayer*, 0ul, WTF::CrashOnOverflow&gt;*, WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int)
03:01:14.947 93722   30  0x111cb6a8b WebCore::RenderLayer::paintLayerContents(WebCore::GraphicsContext*, WebCore::RenderLayer::LayerPaintingInfo const&amp;, unsigned int)
03:01:14.947 93722   31  0x111ce5361 WebCore::RenderLayerBacking::paintIntoLayer(WebCore::GraphicsLayer const*, WebCore::GraphicsContext*, WebCore::IntRect const&amp;, unsigned int, unsigned int)
03:01:14.955 93688 [1039/34451] animations/change-keyframes-name.html failed unexpectedly (WebProcess crashed [pid=93900])</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040034</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-07 09:27:28 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This has caused assertions on a number of layout tests on the Debug bots:

We’re turning the checking off until we can resolve this; also, that looks like we uncovered a real bug! I didn’t see that locally when I ran the tests, not sure why.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238929</attachid>
            <date>2014-09-30 09:22:30 -0700</date>
            <delta_ts>2014-10-03 21:58:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137202-20140930092230.patch</filename>
            <type>text/plain</type>
            <size>27825</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMxNjkyODlmN2E5OTk4ZjYyNGIyNWE4
ZjdiOTE4YWNjNGI4MmEzYzQuLjc4ZWRjZDdiNTZjMWMwMDI4ZWQxOWFiZmFiNzMwZGNmYmEzODJi
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTQtMDktMzAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3RyaW5nVmlldyBjaGVjayB0aGUgbGlmZXRpbWUg
b2YgdGhlIFN0cmluZ0ltcGwgaXQncyBjcmVhdGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6IEFk
ZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnM6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdWaWV3LmNwcC4KKyAgICAgICAgKiB3dGYvQ01ha2VM
aXN0cy50eHQ6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorCisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKTogQ2Fs
bCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp1bmRlcmx5aW5nU3RyaW5ncyk6IFJldHVybnMg
bWFwIGZyb20gU3RyaW5nSW1wbCB0byB0aGUgdW5kZXJseWluZworICAgICAgICBzdHJpbmcgb2Jq
ZWN0IHVzZWQgYnkgU3RyaW5nVmlldyB0byB0cmFjayB2YWxpZGl0eS4KKyAgICAgICAgKFdURjo6
U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IE1hcmsgdGhlIHVuZGVybHlpbmcgc3RyaW5nIG9iamVj
dCBpbnZhbGlkLAorICAgICAgICBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCwgc28gYW55IGZ1
dHVyZSBTdHJpbmdJbXBsIHdpbGwgZ2V0IGEgbmV3IG9uZSwKKyAgICAgICAgZXZlbiBpZiBpdCBo
YXMgdGhlIHNhbWUgcG9pbnRlci4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dW5kZXJseWlu
Z1N0cmluZ0lzVmFsaWQpOiBSZXR1cm4gdHJ1ZSBvbmx5IGlmIHRoZQorICAgICAgICB1bmRlcmx5
aW5nIHN0cmluZyBpcyBzdGlsbCB2YWxpZC4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0
VW5kZXJseWluZ1N0cmluZyk6IENyZWF0ZSBhbmQgbWFuYWdlIHJlZmVyZW5jZSBjb3VudHMKKyAg
ICAgICAgb2YgdW5kZXJseWluZyBzdHJpbmcgb2JqZWN0cyBhcyBuZWVkZWQuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24sCisgICAgICAgIHNvIHdlIGNhbiBub3cgcmVhZCBhIGNsZWFuIGNs
YXNzIGRlZmluaXRpb24gdG8gc2VlIHRoZSBjbGFzcyBkZXNpZ24gYW5kIHdoYXQKKyAgICAgICAg
ZnVuY3Rpb25zIGl0IG9mZmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3RyaW5nVmll
dyk6IEFkZGVkIGEgY29tbWVudCB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
QWxzbyBhZGRlZCBjb3B5IGFuZCBtb3ZlIGNvbnN0cnVjdG9ycyBzbyB0aGV5IGNhbiBjYWxsIHNl
dFVuZGVybHlpbmdTdHJpbmcKKyAgICAgICAgYW5kIGFzc2VydCB0aGUgdW5kZXJseWluZyBzdHJp
bmcgaXMgdmFsaWQgYXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlCisgICAgICAgIGNvbXBpbGVyLWdl
bmVyYXRlZCBvbmVzLgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldyk6IEFk
ZGVkIGEgY2FsbCB0byBzZXRVbmRlcmx5aW5nU3RyaW5nLgorICAgICAgICAoV1RGOjpTdHJpbmdW
aWV3OjpvcGVyYXRvcj0pOiBBZGRlZCB0aGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyB3aXRoIHRo
ZSBzYW1lCisgICAgICAgIGpvYiBhcyB0aGUgY29uc3RydWN0b3JzIGFib3ZlLgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Ojppbml0aWFsaXplKTogQWRkZWQgYSBjb21tZW50LgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3OjpjaGFyYWN0ZXJzOCk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHRo
ZSB1bmRlcmx5aW5nCisgICAgICAgIHN0cmluZyBpcyB2YWxpZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Y2hhcmFjdGVyczE2KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OnN1YnN0cmluZyk6IEFkZGVkIGNvZGUgdG8gcHJvcGFnYXRlIHRoZSB1bmRlcmx5aW5nIHN0cmlu
ZworICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBzdHJpbmcgdG8gdGhlIHN1YnN0cmluZy4KKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IElubGluZSBlbXB0eSB2ZXJzaW9u
IG9mIHRoaXMgZnVuY3Rpb24gZm9yCisgICAgICAgIG5vbi1kZWJ1ZyBidWlsZHMuCisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcpOiBEaXR0by4KKwogMjAx
NC0wOS0yOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NDA0NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCmluZGV4IDhhYjFhNDMzMWE2OGE0NDdlYzQ5ZWVhZjQ1ZTU0YzNhY2M3Mjc4ODUuLmIz
N2UwYWQ2Mzk2NGI3MWI5NmY5NjEzOWMzZmUyZWI3ZWJjYTMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagpAQCAtMTM0LDYgKzEzNCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxTdHJpbmdCdWlsZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFN0cmluZ0ltcGwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cd3RmXHRleHRcU3RyaW5nU3RhdGljcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFdURlN0cmluZy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxjZlxBdG9taWNTdHJpbmdDRi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx3dGZcdGV4dFxjZlxTdHJpbmdDRi5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZDVlNTYwODNiNzAwZGU2YWI5OTEyMmIy
MTkxZTAyYjE4NDQ4NWE4OC4uZmFkMDQzNDY0ZDkwOTE3MGM2NmNiNTRjMjZkNTEwYjU4OWRhNjRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAtNjAs
NiArNjAsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXHRleHRcU3RyaW5nU3Rh
dGljcy5jcHAiPgogICAgICAgPEZpbHRlcj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCI+Cisg
ICAgICA8RmlsdGVyPnRleHQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5jcHAiPgogICAgICAgPEZpbHRl
cj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAzNWI3ZGNjNGNiNDg3MjA0NzQ3ODgzZmYwMGI5ZGE1MzEx
ZjZlZjAyLi40Mjc4MTE3NTE0OGIzMzZjZGYxNmU4MWFiN2JmZDJjN2E0YWNmY2I3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgzLDYgKzgzLDcgQEAKIAkJ
OTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBEMEQ2
QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLzsgfTsKIAkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5
IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLzsgfTsKIAkJOTNCMUFBODAx
ODBFNUFGMzAwNEEyRjA1IC8qIFBhc3NSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjFBQTdGMTgwRTVBRjMwMDRBMkYwNSAvKiBQYXNzUmVmLmgg
Ki87IH07CisJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLzsgfTsKIAkJOTc0Q0ZDOEUxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi87IH07CiAJ
CTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkM3MEYwNDE3NkMzNzlE
MDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9OwogCQk5QkQ4RjQwQjE3NkMy
QjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9t
aWNTdHJpbmdUYWJsZS5oICovOyB9OwpAQCAtMzcwLDYgKzM3MSw3IEBACiAJCTkzOTM0QkQ0MThB
MUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU3RyaW5nVmlld0NGLmNwcDsgcGF0aCA9IGNmL1N0cmluZ1ZpZXdDRi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUM5MUE3MTg5NDJGQzQwMDI0NDkz
OSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMQ2hhci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IxQUE3RjE4MEU1QUYzMDA0QTJGMDUgLyog
UGFzc1JlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzUmVmLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzRDRkM4RDE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWFrUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0MTc2QzM3OUQw
MDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTQ5LDEyICs5NTEsMTMgQEAKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSGFzaC5oICovLAogCQkJCUE4QTQ3MzI4MTUxQTgyNUIwMDQxMjNGRiAvKiBT
dHJpbmdJbXBsLmNwcCAqLywKIAkJCQlBOEE0NzMyOTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
SW1wbC5oICovLAorCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMwMTI2RiAvKiBTdHJpbmdWaWV3Lmgg
Ki8sCisJCQkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAog
CQkJCUE4QTQ3MzJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKIAkJ
CQlBOEE0NzMyQjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8sCiAJCQkJ
QThBNDczMkMxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oICovLAogCQkJCUE4QTQ3
MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovLAogCQkJCUE4QTQ3MzJFMTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCAqLywKLQkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzMTksNiArMTMyMiw3IEBACiAJCQkJQThBNDczRUMx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDczRjQxNTFBODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThBNDczRjcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1Zp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczRjkxNTFBODI1QjAwNDEyM0ZGIC8qIE9T
UmFuZG9tU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDAwMTUxQTgyNUIwMDQx
MjNGRiAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0MDIxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VCbG9jay5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKaW5kZXggZjUwNDBmOThmYzU5NWViY2E4MTlmZWNkMDE1YWEwMGIyZWEx
MGJlNS4uNWFkYTdhNTZlYjgzMmJjN2QxNzdhMjA5ZDdmY2U5ZjU2MDEyMTFlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTIwMiw2ICsyMDIsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICB0ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCiAgICAgdGV4dC9TdHJpbmdJbXBsLmNwcAogICAgIHRleHQvU3Ry
aW5nU3RhdGljcy5jcHAKKyAgICB0ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9XVEZTdHJp
bmcuY3BwCiAKICAgICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuY3BwCmluZGV4IGNhNTQ0MDUwZmI1YjY2NjU4YmMzM2JjYTQ0NWJkYmFkZjFiNGI3
MTcuLmNhOTBlNzhiZmZkZDc2NWZkMDY2ZjMyNWJjZjU5NjJkZGM5ZTNiMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMTEyLDYgKzExMiw4IEBAIFN0cmluZ0ltcGw6On5TdHJp
bmdJbXBsKCkKIHsKICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogCisgICAgU3RyaW5nVmlldzo6
aW52YWxpZGF0ZSgqdGhpcyk7CisKICAgICBTVFJJTkdfU1RBVFNfUkVNT1ZFX1NUUklORyh0aGlz
KTsKIAogICAgIGlmIChpc0F0b21pYygpICYmIG1fbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBlODMwZmU0YjM1MjU3ZTNmY2RjYjc1ZTY0NjkxYTg5ZjBi
NzVhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5j
cHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisKK0NvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0Ogor
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3RyaW5nVmlldy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIENIRUNLX1NUUklOR1ZJRVdfTElGRVRJ
TUUKKworbmFtZXNwYWNlIFdURiB7CisKK3N0cnVjdCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3Ry
aW5nIHsKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIGNvbnN0IFN0cmluZ0ltcGwmIHN0
cmluZzsKKyAgICB1bnNpZ25lZCByZWZDb3VudCA9IDA7CisgICAgZXhwbGljaXQgVW5kZXJseWlu
Z1N0cmluZyhjb25zdCBTdHJpbmdJbXBsJik7Cit9OworCitTdHJpbmdWaWV3OjpVbmRlcmx5aW5n
U3RyaW5nOjpVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICA6
IHN0cmluZyhzdHJpbmcpCit7Cit9CisKK3N0YXRpYyBIYXNoTWFwPGNvbnN0IFN0cmluZ0ltcGwq
LCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nKj4mIHVuZGVybHlpbmdTdHJpbmdzKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3Ry
aW5nVmlldzo6VW5kZXJseWluZ1N0cmluZyo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwor
dm9pZCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ1RvQmVE
ZXN0cm95ZWQpCit7CisgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0cmluZyA9IHVu
ZGVybHlpbmdTdHJpbmdzKCkudGFrZSgmc3RyaW5nVG9CZURlc3Ryb3llZCk7CisgICAgaWYgKCF1
bmRlcmx5aW5nU3RyaW5nKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHVuZGVybHlpbmdT
dHJpbmctPmlzVmFsaWQpOworICAgIHVuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQgPSBmYWxzZTsK
K30KKworYm9vbCBTdHJpbmdWaWV3Ojp1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX3VuZGVybHlpbmdTdHJpbmcgfHwgbV91bmRlcmx5aW5nU3RyaW5nLT5p
c1ZhbGlkOworfQorCit2b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcoVW5kZXJs
eWluZ1N0cmluZyogc3RyaW5nKQoreworICAgIC8vIFJlZmVyZW5jZSBjb3VudGluZyBkb25lIG1h
bnVhbGx5IGluc3RlYWQgb2YgdXNpbmcgUmVmUHRyIHNvIHRoZQorICAgIC8vIFVuZGVybHlpbmdT
dHJpbmcgdHlwZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGluIHRoZSBoZWFkZXIuCisgICAgaWYgKHN0
cmluZykKKyAgICAgICAgKytzdHJpbmctPnJlZkNvdW50OworICAgIGlmIChtX3VuZGVybHlpbmdT
dHJpbmcgJiYgIS0tbV91bmRlcmx5aW5nU3RyaW5nLT5yZWZDb3VudCkgeworICAgICAgICBpZiAo
bV91bmRlcmx5aW5nU3RyaW5nLT5pc1ZhbGlkKQorICAgICAgICAgICAgdW5kZXJseWluZ1N0cmlu
Z3MoKS5yZW1vdmUoJm1fdW5kZXJseWluZ1N0cmluZy0+c3RyaW5nKTsKKyAgICAgICAgZGVsZXRl
IG1fdW5kZXJseWluZ1N0cmluZzsKKyAgICB9CisgICAgbV91bmRlcmx5aW5nU3RyaW5nID0gc3Ry
aW5nOworfQorCit2b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcoc3RkOjpudWxs
cHRyX3QpCit7CisgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0cmluZyA9IG51bGxw
dHI7CisgICAgc2V0VW5kZXJseWluZ1N0cmluZyh1bmRlcmx5aW5nU3RyaW5nKTsKK30KKwordm9p
ZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwqIHN0cmlu
ZykKK3sKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5aW5nU3RyaW5nOworICAgIGlmICgh
c3RyaW5nKQorICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0gbnVsbHB0cjsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSB1bmRlcmx5aW5nU3RyaW5ncygpLmFkZChzdHJpbmcsIG51
bGxwdHIpOworICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFVuZGVybHlpbmdTdHJpbmcoKnN0cmluZyk7CisgICAg
ICAgIHVuZGVybHlpbmdTdHJpbmcgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIH0KKyAg
ICBzZXRVbmRlcmx5aW5nU3RyaW5nKHVuZGVybHlpbmdTdHJpbmcpOworfQorCit2b2lkIFN0cmlu
Z1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQorewor
ICAgIHNldFVuZGVybHlpbmdTdHJpbmcoc3RyaW5nLm1fdW5kZXJseWluZ1N0cmluZyk7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcu
aCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCmluZGV4IDljOThkMDgwNzRlNDc2
NzMxYjI0YWNkOGQ2NGIzNjQzNTE0MmE4ZDYuLjE2ZTExNjZjZWYxMzU3ZjlkNWUxYmVkYTk1YTFm
NDJiYmQwNWY5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCkBAIC0yOCwxOTIgKzI4LDM0
MiBAQAogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAorI2lmZGVm
IE5ERUJVRworI2RlZmluZSBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FIDAKKyNlbHNlCisjZGVm
aW5lIENIRUNLX1NUUklOR1ZJRVdfTElGRVRJTUUgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYg
ewogCiAvLyBTdHJpbmdWaWV3IGlzIGEgbm9uLW93bmluZyByZWZlcmVuY2UgdG8gYSBzdHJpbmcs
IHNpbWlsYXIgdG8gdGhlIHByb3Bvc2VkIHN0ZDo6c3RyaW5nX3ZpZXcuCiAvLyBXaGV0aGVyIHRo
ZSBzdHJpbmcgaXMgOC1iaXQgb3IgMTYtYml0IGlzIGVuY29kZWQgaW4gdGhlIHVwcGVyIGJpdCBv
ZiB0aGUgbGVuZ3RoIG1lbWJlci4KLS8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0
aGFuIDIgR2lnYWJ5dGVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQuIElmIHRoYXQgdHVybnMgb3V0
IHRvIGJlCi0vLyBhIHByb2JsZW0gd2UgY2FuIGludmVzdGlnYXRlIGFsdGVybmF0aXZlIHNvbHV0
aW9ucy4KKy8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0aGFuIDIgZ2lnYWNoYXJh
Y3RlcnMgY2Fubm90IGJlIHJlcHJlc2VudGVkLgogCiBjbGFzcyBTdHJpbmdWaWV3IHsKIHB1Ymxp
YzoKLSAgICBTdHJpbmdWaWV3KCkKLSAgICAgICAgOiBtX2NoYXJhY3RlcnMobnVsbHB0cikKLSAg
ICAgICAgLCBtX2xlbmd0aCgwKQotICAgIHsKLSAgICB9CisgICAgU3RyaW5nVmlldygpOworICAg
IH5TdHJpbmdWaWV3KCk7CisgICAgU3RyaW5nVmlldyhTdHJpbmdWaWV3JiYpOworICAgIFN0cmlu
Z1ZpZXcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShTdHJp
bmdWaWV3JiYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmdWaWV3Jik7
CiAKLSAgICBTdHJpbmdWaWV3KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAg
fQorICAgIFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBT
dHJpbmdJbXBsJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgU3RyaW5nVmlldyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAg
ICBTdHJpbmdWaWV3KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQorICAg
IHN0YXRpYyBTdHJpbmdWaWV3IGVtcHR5KCk7CiAKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmlu
Z0ltcGwmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAg
ICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcuaW1wbCgpKSB7Ci0gICAg
ICAgICAgICBtX2NoYXJhY3RlcnMgPSBudWxscHRyOwotICAgICAgICAgICAgbV9sZW5ndGggPSAw
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkpIHsKLSAgICAgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
aW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
fQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgp
IGNvbnN0OwogCi0gICAgc3RhdGljIFN0cmluZ1ZpZXcgZW1wdHkoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFN0cmluZ1ZpZXcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSwgMCk7
Ci0gICAgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0g
ICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpczhCaXQoKSk7CisgICAgYm9vbCBpczhCaXQoKSBjb25zdDsKKyAgICBjb25zdCBMQ2hhciog
Y2hhcmFjdGVyczgoKSBjb25zdDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29u
c3Q7CiAKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4obV9jaGFyYWN0
ZXJzKTsKLSAgICB9CisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHRv
U3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisjaWYgVVNF
KENGKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gY29udmVydHMgbnVsbCBzdHJpbmdzIHRvIGVtcHR5
IHN0cmluZ3MuCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY3JlYXRlQ0ZTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0OworI2VuZGlmCiAKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4obV9jaGFyYWN0ZXJzKTsKLSAgICB9
CisjaWZkZWYgX19PQkpDX18KKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBudWxsIHN0
cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWlu
UHRyPE5TU3RyaW5nPiBjcmVhdGVOU1N0cmluZygpIGNvbnN0OworICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBSZXRhaW5QdHI8TlNTdHJpbmc+IGNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmco
KSBjb25zdDsKKyNlbmRpZgorCisgICAgY2xhc3MgVXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOworICAg
IFVwY29udmVydGVkQ2hhcmFjdGVycyB1cGNvbnZlcnRlZENoYXJhY3RlcnMoKSBjb25zdDsKIAog
ICAgIHZvaWQgZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoTENoYXIqKSBjb25zdDsKICAgICB2
b2lkIGdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KFVDaGFyKikgY29uc3Q7CiAKLSAgICBjbGFz
cyBVcGNvbnZlcnRlZENoYXJhY3RlcnMgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQg
VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKLSAgICAgICAgb3BlcmF0
b3IgY29uc3QgVUNoYXIqKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KLSAgICBw
cml2YXRlOgotICAgICAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX3VwY29udmVydGVkQ2hhcmFjdGVy
czsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKLSAgICB9OwotICAgIFVwY29u
dmVydGVkQ2hhcmFjdGVycyB1cGNvbnZlcnRlZENoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBV
cGNvbnZlcnRlZENoYXJhY3RlcnMoKnRoaXMpOyB9CisgICAgU3RyaW5nVmlldyBzdWJzdHJpbmco
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkgY29uc3Q7CiAKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2NoYXJhY3RlcnM7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVu
Z3RoKCk7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAm
IH5pczE2Qml0U3RyaW5nRmxhZzsgfQorICAgIHNpemVfdCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBz
dGFydCA9IDApIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoVUNoYXIpIGNvbnN0OwogCi0gICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFpc051bGwoKTsgfQorICAg
IGludCB0b0ludChib29sJiBpc1ZhbGlkKTsKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFs
aWQpOwogCi0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhKG1fbGVuZ3RoICYgaXMx
NkJpdFN0cmluZ0ZsYWcpOyB9CisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZShjb25zdCBTdHJp
bmdJbXBsJik7CiAKLSAgICBTdHJpbmdWaWV3IHN1YnN0cmluZyh1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKHN0YXJ0ID49IHRoaXMtPmxlbmd0aCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5KCk7Ci0gICAgICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHRoaXMtPmxl
bmd0aCgpIC0gc3RhcnQ7CisgICAgc3RydWN0IFVuZGVybHlpbmdTdHJpbmc7CiAKLSAgICAgICAg
aWYgKGxlbmd0aCA+PSBtYXhMZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghc3RhcnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgbGVuZ3RoID0gbWF4TGVuZ3Ro
OwotICAgICAgICB9Citwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBMQ2hhcios
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQgbGVuZ3RoKTsKIAotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1
cm4gU3RyaW5nVmlldyhjaGFyYWN0ZXJzOCgpICsgc3RhcnQsIGxlbmd0aCk7CisgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGJvb2wgdW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3RyaW5nKHN0ZDo6bnVs
bHB0cl90KTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3Ry
aW5nKGNvbnN0IFN0cmluZ0ltcGwqKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBz
ZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotICAgICAgICByZXR1cm4g
U3RyaW5nVmlldyhjaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBsZW5ndGgpOwotICAgIH0KKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaXMxNkJpdFN0cmluZ0ZsYWcgPSAxdSA8PCAzMTsKIAotICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKKyAgICBj
b25zdCB2b2lkKiBtX2NoYXJhY3RlcnM7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAKLSAgICAg
ICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOwotICAgIH0KKyNpZiBD
SEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCisgICAgdm9pZCBzZXRVbmRlcmx5aW5nU3RyaW5nKFVu
ZGVybHlpbmdTdHJpbmcqKTsKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiBtX3VuZGVybHlpbmdTdHJp
bmc7CisjZW5kaWYKK307CiAKLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpCi0gICAg
ewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1Rv
RmxvYXQoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKLSAgICAgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQpOwot
ICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4gdm9pZCBhcHBlbmQoVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFjaXR5PiYs
IFN0cmluZ1ZpZXcpOwogCi0gICAgaW50IHRvSW50KGJvb2wmIGlzVmFsaWQpCi0gICAgewotICAg
ICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNo
YXJhY3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0
ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7Ci0gICAgfQoraW5s
aW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoKQorICAgIDogbV9jaGFyYWN0ZXJzKG51bGxwdHIp
CisgICAgLCBtX2xlbmd0aCgwKQoreworICAgIC8vIEZJWE1FOiBJdCdzIHBlY3VsaWFyIHRoYXQg
bnVsbCBzdHJpbmdzIGFyZSAxNi1iaXQgYW5kIGVtcHR5IHN0cmluZ3MgcmV0dXJuIDgtYml0IChh
Y2NvcmRpbmcgdG8gdGhlIGlzOEJpdCBmdW5jdGlvbikuCit9CiAKLSAgICBTdHJpbmcgdG9TdHJp
bmdXaXRob3V0Q29weWluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFj
dGVyczgoKSwgbGVuZ3RoKCkpOworaW5saW5lIFN0cmluZ1ZpZXc6On5TdHJpbmdWaWV3KCkKK3sK
KyAgICBzZXRVbmRlcmx5aW5nU3RyaW5nKG51bGxwdHIpOworfQogCi0gICAgICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkp
OwotICAgIH0KK2lubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KFN0cmluZ1ZpZXcmJiBvdGhl
cikKKyAgICA6IG1fY2hhcmFjdGVycyhvdGhlci5tX2NoYXJhY3RlcnMpCisgICAgLCBtX2xlbmd0
aChvdGhlci5tX2xlbmd0aCkKK3sKKyAgICBBU1NFUlQob3RoZXIudW5kZXJseWluZ1N0cmluZ0lz
VmFsaWQoKSk7CiAKLSAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgICAgICBpZiAoaXM4
Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyczgoKVtpbmRleF07Ci0gICAgICAg
IHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpbmRleF07Ci0gICAgfQorICAgIG90aGVyLm1fY2hhcmFj
dGVycyA9IG51bGxwdHI7CisgICAgb3RoZXIubV9sZW5ndGggPSAwOwogCi0gICAgc2l6ZV90IGZp
bmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3Rl
cnM4KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKLSAgICAgICAgcmV0dXJuIFdURjo6
ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIGNoYXJhY3Rlciwgc3RhcnQpOworICAgIHNl
dFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOworICAgIG90aGVyLnNldFVuZGVybHlpbmdTdHJpbmco
bnVsbHB0cik7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0cmlu
Z1ZpZXcmIG90aGVyKQorICAgIDogbV9jaGFyYWN0ZXJzKG90aGVyLm1fY2hhcmFjdGVycykKKyAg
ICAsIG1fbGVuZ3RoKG90aGVyLm1fbGVuZ3RoKQoreworICAgIEFTU0VSVChvdGhlci51bmRlcmx5
aW5nU3RyaW5nSXNWYWxpZCgpKTsKKworICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOwor
fQorCitpbmxpbmUgU3RyaW5nVmlldyYgU3RyaW5nVmlldzo6b3BlcmF0b3I9KFN0cmluZ1ZpZXcm
JiBvdGhlcikKK3sKKyAgICBBU1NFUlQob3RoZXIudW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7
CisKKyAgICBtX2NoYXJhY3RlcnMgPSBvdGhlci5tX2NoYXJhY3RlcnM7CisgICAgbV9sZW5ndGgg
PSBvdGhlci5tX2xlbmd0aDsKKworICAgIG90aGVyLm1fY2hhcmFjdGVycyA9IG51bGxwdHI7Cisg
ICAgb3RoZXIubV9sZW5ndGggPSAwOworCisgICAgc2V0VW5kZXJseWluZ1N0cmluZyhvdGhlcik7
CisgICAgb3RoZXIuc2V0VW5kZXJseWluZ1N0cmluZyhudWxscHRyKTsKKworICAgIHJldHVybiAq
dGhpczsKK30KKworaW5saW5lIFN0cmluZ1ZpZXcmIFN0cmluZ1ZpZXc6Om9wZXJhdG9yPShjb25z
dCBTdHJpbmdWaWV3JiBvdGhlcikKK3sKKyAgICBBU1NFUlQob3RoZXIudW5kZXJseWluZ1N0cmlu
Z0lzVmFsaWQoKSk7CisKKyAgICBtX2NoYXJhY3RlcnMgPSBvdGhlci5tX2NoYXJhY3RlcnM7Cisg
ICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsKKworICAgIHNldFVuZGVybHlpbmdTdHJpbmco
b3RoZXIpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgdm9pZCBTdHJpbmdWaWV3
Ojppbml0aWFsaXplKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBiZXR0ZXIgc29sdXRpb24gaGVyZSwgYmVjYXVzZSB0
aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAgIC8vIHRoZSBsZW5ndGggaGVyZSB3b24ndCBi
ZSB0b28gbG9uZy4gTWF5YmUgYXQgbGVhc3QgYSBSRUxFQVNFX0FTU0VSVD8KKyAgICBBU1NFUlQo
IShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxhZykpOworICAgIG1fY2hhcmFjdGVycyA9IGNoYXJh
Y3RlcnM7CisgICAgbV9sZW5ndGggPSBsZW5ndGg7Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ1Zp
ZXc6OmluaXRpYWxpemUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGJldHRlciBzb2x1dGlvbiBoZXJlLCBiZWNhdXNl
IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0CisgICAgLy8gdGhlIGxlbmd0aCBoZXJlIHdvbid0
IGJlIHRvbyBsb25nLiBNYXliZSBhdCBsZWFzdCBhIFJFTEVBU0VfQVNTRVJUPworICAgIEFTU0VS
VCghKGxlbmd0aCAmIGlzMTZCaXRTdHJpbmdGbGFnKSk7CisgICAgbV9jaGFyYWN0ZXJzID0gY2hh
cmFjdGVyczsKKyAgICBtX2xlbmd0aCA9IGlzMTZCaXRTdHJpbmdGbGFnIHwgbGVuZ3RoOworfQor
CitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGluaXRpYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsK
K30KKworaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0
aCk7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwm
IHN0cmluZykKK3sKKyAgICBzZXRVbmRlcmx5aW5nU3RyaW5nKCZzdHJpbmcpOworICAgIGlmIChz
dHJpbmcuaXM4Qml0KCkpCisgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCks
IHN0cmluZy5sZW5ndGgoKSk7CisgICAgZWxzZQorICAgICAgICBpbml0aWFsaXplKHN0cmluZy5j
aGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6
OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc2V0VW5kZXJseWluZ1N0
cmluZyhzdHJpbmcuaW1wbCgpKTsKKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAg
IG1fY2hhcmFjdGVycyA9IG51bGxwdHI7CisgICAgICAgIG1fbGVuZ3RoID0gMDsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIGluaXRp
YWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmlu
Zy5sZW5ndGgoKSk7Cit9CiAKLSAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0
dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KK2lubGluZSBTdHJpbmdWaWV3IFN0cmluZ1ZpZXc6
OmVtcHR5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIiIpLCAwKTsKK30KIAotI2lmIFVTRShDRikKLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IGNvbnZlcnRzIG51bGwgc3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgotICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0aG91dENv
cHlpbmcoKSBjb25zdDsKLSNlbmRpZgoraW5saW5lIGNvbnN0IExDaGFyKiBTdHJpbmdWaWV3Ojpj
aGFyYWN0ZXJzOCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICBBU1NFUlQo
dW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IExDaGFyKj4obV9jaGFyYWN0ZXJzKTsKK30KIAotI2lmZGVmIF9fT0JKQ19fCi0gICAgLy8gVGhl
c2UgZnVuY3Rpb25zIGNvbnZlcnQgbnVsbCBzdHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCi0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4gY3JlYXRlTlNTdHJpbmco
KSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5TU3RyaW5nPiBj
cmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7Ci0jZW5kaWYKK2lubGluZSBjb25z
dCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGVyczE2KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWlzOEJpdCgpKTsKKyAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4obV9jaGFyYWN0ZXJzKTsKK30KIAorY2xh
c3MgU3RyaW5nVmlldzo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBVcGNvbnZlcnRlZENoYXJhY3RlcnMoY29uc3QgU3RyaW5nVmlldyYpOworICAgIG9wZXJh
dG9yIGNvbnN0IFVDaGFyKigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQorICAgIGNv
bnN0IFVDaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KIHByaXZhdGU6
Ci0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQoIShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxh
ZykpOwotICAgICAgICAKLSAgICAgICAgbV9jaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKLSAgICAg
ICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAgVmVjdG9yPFVDaGFyLCAzMj4gbV91cGNvbnZlcnRl
ZENoYXJhY3RlcnM7CisgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKK307CisKK2lubGlu
ZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnMgU3RyaW5nVmlldzo6dXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCp0aGlzKTsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXNOdWxsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIW1fY2hhcmFjdGVyczsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6
aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFsZW5ndGgoKTsKK30KKworaW5saW5lIHVu
c2lnbmVkIFN0cmluZ1ZpZXc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGVuZ3Ro
ICYgfmlzMTZCaXRTdHJpbmdGbGFnOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6b3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpc051bGwoKTsKK30KKworaW5saW5lIGJvb2wg
U3RyaW5nVmlldzo6aXM4Qml0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIShtX2xlbmd0aCAmIGlz
MTZCaXRTdHJpbmdGbGFnKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXcgU3RyaW5nVmlldzo6c3Vi
c3RyaW5nKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYg
KHN0YXJ0ID49IHRoaXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICB1
bnNpZ25lZCBtYXhMZW5ndGggPSB0aGlzLT5sZW5ndGgoKSAtIHN0YXJ0OworCisgICAgaWYgKGxl
bmd0aCA+PSBtYXhMZW5ndGgpIHsKKyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgbGVuZ3RoID0gbWF4TGVuZ3RoOwogICAgIH0KIAotICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCEobGVuZ3RoICYgaXMxNkJpdFN0cmluZ0ZsYWcpKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7Ci0gICAgICAgIG1fbGVu
Z3RoID0gaXMxNkJpdFN0cmluZ0ZsYWcgfCBsZW5ndGg7CisgICAgaWYgKGlzOEJpdCgpKSB7Cisg
ICAgICAgIFN0cmluZ1ZpZXcgcmVzdWx0KGNoYXJhY3RlcnM4KCkgKyBzdGFydCwgbGVuZ3RoKTsK
KyAgICAgICAgcmVzdWx0LnNldFVuZGVybHlpbmdTdHJpbmcoKnRoaXMpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKyAgICBTdHJpbmdWaWV3IHJlc3VsdChjaGFyYWN0ZXJzMTYoKSAr
IHN0YXJ0LCBsZW5ndGgpOworICAgIHJlc3VsdC5zZXRVbmRlcmx5aW5nU3RyaW5nKCp0aGlzKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlzMTZC
aXRTdHJpbmdGbGFnID0gMXUgPDwgMzE7CitpbmxpbmUgU3RyaW5nIFN0cmluZ1ZpZXc6OnRvU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
Y2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOworICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsKK30KIAotICAgIGNvbnN0IHZvaWQqIG1fY2hhcmFjdGVyczsKLSAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKLX07CitpbmxpbmUgZmxvYXQgU3RyaW5nVmlldzo6dG9GbG9hdChi
b29sJiBpc1ZhbGlkKQoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJh
Y3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgJmlzVmFsaWQp
OworfQorCitpbmxpbmUgaW50IFN0cmluZ1ZpZXc6OnRvSW50KGJvb2wmIGlzVmFsaWQpCit7Cisg
ICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3Rl
cnM4KCksIGxlbmd0aCgpLCAmaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChj
aGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksICZpc1ZhbGlkKTsKK30KKworaW5saW5lIFN0cmluZyBT
dHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4
Qml0KCkpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhj
aGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdp
dGhvdXRDb3B5aW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7Cit9CisKK2lubGluZSBVQ2hh
ciBTdHJpbmdWaWV3OjpvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFT
U0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJzOCgpW2luZGV4XTsKKyAgICByZXR1cm4gY2hhcmFjdGVyczE2KClbaW5kZXhd
OworfQorCitpbmxpbmUgc2l6ZV90IFN0cmluZ1ZpZXc6OmZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1
bnNpZ25lZCBzdGFydCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVy
biBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCksIGNoYXJhY3Rlciwgc3RhcnQpOwor
ICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIs
IHN0YXJ0KTsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6Y29udGFpbnMoVUNoYXIgY2hh
cmFjdGVyKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKGNoYXJhY3RlcikgIT0gbm90Rm91bmQ7
Cit9CiAKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKQEAgLTI0Nyw2ICszOTcsMjcgQEAgaW5saW5l
IFN0cmluZ1ZpZXc6OlVwY29udmVydGVkQ2hhcmFjdGVyczo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KGNvbnN0IFN0cmluZ1ZpZXcKICAgICBtX2NoYXJhY3RlcnMgPSBtX3VwY29udmVydGVkQ2hhcmFj
dGVycy5kYXRhKCk7CiB9CiAKKyNpZiAhQ0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRQorCitpbmxp
bmUgdm9pZCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlKGNvbnN0IFN0cmluZ0ltcGwmKQoreworfQor
CitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojp1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ1ZpZXc6OnNldFVu
ZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nSW1wbCopCit7Cit9CisKK2lubGluZSB2b2lkIFN0
cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYpCit7Cit9CisK
KyNlbmRpZgorCiB0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1ZpZXc+
IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdWaWV3PihTdHJpbmdWaWV3
IHN0cmluZykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239262</attachid>
            <date>2014-10-03 21:58:54 -0700</date>
            <delta_ts>2014-10-03 22:14:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137202-20141003215855.patch</filename>
            <type>text/plain</type>
            <size>29419</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNlMGNkYzQ0Yzg3YTFlMjVlZmJjYWQ1
OWU0ZTUxODAyMTVlMjJiODUuLmY4MDU0OWRkOTA4YjRmYzlhNmZjNTczMGFiYmU1YjA3YmFkOGY5
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTQtMTAtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3RyaW5nVmlldyBjaGVjayB0aGUgbGlmZXRpbWUg
b2YgdGhlIFN0cmluZ0ltcGwgaXQncyBjcmVhdGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6IEFk
ZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnM6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdWaWV3LmNwcC4KKyAgICAgICAgKiB3dGYvQ01ha2VM
aXN0cy50eHQ6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorCisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKTogQ2Fs
bCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp1bmRlcmx5aW5nU3RyaW5ncyk6IFJldHVybnMg
bWFwIGZyb20gU3RyaW5nSW1wbCB0byB0aGUgdW5kZXJseWluZworICAgICAgICBzdHJpbmcgb2Jq
ZWN0IHVzZWQgYnkgU3RyaW5nVmlldyB0byB0cmFjayB2YWxpZGl0eS4KKyAgICAgICAgKFdURjo6
U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IE1hcmsgdGhlIHVuZGVybHlpbmcgc3RyaW5nIG9iamVj
dCBpbnZhbGlkLAorICAgICAgICBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCwgc28gYW55IGZ1
dHVyZSBTdHJpbmdJbXBsIHdpbGwgZ2V0IGEgbmV3IG9uZSwKKyAgICAgICAgZXZlbiBpZiBpdCBo
YXMgdGhlIHNhbWUgcG9pbnRlci4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dW5kZXJseWlu
Z1N0cmluZ0lzVmFsaWQpOiBSZXR1cm4gdHJ1ZSBvbmx5IGlmIHRoZQorICAgICAgICB1bmRlcmx5
aW5nIHN0cmluZyBpcyBzdGlsbCB2YWxpZC4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0
VW5kZXJseWluZ1N0cmluZyk6IENyZWF0ZSBhbmQgbWFuYWdlIHJlZmVyZW5jZSBjb3VudHMKKyAg
ICAgICAgb2YgdW5kZXJseWluZyBzdHJpbmcgb2JqZWN0cyBhcyBuZWVkZWQuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24sCisgICAgICAgIHNvIHdlIGNhbiBub3cgcmVhZCBhIGNsZWFuIGNs
YXNzIGRlZmluaXRpb24gdG8gc2VlIHRoZSBjbGFzcyBkZXNpZ24gYW5kIHdoYXQKKyAgICAgICAg
ZnVuY3Rpb25zIGl0IG9mZmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3RyaW5nVmll
dyk6IEFkZGVkIGEgY29tbWVudCB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
QWxzbyBhZGRlZCBjb3B5IGFuZCBtb3ZlIGNvbnN0cnVjdG9ycyBzbyB0aGV5IGNhbiBjYWxsIHNl
dFVuZGVybHlpbmdTdHJpbmcKKyAgICAgICAgYW5kIGFzc2VydCB0aGUgdW5kZXJseWluZyBzdHJp
bmcgaXMgdmFsaWQgYXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlCisgICAgICAgIGNvbXBpbGVyLWdl
bmVyYXRlZCBvbmVzLgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldyk6IEFk
ZGVkIGEgY2FsbCB0byBzZXRVbmRlcmx5aW5nU3RyaW5nLgorICAgICAgICAoV1RGOjpTdHJpbmdW
aWV3OjpvcGVyYXRvcj0pOiBBZGRlZCB0aGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyB3aXRoIHRo
ZSBzYW1lCisgICAgICAgIGpvYiBhcyB0aGUgY29uc3RydWN0b3JzIGFib3ZlLgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Ojppbml0aWFsaXplKTogQWRkZWQgYSBjb21tZW50LgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3OjpjaGFyYWN0ZXJzOCk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHRo
ZSB1bmRlcmx5aW5nCisgICAgICAgIHN0cmluZyBpcyB2YWxpZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Y2hhcmFjdGVyczE2KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OnN1YnN0cmluZyk6IEFkZGVkIGNvZGUgdG8gcHJvcGFnYXRlIHRoZSB1bmRlcmx5aW5nIHN0cmlu
ZworICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBzdHJpbmcgdG8gdGhlIHN1YnN0cmluZy4KKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IElubGluZSBlbXB0eSB2ZXJzaW9u
IG9mIHRoaXMgZnVuY3Rpb24gZm9yCisgICAgICAgIG5vbi1kZWJ1ZyBidWlsZHMuCisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcpOiBEaXR0by4KKwogMjAx
NC0xMC0wMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NDI3NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCmluZGV4IDVhNDI1YWJmNTg2YzhkZjNmMGVkMjg2YmI2MDkzZmEyNmQyOGYxMzQuLjBm
ODNiYWU5YjU4N2VlOWQzOGQxYjkwNjBkYzRlYzZjNGU2ZjEwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagpAQCAtMTM0LDYgKzEzNCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxTdHJpbmdCdWlsZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFN0cmluZ0ltcGwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cd3RmXHRleHRcU3RyaW5nU3RhdGljcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFdURlN0cmluZy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxjZlxBdG9taWNTdHJpbmdDRi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx3dGZcdGV4dFxjZlxTdHJpbmdDRi5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMWNlMDUwZGRiYzgzZWQyODdlMzUzZTM4
YzQ3ZjUyMTUzN2JjYWRkMC4uNDMyZWE3MTNmN2JkZTQwZDgxMjZlYTE4NjZiMGQ0MDRiYThhNWY1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAtNjAs
NiArNjAsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXHRleHRcU3RyaW5nU3Rh
dGljcy5jcHAiPgogICAgICAgPEZpbHRlcj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCI+Cisg
ICAgICA8RmlsdGVyPnRleHQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5jcHAiPgogICAgICAgPEZpbHRl
cj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBiNTRkZmE4Njg3YzRjYWEyOTEyYzU5NjhkN2M4NDI4NmJi
MzQ3ZDk1Li4xMzhhMTQwNTJmNGU4ZDk1YjMyMjI3ZWZiMjVmZTg0YzQzMzgwMmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg0LDYgKzg0LDcgQEAKIAkJ
OTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBEMEQ2
QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLzsgfTsKIAkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5
IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLzsgfTsKIAkJOTNCMUFBODAx
ODBFNUFGMzAwNEEyRjA1IC8qIFBhc3NSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjFBQTdGMTgwRTVBRjMwMDRBMkYwNSAvKiBQYXNzUmVmLmgg
Ki87IH07CisJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLzsgfTsKIAkJOTc0Q0ZDOEUxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi87IH07CiAJ
CTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkM3MEYwNDE3NkMzNzlE
MDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9OwogCQk5QkQ4RjQwQjE3NkMy
QjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9t
aWNTdHJpbmdUYWJsZS5oICovOyB9OwpAQCAtMzczLDYgKzM3NCw3IEBACiAJCTkzOTM0QkQ0MThB
MUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU3RyaW5nVmlld0NGLmNwcDsgcGF0aCA9IGNmL1N0cmluZ1ZpZXdDRi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUM5MUE3MTg5NDJGQzQwMDI0NDkz
OSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMQ2hhci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IxQUE3RjE4MEU1QUYzMDA0QTJGMDUgLyog
UGFzc1JlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzUmVmLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzRDRkM4RDE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWFrUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0MTc2QzM3OUQw
MDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTU0LDEyICs5NTYsMTMgQEAKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSGFzaC5oICovLAogCQkJCUE4QTQ3MzI4MTUxQTgyNUIwMDQxMjNGRiAvKiBT
dHJpbmdJbXBsLmNwcCAqLywKIAkJCQlBOEE0NzMyOTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
SW1wbC5oICovLAorCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMwMTI2RiAvKiBTdHJpbmdWaWV3Lmgg
Ki8sCisJCQkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAog
CQkJCUE4QTQ3MzJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKIAkJ
CQlBOEE0NzMyQjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8sCiAJCQkJ
QThBNDczMkMxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oICovLAogCQkJCUE4QTQ3
MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovLAogCQkJCUE4QTQ3MzJFMTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCAqLywKLQkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzNTEsNiArMTM1NCw3IEBACiAJCQkJQThBNDczRUMx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDczRjQxNTFBODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThBNDczRjcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1Zp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczRjkxNTFBODI1QjAwNDEyM0ZGIC8qIE9T
UmFuZG9tU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDAwMTUxQTgyNUIwMDQx
MjNGRiAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0MDIxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VCbG9jay5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKaW5kZXggZTVhZDlmMjc2NThmMGJlYmQ0ZTgxNGI1Y2VlYjFiOTQ2ODRj
NWU4ZC4uMmFhZDc5M2M4MTcwYjExZGYyZTEwOGViMTM0NzE2MDdhYjBhNWUyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTIwMSw2ICsyMDEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICB0ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCiAgICAgdGV4dC9TdHJpbmdJbXBsLmNwcAogICAgIHRleHQvU3Ry
aW5nU3RhdGljcy5jcHAKKyAgICB0ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9XVEZTdHJp
bmcuY3BwCiAKICAgICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuY3BwCmluZGV4IGU1ZDY5NGMwZDFmZWY5ODIwNmNiNzc4MGJjYjQyOTZhNjU1M2Yw
ZmYuLjFmODQyOTI1YzQxOWI1ZWM5OGY4N2ZlYjExZDcwYmM5NzM5MDBkOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMTA1LDYgKzEwNSw4IEBAIFN0cmluZ0ltcGw6On5TdHJp
bmdJbXBsKCkKIHsKICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogCisgICAgU3RyaW5nVmlldzo6
aW52YWxpZGF0ZSgqdGhpcyk7CisKICAgICBTVFJJTkdfU1RBVFNfUkVNT1ZFX1NUUklORygqdGhp
cyk7CiAKICAgICBpZiAoaXNBdG9taWMoKSAmJiBtX2xlbmd0aCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMWFlZTlkY2QzMDllYzEzZTllYjZkMzA1Y2JhNDU1Zjhk
YWNmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcu
Y3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorCitDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoK
KzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlN0cmluZ1ZpZXcuaCIKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKyNpZiBDSEVD
S19TVFJJTkdWSUVXX0xJRkVUSU1FCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBNYW5hZ2UgcmVm
ZXJlbmNlIGNvdW50IG1hbnVhbGx5IHNvIFVuZGVybHlpbmdTdHJpbmcgZG9lcyBub3QgbmVlZCB0
byBiZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIuCisKK3N0cnVjdCBTdHJpbmdWaWV3OjpVbmRlcmx5
aW5nU3RyaW5nIHsKKyAgICBzdGQ6OmF0b21pY191aW50IHJlZkNvdW50IHsgMSB9OworICAgIGJv
b2wgaXNWYWxpZCB7IHRydWUgfTsKKyAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmc7CisgICAg
ZXhwbGljaXQgVW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJpbmdJbXBsJik7Cit9OworCitTdHJp
bmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0lt
cGwmIHN0cmluZykKKyAgICA6IHN0cmluZyhzdHJpbmcpCit7Cit9CisKK3N0YXRpYyBzdGQ6Om11
dGV4JiB1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7CisgICAgcmV0dXJuIG11dGV4OworfQorCitzdGF0aWMgSGFz
aE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZyo+JiB1
bmRlcmx5aW5nU3RyaW5ncygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZ1ZpZXc6OlVuZGVybHlpbmdTdHJpbmcqPj4gbWFwOwor
ICAgIHJldHVybiBtYXA7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6aW52YWxpZGF0ZShjb25zdCBT
dHJpbmdJbXBsJiBzdHJpbmdUb0JlRGVzdHJveWVkKQoreworICAgIFVuZGVybHlpbmdTdHJpbmcq
IHVuZGVybHlpbmdTdHJpbmc7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAgICB1bmRlcmx5aW5n
U3RyaW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0JlRGVzdHJveWVkKTsK
KyAgICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCk7CisgICAgdW5kZXJseWlu
Z1N0cmluZy0+aXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIFN0cmluZ1ZpZXc6OnVuZGVybHlp
bmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdW5kZXJseWluZ1N0cmlu
ZyB8fCBtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQ7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6
YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFVuZGVybHlpbmdTdHJpbmcqIHVuZGVybHlpbmdTdHJpbmcp
Cit7CisgICAgaWYgKG1fdW5kZXJseWluZ1N0cmluZykgeworICAgICAgICBpZiAoIS0tbV91bmRl
cmx5aW5nU3RyaW5nLT5yZWZDb3VudCkgeworICAgICAgICAgICAgaWYgKG1fdW5kZXJseWluZ1N0
cmluZy0+aXNWYWxpZCkgeworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgdW5k
ZXJseWluZ1N0cmluZ3MoKS5yZW1vdmUoJm1fdW5kZXJseWluZ1N0cmluZy0+c3RyaW5nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBtX3VuZGVybHlpbmdTdHJpbmc7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbV91bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJseWluZ1N0cmluZzsK
K30KKwordm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZykKK3sKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5aW5nU3RyaW5nOwor
ICAgIGlmICghc3RyaW5nKQorICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0gbnVsbHB0cjsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodW5kZXJs
eWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSB1bmRlcmx5aW5nU3Ry
aW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOworICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFVuZGVybHlpbmdT
dHJpbmcoKnN0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsrcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+cmVmQ291bnQ7CisgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBhZG9wdFVuZGVybHlpbmdTdHJpbmcodW5kZXJs
eWluZ1N0cmluZyk7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6c2V0VW5kZXJseWluZ1N0cmluZyhj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCit7CisgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJs
eWluZ1N0cmluZyA9IHN0cmluZy5tX3VuZGVybHlpbmdTdHJpbmc7CisgICAgaWYgKHVuZGVybHlp
bmdTdHJpbmcpCisgICAgICAgICsrdW5kZXJseWluZ1N0cmluZy0+cmVmQ291bnQ7CisgICAgYWRv
cHRVbmRlcmx5aW5nU3RyaW5nKHVuZGVybHlpbmdTdHJpbmcpOworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCAyNGY2YjFhN2UzMWMzZDIxOGJmYjY4ZGZiNWRi
YTBkZGQ1OWI2Nzc1Li5mZDM2OTVkMTAzNDhkNGE4NTYwYmQwMjMxY2UzNzBjYzFkNDEwOTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMzIsMTYwICszMiwyMDIgQEAKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAorI2lmZGVmIE5E
RUJVRworI2RlZmluZSBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FIDAKKyNlbHNlCisjZGVmaW5l
IENIRUNLX1NUUklOR1ZJRVdfTElGRVRJTUUgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewog
CiAvLyBTdHJpbmdWaWV3IGlzIGEgbm9uLW93bmluZyByZWZlcmVuY2UgdG8gYSBzdHJpbmcsIHNp
bWlsYXIgdG8gdGhlIHByb3Bvc2VkIHN0ZDo6c3RyaW5nX3ZpZXcuCiAvLyBXaGV0aGVyIHRoZSBz
dHJpbmcgaXMgOC1iaXQgb3IgMTYtYml0IGlzIGVuY29kZWQgaW4gdGhlIHVwcGVyIGJpdCBvZiB0
aGUgbGVuZ3RoIG1lbWJlci4KLS8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0aGFu
IDIgR2lnYWJ5dGVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQuIElmIHRoYXQgdHVybnMgb3V0IHRv
IGJlCi0vLyBhIHByb2JsZW0gd2UgY2FuIGludmVzdGlnYXRlIGFsdGVybmF0aXZlIHNvbHV0aW9u
cy4KKy8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0aGFuIDIgZ2lnYWNoYXJhY3Rl
cnMgY2Fubm90IGJlIHJlcHJlc2VudGVkLgogCiBjbGFzcyBTdHJpbmdWaWV3IHsKIHB1YmxpYzoK
LSAgICBTdHJpbmdWaWV3KCkKLSAgICAgICAgOiBtX2NoYXJhY3RlcnMobnVsbHB0cikKLSAgICAg
ICAgLCBtX2xlbmd0aCgwKQotICAgIHsKLSAgICB9CisgICAgU3RyaW5nVmlldygpOworICAgIH5T
dHJpbmdWaWV3KCk7CisgICAgU3RyaW5nVmlldyhTdHJpbmdWaWV3JiYpOworICAgIFN0cmluZ1Zp
ZXcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShTdHJpbmdW
aWV3JiYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmdWaWV3Jik7CiAK
LSAgICBTdHJpbmdWaWV3KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQor
ICAgIFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBTdHJp
bmdJbXBsJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgU3RyaW5nVmlldyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBT
dHJpbmdWaWV3KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
ewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQorICAgIHN0
YXRpYyBTdHJpbmdWaWV3IGVtcHR5KCk7CiAKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0lt
cGwmKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZyYpOworICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCi0gICAgc3RhdGljIFN0cmlu
Z1ZpZXcgZW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSwgMCk7Ci0gICAgfQorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogCi0gICAgY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpczhCaXQo
KSk7CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4obV9jaGFyYWN0ZXJzKTsKLSAgICB9
CisgICAgY2xhc3MgQ29kZVVuaXRzOworICAgIENvZGVVbml0cyBjb2RlVW5pdHMoKSBjb25zdDsK
IAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFpczhCaXQoKSk7CisgICAgY2xhc3MgQ29kZVBvaW50czsKKyAgICBDb2RlUG9pbnRz
IGNvZGVQb2ludHMoKSBjb25zdDsKIAotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPihtX2NoYXJhY3RlcnMpOwotICAgIH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0Owor
ICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0OworICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzMTYoKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAg
IFN0cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisKKyNpZiBVU0UoQ0YpCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5n
cy4KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjcmVh
dGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIF9fT0JK
Q19fCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgbnVsbCBzdHJpbmdzIHRvIGVtcHR5
IHN0cmluZ3MuCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4g
Y3JlYXRlTlNTdHJpbmcoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWlu
UHRyPE5TU3RyaW5nPiBjcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisjZW5k
aWYKKworICAgIGNsYXNzIFVwY29udmVydGVkQ2hhcmFjdGVyczsKKyAgICBVcGNvbnZlcnRlZENo
YXJhY3RlcnMgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3Q7CiAKICAgICB2b2lkIGdldENo
YXJhY3RlcnNXaXRoVXBjb252ZXJ0KExDaGFyKikgY29uc3Q7CiAgICAgdm9pZCBnZXRDaGFyYWN0
ZXJzV2l0aFVwY29udmVydChVQ2hhciopIGNvbnN0OwogCi0gICAgY2xhc3MgVXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFVwY29udmVydGVkQ2hh
cmFjdGVycyhjb25zdCBTdHJpbmdWaWV3Jik7Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFVDaGFy
KigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQotICAgICAgICBjb25zdCBVQ2hhciog
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgVmVjdG9yPFVDaGFyLCAzMj4gbV91cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgfTsKLSAgICBVcGNvbnZlcnRlZENoYXJhY3Rl
cnMgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gVXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCp0aGlzKTsgfQorICAgIFN0cmluZ1ZpZXcgc3Vic3RyaW5nKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
IGNvbnN0OwogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9jaGFyYWN0ZXJz
OyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9Ci0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggJiB+aXMxNkJpdFN0cmlu
Z0ZsYWc7IH0KKyAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25z
dDsKKyAgICBib29sIGNvbnRhaW5zKFVDaGFyKSBjb25zdDsKIAotICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhaXNOdWxsKCk7IH0KKyAgICBpbnQgdG9JbnQoYm9v
bCYgaXNWYWxpZCkgY29uc3Q7CisgICAgZmxvYXQgdG9GbG9hdChib29sJiBpc1ZhbGlkKSBjb25z
dDsKIAotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gIShtX2xlbmd0aCAmIGlzMTZC
aXRTdHJpbmdGbGFnKTsgfQorICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGUoY29uc3QgU3RyaW5n
SW1wbCYpOwogCi0gICAgU3RyaW5nVmlldyBzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChzdGFydCA+PSB0aGlzLT5sZW5ndGgoKSkKLSAgICAgICAgICAg
IHJldHVybiBlbXB0eSgpOwotICAgICAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB0aGlzLT5sZW5n
dGgoKSAtIHN0YXJ0OworICAgIHN0cnVjdCBVbmRlcmx5aW5nU3RyaW5nOwogCi0gICAgICAgIGlm
IChsZW5ndGggPj0gbWF4TGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1heExlbmd0aDsK
LSAgICAgICAgfQorcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZ1ZpZXcoY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOworICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBib29sIHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJp
bmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0
cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7CiAKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcoY2hh
cmFjdGVyczE2KCkgKyBzdGFydCwgbGVuZ3RoKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGlzMTZCaXRTdHJpbmdGbGFnID0gMXUgPDwgMzE7CiAKLSAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKKyAgICBjb25zdCB2b2lkKiBtX2NoYXJhY3RlcnMgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CiAKLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlz
VmFsaWQpIGNvbnN0OwotICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKSBjb25zdDsKKyNpZiBD
SEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCisgICAgdm9pZCBhZG9wdFVuZGVybHlpbmdTdHJpbmco
VW5kZXJseWluZ1N0cmluZyopOworICAgIFVuZGVybHlpbmdTdHJpbmcqIG1fdW5kZXJseWluZ1N0
cmluZyB7IG51bGxwdHIgfTsKKyNlbmRpZgorfTsKIAotICAgIFN0cmluZyB0b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkgY29uc3Q7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxp
bmVDYXBhY2l0eT4mLCBTdHJpbmdWaWV3KTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7
Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzOCgp
W2luZGV4XTsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMxNigpW2luZGV4XTsKLSAgICB9Cit9
CiAKLSAgICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkg
Y29uc3Q7CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSAgICBib29sIGNvbnRh
aW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KK25hbWVz
cGFjZSBXVEYgewogCi0gICAgY2xhc3MgQ29kZVBvaW50czsKLSAgICBjbGFzcyBDb2RlVW5pdHM7
CitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldygpCit7CisgICAgLy8gRklYTUU6IEl0J3Mg
cGVjdWxpYXIgdGhhdCBudWxsIHN0cmluZ3MgYXJlIDE2LWJpdCBhbmQgZW1wdHkgc3RyaW5ncyBy
ZXR1cm4gOC1iaXQgKGFjY29yZGluZyB0byB0aGUgaXM4Qml0IGZ1bmN0aW9uKS4KK30KIAotICAg
IENvZGVQb2ludHMgY29kZVBvaW50cygpIGNvbnN0OwotICAgIENvZGVVbml0cyBjb2RlVW5pdHMo
KSBjb25zdDsKK2lubGluZSBTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldygpCit7CisgICAgc2V0VW5k
ZXJseWluZ1N0cmluZyhudWxscHRyKTsKK30KIAotI2lmIFVTRShDRikKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGNvbnZlcnRzIG51bGwgc3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0
aG91dENvcHlpbmcoKSBjb25zdDsKLSNlbmRpZgoraW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1Zp
ZXcoU3RyaW5nVmlldyYmIG90aGVyKQorICAgIDogbV9jaGFyYWN0ZXJzKG90aGVyLm1fY2hhcmFj
dGVycykKKyAgICAsIG1fbGVuZ3RoKG90aGVyLm1fbGVuZ3RoKQoreworICAgIEFTU0VSVChvdGhl
ci51bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKIAotI2lmZGVmIF9fT0JKQ19fCi0gICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgbnVsbCBzdHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCi0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4gY3JlYXRlTlNTdHJp
bmcoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5TU3RyaW5n
PiBjcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICBvdGhl
ci5tX2NoYXJhY3RlcnMgPSBudWxscHRyOworICAgIG90aGVyLm1fbGVuZ3RoID0gMDsKIAotcHJp
dmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKGxlbmd0aCAmIGlzMTZCaXRTdHJp
bmdGbGFnKSk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOwot
ICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9CisgICAgc2V0VW5kZXJseWluZ1N0cmlu
ZyhvdGhlcik7CisgICAgb3RoZXIuc2V0VW5kZXJseWluZ1N0cmluZyhudWxscHRyKTsKK30KIAot
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobGVuZ3RoICYgaXMxNkJpdFN0cmluZ0ZsYWcp
KTsKLSAgICAgICAgCi0gICAgICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7Ci0gICAgICAg
IG1fbGVuZ3RoID0gaXMxNkJpdFN0cmluZ0ZsYWcgfCBsZW5ndGg7Ci0gICAgfQoraW5saW5lIFN0
cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpCisgICAgOiBtX2No
YXJhY3RlcnMob3RoZXIubV9jaGFyYWN0ZXJzKQorICAgICwgbV9sZW5ndGgob3RoZXIubV9sZW5n
dGgpCit7CisgICAgQVNTRVJUKG90aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlzMTZCaXRTdHJpbmdGbGFnID0gMXUgPDwgMzE7Cisg
ICAgc2V0VW5kZXJseWluZ1N0cmluZyhvdGhlcik7Cit9CiAKLSAgICBjb25zdCB2b2lkKiBtX2No
YXJhY3RlcnM7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci19OworaW5saW5lIFN0cmluZ1ZpZXcm
IFN0cmluZ1ZpZXc6Om9wZXJhdG9yPShTdHJpbmdWaWV3JiYgb3RoZXIpCit7CisgICAgQVNTRVJU
KG90aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOworCisgICAgbV9jaGFyYWN0ZXJzID0g
b3RoZXIubV9jaGFyYWN0ZXJzOworICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7CisKKyAg
ICBvdGhlci5tX2NoYXJhY3RlcnMgPSBudWxscHRyOworICAgIG90aGVyLm1fbGVuZ3RoID0gMDsK
KworICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOworICAgIG90aGVyLnNldFVuZGVybHlp
bmdTdHJpbmcobnVsbHB0cik7CiAKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KK2lubGluZSBTdHJpbmdWaWV3JiBTdHJpbmdWaWV3OjpvcGVy
YXRvcj0oY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpCit7CisgICAgQVNTRVJUKG90aGVyLnVuZGVy
bHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwogCi1uYW1lc3BhY2UgV1RGIHsKKyAgICBtX2NoYXJhY3Rl
cnMgPSBvdGhlci5tX2NoYXJhY3RlcnM7CisgICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsK
KworICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOworCisgICAgcmV0dXJuICp0aGlzOwor
fQorCitpbmxpbmUgdm9pZCBTdHJpbmdWaWV3Ojppbml0aWFsaXplKGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBiZXR0
ZXIgc29sdXRpb24gaGVyZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAg
IC8vIHRoZSBsZW5ndGggaGVyZSB3b24ndCBiZSB0b28gbG9uZy4gTWF5YmUgYXQgbGVhc3QgYSBS
RUxFQVNFX0FTU0VSVD8KKyAgICBBU1NFUlQoIShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxhZykp
OworICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7CisgICAgbV9sZW5ndGggPSBsZW5ndGg7
Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmluaXRpYWxpemUoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGJl
dHRlciBzb2x1dGlvbiBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0Cisg
ICAgLy8gdGhlIGxlbmd0aCBoZXJlIHdvbid0IGJlIHRvbyBsb25nLiBNYXliZSBhdCBsZWFzdCBh
IFJFTEVBU0VfQVNTRVJUPworICAgIEFTU0VSVCghKGxlbmd0aCAmIGlzMTZCaXRTdHJpbmdGbGFn
KSk7CisgICAgbV9jaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKKyAgICBtX2xlbmd0aCA9IGlzMTZC
aXRTdHJpbmdGbGFnIHwgbGVuZ3RoOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmll
dyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGluaXRp
YWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmlu
Z1ZpZXcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
bml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CiAKIGlubGluZSBTdHJpbmdWaWV3OjpT
dHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKIHsKKyAgICBzZXRVbmRlcmx5aW5n
U3RyaW5nKCZzdHJpbmcpOwogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIGluaXRp
YWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgZWxzZQpA
QCAtMTk0LDYgKzIzNiw3IEBAIGlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0
cmluZ0ltcGwmIHN0cmluZykKIAogaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7CisgICAgc2V0VW5kZXJseWluZ1N0cmluZyhzdHJpbmcuaW1wbCgp
KTsKICAgICBpZiAoIXN0cmluZy5pbXBsKCkpIHsKICAgICAgICAgbV9jaGFyYWN0ZXJzID0gbnVs
bHB0cjsKICAgICAgICAgbV9sZW5ndGggPSAwOwpAQCAtMjA2LDU0ICsyNDksOTkgQEAgaW5saW5l
IFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgaW5pdGlh
bGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAKLWNsYXNz
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgewotcHVibGljOgotICAgIGNsYXNzIEl0ZXJhdG9yIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25l
ZCBpbmRleCk7Ci0gICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgICAgIFVDaGFy
MzIgb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBj
b25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5n
VmlldzsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2luZGV4OwotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgbXV0YWJsZSBib29sIG1fYWxyZWFkeUluY3JlbWVudGVkOwotI2VuZGlm
Ci0gICAgfTsKK2lubGluZSBTdHJpbmdWaWV3IFN0cmluZ1ZpZXc6OmVtcHR5KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpLCAwKTsK
K30KIAotICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOwotICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CitpbmxpbmUg
Y29uc3QgTENoYXIqIFN0cmluZ1ZpZXc6OmNoYXJhY3RlcnM4KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaXM4Qml0KCkpOworICAgIEFTU0VSVCh1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPihtX2NoYXJhY3RlcnMpOworfQogCitp
bmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZ1ZpZXc6OmNoYXJhY3RlcnMxNigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgQVNTRVJUKHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlk
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7
Cit9CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlVwY29udmVydGVkQ2hhcmFjdGVycyB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgVXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcmKTsK
KyAgICBvcGVyYXRvciBjb25zdCBVQ2hhciooKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7
IH0KKyAgICBjb25zdCBVQ2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9
CiBwcml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OworICAgIFZlY3RvcjxVQ2hh
ciwgMzI+IG1fdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOworICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7CiB9OwogCi1jbGFzcyBTdHJpbmdWaWV3OjpDb2RlVW5pdHMgewotcHVibGljOgotICAg
IGNsYXNzIEl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0
cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Ci0gICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisr
KCk7Ci0gICAgICAgIFVDaGFyIG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBTdHJp
bmdWaWV3JiBtX3N0cmluZ1ZpZXc7Ci0gICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgfTsK
K2lubGluZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnMgU3RyaW5nVmlldzo6dXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCp0aGlzKTsKK30KIAotICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25zdCBTdHJpbmdW
aWV3Jik7Ci0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBlbmQoKSBj
b25zdDsKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX2NoYXJhY3RlcnM7Cit9CiAKLXByaXZhdGU6Ci0gICAgU3RyaW5nVmlldyBtX3N0cmlu
Z1ZpZXc7Ci19OworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXNFbXB0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFsZW5ndGgoKTsKK30KKworaW5saW5lIHVuc2lnbmVkIFN0cmluZ1ZpZXc6Omxl
bmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGVuZ3RoICYgfmlzMTZCaXRTdHJpbmdGbGFn
OworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFpc051bGwoKTsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXM4Qml0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIShtX2xlbmd0aCAmIGlzMTZCaXRTdHJpbmdGbGFnKTsKK30K
KworaW5saW5lIFN0cmluZ1ZpZXcgU3RyaW5nVmlldzo6c3Vic3RyaW5nKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKHN0YXJ0ID49IHRoaXMtPmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB0
aGlzLT5sZW5ndGgoKSAtIHN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA+PSBtYXhMZW5ndGgpIHsK
KyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
bGVuZ3RoID0gbWF4TGVuZ3RoOworICAgIH0KKworICAgIGlmIChpczhCaXQoKSkgeworICAgICAg
ICBTdHJpbmdWaWV3IHJlc3VsdChjaGFyYWN0ZXJzOCgpICsgc3RhcnQsIGxlbmd0aCk7CisgICAg
ICAgIHJlc3VsdC5zZXRVbmRlcmx5aW5nU3RyaW5nKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgU3RyaW5nVmlldyByZXN1bHQoY2hhcmFjdGVyczE2KCkgKyBzdGFy
dCwgbGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0VW5kZXJseWluZ1N0cmluZygqdGhpcyk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXc6Om9wZXJhdG9yW10o
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwor
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaW5kZXhdOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpbmRleF07Cit9CisKK2lubGluZSBib29sIFN0cmlu
Z1ZpZXc6OmNvbnRhaW5zKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlu
ZChjaGFyYWN0ZXIpICE9IG5vdEZvdW5kOworfQogCiBpbmxpbmUgdm9pZCBTdHJpbmdWaWV3Ojpn
ZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiB7CkBA
IC0yOTEsNyArMzc5LDYgQEAgaW5saW5lIFN0cmluZyBTdHJpbmdWaWV3Ojp0b1N0cmluZygpIGNv
bnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKGNoYXJhY3Rl
cnM4KCksIGxlbmd0aCgpKTsKLQogICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2KCksIGxl
bmd0aCgpKTsKIH0KIApAQCAtMzEzLDcgKzQwMCw2IEBAIGlubGluZSBTdHJpbmcgU3RyaW5nVmll
dzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFjdGVy
czgoKSwgbGVuZ3RoKCkpOwotCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRD
b3B5aW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7CiB9CiAKQEAgLTMyNCw2ICs0MTAsMjcg
QEAgaW5saW5lIHNpemVfdCBTdHJpbmdWaWV3OjpmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWdu
ZWQgc3RhcnQpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKCksIGNoYXJhY3Rlciwgc3RhcnQpOwogfQogCisjaWYgIUNIRUNLX1NUUklOR1ZJRVdfTElG
RVRJTUUKKworaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6aW52YWxpZGF0ZShjb25zdCBTdHJpbmdJ
bXBsJikKK3sKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6dW5kZXJseWluZ1N0cmluZ0lz
VmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBTdHJp
bmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwqKQoreworfQorCitp
bmxpbmUgdm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ1Zp
ZXcmKQoreworfQorCisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4gY2xh
c3MgU3RyaW5nVHlwZUFkYXB0ZXI7CiAKIHRlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVmlldz4gewpAQCAtMzQ5LDYgKzQ1Niw2MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxD
aGFyYQogICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0YSgp
ICsgb2xkU2l6ZSk7CiB9CiAKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworCisgICAgY2xh
c3MgSXRlcmF0b3I7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBl
bmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKK307
CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVVbml0cyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Q29kZVVuaXRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKworICAgIGNsYXNzIEl0ZXJhdG9yOworICAg
IEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciB7CitwdWJsaWM6CisgICAgSXRlcmF0b3IoY29uc3Qg
U3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKKworICAgIFVDaGFyMzIgb3BlcmF0b3IqKCkg
Y29uc3Q7CisgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5n
VmlldzsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW5kZXg7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIG11dGFibGUgYm9vbCBtX2FscmVhZHlJbmNyZW1lbnRlZCB7IGZhbHNlIH07CisjZW5k
aWYKK307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3IgeworcHVibGlj
OgorICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7CisKKyAg
ICBVQ2hhciBvcGVyYXRvciooKSBjb25zdDsKKyAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
U3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3OworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCiBp
bmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzKCkgY29uc3QgLT4gQ29kZVBvaW50cwog
ewogICAgIHJldHVybiBDb2RlUG9pbnRzKCp0aGlzKTsKQEAgLTM2Nyw5ICs1MzEsNiBAQCBpbmxp
bmUgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmdWaWV3KQogaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpJdGVy
YXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKICAgICA6
IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQogICAgICwgbV9pbmRleChpbmRleCkKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgLCBtX2FscmVhZHlJbmNyZW1lbnRlZChmYWxzZSkKLSNlbmRpZgog
ewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239264</attachid>
            <date>2014-10-03 22:14:56 -0700</date>
            <delta_ts>2014-10-06 23:36:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137202-20141003221457.patch</filename>
            <type>text/plain</type>
            <size>31211</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNlMGNkYzQ0Yzg3YTFlMjVlZmJjYWQ1
OWU0ZTUxODAyMTVlMjJiODUuLmY4MDU0OWRkOTA4YjRmYzlhNmZjNTczMGFiYmU1YjA3YmFkOGY5
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTQtMTAtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3RyaW5nVmlldyBjaGVjayB0aGUgbGlmZXRpbWUg
b2YgdGhlIFN0cmluZ0ltcGwgaXQncyBjcmVhdGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6IEFk
ZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnM6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdWaWV3LmNwcC4KKyAgICAgICAgKiB3dGYvQ01ha2VM
aXN0cy50eHQ6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorCisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKTogQ2Fs
bCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp1bmRlcmx5aW5nU3RyaW5ncyk6IFJldHVybnMg
bWFwIGZyb20gU3RyaW5nSW1wbCB0byB0aGUgdW5kZXJseWluZworICAgICAgICBzdHJpbmcgb2Jq
ZWN0IHVzZWQgYnkgU3RyaW5nVmlldyB0byB0cmFjayB2YWxpZGl0eS4KKyAgICAgICAgKFdURjo6
U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IE1hcmsgdGhlIHVuZGVybHlpbmcgc3RyaW5nIG9iamVj
dCBpbnZhbGlkLAorICAgICAgICBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCwgc28gYW55IGZ1
dHVyZSBTdHJpbmdJbXBsIHdpbGwgZ2V0IGEgbmV3IG9uZSwKKyAgICAgICAgZXZlbiBpZiBpdCBo
YXMgdGhlIHNhbWUgcG9pbnRlci4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dW5kZXJseWlu
Z1N0cmluZ0lzVmFsaWQpOiBSZXR1cm4gdHJ1ZSBvbmx5IGlmIHRoZQorICAgICAgICB1bmRlcmx5
aW5nIHN0cmluZyBpcyBzdGlsbCB2YWxpZC4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0
VW5kZXJseWluZ1N0cmluZyk6IENyZWF0ZSBhbmQgbWFuYWdlIHJlZmVyZW5jZSBjb3VudHMKKyAg
ICAgICAgb2YgdW5kZXJseWluZyBzdHJpbmcgb2JqZWN0cyBhcyBuZWVkZWQuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24sCisgICAgICAgIHNvIHdlIGNhbiBub3cgcmVhZCBhIGNsZWFuIGNs
YXNzIGRlZmluaXRpb24gdG8gc2VlIHRoZSBjbGFzcyBkZXNpZ24gYW5kIHdoYXQKKyAgICAgICAg
ZnVuY3Rpb25zIGl0IG9mZmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3RyaW5nVmll
dyk6IEFkZGVkIGEgY29tbWVudCB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
QWxzbyBhZGRlZCBjb3B5IGFuZCBtb3ZlIGNvbnN0cnVjdG9ycyBzbyB0aGV5IGNhbiBjYWxsIHNl
dFVuZGVybHlpbmdTdHJpbmcKKyAgICAgICAgYW5kIGFzc2VydCB0aGUgdW5kZXJseWluZyBzdHJp
bmcgaXMgdmFsaWQgYXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlCisgICAgICAgIGNvbXBpbGVyLWdl
bmVyYXRlZCBvbmVzLgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldyk6IEFk
ZGVkIGEgY2FsbCB0byBzZXRVbmRlcmx5aW5nU3RyaW5nLgorICAgICAgICAoV1RGOjpTdHJpbmdW
aWV3OjpvcGVyYXRvcj0pOiBBZGRlZCB0aGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyB3aXRoIHRo
ZSBzYW1lCisgICAgICAgIGpvYiBhcyB0aGUgY29uc3RydWN0b3JzIGFib3ZlLgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Ojppbml0aWFsaXplKTogQWRkZWQgYSBjb21tZW50LgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3OjpjaGFyYWN0ZXJzOCk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHRo
ZSB1bmRlcmx5aW5nCisgICAgICAgIHN0cmluZyBpcyB2YWxpZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Y2hhcmFjdGVyczE2KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OnN1YnN0cmluZyk6IEFkZGVkIGNvZGUgdG8gcHJvcGFnYXRlIHRoZSB1bmRlcmx5aW5nIHN0cmlu
ZworICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBzdHJpbmcgdG8gdGhlIHN1YnN0cmluZy4KKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IElubGluZSBlbXB0eSB2ZXJzaW9u
IG9mIHRoaXMgZnVuY3Rpb24gZm9yCisgICAgICAgIG5vbi1kZWJ1ZyBidWlsZHMuCisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcpOiBEaXR0by4KKwogMjAx
NC0xMC0wMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NDI3NS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZTRjNWVj
Zjg1NmYzNTllYjdjMThjZmY4ZWUwOWJjMzEyZGVmM2VlLi5kYzFmNDdlZDMwMGJkY2QyNGEzNDJl
ZjEwYzljYjk1YzE5NDI1ZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMTAt
MDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3RyaW5n
VmlldyBjaGVjayB0aGUgbGlmZXRpbWUgb2YgdGhlIFN0cmluZ0ltcGwgaXQncyBjcmVhdGVkIGZy
b20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIw
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6IFVwZGF0ZSBzaW5jZSBUZXh0UnVuJ3MgZGVmaW5p
dGlvbiBub3cKKyAgICAgICAgdXNlcyBhIFN0cmluZ1ZpZXcuCisKIDIwMTQtMTAtMDMgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZm9yIENTU1ZhbHVlIHN1YmNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCmluZGV4IDVhNDI1YWJmNTg2YzhkZjNmMGVkMjg2YmI2MDkzZmEyNmQyOGYxMzQuLjBm
ODNiYWU5YjU4N2VlOWQzOGQxYjkwNjBkYzRlYzZjNGU2ZjEwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvagpAQCAtMTM0LDYgKzEzNCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxTdHJpbmdCdWlsZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFN0cmluZ0ltcGwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cd3RmXHRleHRcU3RyaW5nU3RhdGljcy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHd0Zlx0ZXh0XFdURlN0cmluZy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcdGV4dFxjZlxBdG9taWNTdHJpbmdDRi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx3dGZcdGV4dFxjZlxTdHJpbmdDRi5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMWNlMDUwZGRiYzgzZWQyODdlMzUzZTM4
YzQ3ZjUyMTUzN2JjYWRkMC4uNDMyZWE3MTNmN2JkZTQwZDgxMjZlYTE4NjZiMGQ0MDRiYThhNWY1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAtNjAs
NiArNjAsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXHRleHRcU3RyaW5nU3Rh
dGljcy5jcHAiPgogICAgICAgPEZpbHRlcj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCI+Cisg
ICAgICA8RmlsdGVyPnRleHQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5jcHAiPgogICAgICAgPEZpbHRl
cj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBiNTRkZmE4Njg3YzRjYWEyOTEyYzU5NjhkN2M4NDI4NmJi
MzQ3ZDk1Li4xMzhhMTQwNTJmNGU4ZDk1YjMyMjI3ZWZiMjVmZTg0YzQzMzgwMmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg0LDYgKzg0LDcgQEAKIAkJ
OTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkzNEJENDE4QTFGMTY5MDBEMEQ2
QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLzsgfTsKIAkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5
IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0FDOTFBNzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLzsgfTsKIAkJOTNCMUFBODAx
ODBFNUFGMzAwNEEyRjA1IC8qIFBhc3NSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjFBQTdGMTgwRTVBRjMwMDRBMkYwNSAvKiBQYXNzUmVmLmgg
Ki87IH07CisJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjE5OTNEMTlENzk1
OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCAqLzsgfTsKIAkJOTc0Q0ZDOEUxNkE0RjMyNzAw
NkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi87IH07CiAJ
CTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkM3MEYwNDE3NkMzNzlE
MDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9OwogCQk5QkQ4RjQwQjE3NkMy
QjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9t
aWNTdHJpbmdUYWJsZS5oICovOyB9OwpAQCAtMzczLDYgKzM3NCw3IEBACiAJCTkzOTM0QkQ0MThB
MUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gU3RyaW5nVmlld0NGLmNwcDsgcGF0aCA9IGNmL1N0cmluZ1ZpZXdDRi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUM5MUE3MTg5NDJGQzQwMDI0NDkz
OSAvKiBMQ2hhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMQ2hhci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IxQUE3RjE4MEU1QUYzMDA0QTJGMDUgLyog
UGFzc1JlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzUmVmLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBT
dHJpbmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzRDRkM4RDE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWFrUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzcwRjA0MTc2QzM3OUQw
MDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTU0LDEyICs5NTYsMTMgQEAKIAkJCQlBOEE0NzMyNzE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSGFzaC5oICovLAogCQkJCUE4QTQ3MzI4MTUxQTgyNUIwMDQxMjNGRiAvKiBT
dHJpbmdJbXBsLmNwcCAqLywKIAkJCQlBOEE0NzMyOTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
SW1wbC5oICovLAorCQkJCTFBNkVCMURGMTg3RDBCRDMwMDMwMTI2RiAvKiBTdHJpbmdWaWV3Lmgg
Ki8sCisJCQkJOTNGMTk5M0QxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwICovLAog
CQkJCUE4QTQ3MzJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCAqLywKIAkJ
CQlBOEE0NzMyQjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8sCiAJCQkJ
QThBNDczMkMxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oICovLAogCQkJCUE4QTQ3
MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovLAogCQkJCUE4QTQ3MzJFMTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCAqLywKLQkJCQkxQTZFQjFERjE4N0QwQkQzMDAz
MDEyNkYgLyogU3RyaW5nVmlldy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEzNTEsNiArMTM1NCw3IEBACiAJCQkJQThBNDczRUMx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDczRjQxNTFBODI1QjAwNDEyM0ZGIC8qIE51bWJlck9mQ29yZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThBNDczRjcxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1Zp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczRjkxNTFBODI1QjAwNDEyM0ZGIC8qIE9T
UmFuZG9tU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDAwMTUxQTgyNUIwMDQx
MjNGRiAvKiBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0MDIxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VCbG9jay5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKaW5kZXggZTVhZDlmMjc2NThmMGJlYmQ0ZTgxNGI1Y2VlYjFiOTQ2ODRj
NWU4ZC4uMmFhZDc5M2M4MTcwYjExZGYyZTEwOGViMTM0NzE2MDdhYjBhNWUyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTIwMSw2ICsyMDEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICB0ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCiAgICAgdGV4dC9TdHJpbmdJbXBsLmNwcAogICAgIHRleHQvU3Ry
aW5nU3RhdGljcy5jcHAKKyAgICB0ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9XVEZTdHJp
bmcuY3BwCiAKICAgICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuY3BwCmluZGV4IGU1ZDY5NGMwZDFmZWY5ODIwNmNiNzc4MGJjYjQyOTZhNjU1M2Yw
ZmYuLjFmODQyOTI1YzQxOWI1ZWM5OGY4N2ZlYjExZDcwYmM5NzM5MDBkOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMTA1LDYgKzEwNSw4IEBAIFN0cmluZ0ltcGw6On5TdHJp
bmdJbXBsKCkKIHsKICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogCisgICAgU3RyaW5nVmlldzo6
aW52YWxpZGF0ZSgqdGhpcyk7CisKICAgICBTVFJJTkdfU1RBVFNfUkVNT1ZFX1NUUklORygqdGhp
cyk7CiAKICAgICBpZiAoaXNBdG9taWMoKSAmJiBtX2xlbmd0aCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMWFlZTlkY2QzMDllYzEzZTllYjZkMzA1Y2JhNDU1Zjhk
YWNmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcu
Y3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorCitDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoK
KzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlN0cmluZ1ZpZXcuaCIKKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKyNpZiBDSEVD
S19TVFJJTkdWSUVXX0xJRkVUSU1FCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBNYW5hZ2UgcmVm
ZXJlbmNlIGNvdW50IG1hbnVhbGx5IHNvIFVuZGVybHlpbmdTdHJpbmcgZG9lcyBub3QgbmVlZCB0
byBiZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIuCisKK3N0cnVjdCBTdHJpbmdWaWV3OjpVbmRlcmx5
aW5nU3RyaW5nIHsKKyAgICBzdGQ6OmF0b21pY191aW50IHJlZkNvdW50IHsgMSB9OworICAgIGJv
b2wgaXNWYWxpZCB7IHRydWUgfTsKKyAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmc7CisgICAg
ZXhwbGljaXQgVW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJpbmdJbXBsJik7Cit9OworCitTdHJp
bmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0lt
cGwmIHN0cmluZykKKyAgICA6IHN0cmluZyhzdHJpbmcpCit7Cit9CisKK3N0YXRpYyBzdGQ6Om11
dGV4JiB1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7CisgICAgcmV0dXJuIG11dGV4OworfQorCitzdGF0aWMgSGFz
aE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZyo+JiB1
bmRlcmx5aW5nU3RyaW5ncygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZ1ZpZXc6OlVuZGVybHlpbmdTdHJpbmcqPj4gbWFwOwor
ICAgIHJldHVybiBtYXA7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6aW52YWxpZGF0ZShjb25zdCBT
dHJpbmdJbXBsJiBzdHJpbmdUb0JlRGVzdHJveWVkKQoreworICAgIFVuZGVybHlpbmdTdHJpbmcq
IHVuZGVybHlpbmdTdHJpbmc7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAgICB1bmRlcmx5aW5n
U3RyaW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0JlRGVzdHJveWVkKTsK
KyAgICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCk7CisgICAgdW5kZXJseWlu
Z1N0cmluZy0+aXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIFN0cmluZ1ZpZXc6OnVuZGVybHlp
bmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdW5kZXJseWluZ1N0cmlu
ZyB8fCBtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQ7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6
YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFVuZGVybHlpbmdTdHJpbmcqIHVuZGVybHlpbmdTdHJpbmcp
Cit7CisgICAgaWYgKG1fdW5kZXJseWluZ1N0cmluZykgeworICAgICAgICBpZiAoIS0tbV91bmRl
cmx5aW5nU3RyaW5nLT5yZWZDb3VudCkgeworICAgICAgICAgICAgaWYgKG1fdW5kZXJseWluZ1N0
cmluZy0+aXNWYWxpZCkgeworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgdW5k
ZXJseWluZ1N0cmluZ3MoKS5yZW1vdmUoJm1fdW5kZXJseWluZ1N0cmluZy0+c3RyaW5nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBtX3VuZGVybHlpbmdTdHJpbmc7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbV91bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJseWluZ1N0cmluZzsK
K30KKwordm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZykKK3sKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5aW5nU3RyaW5nOwor
ICAgIGlmICghc3RyaW5nKQorICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0gbnVsbHB0cjsKKyAg
ICBlbHNlIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodW5kZXJs
eWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSB1bmRlcmx5aW5nU3Ry
aW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOworICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFVuZGVybHlpbmdT
dHJpbmcoKnN0cmluZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsrcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+cmVmQ291bnQ7CisgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBhZG9wdFVuZGVybHlpbmdTdHJpbmcodW5kZXJs
eWluZ1N0cmluZyk7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6c2V0VW5kZXJseWluZ1N0cmluZyhj
b25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCit7CisgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJs
eWluZ1N0cmluZyA9IHN0cmluZy5tX3VuZGVybHlpbmdTdHJpbmc7CisgICAgaWYgKHVuZGVybHlp
bmdTdHJpbmcpCisgICAgICAgICsrdW5kZXJseWluZ1N0cmluZy0+cmVmQ291bnQ7CisgICAgYWRv
cHRVbmRlcmx5aW5nU3RyaW5nKHVuZGVybHlpbmdTdHJpbmcpOworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCAyNGY2YjFhN2UzMWMzZDIxOGJmYjY4ZGZiNWRi
YTBkZGQ1OWI2Nzc1Li5mZDM2OTVkMTAzNDhkNGE4NTYwYmQwMjMxY2UzNzBjYzFkNDEwOTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMzIsMTYwICszMiwyMDIgQEAKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KIAorI2lmZGVmIE5E
RUJVRworI2RlZmluZSBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FIDAKKyNlbHNlCisjZGVmaW5l
IENIRUNLX1NUUklOR1ZJRVdfTElGRVRJTUUgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewog
CiAvLyBTdHJpbmdWaWV3IGlzIGEgbm9uLW93bmluZyByZWZlcmVuY2UgdG8gYSBzdHJpbmcsIHNp
bWlsYXIgdG8gdGhlIHByb3Bvc2VkIHN0ZDo6c3RyaW5nX3ZpZXcuCiAvLyBXaGV0aGVyIHRoZSBz
dHJpbmcgaXMgOC1iaXQgb3IgMTYtYml0IGlzIGVuY29kZWQgaW4gdGhlIHVwcGVyIGJpdCBvZiB0
aGUgbGVuZ3RoIG1lbWJlci4KLS8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0aGFu
IDIgR2lnYWJ5dGVzIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQuIElmIHRoYXQgdHVybnMgb3V0IHRv
IGJlCi0vLyBhIHByb2JsZW0gd2UgY2FuIGludmVzdGlnYXRlIGFsdGVybmF0aXZlIHNvbHV0aW9u
cy4KKy8vIFRoaXMgbWVhbnMgdGhhdCBzdHJpbmdzIGxvbmdlciB0aGFuIDIgZ2lnYWNoYXJhY3Rl
cnMgY2Fubm90IGJlIHJlcHJlc2VudGVkLgogCiBjbGFzcyBTdHJpbmdWaWV3IHsKIHB1YmxpYzoK
LSAgICBTdHJpbmdWaWV3KCkKLSAgICAgICAgOiBtX2NoYXJhY3RlcnMobnVsbHB0cikKLSAgICAg
ICAgLCBtX2xlbmd0aCgwKQotICAgIHsKLSAgICB9CisgICAgU3RyaW5nVmlldygpOworICAgIH5T
dHJpbmdWaWV3KCk7CisgICAgU3RyaW5nVmlldyhTdHJpbmdWaWV3JiYpOworICAgIFN0cmluZ1Zp
ZXcoY29uc3QgU3RyaW5nVmlldyYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShTdHJpbmdW
aWV3JiYpOworICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmdWaWV3Jik7CiAK
LSAgICBTdHJpbmdWaWV3KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQor
ICAgIFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBTdHJp
bmdJbXBsJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgU3RyaW5nVmlldyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBT
dHJpbmdWaWV3KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
ewotICAgICAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQorICAgIHN0
YXRpYyBTdHJpbmdWaWV3IGVtcHR5KCk7CiAKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0lt
cGwmKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZyYpOworICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCi0gICAgc3RhdGljIFN0cmlu
Z1ZpZXcgZW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSwgMCk7Ci0gICAgfQorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogCi0gICAgY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpczhCaXQo
KSk7CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4obV9jaGFyYWN0ZXJzKTsKLSAgICB9
CisgICAgY2xhc3MgQ29kZVVuaXRzOworICAgIENvZGVVbml0cyBjb2RlVW5pdHMoKSBjb25zdDsK
IAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFpczhCaXQoKSk7CisgICAgY2xhc3MgQ29kZVBvaW50czsKKyAgICBDb2RlUG9pbnRz
IGNvZGVQb2ludHMoKSBjb25zdDsKIAotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPihtX2NoYXJhY3RlcnMpOwotICAgIH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0Owor
ICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0OworICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzMTYoKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAg
IFN0cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisKKyNpZiBVU0UoQ0YpCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5n
cy4KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjcmVh
dGVDRlN0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIF9fT0JK
Q19fCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgbnVsbCBzdHJpbmdzIHRvIGVtcHR5
IHN0cmluZ3MuCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4g
Y3JlYXRlTlNTdHJpbmcoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWlu
UHRyPE5TU3RyaW5nPiBjcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7CisjZW5k
aWYKKworICAgIGNsYXNzIFVwY29udmVydGVkQ2hhcmFjdGVyczsKKyAgICBVcGNvbnZlcnRlZENo
YXJhY3RlcnMgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3Q7CiAKICAgICB2b2lkIGdldENo
YXJhY3RlcnNXaXRoVXBjb252ZXJ0KExDaGFyKikgY29uc3Q7CiAgICAgdm9pZCBnZXRDaGFyYWN0
ZXJzV2l0aFVwY29udmVydChVQ2hhciopIGNvbnN0OwogCi0gICAgY2xhc3MgVXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFVwY29udmVydGVkQ2hh
cmFjdGVycyhjb25zdCBTdHJpbmdWaWV3Jik7Ci0gICAgICAgIG9wZXJhdG9yIGNvbnN0IFVDaGFy
KigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQotICAgICAgICBjb25zdCBVQ2hhciog
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgVmVjdG9yPFVDaGFyLCAzMj4gbV91cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgfTsKLSAgICBVcGNvbnZlcnRlZENoYXJhY3Rl
cnMgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gVXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCp0aGlzKTsgfQorICAgIFN0cmluZ1ZpZXcgc3Vic3RyaW5nKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
IGNvbnN0OwogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9jaGFyYWN0ZXJz
OyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9Ci0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggJiB+aXMxNkJpdFN0cmlu
Z0ZsYWc7IH0KKyAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25z
dDsKKyAgICBib29sIGNvbnRhaW5zKFVDaGFyKSBjb25zdDsKIAotICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhaXNOdWxsKCk7IH0KKyAgICBpbnQgdG9JbnQoYm9v
bCYgaXNWYWxpZCkgY29uc3Q7CisgICAgZmxvYXQgdG9GbG9hdChib29sJiBpc1ZhbGlkKSBjb25z
dDsKIAotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gIShtX2xlbmd0aCAmIGlzMTZC
aXRTdHJpbmdGbGFnKTsgfQorICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGUoY29uc3QgU3RyaW5n
SW1wbCYpOwogCi0gICAgU3RyaW5nVmlldyBzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChzdGFydCA+PSB0aGlzLT5sZW5ndGgoKSkKLSAgICAgICAgICAg
IHJldHVybiBlbXB0eSgpOwotICAgICAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB0aGlzLT5sZW5n
dGgoKSAtIHN0YXJ0OworICAgIHN0cnVjdCBVbmRlcmx5aW5nU3RyaW5nOwogCi0gICAgICAgIGlm
IChsZW5ndGggPj0gbWF4TGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1heExlbmd0aDsK
LSAgICAgICAgfQorcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZ1ZpZXcoY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOworICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBib29sIHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJp
bmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0
cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7CiAKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcoY2hh
cmFjdGVyczE2KCkgKyBzdGFydCwgbGVuZ3RoKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGlzMTZCaXRTdHJpbmdGbGFnID0gMXUgPDwgMzE7CiAKLSAgICBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKKyAgICBjb25zdCB2b2lkKiBtX2NoYXJhY3RlcnMgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9sZW5ndGggeyAwIH07CiAKLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlz
VmFsaWQpIGNvbnN0OwotICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKSBjb25zdDsKKyNpZiBD
SEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCisgICAgdm9pZCBhZG9wdFVuZGVybHlpbmdTdHJpbmco
VW5kZXJseWluZ1N0cmluZyopOworICAgIFVuZGVybHlpbmdTdHJpbmcqIG1fdW5kZXJseWluZ1N0
cmluZyB7IG51bGxwdHIgfTsKKyNlbmRpZgorfTsKIAotICAgIFN0cmluZyB0b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkgY29uc3Q7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxp
bmVDYXBhY2l0eT4mLCBTdHJpbmdWaWV3KTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7
Ci0gICAgICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzOCgp
W2luZGV4XTsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMxNigpW2luZGV4XTsKLSAgICB9Cit9
CiAKLSAgICBzaXplX3QgZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkg
Y29uc3Q7CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSAgICBib29sIGNvbnRh
aW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KK25hbWVz
cGFjZSBXVEYgewogCi0gICAgY2xhc3MgQ29kZVBvaW50czsKLSAgICBjbGFzcyBDb2RlVW5pdHM7
CitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldygpCit7CisgICAgLy8gRklYTUU6IEl0J3Mg
cGVjdWxpYXIgdGhhdCBudWxsIHN0cmluZ3MgYXJlIDE2LWJpdCBhbmQgZW1wdHkgc3RyaW5ncyBy
ZXR1cm4gOC1iaXQgKGFjY29yZGluZyB0byB0aGUgaXM4Qml0IGZ1bmN0aW9uKS4KK30KIAotICAg
IENvZGVQb2ludHMgY29kZVBvaW50cygpIGNvbnN0OwotICAgIENvZGVVbml0cyBjb2RlVW5pdHMo
KSBjb25zdDsKK2lubGluZSBTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldygpCit7CisgICAgc2V0VW5k
ZXJseWluZ1N0cmluZyhudWxscHRyKTsKK30KIAotI2lmIFVTRShDRikKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGNvbnZlcnRzIG51bGwgc3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0
aG91dENvcHlpbmcoKSBjb25zdDsKLSNlbmRpZgoraW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1Zp
ZXcoU3RyaW5nVmlldyYmIG90aGVyKQorICAgIDogbV9jaGFyYWN0ZXJzKG90aGVyLm1fY2hhcmFj
dGVycykKKyAgICAsIG1fbGVuZ3RoKG90aGVyLm1fbGVuZ3RoKQoreworICAgIEFTU0VSVChvdGhl
ci51bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKIAotI2lmZGVmIF9fT0JKQ19fCi0gICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgbnVsbCBzdHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCi0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJldGFpblB0cjxOU1N0cmluZz4gY3JlYXRlTlNTdHJp
bmcoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5TU3RyaW5n
PiBjcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICBvdGhl
ci5tX2NoYXJhY3RlcnMgPSBudWxscHRyOworICAgIG90aGVyLm1fbGVuZ3RoID0gMDsKIAotcHJp
dmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKGxlbmd0aCAmIGlzMTZCaXRTdHJp
bmdGbGFnKSk7Ci0gICAgICAgIAotICAgICAgICBtX2NoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOwot
ICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9CisgICAgc2V0VW5kZXJseWluZ1N0cmlu
ZyhvdGhlcik7CisgICAgb3RoZXIuc2V0VW5kZXJseWluZ1N0cmluZyhudWxscHRyKTsKK30KIAot
ICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobGVuZ3RoICYgaXMxNkJpdFN0cmluZ0ZsYWcp
KTsKLSAgICAgICAgCi0gICAgICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7Ci0gICAgICAg
IG1fbGVuZ3RoID0gaXMxNkJpdFN0cmluZ0ZsYWcgfCBsZW5ndGg7Ci0gICAgfQoraW5saW5lIFN0
cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpCisgICAgOiBtX2No
YXJhY3RlcnMob3RoZXIubV9jaGFyYWN0ZXJzKQorICAgICwgbV9sZW5ndGgob3RoZXIubV9sZW5n
dGgpCit7CisgICAgQVNTRVJUKG90aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlzMTZCaXRTdHJpbmdGbGFnID0gMXUgPDwgMzE7Cisg
ICAgc2V0VW5kZXJseWluZ1N0cmluZyhvdGhlcik7Cit9CiAKLSAgICBjb25zdCB2b2lkKiBtX2No
YXJhY3RlcnM7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci19OworaW5saW5lIFN0cmluZ1ZpZXcm
IFN0cmluZ1ZpZXc6Om9wZXJhdG9yPShTdHJpbmdWaWV3JiYgb3RoZXIpCit7CisgICAgQVNTRVJU
KG90aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOworCisgICAgbV9jaGFyYWN0ZXJzID0g
b3RoZXIubV9jaGFyYWN0ZXJzOworICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7CisKKyAg
ICBvdGhlci5tX2NoYXJhY3RlcnMgPSBudWxscHRyOworICAgIG90aGVyLm1fbGVuZ3RoID0gMDsK
KworICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOworICAgIG90aGVyLnNldFVuZGVybHlp
bmdTdHJpbmcobnVsbHB0cik7CiAKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KK2lubGluZSBTdHJpbmdWaWV3JiBTdHJpbmdWaWV3OjpvcGVy
YXRvcj0oY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpCit7CisgICAgQVNTRVJUKG90aGVyLnVuZGVy
bHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwogCi1uYW1lc3BhY2UgV1RGIHsKKyAgICBtX2NoYXJhY3Rl
cnMgPSBvdGhlci5tX2NoYXJhY3RlcnM7CisgICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsK
KworICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOworCisgICAgcmV0dXJuICp0aGlzOwor
fQorCitpbmxpbmUgdm9pZCBTdHJpbmdWaWV3Ojppbml0aWFsaXplKGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBiZXR0
ZXIgc29sdXRpb24gaGVyZSwgYmVjYXVzZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAg
IC8vIHRoZSBsZW5ndGggaGVyZSB3b24ndCBiZSB0b28gbG9uZy4gTWF5YmUgYXQgbGVhc3QgYSBS
RUxFQVNFX0FTU0VSVD8KKyAgICBBU1NFUlQoIShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxhZykp
OworICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7CisgICAgbV9sZW5ndGggPSBsZW5ndGg7
Cit9CisKK2lubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmluaXRpYWxpemUoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGJl
dHRlciBzb2x1dGlvbiBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0Cisg
ICAgLy8gdGhlIGxlbmd0aCBoZXJlIHdvbid0IGJlIHRvbyBsb25nLiBNYXliZSBhdCBsZWFzdCBh
IFJFTEVBU0VfQVNTRVJUPworICAgIEFTU0VSVCghKGxlbmd0aCAmIGlzMTZCaXRTdHJpbmdGbGFn
KSk7CisgICAgbV9jaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKKyAgICBtX2xlbmd0aCA9IGlzMTZC
aXRTdHJpbmdGbGFnIHwgbGVuZ3RoOworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmll
dyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGluaXRp
YWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmlu
Z1ZpZXcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
bml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CiAKIGlubGluZSBTdHJpbmdWaWV3OjpT
dHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKIHsKKyAgICBzZXRVbmRlcmx5aW5n
U3RyaW5nKCZzdHJpbmcpOwogICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIGluaXRp
YWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgZWxzZQpA
QCAtMTk0LDYgKzIzNiw3IEBAIGlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0
cmluZ0ltcGwmIHN0cmluZykKIAogaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7CisgICAgc2V0VW5kZXJseWluZ1N0cmluZyhzdHJpbmcuaW1wbCgp
KTsKICAgICBpZiAoIXN0cmluZy5pbXBsKCkpIHsKICAgICAgICAgbV9jaGFyYWN0ZXJzID0gbnVs
bHB0cjsKICAgICAgICAgbV9sZW5ndGggPSAwOwpAQCAtMjA2LDU0ICsyNDksOTkgQEAgaW5saW5l
IFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgaW5pdGlh
bGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CiB9CiAKLWNsYXNz
IFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgewotcHVibGljOgotICAgIGNsYXNzIEl0ZXJhdG9yIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25l
ZCBpbmRleCk7Ci0gICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgICAgIFVDaGFy
MzIgb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBj
b25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5n
VmlldzsKLSAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2luZGV4OwotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgbXV0YWJsZSBib29sIG1fYWxyZWFkeUluY3JlbWVudGVkOwotI2VuZGlm
Ci0gICAgfTsKK2lubGluZSBTdHJpbmdWaWV3IFN0cmluZ1ZpZXc6OmVtcHR5KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIiIpLCAwKTsK
K30KIAotICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOwotICAgIEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CitpbmxpbmUg
Y29uc3QgTENoYXIqIFN0cmluZ1ZpZXc6OmNoYXJhY3RlcnM4KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaXM4Qml0KCkpOworICAgIEFTU0VSVCh1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPihtX2NoYXJhY3RlcnMpOworfQogCitp
bmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZ1ZpZXc6OmNoYXJhY3RlcnMxNigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgQVNTRVJUKHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlk
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFjdGVycyk7
Cit9CisKK2NsYXNzIFN0cmluZ1ZpZXc6OlVwY29udmVydGVkQ2hhcmFjdGVycyB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgVXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcmKTsK
KyAgICBvcGVyYXRvciBjb25zdCBVQ2hhciooKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7
IH0KKyAgICBjb25zdCBVQ2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9
CiBwcml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OworICAgIFZlY3RvcjxVQ2hh
ciwgMzI+IG1fdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOworICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7CiB9OwogCi1jbGFzcyBTdHJpbmdWaWV3OjpDb2RlVW5pdHMgewotcHVibGljOgotICAg
IGNsYXNzIEl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFN0
cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7Ci0gICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisr
KCk7Ci0gICAgICAgIFVDaGFyIG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBTdHJp
bmdWaWV3JiBtX3N0cmluZ1ZpZXc7Ci0gICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgfTsK
K2lubGluZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnMgU3RyaW5nVmlldzo6dXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCp0aGlzKTsKK30KIAotICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25zdCBTdHJpbmdW
aWV3Jik7Ci0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBlbmQoKSBj
b25zdDsKK2lubGluZSBib29sIFN0cmluZ1ZpZXc6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX2NoYXJhY3RlcnM7Cit9CiAKLXByaXZhdGU6Ci0gICAgU3RyaW5nVmlldyBtX3N0cmlu
Z1ZpZXc7Ci19OworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXNFbXB0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFsZW5ndGgoKTsKK30KKworaW5saW5lIHVuc2lnbmVkIFN0cmluZ1ZpZXc6Omxl
bmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGVuZ3RoICYgfmlzMTZCaXRTdHJpbmdGbGFn
OworfQorCitpbmxpbmUgU3RyaW5nVmlldzo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFpc051bGwoKTsKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXM4Qml0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIShtX2xlbmd0aCAmIGlzMTZCaXRTdHJpbmdGbGFnKTsKK30K
KworaW5saW5lIFN0cmluZ1ZpZXcgU3RyaW5nVmlldzo6c3Vic3RyaW5nKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKHN0YXJ0ID49IHRoaXMtPmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB0
aGlzLT5sZW5ndGgoKSAtIHN0YXJ0OworCisgICAgaWYgKGxlbmd0aCA+PSBtYXhMZW5ndGgpIHsK
KyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
bGVuZ3RoID0gbWF4TGVuZ3RoOworICAgIH0KKworICAgIGlmIChpczhCaXQoKSkgeworICAgICAg
ICBTdHJpbmdWaWV3IHJlc3VsdChjaGFyYWN0ZXJzOCgpICsgc3RhcnQsIGxlbmd0aCk7CisgICAg
ICAgIHJlc3VsdC5zZXRVbmRlcmx5aW5nU3RyaW5nKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgU3RyaW5nVmlldyByZXN1bHQoY2hhcmFjdGVyczE2KCkgKyBzdGFy
dCwgbGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0VW5kZXJseWluZ1N0cmluZygqdGhpcyk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFVDaGFyIFN0cmluZ1ZpZXc6Om9wZXJhdG9yW10o
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwor
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaW5kZXhdOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpbmRleF07Cit9CisKK2lubGluZSBib29sIFN0cmlu
Z1ZpZXc6OmNvbnRhaW5zKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlu
ZChjaGFyYWN0ZXIpICE9IG5vdEZvdW5kOworfQogCiBpbmxpbmUgdm9pZCBTdHJpbmdWaWV3Ojpn
ZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiB7CkBA
IC0yOTEsNyArMzc5LDYgQEAgaW5saW5lIFN0cmluZyBTdHJpbmdWaWV3Ojp0b1N0cmluZygpIGNv
bnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKGNoYXJhY3Rl
cnM4KCksIGxlbmd0aCgpKTsKLQogICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2KCksIGxl
bmd0aCgpKTsKIH0KIApAQCAtMzEzLDcgKzQwMCw2IEBAIGlubGluZSBTdHJpbmcgU3RyaW5nVmll
dzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY2hhcmFjdGVy
czgoKSwgbGVuZ3RoKCkpOwotCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRD
b3B5aW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7CiB9CiAKQEAgLTMyNCw2ICs0MTAsMjcg
QEAgaW5saW5lIHNpemVfdCBTdHJpbmdWaWV3OjpmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWdu
ZWQgc3RhcnQpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKCksIGNoYXJhY3Rlciwgc3RhcnQpOwogfQogCisjaWYgIUNIRUNLX1NUUklOR1ZJRVdfTElG
RVRJTUUKKworaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6aW52YWxpZGF0ZShjb25zdCBTdHJpbmdJ
bXBsJikKK3sKK30KKworaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6dW5kZXJseWluZ1N0cmluZ0lz
VmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBTdHJp
bmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwqKQoreworfQorCitp
bmxpbmUgdm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ1Zp
ZXcmKQoreworfQorCisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4gY2xh
c3MgU3RyaW5nVHlwZUFkYXB0ZXI7CiAKIHRlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVmlldz4gewpAQCAtMzQ5LDYgKzQ1Niw2MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKFZlY3RvcjxD
aGFyYQogICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0YSgp
ICsgb2xkU2l6ZSk7CiB9CiAKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOworCisgICAgY2xh
c3MgSXRlcmF0b3I7CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBJdGVyYXRvciBl
bmQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKK307
CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVVbml0cyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Q29kZVVuaXRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKKworICAgIGNsYXNzIEl0ZXJhdG9yOworICAg
IEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciB7CitwdWJsaWM6CisgICAgSXRlcmF0b3IoY29uc3Qg
U3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKKworICAgIFVDaGFyMzIgb3BlcmF0b3IqKCkg
Y29uc3Q7CisgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVy
YXRvciYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5n
VmlldzsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW5kZXg7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIG11dGFibGUgYm9vbCBtX2FscmVhZHlJbmNyZW1lbnRlZCB7IGZhbHNlIH07CisjZW5k
aWYKK307CisKK2NsYXNzIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3IgeworcHVibGlj
OgorICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRleCk7CisKKyAg
ICBVQ2hhciBvcGVyYXRvciooKSBjb25zdDsKKyAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
U3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3OworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCiBp
bmxpbmUgYXV0byBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzKCkgY29uc3QgLT4gQ29kZVBvaW50cwog
ewogICAgIHJldHVybiBDb2RlUG9pbnRzKCp0aGlzKTsKQEAgLTM2Nyw5ICs1MzEsNiBAQCBpbmxp
bmUgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6Q29kZVBvaW50cyhjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmdWaWV3KQogaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpJdGVy
YXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1bnNpZ25lZCBpbmRleCkKICAgICA6
IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQogICAgICwgbV9pbmRleChpbmRleCkKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgLCBtX2FscmVhZHlJbmNyZW1lbnRlZChmYWxzZSkKLSNlbmRpZgog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCmlu
ZGV4IDI3MDA2ODZlNTVjMzEzZDc4OGYxYWVlZDU4MWVmZDRjMDgwNmRhOTMuLmM5Mjc3OTYwNWU4
MjFjYjE2YWZhNmE2N2ExOGM1YjRlZmE3OWVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxNCArMjksMTQgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IEV4cGVjdGVkVGV4dFJ1blNpemUgewotICAgIGNvbnN0IHZvaWQqIHBv
aW50ZXI7Ci0gICAgaW50IGludGVnZXJzWzJdOworICAgIHZvaWQqIHJlbmRlcmluZ0NvbnRleHQ7
CisgICAgU3RyaW5nVmlldyB0ZXh0OworICAgIHVuc2lnbmVkIGludGVnZXIxOworICAgIHVuc2ln
bmVkIGludGVnZXIyOwogICAgIGZsb2F0IGZsb2F0MTsKICAgICBmbG9hdCBmbG9hdDI7CiAgICAg
ZmxvYXQgZmxvYXQzOwotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDEwOwotICAgIHVuc2lnbmVk
IGFuVW5zaWduZWQ7Ci0gICAgUmVmUHRyPFRleHRSdW46OlJlbmRlcmluZ0NvbnRleHQ+IHJlbmRl
cmluZ0NvbnRleHQ7CisgICAgdW5zaWduZWQgYml0ZmllbGRzIDogOTsKIH07CiAKIENPTVBJTEVf
QVNTRVJUKHNpemVvZihUZXh0UnVuKSA9PSBzaXplb2YoRXhwZWN0ZWRUZXh0UnVuU2l6ZSksIFRl
eHRSdW5faXNfbm90X29mX2V4cGVjdGVkX3NpemUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239398</attachid>
            <date>2014-10-06 23:36:40 -0700</date>
            <delta_ts>2014-10-06 23:57:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137202-20141006233642.patch</filename>
            <type>text/plain</type>
            <size>31470</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0Mzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU3NjZlN2NiYTk3OTFhZTZlOWZiNTRm
NjI3NGZhNWFmMzAxZWMxYWQuLmY2NzNmMzAzNzgzYTM3YTVkYmE5MzI3ZTdiZWJhMGYzMzQwODdm
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTQtMTAtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgU3RyaW5nVmlldyBjaGVjayB0aGUgbGlmZXRpbWUg
b2YgdGhlIFN0cmluZ0ltcGwgaXQncyBjcmVhdGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6IEFk
ZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnM6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBTdHJpbmdWaWV3LmNwcC4KKyAgICAgICAgKiB3dGYvQ01ha2VM
aXN0cy50eHQ6IEFkZGVkIFN0cmluZ1ZpZXcuY3BwLgorCisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKTogQ2Fs
bCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp1bmRlcmx5aW5nU3RyaW5ncyk6IFJldHVybnMg
bWFwIGZyb20gU3RyaW5nSW1wbCB0byB0aGUgdW5kZXJseWluZworICAgICAgICBzdHJpbmcgb2Jq
ZWN0IHVzZWQgYnkgU3RyaW5nVmlldyB0byB0cmFjayB2YWxpZGl0eS4KKyAgICAgICAgKFdURjo6
U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IE1hcmsgdGhlIHVuZGVybHlpbmcgc3RyaW5nIG9iamVj
dCBpbnZhbGlkLAorICAgICAgICBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCwgc28gYW55IGZ1
dHVyZSBTdHJpbmdJbXBsIHdpbGwgZ2V0IGEgbmV3IG9uZSwKKyAgICAgICAgZXZlbiBpZiBpdCBo
YXMgdGhlIHNhbWUgcG9pbnRlci4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dW5kZXJseWlu
Z1N0cmluZ0lzVmFsaWQpOiBSZXR1cm4gdHJ1ZSBvbmx5IGlmIHRoZQorICAgICAgICB1bmRlcmx5
aW5nIHN0cmluZyBpcyBzdGlsbCB2YWxpZC4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0
VW5kZXJseWluZ1N0cmluZyk6IENyZWF0ZSBhbmQgbWFuYWdlIHJlZmVyZW5jZSBjb3VudHMKKyAg
ICAgICAgb2YgdW5kZXJseWluZyBzdHJpbmcgb2JqZWN0cyBhcyBuZWVkZWQuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdWaWV3Lmg6IE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhl
IGNsYXNzIGRlZmluaXRpb24sCisgICAgICAgIHNvIHdlIGNhbiBub3cgcmVhZCBhIGNsZWFuIGNs
YXNzIGRlZmluaXRpb24gdG8gc2VlIHRoZSBjbGFzcyBkZXNpZ24gYW5kIHdoYXQKKyAgICAgICAg
ZnVuY3Rpb25zIGl0IG9mZmVycy4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3RyaW5nVmll
dyk6IEFkZGVkIGEgY29tbWVudCB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
QWxzbyBhZGRlZCBjb3B5IGFuZCBtb3ZlIGNvbnN0cnVjdG9ycyBzbyB0aGV5IGNhbiBjYWxsIHNl
dFVuZGVybHlpbmdTdHJpbmcKKyAgICAgICAgYW5kIGFzc2VydCB0aGUgdW5kZXJseWluZyBzdHJp
bmcgaXMgdmFsaWQgYXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlCisgICAgICAgIGNvbXBpbGVyLWdl
bmVyYXRlZCBvbmVzLgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp+U3RyaW5nVmlldyk6IEFk
ZGVkIGEgY2FsbCB0byBzZXRVbmRlcmx5aW5nU3RyaW5nLgorICAgICAgICAoV1RGOjpTdHJpbmdW
aWV3OjpvcGVyYXRvcj0pOiBBZGRlZCB0aGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyB3aXRoIHRo
ZSBzYW1lCisgICAgICAgIGpvYiBhcyB0aGUgY29uc3RydWN0b3JzIGFib3ZlLgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Ojppbml0aWFsaXplKTogQWRkZWQgYSBjb21tZW50LgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3OjpjaGFyYWN0ZXJzOCk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHRo
ZSB1bmRlcmx5aW5nCisgICAgICAgIHN0cmluZyBpcyB2YWxpZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6Y2hhcmFjdGVyczE2KTogRGl0dG8uCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OnN1YnN0cmluZyk6IEFkZGVkIGNvZGUgdG8gcHJvcGFnYXRlIHRoZSB1bmRlcmx5aW5nIHN0cmlu
ZworICAgICAgICBmcm9tIHRoZSBvcmlnaW5hbCBzdHJpbmcgdG8gdGhlIHN1YnN0cmluZy4KKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6IElubGluZSBlbXB0eSB2ZXJzaW9u
IG9mIHRoaXMgZnVuY3Rpb24gZm9yCisgICAgICAgIG5vbi1kZWJ1ZyBidWlsZHMuCisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcpOiBEaXR0by4KKwogMjAx
NC0xMC0wNiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2luXSBEYXRlTWF0aCdzIGNhbGN1bGF0ZVVURk9mZnNldCBkb2VzIG5vdCBhY2NvdW50IGZvciBE
U1QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOWYwZjJlM2E3MWM0NGQwM2EzOTRhMDIzODViYTJlY2U4YzA3YTQx
MC4uODZkMTg2MDhmZjcwZjhhYTI5ODdmMWE0MmQ3MjAzZTlhZTYyODNmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE0LTEwLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBNYWtlIFN0cmluZ1ZpZXcgY2hlY2sgdGhlIGxpZmV0aW1lIG9mIHRoZSBT
dHJpbmdJbXBsIGl0J3MgY3JlYXRlZCBmcm9tCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwOiBVcGRh
dGUgc2luY2UgVGV4dFJ1bidzIGRlZmluaXRpb24gbm93CisgICAgICAgIHVzZXMgYSBTdHJpbmdW
aWV3LgorCiAyMDE0LTEwLTA2ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaU9TXSBGaXggcmVtYWluaW5nIG1pc3VzZXMgb2YgYWJzKCkgYW5kIGZhYnNmKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ogYi9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCmluZGV4IDVhNDI1YWJmNTg2YzhkZjNmMGVkMjg2YmI2
MDkzZmEyNmQyOGYxMzQuLjBmODNiYWU5YjU4N2VlOWQzOGQxYjkwNjBkYzRlYzZjNGU2ZjEwNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagpAQCAtMTM0LDYgKzEzNCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdCdWlsZGVyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XFN0cmluZ0ltcGwuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXHRleHRcU3RyaW5nU3RhdGljcy5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxTdHJpbmdWaWV3LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XFdURlN0cmluZy5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxjZlxBdG9taWNTdHJpbmdDRi5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxjZlxTdHJpbmdDRi5jcHAiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMg
Yi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNGUwMTM5
ODM0MzFiYzc5Y2RiZjEzNGUzYTczNDBiMDhjYzQ3ODYwYS4uNmEwZTlhMTYyZDk1NzU1MmM4Zjc3
ZTIxMTM1NmViZjNhNGM1NGNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2ouZmlsdGVycwpAQCAtNjAsNiArNjAsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
d3RmXHRleHRcU3RyaW5nU3RhdGljcy5jcHAiPgogICAgICAgPEZpbHRlcj50ZXh0PC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcdGV4dFxT
dHJpbmdWaWV3LmNwcCI+CisgICAgICA8RmlsdGVyPnRleHQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5j
cHAiPgogICAgICAgPEZpbHRlcj50ZXh0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC03
MTYsNCArNzE5LDQgQEAKICAgICA8Tm9uZSBJbmNsdWRlPSJXVEZQb3N0QnVpbGQuY21kIiAvPgog
ICAgIDxOb25lIEluY2x1ZGU9IldURlByZUJ1aWxkLmNtZCIgLz4KICAgPC9JdGVtR3JvdXA+Ci08
L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjU0ZGZhODY4N2M0Y2FhMjkx
MmM1OTY4ZDdjODQyODZiYjM0N2Q5NS4uMTM4YTE0MDUyZjRlOGQ5NWIzMjIyN2VmYjI1ZmU4NGM0
MzM4MDJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04
NCw2ICs4NCw3IEBACiAJCTkzOTM0QkQ1MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MzRC
RDQxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgKi87IH07CiAJCTkzQUM5MUE4
MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNBQzkxQTcxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggKi87
IH07CiAJCTkzQjFBQTgwMTgwRTVBRjMwMDRBMkYwNSAvKiBQYXNzUmVmLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IxQUE3RjE4MEU1QUYzMDA0QTJG
MDUgLyogUGFzc1JlZi5oICovOyB9OworCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3Ry
aW5nVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0YxOTkzRDE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgKi87IH07CiAJCTk3
NENGQzhFMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vh
a1B0ci5oICovOyB9OwogCQk5QkM3MEYwNTE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5n
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCAqLzsgfTsK
IAkJOUJEOEY0MEIxNzZDMkI0NzAwMDJEODY1IC8qIEF0b21pY1N0cmluZ1RhYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ4RjQwQTE3NkMyQUQ4
MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCAqLzsgfTsKQEAgLTM3Myw2ICszNzQsNyBA
QAogCQk5MzkzNEJENDE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ1ZpZXdDRi5jcHA7IHBhdGggPSBj
Zi9TdHJpbmdWaWV3Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FDOTFB
NzE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTENoYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCMUFBN0YxODBF
NUFGMzAwNEEyRjA1IC8qIFBhc3NSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFzc1JlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0YxOTkzRDE5RDc5
NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJpbmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXRvbWljU3RyaW5nVGFibGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4RjQwQTE3NkMyQUQ4MDAwMkQ4NjUgLyogQXRv
bWljU3RyaW5nVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXRvbWljU3RyaW5nVGFibGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NCwxMiArOTU2LDEzIEBACiAJCQkJQThBNDcz
MjcxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hhc2guaCAqLywKIAkJCQlBOEE0NzMyODE1MUE4
MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQThBNDczMjkxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCAqLywKKwkJCQkxQTZFQjFERjE4N0QwQkQzMDAzMDEyNkYg
LyogU3RyaW5nVmlldy5oICovLAorCQkJCTkzRjE5OTNEMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJp
bmdWaWV3LmNwcCAqLywKIAkJCQlBOEE0NzMyQTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nT3Bl
cmF0b3JzLmggKi8sCiAJCQkJQThBNDczMkIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ1N0YXRp
Y3MuY3BwICovLAogCQkJCUE4QTQ3MzJDMTUxQTgyNUIwMDQxMjNGRiAvKiBUZXh0UG9zaXRpb24u
aCAqLywKIAkJCQlBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLywK
IAkJCQlBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi8sCi0JCQkJMUE2
RUIxREYxODdEMEJEMzAwMzAxMjZGIC8qIFN0cmluZ1ZpZXcuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gdGV4dDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMzUxLDYgKzEzNTQsNyBA
QAogCQkJCUE4QTQ3M0VDMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3M0Y0MTUxQTgyNUIwMDQxMjNGRiAvKiBOdW1iZXJPZkNvcmVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Y3MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0Fs
bG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMy
MzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Y5MTUxQTgy
NUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQwMDE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QTQ3NDAyMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGU1YWQ5ZjI3NjU4ZjBiZWJkNGU4
MTRiNWNlZWIxYjk0Njg0YzVlOGQuLjJhYWQ3OTNjODE3MGIxMWRmMmUxMDhlYjEzNDcxNjA3YWIw
YTVlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMDEsNiArMjAxLDcgQEAgc2V0KFdURl9T
T1VSQ0VTCiAgICAgdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAogICAgIHRleHQvU3RyaW5nSW1wbC5j
cHAKICAgICB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCisgICAgdGV4dC9TdHJpbmdWaWV3LmNwcAog
ICAgIHRleHQvV1RGU3RyaW5nLmNwcAogCiAgICAgdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBlNWQ2OTRjMGQxZmVmOTgyMDZjYjc3
ODBiY2I0Mjk2YTY1NTNmMGZmLi4xZjg0MjkyNWM0MTliNWVjOThmODdmZWIxMWQ3MGJjOTczOTAw
ZDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTEwNSw2ICsxMDUsOCBAQCBT
dHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB7CiAgICAgQVNTRVJUKCFpc1N0YXRpYygpKTsKIAor
ICAgIFN0cmluZ1ZpZXc6OmludmFsaWRhdGUoKnRoaXMpOworCiAgICAgU1RSSU5HX1NUQVRTX1JF
TU9WRV9TVFJJTkcoKnRoaXMpOwogCiAgICAgaWYgKGlzQXRvbWljKCkgJiYgbV9sZW5ndGgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTg5YTZhYWYzMDdlMTBiYWJi
OWQ4NzU4Y2M0Mzc0MDBhMWM0ZWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdWaWV3LmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKworQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKK2FyZSBtZXQ6CisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
K0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHJpbmdWaWV3LmgiCisKKyNpbmNsdWRlIDxtdXRl
eD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorCisjaWYgQ0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRQorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gTWFuYWdlIHJlZmVyZW5jZSBjb3VudCBtYW51YWxseSBzbyBVbmRlcmx5aW5nU3RyaW5n
IGRvZXMgbm90IG5lZWQgdG8gYmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyLgorCitzdHJ1Y3QgU3Ry
aW5nVmlldzo6VW5kZXJseWluZ1N0cmluZyB7CisgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IHJl
ZkNvdW50IHsgMSB9OworICAgIGJvb2wgaXNWYWxpZCB7IHRydWUgfTsKKyAgICBjb25zdCBTdHJp
bmdJbXBsJiBzdHJpbmc7CisgICAgZXhwbGljaXQgVW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJp
bmdJbXBsJik7Cit9OworCitTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5n
U3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICA6IHN0cmluZyhzdHJpbmcpCit7
Cit9CisKK3N0YXRpYyBzdGQ6Om11dGV4JiB1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkKK3sKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBmbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdIHsKKyAg
ICAgICAgbXV0ZXguY29uc3RydWN0KCk7CisgICAgfSk7CisgICAgcmV0dXJuIG11dGV4OworfQor
CitzdGF0aWMgSGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nVmlldzo6VW5kZXJseWlu
Z1N0cmluZyo+JiB1bmRlcmx5aW5nU3RyaW5ncygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hNYXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZ1ZpZXc6OlVuZGVybHlpbmdTdHJp
bmcqPj4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3ZvaWQgU3RyaW5nVmlldzo6aW52YWxp
ZGF0ZShjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmdUb0JlRGVzdHJveWVkKQoreworICAgIFVuZGVy
bHlpbmdTdHJpbmcqIHVuZGVybHlpbmdTdHJpbmc7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAg
ICB1bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0Jl
RGVzdHJveWVkKTsKKyAgICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCk7Cisg
ICAgdW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIFN0cmluZ1Zp
ZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdW5k
ZXJseWluZ1N0cmluZyB8fCBtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQ7Cit9CisKK3ZvaWQg
U3RyaW5nVmlldzo6YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFVuZGVybHlpbmdTdHJpbmcqIHVuZGVy
bHlpbmdTdHJpbmcpCit7CisgICAgaWYgKG1fdW5kZXJseWluZ1N0cmluZykgeworICAgICAgICBp
ZiAoIS0tbV91bmRlcmx5aW5nU3RyaW5nLT5yZWZDb3VudCkgeworICAgICAgICAgICAgaWYgKG1f
dW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCkgeworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAg
ICAgICAgICAgdW5kZXJseWluZ1N0cmluZ3MoKS5yZW1vdmUoJm1fdW5kZXJseWluZ1N0cmluZy0+
c3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBtX3VuZGVybHlpbmdT
dHJpbmc7CisgICAgICAgIH0KKyAgICB9CisgICAgbV91bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJs
eWluZ1N0cmluZzsKK30KKwordm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNv
bnN0IFN0cmluZ0ltcGwqIHN0cmluZykKK3sKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5
aW5nU3RyaW5nOworICAgIGlmICghc3RyaW5nKQorICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0g
bnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgYXV0byYgdW5kZXJseWlu
Z1N0cmluZ1Nsb3QgPSB1bmRlcmx5aW5nU3RyaW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nU2xvdCkKKyAgICAg
ICAgICAgIHVuZGVybHlpbmdTdHJpbmdTbG90ID0gbmV3IFVuZGVybHlpbmdTdHJpbmcoKnN0cmlu
Zyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsrdW5kZXJseWluZ1N0cmluZ1Nsb3QtPnJl
ZkNvdW50OworICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJseWluZ1N0cmluZ1Nsb3Q7
CisgICAgfQorICAgIGFkb3B0VW5kZXJseWluZ1N0cmluZyh1bmRlcmx5aW5nU3RyaW5nKTsKK30K
Kwordm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcm
IHN0cmluZykKK3sKKyAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5aW5nU3RyaW5nID0gc3Ry
aW5nLm1fdW5kZXJseWluZ1N0cmluZzsKKyAgICBpZiAodW5kZXJseWluZ1N0cmluZykKKyAgICAg
ICAgKyt1bmRlcmx5aW5nU3RyaW5nLT5yZWZDb3VudDsKKyAgICBhZG9wdFVuZGVybHlpbmdTdHJp
bmcodW5kZXJseWluZ1N0cmluZyk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Vmlldy5oCmluZGV4IDI0ZjZiMWE3ZTMxYzNkMjE4YmZiNjhkZmI1ZGJhMGRkZDU5YjY3NzUuLjU3
MWU1ZWI0NTNlYTAyODY1ZjBmOTM4ZDY1MDUzZjc0NzIyYWVlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nVmlldy5oCkBAIC0zMiwxNjAgKzMyLDIwMyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9MQ2hhci5oPgogCisjaWZkZWYgTkRFQlVHCisjZGVmaW5lIENI
RUNLX1NUUklOR1ZJRVdfTElGRVRJTUUgMAorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfU1RSSU5HVklF
V19MSUZFVElNRSAxCisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIC8vIFN0cmluZ1ZpZXcg
aXMgYSBub24tb3duaW5nIHJlZmVyZW5jZSB0byBhIHN0cmluZywgc2ltaWxhciB0byB0aGUgcHJv
cG9zZWQgc3RkOjpzdHJpbmdfdmlldy4KIC8vIFdoZXRoZXIgdGhlIHN0cmluZyBpcyA4LWJpdCBv
ciAxNi1iaXQgaXMgZW5jb2RlZCBpbiB0aGUgdXBwZXIgYml0IG9mIHRoZSBsZW5ndGggbWVtYmVy
LgotLy8gVGhpcyBtZWFucyB0aGF0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMiBHaWdhYnl0ZXMgY2Fu
IG5vdCBiZSByZXByZXNlbnRlZC4gSWYgdGhhdCB0dXJucyBvdXQgdG8gYmUKLS8vIGEgcHJvYmxl
bSB3ZSBjYW4gaW52ZXN0aWdhdGUgYWx0ZXJuYXRpdmUgc29sdXRpb25zLgorLy8gVGhpcyBtZWFu
cyB0aGF0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMiBnaWdhY2hhcmFjdGVycyBjYW5ub3QgYmUgcmVw
cmVzZW50ZWQuCiAKIGNsYXNzIFN0cmluZ1ZpZXcgewogcHVibGljOgotICAgIFN0cmluZ1ZpZXco
KQotICAgICAgICA6IG1fY2hhcmFjdGVycyhudWxscHRyKQotICAgICAgICAsIG1fbGVuZ3RoKDAp
Ci0gICAgewotICAgIH0KKyAgICBTdHJpbmdWaWV3KCk7CisgICAgflN0cmluZ1ZpZXcoKTsKKyAg
ICBTdHJpbmdWaWV3KFN0cmluZ1ZpZXcmJik7CisgICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmdW
aWV3Jik7CisgICAgU3RyaW5nVmlldyYgb3BlcmF0b3I9KFN0cmluZ1ZpZXcmJik7CisgICAgU3Ry
aW5nVmlldyYgb3BlcmF0b3I9KGNvbnN0IFN0cmluZ1ZpZXcmKTsKIAotICAgIFN0cmluZ1ZpZXco
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAg
IGluaXRpYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICB9CisgICAgU3RyaW5nVmlldyhj
b25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmKTsKKyAgICBT
dHJpbmdWaWV3KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBTdHJpbmdWaWV3
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIFN0cmluZ1ZpZXcoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGluaXRp
YWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICB9CisgICAgc3RhdGljIFN0cmluZ1ZpZXcg
ZW1wdHkoKTsKIAotICAgIFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nSW1wbCYpOwotICAgIFN0cmlu
Z1ZpZXcoY29uc3QgU3RyaW5nJik7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgU3RyaW5nVmlldyBlbXB0eSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIiIpLCAwKTsKLSAgICB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
OworICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAKLSAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVy
czgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICBVQ2hhciBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2NoYXJhY3RlcnMpOwotICAgIH0KKyAgICBjbGFzcyBDb2Rl
VW5pdHM7CisgICAgQ29kZVVuaXRzIGNvZGVVbml0cygpIGNvbnN0OwogCi0gICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoIWlzOEJpdCgp
KTsKKyAgICBjbGFzcyBDb2RlUG9pbnRzOworICAgIENvZGVQb2ludHMgY29kZVBvaW50cygpIGNv
bnN0OwogCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KG1fY2hhcmFj
dGVycyk7Ci0gICAgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3Q7CisgICAgY29uc3QgTENoYXIq
IGNoYXJhY3RlcnM4KCkgY29uc3Q7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNv
bnN0OworCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSBjb25zdDsKKworI2lmIFVTRShDRikKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGNvbnZlcnRzIG51bGwgc3RyaW5ncyB0byBlbXB0eSBzdHJpbmdzLgorICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0aG91
dENvcHlpbmcoKSBjb25zdDsKKyNlbmRpZgorCisjaWZkZWYgX19PQkpDX18KKyAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgY29udmVydCBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4KKyAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5TU3RyaW5nPiBjcmVhdGVOU1N0cmluZygp
IGNvbnN0OworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8TlNTdHJpbmc+IGNy
ZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKKyNlbmRpZgorCisgICAgY2xhc3Mg
VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOworICAgIFVwY29udmVydGVkQ2hhcmFjdGVycyB1cGNvbnZl
cnRlZENoYXJhY3RlcnMoKSBjb25zdDsKIAogICAgIHZvaWQgZ2V0Q2hhcmFjdGVyc1dpdGhVcGNv
bnZlcnQoTENoYXIqKSBjb25zdDsKICAgICB2b2lkIGdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KFVDaGFyKikgY29uc3Q7CiAKLSAgICBjbGFzcyBVcGNvbnZlcnRlZENoYXJhY3RlcnMgewotICAg
IHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgVXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0
cmluZ1ZpZXcmKTsKLSAgICAgICAgb3BlcmF0b3IgY29uc3QgVUNoYXIqKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFyYWN0ZXJzOyB9Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2NoYXJhY3RlcnM7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8VUNoYXIs
IDMyPiBtX3VwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hh
cmFjdGVyczsKLSAgICB9OwotICAgIFVwY29udmVydGVkQ2hhcmFjdGVycyB1cGNvbnZlcnRlZENo
YXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBVcGNvbnZlcnRlZENoYXJhY3RlcnMoKnRoaXMpOyB9
CisgICAgU3RyaW5nVmlldyBzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29uc3Q7CiAKLSAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2NoYXJhY3RlcnM7IH0KLSAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAmIH5pczE2Qml0U3RyaW5nRmxhZzsgfQorICAgIHNp
emVfdCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnMoVUNoYXIpIGNvbnN0OwogCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICFpc051bGwoKTsgfQorICAgIGludCB0b0ludChib29sJiBpc1ZhbGlkKSBjb25z
dDsKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpIGNvbnN0OwogCi0gICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiAhKG1fbGVuZ3RoICYgaXMxNkJpdFN0cmluZ0ZsYWcpOyB9
CisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZShjb25zdCBTdHJpbmdJbXBsJik7CiAKLSAgICBT
dHJpbmdWaWV3IHN1YnN0cmluZyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKHN0YXJ0ID49IHRoaXMtPmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7
Ci0gICAgICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHRoaXMtPmxlbmd0aCgpIC0gc3RhcnQ7Cisg
ICAgc3RydWN0IFVuZGVybHlpbmdTdHJpbmc7CiAKLSAgICAgICAgaWYgKGxlbmd0aCA+PSBtYXhM
ZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghc3RhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgICAgICAgICAgbGVuZ3RoID0gbWF4TGVuZ3RoOwotICAgICAgICB9Citwcml2
YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAot
ICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhjaGFy
YWN0ZXJzOCgpICsgc3RhcnQsIGxlbmd0aCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJv
b2wgdW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwqKTsKKyAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKIAotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhjaGFyYWN0ZXJzMTYoKSArIHN0
YXJ0LCBsZW5ndGgpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaXMxNkJpdFN0
cmluZ0ZsYWcgPSAxdSA8PCAzMTsKIAotICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAg
IGNvbnN0IHZvaWQqIG1fY2hhcmFjdGVycyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2xl
bmd0aCB7IDAgfTsKIAotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCYgaXNWYWxpZCkgY29uc3Q7Ci0g
ICAgaW50IHRvSW50KGJvb2wmIGlzVmFsaWQpIGNvbnN0OworI2lmIENIRUNLX1NUUklOR1ZJRVdf
TElGRVRJTUUKKyAgICB2b2lkIGFkb3B0VW5kZXJseWluZ1N0cmluZyhVbmRlcmx5aW5nU3RyaW5n
Kik7CisgICAgVW5kZXJseWluZ1N0cmluZyogbV91bmRlcmx5aW5nU3RyaW5nIHsgbnVsbHB0ciB9
OworI2VuZGlmCit9OwogCi0gICAgU3RyaW5nIHRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25z
dDsKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gdm9pZCBhcHBlbmQoVmVjdG9yPENoYXJhY3RlclR5cGUsIGlubGluZUNhcGFjaXR5PiYsIFN0
cmluZ1ZpZXcpOwogCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGlz
OEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaW5kZXhdOwotICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyczE2KClbaW5kZXhdOwotICAgIH0KK30KIAotICAgIHNpemVfdCBm
aW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29u
c3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQorbmFtZXNwYWNlIFdURiB7CiAKLSAg
ICBjbGFzcyBDb2RlUG9pbnRzOwotICAgIGNsYXNzIENvZGVVbml0czsKK2lubGluZSBTdHJpbmdW
aWV3OjpTdHJpbmdWaWV3KCkKK3sKK30KIAotICAgIENvZGVQb2ludHMgY29kZVBvaW50cygpIGNv
bnN0OwotICAgIENvZGVVbml0cyBjb2RlVW5pdHMoKSBjb25zdDsKK2lubGluZSBTdHJpbmdWaWV3
Ojp+U3RyaW5nVmlldygpCit7CisgICAgc2V0VW5kZXJseWluZ1N0cmluZyhudWxscHRyKTsKK30K
IAotI2lmIFVTRShDRikKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIG51bGwgc3RyaW5n
cyB0byBlbXB0eSBzdHJpbmdzLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKLSNlbmRp
ZgoraW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoU3RyaW5nVmlldyYmIG90aGVyKQorICAg
IDogbV9jaGFyYWN0ZXJzKG90aGVyLm1fY2hhcmFjdGVycykKKyAgICAsIG1fbGVuZ3RoKG90aGVy
Lm1fbGVuZ3RoKQoreworICAgIEFTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAgQVNTRVJUKG90
aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwogCi0jaWZkZWYgX19PQkpDX18KLSAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4K
LSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5TU3RyaW5nPiBjcmVhdGVOU1N0
cmluZygpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8TlNTdHJp
bmc+IGNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKLSNlbmRpZgorICAgIG90
aGVyLm1fY2hhcmFjdGVycyA9IG51bGxwdHI7CisgICAgb3RoZXIubV9sZW5ndGggPSAwOwogCi1w
cml2YXRlOgotICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEobGVuZ3RoICYgaXMxNkJpdFN0
cmluZ0ZsYWcpKTsKLSAgICAgICAgCi0gICAgICAgIG1fY2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7
Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KKyAgICBzZXRVbmRlcmx5aW5nU3Ry
aW5nKG90aGVyKTsKKyAgICBvdGhlci5zZXRVbmRlcmx5aW5nU3RyaW5nKG51bGxwdHIpOworfQog
Ci0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQoIShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxh
ZykpOwotICAgICAgICAKLSAgICAgICAgbV9jaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKLSAgICAg
ICAgbV9sZW5ndGggPSBpczE2Qml0U3RyaW5nRmxhZyB8IGxlbmd0aDsKLSAgICB9CitpbmxpbmUg
U3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmdWaWV3JiBvdGhlcikKKyAgICA6IG1f
Y2hhcmFjdGVycyhvdGhlci5tX2NoYXJhY3RlcnMpCisgICAgLCBtX2xlbmd0aChvdGhlci5tX2xl
bmd0aCkKK3sKKyAgICBBU1NFUlQob3RoZXIudW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7CiAK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaXMxNkJpdFN0cmluZ0ZsYWcgPSAxdSA8PCAzMTsK
KyAgICBzZXRVbmRlcmx5aW5nU3RyaW5nKG90aGVyKTsKK30KIAotICAgIGNvbnN0IHZvaWQqIG1f
Y2hhcmFjdGVyczsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLX07CitpbmxpbmUgU3RyaW5nVmll
dyYgU3RyaW5nVmlldzo6b3BlcmF0b3I9KFN0cmluZ1ZpZXcmJiBvdGhlcikKK3sKKyAgICBBU1NF
UlQodGhpcyAhPSAmb3RoZXIpOworICAgIEFTU0VSVChvdGhlci51bmRlcmx5aW5nU3RyaW5nSXNW
YWxpZCgpKTsKKworICAgIG1fY2hhcmFjdGVycyA9IG90aGVyLm1fY2hhcmFjdGVyczsKKyAgICBt
X2xlbmd0aCA9IG90aGVyLm1fbGVuZ3RoOworCisgICAgb3RoZXIubV9jaGFyYWN0ZXJzID0gbnVs
bHB0cjsKKyAgICBvdGhlci5tX2xlbmd0aCA9IDA7CisKKyAgICBzZXRVbmRlcmx5aW5nU3RyaW5n
KG90aGVyKTsKKyAgICBvdGhlci5zZXRVbmRlcmx5aW5nU3RyaW5nKG51bGxwdHIpOwogCisgICAg
cmV0dXJuICp0aGlzOwogfQogCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Citpbmxp
bmUgU3RyaW5nVmlldyYgU3RyaW5nVmlldzo6b3BlcmF0b3I9KGNvbnN0IFN0cmluZ1ZpZXcmIG90
aGVyKQoreworICAgIEFTU0VSVChvdGhlci51bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKIAot
bmFtZXNwYWNlIFdURiB7CisgICAgbV9jaGFyYWN0ZXJzID0gb3RoZXIubV9jaGFyYWN0ZXJzOwor
ICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7CisKKyAgICBzZXRVbmRlcmx5aW5nU3RyaW5n
KG90aGVyKTsKKworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIHZvaWQgU3RyaW5nVmll
dzo6aW5pdGlhbGl6ZShjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgYmV0dGVyIHNvbHV0aW9uIGhlcmUsIGJlY2F1c2Ug
dGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQKKyAgICAvLyB0aGUgbGVuZ3RoIGhlcmUgd29uJ3Qg
YmUgdG9vIGxvbmcuIE1heWJlIGF0IGxlYXN0IGEgUkVMRUFTRV9BU1NFUlQ/CisgICAgQVNTRVJU
KCEobGVuZ3RoICYgaXMxNkJpdFN0cmluZ0ZsYWcpKTsKKyAgICBtX2NoYXJhY3RlcnMgPSBjaGFy
YWN0ZXJzOworICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworfQorCitpbmxpbmUgdm9pZCBTdHJpbmdW
aWV3Ojppbml0aWFsaXplKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBiZXR0ZXIgc29sdXRpb24gaGVyZSwgYmVjYXVz
ZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAgIC8vIHRoZSBsZW5ndGggaGVyZSB3b24n
dCBiZSB0b28gbG9uZy4gTWF5YmUgYXQgbGVhc3QgYSBSRUxFQVNFX0FTU0VSVD8KKyAgICBBU1NF
UlQoIShsZW5ndGggJiBpczE2Qml0U3RyaW5nRmxhZykpOworICAgIG1fY2hhcmFjdGVycyA9IGNo
YXJhY3RlcnM7CisgICAgbV9sZW5ndGggPSBpczE2Qml0U3RyaW5nRmxhZyB8IGxlbmd0aDsKK30K
KworaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7
Cit9CisKK2lubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaW5pdGlhbGl6ZShjaGFyYWN0ZXJzLCBsZW5n
dGgpOworfQogCiBpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBs
JiBzdHJpbmcpCiB7CisgICAgc2V0VW5kZXJseWluZ1N0cmluZygmc3RyaW5nKTsKICAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQogICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmcubGVuZ3RoKCkpOwogICAgIGVsc2UKQEAgLTE5NCw2ICsyMzcsNyBAQCBpbmxpbmUg
U3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCiAKIGlubGlu
ZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogeworICAgIHNl
dFVuZGVybHlpbmdTdHJpbmcoc3RyaW5nLmltcGwoKSk7CiAgICAgaWYgKCFzdHJpbmcuaW1wbCgp
KSB7CiAgICAgICAgIG1fY2hhcmFjdGVycyA9IG51bGxwdHI7CiAgICAgICAgIG1fbGVuZ3RoID0g
MDsKQEAgLTIwNiw1NCArMjUwLDk5IEBAIGlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNv
bnN0IFN0cmluZyYgc3RyaW5nKQogICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnMxNigp
LCBzdHJpbmcubGVuZ3RoKCkpOwogfQogCi1jbGFzcyBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzIHsK
LXB1YmxpYzoKLSAgICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBJdGVy
YXRvcihjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOwotICAgICAgICBJdGVyYXRv
ciYgb3BlcmF0b3IrKygpOwotICAgICAgICBVQ2hhcjMyIG9wZXJhdG9yKigpIGNvbnN0OwotICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7Ci0gICAgICAgIG11dGFibGUgdW5z
aWduZWQgbV9pbmRleDsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG11dGFibGUgYm9v
bCBtX2FscmVhZHlJbmNyZW1lbnRlZDsKLSNlbmRpZgotICAgIH07CitpbmxpbmUgU3RyaW5nVmll
dyBTdHJpbmdWaWV3OjplbXB0eSgpCit7CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIiKSwgMCk7Cit9CiAKLSAgICBleHBsaWNpdCBDb2RlUG9p
bnRzKGNvbnN0IFN0cmluZ1ZpZXcmKTsKLSAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAg
IEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworaW5saW5lIGNvbnN0IExDaGFyKiBTdHJpbmdWaWV3Ojpj
aGFyYWN0ZXJzOCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICBBU1NFUlQo
dW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IExDaGFyKj4obV9jaGFyYWN0ZXJzKTsKK30KIAoraW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmdW
aWV3OjpjaGFyYWN0ZXJzMTYoKSBjb25zdAoreworICAgIEFTU0VSVCghaXM4Qml0KCkpOworICAg
IEFTU0VSVCh1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOworfQorCitjbGFzcyBTdHJpbmdWaWV3OjpV
cGNvbnZlcnRlZENoYXJhY3RlcnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFVwY29udmVydGVk
Q2hhcmFjdGVycyhjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgb3BlcmF0b3IgY29uc3QgVUNoYXIq
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CisgICAgY29uc3QgVUNoYXIqIGdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQogcHJpdmF0ZToKLSAgICBTdHJpbmdWaWV3
IG1fc3RyaW5nVmlldzsKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX3VwY29udmVydGVkQ2hhcmFj
dGVyczsKKyAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwogfTsKIAotY2xhc3MgU3RyaW5n
Vmlldzo6Q29kZVVuaXRzIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgcHVi
bGljOgotICAgICAgICBJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgp
OwotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotICAgICAgICBVQ2hhciBvcGVyYXRv
ciooKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29u
c3Q7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgU3RyaW5nVmlldyYgbV9zdHJpbmdWaWV3OwotICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIH07CitpbmxpbmUgU3RyaW5nVmlldzo6VXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzIFN0cmluZ1ZpZXc6OnVwY29udmVydGVkQ2hhcmFjdGVycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFVwY29udmVydGVkQ2hhcmFjdGVycygqdGhpcyk7Cit9CiAKLSAgICBl
eHBsaWNpdCBDb2RlVW5pdHMoY29uc3QgU3RyaW5nVmlldyYpOwotICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CitpbmxpbmUgYm9vbCBTdHJpbmdW
aWV3Ojppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiAhbV9jaGFyYWN0ZXJzOworfQogCi1w
cml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OwotfTsKK2lubGluZSBib29sIFN0
cmluZ1ZpZXc6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbGVuZ3RoKCk7Cit9CisK
K2lubGluZSB1bnNpZ25lZCBTdHJpbmdWaWV3OjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX2xlbmd0aCAmIH5pczE2Qml0U3RyaW5nRmxhZzsKK30KKworaW5saW5lIFN0cmluZ1ZpZXc6
Om9wZXJhdG9yIGJvb2woKSBjb25zdAoreworICAgIHJldHVybiAhaXNOdWxsKCk7Cit9CisKK2lu
bGluZSBib29sIFN0cmluZ1ZpZXc6OmlzOEJpdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEobV9s
ZW5ndGggJiBpczE2Qml0U3RyaW5nRmxhZyk7Cit9CisKK2lubGluZSBTdHJpbmdWaWV3IFN0cmlu
Z1ZpZXc6OnN1YnN0cmluZyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAor
eworICAgIGlmIChzdGFydCA+PSB0aGlzLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5
KCk7CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCkgLSBzdGFydDsKKwor
ICAgIGlmIChsZW5ndGggPj0gbWF4TGVuZ3RoKSB7CisgICAgICAgIGlmICghc3RhcnQpCisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGxlbmd0aCA9IG1heExlbmd0aDsKKyAgICB9
CisKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgU3RyaW5nVmlldyByZXN1bHQoY2hhcmFj
dGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICByZXN1bHQuc2V0VW5kZXJseWluZ1N0
cmluZygqdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIFN0cmluZ1Zp
ZXcgcmVzdWx0KGNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGxlbmd0aCk7CisgICAgcmVzdWx0LnNl
dFVuZGVybHlpbmdTdHJpbmcoKnRoaXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSBVQ2hhciBTdHJpbmdWaWV3OjpvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorewor
ICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJzOCgpW2luZGV4XTsKKyAgICByZXR1cm4gY2hhcmFjdGVyczE2KClb
aW5kZXhdOworfQorCitpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojpjb250YWlucyhVQ2hhciBjaGFy
YWN0ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmQoY2hhcmFjdGVyKSAhPSBub3RGb3VuZDsK
K30KIAogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
TENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogewpAQCAtMjkxLDcgKzM4MCw2IEBAIGlubGluZSBT
dHJpbmcgU3RyaW5nVmlldzo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0KICAgICBy
ZXR1cm4gU3RyaW5nKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSk7CiB9CiAKQEAgLTMxMyw3ICs0
MDEsNiBAQCBpbmxpbmUgU3RyaW5nIFN0cmluZ1ZpZXc6OnRvU3RyaW5nV2l0aG91dENvcHlpbmco
KSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKLQogICAgIHJl
dHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKCkpOwogfQogCkBAIC0zMjQsNiArNDExLDI3IEBAIGlubGluZSBzaXplX3QgU3RyaW5nVmll
dzo6ZmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAogICAgIHJldHVy
biBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCBjaGFyYWN0ZXIsIHN0YXJ0KTsK
IH0KIAorI2lmICFDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCisKK2lubGluZSB2b2lkIFN0cmlu
Z1ZpZXc6OmludmFsaWRhdGUoY29uc3QgU3RyaW5nSW1wbCYpCit7Cit9CisKK2lubGluZSBib29s
IFN0cmluZ1ZpZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6c2V0VW5kZXJseWluZ1N0cmlu
Zyhjb25zdCBTdHJpbmdJbXBsKikKK3sKK30KKworaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6c2V0
VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJpbmdWaWV3JikKK3sKK30KKworI2VuZGlmCisKIHRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOwogCiB0
ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1ZpZXc+IHsKQEAgLTM0OSw2
ICs0NTcsNjMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmEKICAgICBzdHJpbmcuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoYnVmZmVyLmRhdGEoKSArIG9sZFNpemUpOwogfQogCitjbGFzcyBT
dHJpbmdWaWV3OjpDb2RlUG9pbnRzIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDb2RlUG9pbnRz
KGNvbnN0IFN0cmluZ1ZpZXcmKTsKKworICAgIGNsYXNzIEl0ZXJhdG9yOworICAgIEl0ZXJhdG9y
IGJlZ2luKCkgY29uc3Q7CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgU3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7Cit9OworCitjbGFzcyBTdHJpbmdWaWV3OjpDb2Rl
VW5pdHMgeworcHVibGljOgorICAgIGV4cGxpY2l0IENvZGVVbml0cyhjb25zdCBTdHJpbmdWaWV3
Jik7CisKKyAgICBjbGFzcyBJdGVyYXRvcjsKKyAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0Owor
ICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZ1ZpZXcgbV9z
dHJpbmdWaWV3OworfTsKKworY2xhc3MgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3Ig
eworcHVibGljOgorICAgIEl0ZXJhdG9yKGNvbnN0IFN0cmluZ1ZpZXcmLCB1bnNpZ25lZCBpbmRl
eCk7CisKKyAgICBVQ2hhcjMyIG9wZXJhdG9yKigpIGNvbnN0OworICAgIEl0ZXJhdG9yJiBvcGVy
YXRvcisrKCk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmluZ1ZpZXc7CisgICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX2luZGV4OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtdXRhYmxlIGJvb2wgbV9hbHJl
YWR5SW5jcmVtZW50ZWQgeyBmYWxzZSB9OworI2VuZGlmCit9OworCitjbGFzcyBTdHJpbmdWaWV3
OjpDb2RlVW5pdHM6Okl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBJdGVyYXRvcihjb25zdCBTdHJp
bmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOworCisgICAgVUNoYXIgb3BlcmF0b3IqKCkgY29uc3Q7
CisgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBJdGVyYXRvciYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG1fc3RyaW5nVmlldzsK
KyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKwogaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29k
ZVBvaW50cygpIGNvbnN0IC0+IENvZGVQb2ludHMKIHsKICAgICByZXR1cm4gQ29kZVBvaW50cygq
dGhpcyk7CkBAIC0zNjcsOSArNTMyLDYgQEAgaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6
OkNvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldykKIGlubGluZSBTdHJpbmdW
aWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3RyaW5nVmlldyYgc3Ry
aW5nVmlldywgdW5zaWduZWQgaW5kZXgpCiAgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmlldykK
ICAgICAsIG1faW5kZXgoaW5kZXgpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICwgbV9hbHJl
YWR5SW5jcmVtZW50ZWQoZmFsc2UpCi0jZW5kaWYKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAppbmRleCAyNzAwNjg2ZTU1YzMxM2Q3ODhmMWFl
ZWQ1ODFlZmQ0YzA4MDZkYTkzLi5jOTI3Nzk2MDVlODIxY2IxNmFmYTZhNjdhMThjNWI0ZWZhNzll
YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksMTQgKzI5LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBFeHBlY3RlZFRl
eHRSdW5TaXplIHsKLSAgICBjb25zdCB2b2lkKiBwb2ludGVyOwotICAgIGludCBpbnRlZ2Vyc1sy
XTsKKyAgICB2b2lkKiByZW5kZXJpbmdDb250ZXh0OworICAgIFN0cmluZ1ZpZXcgdGV4dDsKKyAg
ICB1bnNpZ25lZCBpbnRlZ2VyMTsKKyAgICB1bnNpZ25lZCBpbnRlZ2VyMjsKICAgICBmbG9hdCBm
bG9hdDE7CiAgICAgZmxvYXQgZmxvYXQyOwogICAgIGZsb2F0IGZsb2F0MzsKLSAgICB1aW50MzJf
dCBiaXRmaWVsZHMgOiAxMDsKLSAgICB1bnNpZ25lZCBhblVuc2lnbmVkOwotICAgIFJlZlB0cjxU
ZXh0UnVuOjpSZW5kZXJpbmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0OworICAgIHVuc2lnbmVk
IGJpdGZpZWxkcyA6IDk7CiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoVGV4dFJ1bikgPT0g
c2l6ZW9mKEV4cGVjdGVkVGV4dFJ1blNpemUpLCBUZXh0UnVuX2lzX25vdF9vZl9leHBlY3RlZF9z
aXplKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>