<?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>109818</bug_id>
          
          <creation_ts>2013-02-14 05:44:29 -0800</creation_ts>
          <short_desc>Parsing WebVTT Region Header Metadata</short_desc>
          <delta_ts>2013-04-01 08:23:07 -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>Media</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>
          <dependson>109820</dependson>
          <blocked>109570</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Victor Carbune">vcarbune</reporter>
          <assigned_to name="Victor Carbune">vcarbune</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>glenn</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>silviapf</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>833000</commentid>
    <comment_count>0</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-02-14 05:44:29 -0800</bug_when>
    <thetext>Support for parsing region metadata. For example:
&quot;Region: id=fred width=50% height=3 regionanchor=0%,100% viewportanchor=10%,90% scroll=up&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833021</commentid>
    <comment_count>1</comment_count>
      <attachid>188337</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-02-14 06:26:15 -0800</bug_when>
    <thetext>Created attachment 188337
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833037</commentid>
    <comment_count>2</comment_count>
    <who name="Glenn Adams">glenn</who>
    <bug_when>2013-02-14 06:57:31 -0800</bug_when>
    <thetext>where is this extension specified? it isn&apos;t in the current WebVTT spec [1]

[1] http://dev.w3.org/html5/webvtt/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833054</commentid>
    <comment_count>3</comment_count>
      <attachid>188337</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-14 07:17:41 -0800</bug_when>
    <thetext>Comment on attachment 188337
WIP Patch

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

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:47
&gt; +    : m_width(100)
&gt; +    , m_height(3)
&gt; +    , m_regionAnchor(std::make_pair(0, 100))
&gt; +    , m_viewportAnchor(std::make_pair(0, 100))

I would prefer to see these come from named constants, with some information about why these values make sense.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:89
&gt; +    DEFINE_STATIC_LOCAL(const String, idKeyword, (ASCIILiteral(&quot;id&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, heightKeyword, (ASCIILiteral(&quot;height&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, widthKeyword, (ASCIILiteral(&quot;width&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, regionAnchorKeyword, (ASCIILiteral(&quot;regionanchor&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, viewportAnchorKeyword, (ASCIILiteral(&quot;viewportanchor&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, scrollKeyword, (ASCIILiteral(&quot;scroll&quot;)));

These should probably be AtomicString.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:109
&gt; +    DEFINE_STATIC_LOCAL(const String, scrollUpValueKeyword, (ASCIILiteral(&quot;up&quot;)));

Ditto.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:151
&gt; +    case Id:
&gt; +        if (value.find(&quot;--&gt;&quot;) == notFound)
&gt; +            m_id = value;
&gt; +        break;
&gt; +    case Width:
&gt; +        number = WebVTTParser::parsePercentageValue(value, &amp;isValidSetting);
&gt; +        if (isValidSetting)
&gt; +            m_width = number;
&gt; +        break;
&gt; +    case Height:
&gt; +        position = 0;
&gt; +
&gt; +        numberAsString = WebVTTParser::collectDigits(value, &amp;position);
&gt; +        number = value.toInt(&amp;isValidSetting);
&gt; +
&gt; +        if (isValidSetting &amp;&amp; number &gt;= 0)
&gt; +            m_height = number;
&gt; +        break;
&gt; +    case RegionAnchor:
&gt; +        anchorPosition = WebVTTParser::parsePercentageValuePair(value, &apos;,&apos;, &amp;isValidSetting);
&gt; +        if (isValidSetting)
&gt; +            m_regionAnchor = anchorPosition;
&gt; +        break;
&gt; +    case ViewportAnchor:
&gt; +        anchorPosition = WebVTTParser::parsePercentageValuePair(value, &apos;,&apos;, &amp;isValidSetting);
&gt; +        if (isValidSetting)
&gt; +            m_viewportAnchor = anchorPosition;
&gt; +        break;
&gt; +    case Scroll:
&gt; +        if (value == scrollUpValueKeyword)
&gt; +            m_scroll = true;
&gt; +        break;

Nit: I think it would be useful to LOG(Media, &quot;...&quot;) when the parser encounters invalid input.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:101
&gt; +    unsigned firstCoord = parsePercentageValue(
&gt; +        value.substring(0, delimiterOffset),
&gt; +        &amp;isFirstValueValid);

Nit: I think the line breaks makes this more difficult to read.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:106
&gt; +    unsigned secondCoord = parsePercentageValue(
&gt; +        value.substring(delimiterOffset + 1, value.length() - 1),
&gt; +        &amp;isSecondValueValid);

Ditto.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:228
&gt; +    if (!line.contains(&quot;:&quot;))
&gt; +        return;
&gt; +
&gt; +    unsigned colonPosition = line.find(&quot;:&quot;);

Nit: setting colonPosition first would mean you wouldn&apos;t also have to call line.contains().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833057</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-14 07:28:50 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; where is this extension specified? it isn&apos;t in the current WebVTT spec [1]
&gt; 
&gt; [1] http://dev.w3.org/html5/webvtt/

As noted in the master bug (#109570):

Master bug for extending the WebVTT implementation with Regions:
https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/region.html

Detailed feature explanation available here:
http://www.w3.org/community/texttracks/wiki/MultiCueBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833061</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-02-14 07:32:24 -0800</bug_when>
    <thetext>All of the code for this experimental feature should be inside an ENABLE() guard. &quot;ENABLE(VIDEO_TRACK_REGIONS)&quot; perhaps?

We should also discuss this on webkit-dev well before any changes are ready to commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858013</commentid>
    <comment_count>6</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2013-03-19 00:55:49 -0700</bug_when>
    <thetext>FWIW: LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858018</commentid>
    <comment_count>7</comment_count>
      <attachid>188337</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-03-19 01:02:33 -0700</bug_when>
    <thetext>Comment on attachment 188337
WIP Patch

Attachment 188337 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17183554</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858038</commentid>
    <comment_count>8</comment_count>
      <attachid>188337</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-19 01:29:40 -0700</bug_when>
    <thetext>Comment on attachment 188337
WIP Patch

Attachment 188337 did not pass win-ews (win):
Output: http://webkit-commit-queue.appspot.com/results/17161820</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858039</commentid>
    <comment_count>9</comment_count>
      <attachid>188337</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-19 01:30:37 -0700</bug_when>
    <thetext>Comment on attachment 188337
WIP Patch

Attachment 188337 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17226232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858098</commentid>
    <comment_count>10</comment_count>
      <attachid>188337</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-19 02:57:51 -0700</bug_when>
    <thetext>Comment on attachment 188337
WIP Patch

Attachment 188337 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17187555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864075</commentid>
    <comment_count>11</comment_count>
      <attachid>195179</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-03-26 16:05:00 -0700</bug_when>
    <thetext>Created attachment 195179
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864077</commentid>
    <comment_count>12</comment_count>
      <attachid>195181</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-03-26 16:09:36 -0700</bug_when>
    <thetext>Created attachment 195181
Disabled regions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864454</commentid>
    <comment_count>13</comment_count>
      <attachid>195181</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-03-27 05:58:41 -0700</bug_when>
    <thetext>Comment on attachment 195181
Disabled regions

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

&gt; Source/WebCore/html/track/TextTrack.h:160
&gt;      TextTrackRegionList* ensureTextTrackRegionList();

Nit: I think it would make more sense to leave this as a private implementation detail and expose a &quot;regionList()&quot; method.

&gt; Source/WebCore/html/track/TextTrack.h:161
&gt;      RefPtr&lt;TextTrackRegionList&gt; m_regions;

Can this stay private?

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:223
&gt; +    DEFINE_STATIC_LOCAL(const String, idKeyword, (ASCIILiteral(&quot;id&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, heightKeyword, (ASCIILiteral(&quot;height&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, widthKeyword, (ASCIILiteral(&quot;width&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, regionAnchorKeyword, (ASCIILiteral(&quot;regionanchor&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, viewportAnchorKeyword, (ASCIILiteral(&quot;viewportanchor&quot;)));
&gt; +    DEFINE_STATIC_LOCAL(const String, scrollKeyword, (ASCIILiteral(&quot;scroll&quot;)));

Making these AtomicString would be more efficient.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:243
&gt; +    DEFINE_STATIC_LOCAL(const String, scrollUpValueKeyword, (ASCIILiteral(&quot;up&quot;)));

Ditto.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:246
&gt; +

Nit: unnecessary blank space.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:249
&gt; +

Ditto.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:261
&gt; +        number = WebVTTParser::parseFloatPercentageValue(value, &amp;isValidSetting);
&gt; +        if (isValidSetting)
&gt; +            m_width = number;

Nit: I know we don&apos;t do this in the WebVTT parser (yet), but I think it would be useful to LOG(Media, ...) when the parser encounters invalid input. This will make it easier to debug a class of &quot;problem&quot; later. Here and throughout this file.

&gt; Source/WebCore/html/track/TextTrackRegion.cpp:265
&gt; +

Ditto.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:70
&gt; +float WebVTTParser::parseFloatPercentageValue(const String&amp; value, bool* isValidSetting)

Nit: I think the bool parameter would be better as a reference instead of a pointer.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:97
&gt; +FloatPoint WebVTTParser::parseFloatPercentageValuePair(const String&amp; value, char delimiter, bool* isValidSetting)

Ditto.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:100
&gt; +    size_t delimiterOffset = value.find(delimiter, 1);
&gt; +    if (delimiterOffset == notFound || delimiterOffset == value.length() - 1 || !delimiterOffset) {

I think I see why it is illegal for the delimiter to be the second character, but it isn&apos;t immediately obvious so a comment would be helpful.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:108
&gt; +    float firstCoord = parseFloatPercentageValue(
&gt; +        value.substring(0, delimiterOffset),
&gt; +        &amp;isFirstValueValid);

Nit: I don&apos;t think the line breaks aid readability because the expression isn&apos;t all that wide.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:113
&gt; +    float secondCoord = parseFloatPercentageValue(
&gt; +        value.substring(delimiterOffset + 1, value.length() - 1),
&gt; +        &amp;isSecondValueValid);

Ditto.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:243
&gt; +    DEFINE_STATIC_LOCAL(const String, regionHeaderName, (ASCIILiteral(&quot;Region&quot;)));

AtomicString

&gt; Source/WebCore/html/track/WebVTTParser.cpp:395
&gt; +    for (size_t i = 0; i &lt; m_regionList.size(); ++i)
&gt; +        if (m_regionList[i]-&gt;id() == region-&gt;id()) {
&gt; +            m_regionList.remove(i);
&gt; +            break;
&gt; +        }

Does the spec say that the last ID encountered wins? In either case, does the logic to discard regions with duplicate IDs belong in the parser or elsewhere (I don&apos;t honestly know)?

&gt; Source/WebCore/loader/TextTrackLoader.cpp:223
&gt; +        LOG(Media, &quot;Got %ld Regions!&quot;, outputRegions.size());

This is not an especially descriptive log line, it should at least include the class::method names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867031</commentid>
    <comment_count>14</comment_count>
      <attachid>195950</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-04-01 04:07:06 -0700</bug_when>
    <thetext>Created attachment 195950
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867033</commentid>
    <comment_count>15</comment_count>
      <attachid>195950</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-01 04:11:49 -0700</bug_when>
    <thetext>Comment on attachment 195950
Updated patch

Attachment 195950 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17394010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867035</commentid>
    <comment_count>16</comment_count>
      <attachid>195950</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 04:12:41 -0700</bug_when>
    <thetext>Comment on attachment 195950
Updated patch

Attachment 195950 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17246723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867037</commentid>
    <comment_count>17</comment_count>
      <attachid>195950</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 04:14:05 -0700</bug_when>
    <thetext>Comment on attachment 195950
Updated patch

Attachment 195950 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17346903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867040</commentid>
    <comment_count>18</comment_count>
      <attachid>195953</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-04-01 04:17:28 -0700</bug_when>
    <thetext>Created attachment 195953
Proper guards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867042</commentid>
    <comment_count>19</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-04-01 04:36:51 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 195181 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195181&amp;action=review
&gt; 
&gt; Does the spec say that the last ID encountered wins? In either case, does the logic to discard regions with duplicate IDs belong in the parser or elsewhere (I don&apos;t honestly know)?

I added as a comment the line which contains the drop instruction. Similar
approach happens for JS, just that it only overrides the parameters of existing
region (but it is uniform in the same that never two regions with the same
id end up in the same TextTrackRegionList).

&gt; &gt; Source/WebCore/loader/TextTrackLoader.cpp:223
&gt; &gt; +        LOG(Media, &quot;Got %ld Regions!&quot;, outputRegions.size());
&gt; 
&gt; This is not an especially descriptive log line, it should at least include the class::method names.

Oups, removed this one.

Thanks for your review! (sorry for having to repeat some points from your review
on the WIP patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867128</commentid>
    <comment_count>20</comment_count>
      <attachid>195953</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 08:23:02 -0700</bug_when>
    <thetext>Comment on attachment 195953
Proper guards

Clearing flags on attachment: 195953

Committed r147325: &lt;http://trac.webkit.org/changeset/147325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867129</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 08:23:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188337</attachid>
            <date>2013-02-14 06:26:15 -0800</date>
            <delta_ts>2013-03-26 16:04:53 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-109818-20130214162241.patch</filename>
            <type>text/plain</type>
            <size>17751</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDEzZGNjMjYzMjg4YzA3
ZmE4YjkyZDMyMTNmMDRhNjZlZGJhNmNiMC4uNWYyZWFjNGU3NWNmNDM5YzY4MzQ2M2U5OTMwZDg0
Y2VlZWMyNTYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAyLTE0ICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdl
YlZUVCBSZWdpb24gSGVhZGVyIE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIFByb2dyZXNzIFBhdGNoLiBOb3QgZm9yIGxhbmRp
bmcuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OlRl
eHRUcmFja1JlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246On5UZXh0
VHJhY2tSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdp
b25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXRT
ZXR0aW5nRnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246OnBh
cnNlU2V0dGluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6cGFy
c2VTZXR0aW5nKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGV4dFRyYWNrUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFja1JlZ2lvbjo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9u
OjpyZWdpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tSZWdpb246Om93
bmVyRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFyc2VQZXJjZW50YWdlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlUGVy
Y2VudGFnZVZhbHVlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNl
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6Y29sbGVjdFJlZ2lvblNldHRpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6Y3JlYXRlTmV3UmVnaW9uKToKKyAgICAg
ICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAoV2ViVlRUUGFyc2VyKToK
KwogMjAxMy0wMi0xNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBkb24ndCBjcmVhdGUgc3RhdGljIGxvY2FsIHN0cmluZyBm
b3IgcHJvZ3JhbSBsaXRlcmFsIGluIEluc3BlY3RvclRpbWVsaW5lQWdlbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDZmYTU2
ZWU1NTIzYTNmMGEzZDg0ZDdiMDA1ODk3NmE1ODg4NDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwCkBAIC0wLDAgKzEsMTcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2lu
Y2x1ZGUgIlRleHRUcmFja1JlZ2lvbi5oIgorCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dFRyYWNrUmVnaW9uOjpUZXh0VHJh
Y2tSZWdpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBz
ZXR0aW5ncykKKyAgICA6IG1fd2lkdGgoMTAwKQorICAgICwgbV9oZWlnaHQoMykKKyAgICAsIG1f
cmVnaW9uQW5jaG9yKHN0ZDo6bWFrZV9wYWlyKDAsIDEwMCkpCisgICAgLCBtX3ZpZXdwb3J0QW5j
aG9yKHN0ZDo6bWFrZV9wYWlyKDAsIDEwMCkpCisgICAgLCBtX3Njcm9sbChmYWxzZSkKKyAgICAs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV90cmFjaygwKQorewor
ICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisKKyAg
ICBzZXRSZWdpb25TZXR0aW5ncyhzZXR0aW5ncyk7Cit9CisKK1RleHRUcmFja1JlZ2lvbjo6flRl
eHRUcmFja1JlZ2lvbigpCit7Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdpb25T
ZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIG1fc2V0dGluZ3MgPSBpbnB1dDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSkgeworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICBwb3NpdGlvbisrOworCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1
dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlU2V0dGluZyhp
bnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFRl
eHRUcmFja1JlZ2lvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK30KKworVGV4dFRyYWNrUmVnaW9uOjpSZWdp
b25TZXR0aW5nIFRleHRUcmFja1JlZ2lvbjo6Z2V0U2V0dGluZ0Zyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzZXR0aW5nKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBp
ZEtleXdvcmQsIChBU0NJSUxpdGVyYWwoImlkIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0cmluZywgaGVpZ2h0S2V5d29yZCwgKEFTQ0lJTGl0ZXJhbCgiaGVpZ2h0IikpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgd2lkdGhLZXl3b3JkLCAoQVND
SUlMaXRlcmFsKCJ3aWR0aCIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIHJlZ2lvbkFuY2hvcktleXdvcmQsIChBU0NJSUxpdGVyYWwoInJlZ2lvbmFuY2hvciIpKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHZpZXdwb3J0QW5jaG9yS2V5
d29yZCwgKEFTQ0lJTGl0ZXJhbCgidmlld3BvcnRhbmNob3IiKSkpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzY3JvbGxLZXl3b3JkLCAoQVNDSUlMaXRlcmFsKCJzY3Jv
bGwiKSkpOworCisgICAgaWYgKHNldHRpbmcgPT0gaWRLZXl3b3JkKQorICAgICAgICByZXR1cm4g
SWQ7CisgICAgaWYgKHNldHRpbmcgPT0gaGVpZ2h0S2V5d29yZCkKKyAgICAgICAgcmV0dXJuIEhl
aWdodDsKKyAgICBpZiAoc2V0dGluZyA9PSB3aWR0aEtleXdvcmQpCisgICAgICAgIHJldHVybiBX
aWR0aDsKKyAgICBpZiAoc2V0dGluZyA9PSB2aWV3cG9ydEFuY2hvcktleXdvcmQpCisgICAgICAg
IHJldHVybiBWaWV3cG9ydEFuY2hvcjsKKyAgICBpZiAoc2V0dGluZyA9PSByZWdpb25BbmNob3JL
ZXl3b3JkKQorICAgICAgICByZXR1cm4gUmVnaW9uQW5jaG9yOworICAgIGlmIChzZXR0aW5nID09
IHNjcm9sbEtleXdvcmQpCisgICAgICAgIHJldHVybiBTY3JvbGw7CisKKyAgICByZXR1cm4gTm9u
ZTsKK30KKwordm9pZCBUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNl
dHRpbmcgc2V0dGluZywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgc2Nyb2xsVXBWYWx1ZUtleXdvcmQsIChBU0NJSUxpdGVyYWwo
InVwIikpKTsKKworICAgIGJvb2wgaXNWYWxpZFNldHRpbmc7CisKKyAgICBTdHJpbmcgbnVtYmVy
QXNTdHJpbmc7CisgICAgaW50IG51bWJlcjsKKworICAgIHVuc2lnbmVkIHBvc2l0aW9uOworICAg
IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGFuY2hvclBvc2l0aW9uOworCisgICAgc3dp
dGNoIChzZXR0aW5nKSB7CisgICAgY2FzZSBJZDoKKyAgICAgICAgaWYgKHZhbHVlLmZpbmQoIi0t
PiIpID09IG5vdEZvdW5kKQorICAgICAgICAgICAgbV9pZCA9IHZhbHVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdpZHRoOgorICAgICAgICBudW1iZXIgPSBXZWJWVFRQYXJzZXI6OnBhcnNl
UGVyY2VudGFnZVZhbHVlKHZhbHVlLCAmaXNWYWxpZFNldHRpbmcpOworICAgICAgICBpZiAoaXNW
YWxpZFNldHRpbmcpCisgICAgICAgICAgICBtX3dpZHRoID0gbnVtYmVyOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEhlaWdodDoKKyAgICAgICAgcG9zaXRpb24gPSAwOworCisgICAgICAgIG51
bWJlckFzU3RyaW5nID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRp
b24pOworICAgICAgICBudW1iZXIgPSB2YWx1ZS50b0ludCgmaXNWYWxpZFNldHRpbmcpOworCisg
ICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZyAmJiBudW1iZXIgPj0gMCkKKyAgICAgICAgICAgIG1f
aGVpZ2h0ID0gbnVtYmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlZ2lvbkFuY2hvcjoK
KyAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBXZWJWVFRQYXJzZXI6OnBhcnNlUGVyY2VudGFnZVZh
bHVlUGFpcih2YWx1ZSwgJywnLCAmaXNWYWxpZFNldHRpbmcpOworICAgICAgICBpZiAoaXNWYWxp
ZFNldHRpbmcpCisgICAgICAgICAgICBtX3JlZ2lvbkFuY2hvciA9IGFuY2hvclBvc2l0aW9uOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpZXdwb3J0QW5jaG9yOgorICAgICAgICBhbmNob3JQ
b3NpdGlvbiA9IFdlYlZUVFBhcnNlcjo6cGFyc2VQZXJjZW50YWdlVmFsdWVQYWlyKHZhbHVlLCAn
LCcsICZpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZykKKyAgICAg
ICAgICAgIG1fdmlld3BvcnRBbmNob3IgPSBhbmNob3JQb3NpdGlvbjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTY3JvbGw6CisgICAgICAgIGlmICh2YWx1ZSA9PSBzY3JvbGxVcFZhbHVlS2V5
d29yZCkKKyAgICAgICAgICAgIG1fc2Nyb2xsID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBOb25lOgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dFRyYWNrUmVn
aW9uOjpwYXJzZVNldHRpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9u
KQoreworICAgIFN0cmluZyBzZXR0aW5nID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChpbnB1
dCwgcG9zaXRpb24pOworCisgICAgc2l6ZV90IGVxdWFsT2Zmc2V0ID0gc2V0dGluZy5maW5kKCc9
JywgMSk7CisgICAgaWYgKGVxdWFsT2Zmc2V0ID09IG5vdEZvdW5kIHx8ICFlcXVhbE9mZnNldCB8
fCBlcXVhbE9mZnNldCA9PSBzZXR0aW5nLmxlbmd0aCgpIC0gMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVnaW9uU2V0dGluZyBuYW1lID0gZ2V0U2V0dGluZ0Zyb21TdHJpbmcoc2V0dGluZy5z
dWJzdHJpbmcoMCwgZXF1YWxPZmZzZXQpKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzZXR0aW5nLnN1
YnN0cmluZyhlcXVhbE9mZnNldCArIDEsIHNldHRpbmcubGVuZ3RoKCkgLSAxKTsKKworICAgIHBh
cnNlU2V0dGluZ1ZhbHVlKG5hbWUsIHZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrUmVnaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEwN2ZmMWYzZWYwMTdmZDdmZTQ5YmY1ODY2YjM1MTY1Njk3NWFhODUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lv
bi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0VHJhY2tSZWdpb25faAorI2RlZmluZSBU
ZXh0VHJhY2tSZWdpb25faAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CisKK2NsYXNzIFRleHRUcmFja1JlZ2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRUcmFj
a1JlZ2lvbj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja1JlZ2lv
bj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
c2V0dGluZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja1Jl
Z2lvbihjb250ZXh0LCBzZXR0aW5ncykpOworICAgIH0KKworICAgIHZpcnR1YWwgflRleHRUcmFj
a1JlZ2lvbigpOworCisgICAgVGV4dFRyYWNrKiB0cmFjaygpIGNvbnN0OworICAgIHZvaWQgc2V0
VHJhY2soVGV4dFRyYWNrKik7CisKKyAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQorICAgIHZvaWQgc2V0SWQoY29uc3QgU3RyaW5nJik7CisKKyAgICBjb25zdCBT
dHJpbmcmIHJlZ2lvblNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQorICAg
IHZvaWQgc2V0UmVnaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKwor
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8VGV4dFRyYWNrUmVnaW9uPjo6cmVmOworICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8VGV4dFRyYWNrUmVnaW9uPjo6ZGVyZWY7CisKK3Byb3RlY3RlZDoKKyAgICBUZXh0
VHJhY2tSZWdpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYpOworCisg
ICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIFJl
Z2lvblNldHRpbmcgeyBOb25lLCBJZCwgV2lkdGgsIEhlaWdodCwgUmVnaW9uQW5jaG9yLCBWaWV3
cG9ydEFuY2hvciwgU2Nyb2xsIH07CisgICAgUmVnaW9uU2V0dGluZyBnZXRTZXR0aW5nRnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgcGFyc2VTZXR0aW5nVmFsdWUoUmVnaW9u
U2V0dGluZywgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwYXJzZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiwgdW5zaWduZWQqKTsKKworICAgIFN0cmluZyBtX2lkOworICAgIFN0cmluZyBtX3NldHRp
bmdzOworCisgICAgdW5zaWduZWQgbV93aWR0aDsKKyAgICB1bnNpZ25lZCBtX2hlaWdodDsKKwor
ICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fcmVnaW9uQW5jaG9yOworICAgIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fdmlld3BvcnRBbmNob3I7CisKKyAgICBib29s
IG1fc2Nyb2xsOworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OworICAgIFRleHRUcmFjayogbV90cmFjazsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcAppbmRleCA0MGFiYTljNjE5MDM1MjViMzhjOTZiYjNlNzVjODI1ZTViMmNh
NWViLi5mMjg4OWI3YTZjNDJmMTRmNjA0YThmZjYxMzlhYzJjMmJhNGM4YTIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC02Niw2ICs2Niw1MCBAQCBT
dHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNp
Z25lZCogcG9zaXRpb24pCiAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwogfQogCit1bnNp
Z25lZCBXZWJWVFRQYXJzZXI6OnBhcnNlUGVyY2VudGFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wqIGlzVmFsaWRTZXR0aW5nKQoreworICAgIC8vICclJyBtdXN0IGJlIHByZXNlbnQg
YW5kIGF0IHRoZSBlbmQgb2YgdGhlIHNldHRpbmcgdmFsdWUuCisgICAgaWYgKHZhbHVlLmZpbmQo
JyUnLCAxKSAhPSB2YWx1ZS5sZW5ndGgoKSAtIDEpIHsKKyAgICAgICAgKmlzVmFsaWRTZXR0aW5n
ID0gZmFsc2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIG11c3QgY29udGFp
biBvbmx5IEFTQ0lJIGRpZ2l0cyAoZXhjZXB0IGZvciB0aGUgbGFzdCAnJScpLgorICAgIHVuc2ln
bmVkIHBvc2l0aW9uID0gMDsKKworICAgIFN0cmluZyBudW1iZXJBc1N0cmluZyA9IFdlYlZUVFBh
cnNlcjo6Y29sbGVjdERpZ2l0cyh2YWx1ZSwgJnBvc2l0aW9uKTsKKyAgICBpbnQgbnVtYmVyID0g
bnVtYmVyQXNTdHJpbmcudG9JbnQoaXNWYWxpZFNldHRpbmcpOworCisgICAgaWYgKCppc1ZhbGlk
U2V0dGluZyAmJiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApKQorICAgICAgICAqaXNWYWxp
ZFNldHRpbmcgPSBmYWxzZTsKKworICAgIHJldHVybiBudW1iZXI7Cit9CisKK3N0ZDo6cGFpcjx1
bnNpZ25lZCwgdW5zaWduZWQ+CitXZWJWVFRQYXJzZXI6OnBhcnNlUGVyY2VudGFnZVZhbHVlUGFp
cihjb25zdCBTdHJpbmcmIHZhbHVlLCBjaGFyIGRlbGltaXRlciwgYm9vbCogaXNWYWxpZFNldHRp
bmcpCit7CisgICAgc2l6ZV90IGRlbGltaXRlck9mZnNldCA9IHZhbHVlLmZpbmQoZGVsaW1pdGVy
LCAxKTsKKyAgICBpZiAoZGVsaW1pdGVyT2Zmc2V0ID09IG5vdEZvdW5kIHx8IGRlbGltaXRlck9m
ZnNldCA9PSB2YWx1ZS5sZW5ndGgoKSAtIDEgfHwgIWRlbGltaXRlck9mZnNldCkgeworICAgICAg
ICAqaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KDAsIDApOworICAgIH0KKworICAgIGJvb2wgaXNGaXJzdFZhbHVlVmFsaWQ7CisgICAgdW5zaWdu
ZWQgZmlyc3RDb29yZCA9IHBhcnNlUGVyY2VudGFnZVZhbHVlKAorICAgICAgICB2YWx1ZS5zdWJz
dHJpbmcoMCwgZGVsaW1pdGVyT2Zmc2V0KSwKKyAgICAgICAgJmlzRmlyc3RWYWx1ZVZhbGlkKTsK
KworICAgIGJvb2wgaXNTZWNvbmRWYWx1ZVZhbGlkOworICAgIHVuc2lnbmVkIHNlY29uZENvb3Jk
ID0gcGFyc2VQZXJjZW50YWdlVmFsdWUoCisgICAgICAgIHZhbHVlLnN1YnN0cmluZyhkZWxpbWl0
ZXJPZmZzZXQgKyAxLCB2YWx1ZS5sZW5ndGgoKSAtIDEpLAorICAgICAgICAmaXNTZWNvbmRWYWx1
ZVZhbGlkKTsKKworICAgICppc1ZhbGlkU2V0dGluZyA9IGlzRmlyc3RWYWx1ZVZhbGlkICYmIGlz
U2Vjb25kVmFsdWVWYWxpZDsKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmlyc3RDb29yZCwg
c2Vjb25kQ29vcmQpOworfQorCisKIFdlYlZUVFBhcnNlcjo6V2ViVlRUUGFyc2VyKFdlYlZUVFBh
cnNlckNsaWVudCogY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAg
IDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3N0YXRlKEluaXRp
YWwpCkBAIC0xMTEsMTAgKzE1NSwyMSBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VCeXRlcyhj
b25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIAogICAgICAgICBjYXNl
IEhlYWRlcjoKICAgICAgICAgICAgIC8vIDEzLTE4IC0gQWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQg
YXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb2xsZWN0SGVhZGVyKGxpbmUpOwor
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1ldGFkYXRhOgogICAgICAgICAg
ICAgaWYgKGxpbmUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJZDsKKwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCiAgICAgICAgIGNhc2UgSWQ6CiAgICAgICAg
ICAgICAvLyAxOS0yOSAtIEFsbG93IGFueSBudW1iZXIgb2YgbGluZSB0ZXJtaW5hdG9ycywgdGhl
biBpbml0aWFsaXplIG5ldyBjdWUgdmFsdWVzLgogICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0
eSgpKQpAQCAtMTYzLDYgKzIxOCwyNyBAQCBib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRG
aWxlSWRlbnRpZmllcigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgV2ViVlRUUGFyc2Vy
Ojpjb2xsZWN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgcmVnaW9uSGVhZGVyTmFtZSwgKEFTQ0lJTGl0ZXJhbCgiUmVn
aW9uIikpKTsKKworICAgIGlmICghbGluZS5jb250YWlucygiOiIpKQorICAgICAgICByZXR1cm47
CisKKyAgICB1bnNpZ25lZCBjb2xvblBvc2l0aW9uID0gbGluZS5maW5kKCI6Iik7CisgICAgbV9j
dXJyZW50SGVhZGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNvbG9uUG9zaXRpb24pOworCisg
ICAgaWYgKG1fY3VycmVudEhlYWRlck5hbWUgPT0gcmVnaW9uSGVhZGVyTmFtZSkgeworICAgICAg
ICBtX2N1cnJlbnRIZWFkZXJWYWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGNvbG9uUG9zaXRpb24gKyAx
LCBsaW5lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIGNyZWF0ZU5ld1JlZ2lvbigpOworICAgIH0K
K30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFJlZ2lv
blNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit7CisgICAgcmV0dXJuIEhlYWRlcjsK
K30KKwogV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdEN1ZUlk
KGNvbnN0IFN0cmluZyYgbGluZSkKIHsKICAgICBpZiAobGluZS5jb250YWlucygiLS0+IikpCkBA
IC0yODIsNiArMzU4LDE0IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVlcygpCiAg
ICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOwogfQogCit2b2lkIFdlYlZUVFBhcnNlcjo6Y3Jl
YXRlTmV3UmVnaW9uKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudEhlYWRlclZhbHVlLmxlbmd0aCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiByZWdpb24g
PSBUZXh0VHJhY2tSZWdpb246OmNyZWF0ZShtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fY3Vy
cmVudEhlYWRlclZhbHVlKTsKK30KKwogZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVT
dGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKIHsKICAgICAvLyA0
LjguMTAuMTMuMyBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1dlYlZUVFBhcnNlci5oCmluZGV4IGM1MGMzMDY0MjgzOGZhYjIxMTRhZjIxYTM4NmE0
M2I5NDVkOGRiMTUuLmU1NjgyM2Y0ZDI5MzFkZDFkYmE1ZGJiYjlhNjc5ZTkxOGUxMzAzNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb24uaCIK
ICNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTU4LDcgKzU5LDcgQEAg
Y2xhc3MgV2ViVlRUUGFyc2VyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIo
KSB7IH0KICAgICAKLSAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBU
aW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OworICAgIGVudW0gUGFyc2VTdGF0
ZSB7IEluaXRpYWwsIEhlYWRlciwgTWV0YWRhdGEsIElkLCBUaW1pbmdzQW5kU2V0dGluZ3MsIEN1
ZVRleHQsIEJhZEN1ZSB9OwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFyc2VyPiBj
cmVhdGUoV2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiAgICAgewpAQCAtODgsNiArODksMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBT
dHJpbmcgY29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwogICAgIHN0YXRp
YyBTdHJpbmcgY29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKIAorICAgIC8v
IFVzZWZ1bCBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgcGVyY2VudGFnZSBzZXR0aW5ncy4KKyAgICBz
dGF0aWMgdW5zaWduZWQgcGFyc2VQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCop
OworICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBwYXJzZVBlcmNlbnRh
Z2VWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiwgY2hhciwgYm9vbCopOworCiAgICAgLy8gSW5wdXQg
ZGF0YSB0byB0aGUgcGFyc2VyIHRvIHBhcnNlLgogICAgIHZvaWQgcGFyc2VCeXRlcyhjb25zdCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwogCkBAIC0xMDUsNiArMTEwLDggQEAgcHJvdGVj
dGVkOgogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcigpOwor
ICAgIHZvaWQgY29sbGVjdEhlYWRlcihjb25zdCBTdHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNv
bGxlY3RSZWdpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKICAgICBQYXJzZVN0YXRlIGNvbGxl
Y3RDdWVJZChjb25zdCBTdHJpbmcmKTsKICAgICBQYXJzZVN0YXRlIGNvbGxlY3RUaW1pbmdzQW5k
U2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAgICAgUGFyc2VTdGF0ZSBjb2xsZWN0Q3VlVGV4dChj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKTsKQEAgLTExMywxMiArMTIw
LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVOZXdDdWUoKTsKICAgICB2b2lkIHJlc2V0
Q3VlVmFsdWVzKCk7CiAKKyAgICB2b2lkIGNyZWF0ZU5ld1JlZ2lvbigpOworCiAgICAgdm9pZCBz
a2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwogICAgIHN0YXRpYyB2b2lk
IHNraXBMaW5lVGVybWluYXRvcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkKik7CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0TmV4dExpbmUoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOwotICAgIAorCiAgICAgdm9pZCBjb25z
dHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7CiAKKyAgICBTdHJpbmcgbV9jdXJyZW50SGVh
ZGVyTmFtZTsKKyAgICBTdHJpbmcgbV9jdXJyZW50SGVhZGVyVmFsdWU7CisKICAgICBWZWN0b3I8
Y2hhcj4gbV9pZGVudGlmaWVyRGF0YTsKICAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CiAgICAgZG91
YmxlIG1fY3VycmVudFN0YXJ0VGltZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195179</attachid>
            <date>2013-03-26 16:05:00 -0700</date>
            <delta_ts>2013-03-26 16:09:30 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-109818-20130327010041.patch</filename>
            <type>text/plain</type>
            <size>28339</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjYwZjljMDY2ZWRjYWI5
OTViZjIwYWFjNWU1ZWM2ZjJjMzY0OTIzNi4uNDFiZGUwNGMzMjkzOGRkZDFlNjU5NDBiODk4OTk0
MDk2NTFlNzc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAzLTI2ICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdl
YlZUVCBSZWdpb24gSGVhZGVyIE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgcmVhZGluZyByZWdpb25zIGZy
b20gdGhlIG1ldGFkYXRhIHNlY3Rpb24gb2YKKyAgICAgICAgYSBXZWJWVFQgZmlsZS4gVGhlIHdv
cmsgZm9yIGRlZmluaW5nIGdlbmVyaWMgbWV0YWRhdGEgd2l0aGluIHRoZQorICAgICAgICBXZWJW
VFQgZmlsZSBoZWFkZXIgaXMgc3RpbGwgd29yayBpbiBwcm9ncmVzcyBpbiB0aGUgVGV4dFRyYWNr
IENHLgorCisgICAgICAgIEFzIHByZXZpb3VzIHBhdGNoZXMsIGV2ZXJ5dGhpbmcgaXMgZ3VhcmRl
ZCBieSBXRUJWVFRfUkVHSU9OUyBhbmQKKyAgICAgICAgaXMgYnkgZGVmYXVsdCBkaXNhYmxlZCBp
biBhbGwgcG9ydHMuCisKKyAgICAgICAgVGVzdDogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQv
dGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9h
ZGFibGVUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVnaW9uc0F2YWlsYWJsZSk6IEFkZGVkIG1ldGhvZAor
ICAgICAgICB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyByZWdpb25zIGhhdmUgZmluaXNoZWQgcGFy
c2luZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAg
IChMb2FkYWJsZVRleHRUcmFjayk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDog
Q2hhbmdlZCB0aGUgYWNjZXNzIG1vZGlmaWVycy4KKyAgICAgICAgKFRleHRUcmFjayk6CisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdpb25TZXR0aW5ncyk6IEVudHJ5IHBvaW50IGZvcgorICAg
ICAgICBwYXJzaW5nIHRoZSByZWdpb24gc2V0dGluZ3MgZnJvbSBhIHN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXRTZXR0aW5n
RnJvbVN0cmluZyk6IE1hcHMgYSBzdHJpbmcKKyAgICAgICAgdG8gYSBSZWdpb25TZXR0aW5nIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1
ZSk6IFBhcnNlcyB0aGUgdmFsdWUKKyAgICAgICAgb2YgYSBzcGVjaWZpYyBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmcpOiBQYXJzZXMgYSBz
ZXR0aW5nIHN0cmluZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oOgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlKTogSGVscGVyIG1ldGhvZAorICAgICAgICB0byBwYXJzZSBhIGZsb2F0IHBlcmNlbnRhZ2Ug
dmFsdWUgKGUuZy4gIjUwLjElIikKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIpOiBIZWxwZXIgbWV0aG9kCisgICAgICAgIHRvIHBh
cnNlIGEgZmxvYXQgcGVyY2VudGFnZSB2YWx1ZSBwYWlyIChlLmcuICI1MC4xJSwgMzAuNSUiKQor
ICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKTogUmV0cmlldmVz
IHRoZSBuZXcgcmVnaW9ucworICAgICAgICBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKTogR2VuZXJpYyBmdW5jdGlvbiB0byBjb2xs
ZWN0CisgICAgICAgIGhlYWRlciBpbiB0aGUgbWV0YWRhdGEgcmVnaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24pOiBDcmVhdGVzIG5ldyByZWdpb24g
dXNpbmcKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIGhlYWRlciBuYW1lIGFuZCB2YWx1
ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAoV2ViVlRU
UGFyc2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlZUVFBhcnNlcik6CisgICAgICAgICogbG9hZGVy
L1RleHRUcmFja0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6bmV3UmVnaW9uc1BhcnNlZCk6IENhbGxlZCB3aGVuIHRoZQor
ICAgICAgICByZWdpb25zIGhhdmUgYmVlbiBzdWNjZXNmdWxseSBwYXJzZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tMb2FkZXI6OmdldE5ld1JlZ2lvbnMpOiBHZXRzIHRoZSBuZXcgcmVn
aW9ucy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6CisgICAgICAgIChUZXh0
VHJhY2tMb2FkZXJDbGllbnQpOiBBZGRlZCBtZXRob2RzIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1l
bnRlZC4KKyAgICAgICAgKFRleHRUcmFja0xvYWRlcik6CisKIDIwMTMtMDMtMjYgIFRvbnkgQ2hh
bmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBdXRvZ2VuZXJhdGUgdGhlIHNjcm9s
bEFuaW1hdG9yRW5hYmxlZCBzZXR0aW5nIGluIFNldHRpbmdzLmluCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCmluZGV4IGIxZTg4MmZkNDcwMWRm
YTdkZjlmMTE4ZDIzNjMwZDM0MTEzYWI2MmMuLjllYzZiMjFkODhhODg3ZTFiOTE4OWViMDdkYjUw
MmFmMmIyMTVkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFi
bGVUZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVU
ZXh0VHJhY2suY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJU
ZXh0VHJhY2tDdWVMaXN0LmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uTGlzdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyMyw2ICsxMjQsMjEgQEAgdm9pZCBMb2FkYWJsZVRl
eHRUcmFjazo6Y3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIqIGxvYWRlciwgYm9v
bCBsb2FkaW4KICAgICBtX3RyYWNrRWxlbWVudC0+ZGlkQ29tcGxldGVMb2FkKHRoaXMsIGxvYWRp
bmdGYWlsZWQgPyBIVE1MVHJhY2tFbGVtZW50OjpGYWlsdXJlIDogSFRNTFRyYWNrRWxlbWVudDo6
U3VjY2Vzcyk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCit2b2lkIExvYWRhYmxl
VGV4dFRyYWNrOjpuZXdSZWdpb25zQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciogbG9hZGVyKQor
eworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBtX2xvYWRlciA9PSBsb2FkZXIpOworCisgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4gbmV3UmVnaW9uczsKKyAgICBtX2xvYWRl
ci0+Z2V0TmV3UmVnaW9ucyhuZXdSZWdpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbmV3UmVnaW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBuZXdSZWdpb25zW2ldLT5zZXRU
cmFjayh0aGlzKTsKKyAgICAgICAgZW5zdXJlVGV4dFRyYWNrUmVnaW9uTGlzdCgpLT5hZGQobmV3
UmVnaW9uc1tpXSk7CisgICAgfQorfQorI2VuZGlmCisKIHNpemVfdCBMb2FkYWJsZVRleHRUcmFj
azo6dHJhY2tFbGVtZW50SW5kZXgoKQogewogICAgIEFTU0VSVChtX3RyYWNrRWxlbWVudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgKaW5kZXggY2Qy
ZGQxZWMwYjU5MTk1ZmMyODJmY2MwYmQzZWU2YmEzNWZiN2VlMi4uMzI0ZWIzMmQwNGJkYTlkNDAw
OWFiNTViOGM4YTJiMzlkNTk0ZDJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaApAQCAtNzAsNiArNzAsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciopOwogICAgIHZpcnR1YWwg
dm9pZCBjdWVMb2FkaW5nU3RhcnRlZChUZXh0VHJhY2tMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgY3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIqLCBib29sIGxvYWRpbmdGYWls
ZWQpOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgbmV3UmVn
aW9uc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqKTsKKyNlbmRpZgogCiAgICAgTG9hZGFibGVU
ZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCosIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFjay5oCmluZGV4IGMxYzExMTljOTcyODdmYzNjMWVmMTc0OTBiM2ZkODJiZmFj
NThkNmMuLmMxOTExYmM1ZTcxMmE5MjVjYjViYzIxN2E1NGUyMzM0MDY3NWJkNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaApAQCAtMTU2LDEyICsxNTYsMTIgQEAgcHJvdGVj
dGVkOgogCiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKIAotcHJpdmF0ZToK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKICAgICBU
ZXh0VHJhY2tSZWdpb25MaXN0KiBlbnN1cmVUZXh0VHJhY2tSZWdpb25MaXN0KCk7CiAgICAgUmVm
UHRyPFRleHRUcmFja1JlZ2lvbkxpc3Q+IG1fcmVnaW9uczsKICNlbmRpZgogCitwcml2YXRlOgog
I2lmIFVTRShQTEFURk9STV9URVhUX1RSQUNLX01FTlUpCiAgICAgdmlydHVhbCBUZXh0VHJhY2sq
IHB1YmxpY1RyYWNrKCkgT1ZFUlJJREUgeyByZXR1cm4gdGhpczsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAKaW5kZXggNmRiYzhjNzUzODNmZWNk
MDA1ODQ5YzlmYzM5MTk4NDY3NDZjYjRmMy4uZDkxZjNjZWIwMGJiN2VlMzAxM2Y2ZGJjNzI5Njc2
MWJiM2U4NDI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVn
aW9uLmNwcApAQCAtMzUsNiArMzUsOSBAQAogI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbi5oIgog
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiV2ViVlRU
UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTk2LDcgKzE5
OSwxMDcgQEAgdm9pZCBUZXh0VHJhY2tSZWdpb246OnVwZGF0ZVBhcmFtZXRlcnNGcm9tUmVnaW9u
KFRleHRUcmFja1JlZ2lvbiogcmVnaW9uKQogCiB2b2lkIFRleHRUcmFja1JlZ2lvbjo6c2V0UmVn
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICAvLyBGSVhNRSgxMDk4MTgp
OiBQYXJzZSByZWdpb24gaGVhZGVyIG1ldGFkYXRhLgorICAgIG1fc2V0dGluZ3MgPSBpbnB1dDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSkgeworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICBwb3NpdGlvbisrOworCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1
dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlU2V0dGluZyhp
bnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisKK1RleHRUcmFja1JlZ2lvbjo6UmVnaW9uU2V0
dGluZyBUZXh0VHJhY2tSZWdpb246OmdldFNldHRpbmdGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c2V0dGluZykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgaWRLZXl3
b3JkLCAoQVNDSUlMaXRlcmFsKCJpZCIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIGhlaWdodEtleXdvcmQsIChBU0NJSUxpdGVyYWwoImhlaWdodCIpKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHdpZHRoS2V5d29yZCwgKEFTQ0lJTGl0
ZXJhbCgid2lkdGgiKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBy
ZWdpb25BbmNob3JLZXl3b3JkLCAoQVNDSUlMaXRlcmFsKCJyZWdpb25hbmNob3IiKSkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB2aWV3cG9ydEFuY2hvcktleXdvcmQs
IChBU0NJSUxpdGVyYWwoInZpZXdwb3J0YW5jaG9yIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgc2Nyb2xsS2V5d29yZCwgKEFTQ0lJTGl0ZXJhbCgic2Nyb2xsIikp
KTsKKworICAgIGlmIChzZXR0aW5nID09IGlkS2V5d29yZCkKKyAgICAgICAgcmV0dXJuIElkOwor
ICAgIGlmIChzZXR0aW5nID09IGhlaWdodEtleXdvcmQpCisgICAgICAgIHJldHVybiBIZWlnaHQ7
CisgICAgaWYgKHNldHRpbmcgPT0gd2lkdGhLZXl3b3JkKQorICAgICAgICByZXR1cm4gV2lkdGg7
CisgICAgaWYgKHNldHRpbmcgPT0gdmlld3BvcnRBbmNob3JLZXl3b3JkKQorICAgICAgICByZXR1
cm4gVmlld3BvcnRBbmNob3I7CisgICAgaWYgKHNldHRpbmcgPT0gcmVnaW9uQW5jaG9yS2V5d29y
ZCkKKyAgICAgICAgcmV0dXJuIFJlZ2lvbkFuY2hvcjsKKyAgICBpZiAoc2V0dGluZyA9PSBzY3Jv
bGxLZXl3b3JkKQorICAgICAgICByZXR1cm4gU2Nyb2xsOworCisgICAgcmV0dXJuIE5vbmU7Cit9
CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZShSZWdpb25TZXR0aW5n
IHNldHRpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHNjcm9sbFVwVmFsdWVLZXl3b3JkLCAoQVNDSUlMaXRlcmFsKCJ1cCIp
KSk7CisKKyAgICBib29sIGlzVmFsaWRTZXR0aW5nOworCisgICAgU3RyaW5nIG51bWJlckFzU3Ry
aW5nOworICAgIGludCBudW1iZXI7CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbjsKKyAgICBGbG9h
dFBvaW50IGFuY2hvclBvc2l0aW9uOworCisgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgY2Fz
ZSBJZDoKKyAgICAgICAgaWYgKHZhbHVlLmZpbmQoIi0tPiIpID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgbV9pZCA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdpZHRoOgorICAg
ICAgICBudW1iZXIgPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFs
dWUsICZpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZykKKyAgICAg
ICAgICAgIG1fd2lkdGggPSBudW1iZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSGVpZ2h0
OgorICAgICAgICBwb3NpdGlvbiA9IDA7CisKKyAgICAgICAgbnVtYmVyQXNTdHJpbmcgPSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3REaWdpdHModmFsdWUsICZwb3NpdGlvbik7CisgICAgICAgIG51bWJl
ciA9IHZhbHVlLnRvSW50KCZpc1ZhbGlkU2V0dGluZyk7CisKKyAgICAgICAgaWYgKGlzVmFsaWRT
ZXR0aW5nICYmIG51bWJlciA+PSAwKQorICAgICAgICAgICAgbV9oZWlnaHRJbkxpbmVzID0gbnVt
YmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlZ2lvbkFuY2hvcjoKKyAgICAgICAgYW5j
aG9yUG9zaXRpb24gPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWly
KHZhbHVlLCAnLCcsICZpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGlu
ZykKKyAgICAgICAgICAgIG1fcmVnaW9uQW5jaG9yID0gYW5jaG9yUG9zaXRpb247CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVmlld3BvcnRBbmNob3I6CisgICAgICAgIGFuY2hvclBvc2l0aW9u
ID0gV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcih2YWx1ZSwgJywn
LCAmaXNWYWxpZFNldHRpbmcpOworICAgICAgICBpZiAoaXNWYWxpZFNldHRpbmcpCisgICAgICAg
ICAgICBtX3ZpZXdwb3J0QW5jaG9yID0gYW5jaG9yUG9zaXRpb247CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2Nyb2xsOgorICAgICAgICBpZiAodmFsdWUgPT0gc2Nyb2xsVXBWYWx1ZUtleXdv
cmQpCisgICAgICAgICAgICBtX3Njcm9sbCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTm9uZToKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHRUcmFja1JlZ2lv
bjo6cGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikK
K3sKKyAgICBTdHJpbmcgc2V0dGluZyA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQs
IHBvc2l0aW9uKTsKKworICAgIHNpemVfdCBlcXVhbE9mZnNldCA9IHNldHRpbmcuZmluZCgnPScs
IDEpOworICAgIGlmIChlcXVhbE9mZnNldCA9PSBub3RGb3VuZCB8fCAhZXF1YWxPZmZzZXQgfHwg
ZXF1YWxPZmZzZXQgPT0gc2V0dGluZy5sZW5ndGgoKSAtIDEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZ2lvblNldHRpbmcgbmFtZSA9IGdldFNldHRpbmdGcm9tU3RyaW5nKHNldHRpbmcuc3Vi
c3RyaW5nKDAsIGVxdWFsT2Zmc2V0KSk7CisgICAgU3RyaW5nIHZhbHVlID0gc2V0dGluZy5zdWJz
dHJpbmcoZXF1YWxPZmZzZXQgKyAxLCBzZXR0aW5nLmxlbmd0aCgpIC0gMSk7CisKKyAgICBwYXJz
ZVNldHRpbmdWYWx1ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oCmluZGV4IDNmM2Q0
M2VmMTljMzk3MTU3NTZjYzhkN2Y3MzU0MTgxNDQwYjI2ZDAuLjAxYjY0Y2U0ZGQ4NDkwNWI1YmZi
NjlmM2QxM2I3M2JhZWIyNzM1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrUmVnaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tSZWdpb24uaApAQCAtOTQsNiArOTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgU2Nyb2xs
CiAgICAgfTsKIAorICAgIFJlZ2lvblNldHRpbmcgZ2V0U2V0dGluZ0Zyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKyAgICB2b2lkIHBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRpbmcsIGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7CisKICAgICBTdHJpbmcgbV9pZDsKICAgICBTdHJpbmcgbV9zZXR0aW5nczsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCmluZGV4IGQzODNhODRhZDI2
NmQwNTJmNGFkY2E0YTIxNGNkMTZjYjVmMTJhN2QuLjhhNGZkYmE5MjU1NzRlNWRhYmNlMTIxNjEw
YWI4M2VjY2E2NjhmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHAKQEAgLTY2LDYgKzY2LDU3IEBAIFN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3Jk
KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gc3Ry
aW5nLnRvU3RyaW5nKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCitmbG9hdCBX
ZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogaXNWYWxpZFNldHRpbmcpCit7CisgICAgLy8gJyUnIG11c3QgYmUgcHJlc2VudCBh
bmQgYXQgdGhlIGVuZCBvZiB0aGUgc2V0dGluZyB2YWx1ZS4KKyAgICBpZiAodmFsdWUuZmluZCgn
JScsIDEpICE9IHZhbHVlLmxlbmd0aCgpIC0gMSkgeworICAgICAgICAqaXNWYWxpZFNldHRpbmcg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRp
b24gPSAwOworCisgICAgU3RyaW5nQnVpbGRlciBmbG9hdE51bWJlckFzU3RyaW5nOworICAgIGZs
b2F0TnVtYmVyQXNTdHJpbmcuYXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyh2YWx1
ZSwgJnBvc2l0aW9uKSk7CisKKyAgICBpZiAodmFsdWVbcG9zaXRpb25dID09ICcuJykgeworICAg
ICAgICBmbG9hdE51bWJlckFzU3RyaW5nLmFwcGVuZCgiLiIpOworICAgICAgICBwb3NpdGlvbisr
OworCisgICAgICAgIGZsb2F0TnVtYmVyQXNTdHJpbmcuYXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29s
bGVjdERpZ2l0cyh2YWx1ZSwgJnBvc2l0aW9uKSk7CisgICAgfQorICAgIGZsb2F0IG51bWJlciA9
IGZsb2F0TnVtYmVyQXNTdHJpbmcudG9TdHJpbmcoKS50b0Zsb2F0KGlzVmFsaWRTZXR0aW5nKTsK
KworICAgIGlmICgqaXNWYWxpZFNldHRpbmcgJiYgKG51bWJlciA8PSAwIHx8IG51bWJlciA+PSAx
MDApKQorICAgICAgICAqaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKworICAgIHJldHVybiBudW1i
ZXI7Cit9CisKK0Zsb2F0UG9pbnQgV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlUGFpcihjb25zdCBTdHJpbmcmIHZhbHVlLCBjaGFyIGRlbGltaXRlciwgYm9vbCogaXNWYWxp
ZFNldHRpbmcpCit7CisgICAgc2l6ZV90IGRlbGltaXRlck9mZnNldCA9IHZhbHVlLmZpbmQoZGVs
aW1pdGVyLCAxKTsKKyAgICBpZiAoZGVsaW1pdGVyT2Zmc2V0ID09IG5vdEZvdW5kIHx8IGRlbGlt
aXRlck9mZnNldCA9PSB2YWx1ZS5sZW5ndGgoKSAtIDEgfHwgIWRlbGltaXRlck9mZnNldCkgewor
ICAgICAgICAqaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQoMCwgMCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZpcnN0VmFsdWVWYWxpZDsKKyAgICBmbG9h
dCBmaXJzdENvb3JkID0gcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSgKKyAgICAgICAgdmFsdWUu
c3Vic3RyaW5nKDAsIGRlbGltaXRlck9mZnNldCksCisgICAgICAgICZpc0ZpcnN0VmFsdWVWYWxp
ZCk7CisKKyAgICBib29sIGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAgICBmbG9hdCBzZWNvbmRDb29y
ZCA9IHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoCisgICAgICAgIHZhbHVlLnN1YnN0cmluZyhk
ZWxpbWl0ZXJPZmZzZXQgKyAxLCB2YWx1ZS5sZW5ndGgoKSAtIDEpLAorICAgICAgICAmaXNTZWNv
bmRWYWx1ZVZhbGlkKTsKKworICAgICppc1ZhbGlkU2V0dGluZyA9IGlzRmlyc3RWYWx1ZVZhbGlk
ICYmIGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAgICByZXR1cm4gRmxvYXRQb2ludChmaXJzdENvb3Jk
LCBzZWNvbmRDb29yZCk7Cit9CisjZW5kaWYKKwogV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIo
V2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fc3Rh
dGUoSW5pdGlhbCkKQEAgLTgyLDYgKzEzMywxNCBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6Z2V0TmV3
Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3VlcykKICAgICBtX2N1
ZWxpc3QuY2xlYXIoKTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2Vi
VlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+
JiBvdXRwdXRSZWdpb25zKQoreworICAgIG91dHB1dFJlZ2lvbnMgPSBtX3JlZ2lvbkxpc3Q7Cisg
ICAgbV9yZWdpb25MaXN0LmNsZWFyKCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWVFRQYXJzZXI6
OnBhcnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIC8v
IDQuOC4xMC4xMy4zIFdIQVRXRyBXZWJWVFQgUGFyc2VyIGFsZ29yaXRobS4KQEAgLTkwLDcgKzE0
OSw3IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKIAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICAg
ICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7
Ci0gICAgICAgIAorCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIElu
aXRpYWw6CiAgICAgICAgICAgICAvLyBCdWZmZXIgdXAgYXQgbGVhc3QgOSBieXRlcyBiZWZvcmUg
cHJvY2VlZGluZyB3aXRoIGNoZWNraW5nIGZvciB0aGUgZmlsZSBpZGVudGlmaWVyLgpAQCAtMTA4
LDI4ICsxNjcsNDIgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKICAg
ICAgICAgICAgIG1faWRlbnRpZmllckRhdGEuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKKwogICAgICAgICBjYXNlIEhlYWRlcjoKICAgICAgICAgICAgIC8vIDEzLTE4IC0g
QWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorI2lm
IEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiBtX3JlZ2lvbkxpc3Quc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3UmVnaW9uc1BhcnNlZCgpOworCisgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29sbGVjdEhlYWRlcihsaW5lKTsKKworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXRhZGF0YToKKyNlbmRpZgogICAgICAgICAgICAgaWYg
KGxpbmUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJZDsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICBjYXNlIElkOgogICAgICAgICAgICAgLy8g
MTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlh
bGl6ZSBuZXcgY3VlIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUgY29u
dGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KICAgICAgICAgICAg
IG1fc3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgCisKICAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0dGluZ3M6CiAgICAgICAgICAgICAvLyA0
MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgogICAgICAgICAgICAgbV9zdGF0
ZSA9IGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgCisKICAgICAgICAgY2FzZSBDdWVUZXh0OgogICAgICAgICAgICAgLy8gNDEtNTMg
LSBDb2xsZWN0IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBv
dXRwdXQuCiAgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwgbGVuZ3Ro
LCBwb3NpdGlvbik7CkBAIC0xNjMsNiArMjM2LDMwIEBAIGJvb2wgV2ViVlRUUGFyc2VyOjpoYXNS
ZXF1aXJlZEZpbGVJZGVudGlmaWVyKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJM
RShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKGNvbnN0
IFN0cmluZyYgbGluZSkKK3sKKyAgICAvLyA0LjEgRXh0ZW5zaW9uIG9mIFdlYlZUVCBoZWFkZXIg
cGFyc2luZyAoMTEgLSAxNSkKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
cmVnaW9uSGVhZGVyTmFtZSwgKEFTQ0lJTGl0ZXJhbCgiUmVnaW9uIikpKTsKKworICAgIC8vIDE1
LjQgSWYgbGluZSBjb250YWlucyB0aGUgY2hhcmFjdGVyICI6IiAoQSBVKzAwM0EgQ09MT04pLCB0
aGVuIHNldCBtZXRhZGF0YSdzCisgICAgLy8gbmFtZSB0byB0aGUgc3Vic3RyaW5nIG9mIGxpbmUg
YmVmb3JlIHRoZSBmaXJzdCAiOiIgY2hhcmFjdGVyIGFuZAorICAgIC8vIG1ldGFkYXRhJ3MgdmFs
dWUgdG8gdGhlIHN1YnN0cmluZyBhZnRlciB0aGlzIGNoYXJhY3Rlci4KKyAgICBpZiAoIWxpbmUu
Y29udGFpbnMoIjoiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY29sb25Qb3Np
dGlvbiA9IGxpbmUuZmluZCgiOiIpOworICAgIG1fY3VycmVudEhlYWRlck5hbWUgPSBsaW5lLnN1
YnN0cmluZygwLCBjb2xvblBvc2l0aW9uKTsKKworICAgIC8vIDE1LjUgSWYgbWV0YWRhdGEncyBu
YW1lIGVxdWFscyAiUmVnaW9uIjoKKyAgICBpZiAobV9jdXJyZW50SGVhZGVyTmFtZSA9PSByZWdp
b25IZWFkZXJOYW1lKSB7CisgICAgICAgIG1fY3VycmVudEhlYWRlclZhbHVlID0gbGluZS5zdWJz
dHJpbmcoY29sb25Qb3NpdGlvbiArIDEsIGxpbmUubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgLy8g
MTUuNS4xIC0gMTUuNS44IFJlZ2lvbiBjcmVhdGlvbjogTGV0IHJlZ2lvbiBiZSBhIG5ldyB0ZXh0
IHRyYWNrIHJlZ2lvbiBbLi4uXQorICAgICAgICBjcmVhdGVOZXdSZWdpb24oKTsKKyAgICB9Cit9
CisjZW5kaWYKKwogV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVj
dEN1ZUlkKGNvbnN0IFN0cmluZyYgbGluZSkKIHsKICAgICBpZiAobGluZS5jb250YWlucygiLS0+
IikpCkBAIC0yODIsNiArMzc5LDI1IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVl
cygpCiAgICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOwogfQogCisjaWYgRU5BQkxFKFdFQlZU
VF9SRUdJT05TKQordm9pZCBXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld1JlZ2lvbigpCit7CisgICAg
aWYgKCFtX2N1cnJlbnRIZWFkZXJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gcmVnaW9uID0gVGV4dFRyYWNrUmVnaW9uOjpjcmVh
dGUoKTsKKyAgICByZWdpb24tPnNldFJlZ2lvblNldHRpbmdzKG1fY3VycmVudEhlYWRlclZhbHVl
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWdpb25MaXN0LnNpemUoKTsgKytp
KQorICAgICAgICBpZiAobV9yZWdpb25MaXN0W2ldLT5pZCgpID09IHJlZ2lvbi0+aWQoKSkgewor
ICAgICAgICAgICAgbV9yZWdpb25MaXN0LnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICBtX3JlZ2lvbkxpc3QuYXBwZW5kKHJlZ2lvbik7Cit9CisjZW5kaWYK
KwogZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxp
bmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKIHsKICAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IGEg
V2ViVlRUIHRpbWVzdGFtcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5o
CmluZGV4IGM1MGMzMDY0MjgzOGZhYjIxMTRhZjIxYTM4NmE0M2I5NDVkOGRiMTUuLjE3OWRlZjgz
OWQwOWRjMzJiODQ5OWQzYjM0NmUyMzJjMGU1YTY4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tD
dWUuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb24uaCIKICNpbmNsdWRlICJXZWJWVFRUb2tl
bml6ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQ5LDE2ICs1MCwyOSBAQCBjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIFdlYlZUVFBhcnNlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViVlRUUGFy
c2VyQ2xpZW50KCkgeyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc1BhcnNlZCgp
ID0gMDsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgdmlydHVhbCB2b2lkIG5ld1Jl
Z2lvbnNQYXJzZWQoKSA9IDA7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZmlsZUZhaWxlZFRv
UGFyc2UoKSA9IDA7CiB9OwogCiBjbGFzcyBXZWJWVFRQYXJzZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYlZUVFBhcnNlcigpIHsgfQotICAgIAotICAgIGVudW0gUGFyc2VTdGF0ZSB7IElu
aXRpYWwsIEhlYWRlciwgSWQsIFRpbWluZ3NBbmRTZXR0aW5ncywgQ3VlVGV4dCwgQmFkQ3VlIH07
CisKKyAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBIZWFk
ZXIsCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgICAgICBNZXRhZGF0YSwKKyNlbmRp
ZgorICAgICAgICBJZCwKKyAgICAgICAgVGltaW5nc0FuZFNldHRpbmdzLAorICAgICAgICBDdWVU
ZXh0LAorICAgICAgICBCYWRDdWUKKyAgICB9OwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
VlRUUGFyc2VyPiBjcmVhdGUoV2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewpAQCAtODgsMTggKzEwMiwyNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
Kik7CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCopOwogCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIC8vIFVzZWZ1bCBmdW5jdGlv
bnMgZm9yIHBhcnNpbmcgcGVyY2VudGFnZSBzZXR0aW5ncy4KKyAgICBzdGF0aWMgZmxvYXQgcGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sKik7CisgICAgc3RhdGlj
IEZsb2F0UG9pbnQgcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiwg
Y2hhciwgYm9vbCopOworI2VuZGlmCisKICAgICAvLyBJbnB1dCBkYXRhIHRvIHRoZSBwYXJzZXIg
dG8gcGFyc2UuCiAgICAgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIGxhc3QgcGFyc2VkIGN1
ZXMgdG8gY2FsbGVyLgogICAgIHZvaWQgZ2V0TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2b2lkIGdldE5ld1Jl
Z2lvbnMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4mKTsKKyNlbmRpZgogCiAgICAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJvbUN1
ZVRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQqKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYlZUVFBhcnNlcihXZWJW
VFRQYXJzZXJDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgCisKICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgUGFy
c2VTdGF0ZSBtX3N0YXRlOwogCkBAIC0xMTMsMTIgKzEzNiwyMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY3JlYXRlTmV3Q3VlKCk7CiAgICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOwogCisjaWYgRU5B
QkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZvaWQgY29sbGVjdEhlYWRlcihjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGNyZWF0ZU5ld1JlZ2lvbigpOworI2VuZGlmCisKICAgICB2b2lkIHNraXBX
aGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CiAgICAgc3RhdGljIHZvaWQgc2tp
cExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7Ci0gICAgCisKICAgICB2b2lkIGNvbnN0cnVj
dFRyZWVGcm9tVG9rZW4oRG9jdW1lbnQqKTsKIAorICAgIFN0cmluZyBtX2N1cnJlbnRIZWFkZXJO
YW1lOworICAgIFN0cmluZyBtX2N1cnJlbnRIZWFkZXJWYWx1ZTsKKwogICAgIFZlY3RvcjxjaGFy
PiBtX2lkZW50aWZpZXJEYXRhOwogICAgIFN0cmluZyBtX2N1cnJlbnRJZDsKICAgICBkb3VibGUg
bV9jdXJyZW50U3RhcnRUaW1lOwpAQCAtMTM1LDYgKzE2NiwxMCBAQCBwcml2YXRlOgogCiAgICAg
VmVjdG9yPEF0b21pY1N0cmluZz4gbV9sYW5ndWFnZVN0YWNrOwogICAgIFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+IG1fY3VlbGlzdDsKKworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykK
KyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gPiBtX3JlZ2lvbkxpc3Q7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Rl
eHRUcmFja0xvYWRlci5jcHAKaW5kZXggMDBhMWQ4ZmU2NzRmYzY0MWUxNjNmMmQzZmEwM2RmZTVi
ZTkyNjJlMS4uM2Y3NTVhZWFhYjM1ZTEwNTg2NmRjNmJkZWQ0NjQyNzA1NmVkNjYwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKQEAgLTE4OCw2ICsxODgsMTMg
QEAgdm9pZCBUZXh0VHJhY2tMb2FkZXI6Om5ld0N1ZXNQYXJzZWQoKQogICAgIG1fY3VlTG9hZFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3Zv
aWQgVGV4dFRyYWNrTG9hZGVyOjpuZXdSZWdpb25zUGFyc2VkKCkKK3sKKyAgICBtX2NsaWVudC0+
bmV3UmVnaW9uc0F2YWlsYWJsZSh0aGlzKTsgCit9CisjZW5kaWYKKwogdm9pZCBUZXh0VHJhY2tM
b2FkZXI6OmZpbGVGYWlsZWRUb1BhcnNlKCkKIHsKICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tM
b2FkZXI6OmZpbGVGYWlsZWRUb1BhcnNlIik7CkBAIC0yMDcsNiArMjE0LDE2IEBAIHZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpnZXROZXdDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBv
dXRwdXRDdWVzKQogICAgICAgICBtX2N1ZVBhcnNlci0+Z2V0TmV3Q3VlcyhvdXRwdXRDdWVzKTsK
IH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgVGV4dFRyYWNrTG9hZGVyOjpn
ZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+JiBvdXRwdXRSZWdp
b25zKQoreworICAgIEFTU0VSVChtX2N1ZVBhcnNlcik7CisgICAgaWYgKG1fY3VlUGFyc2VyKSB7
CisgICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdSZWdpb25zKG91dHB1dFJlZ2lvbnMpOworICAg
ICAgICBMT0coTWVkaWEsICJHb3QgJWxkIFJlZ2lvbnMhIiwgb3V0cHV0UmVnaW9ucy5zaXplKCkp
OworICAgIH0KK30KKyNlbmRpZgogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0
VHJhY2tMb2FkZXIuaAppbmRleCBlNzcwM2FjN2I4ZWNkZmYxZGEzMDg2MTBlN2U4MGMzZmVjM2M3
NGZiLi5hNWFkMDNmMDUwNTZhMzIwNzY5NzVkNzY3YjVlNDk5ODVjNmFmMmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCkBAIC00OSw2ICs0OSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdTdGFydGVkKFRleHRUcmFja0xvYWRlciopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIq
LCBib29sIGxvYWRpbmdGYWlsZWQpID0gMDsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisg
ICAgdmlydHVhbCB2b2lkIG5ld1JlZ2lvbnNBdmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyKikgPSAw
OworI2VuZGlmCiB9OwogCiBjbGFzcyBUZXh0VHJhY2tMb2FkZXIgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2VDbGllbnQsIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsKQEAgLTY0LDcgKzY3LDkg
QEAgcHVibGljOgogICAgIGJvb2wgbG9hZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjcm9z
c09yaWdpbk1vZGUpOwogICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogICAgIHZvaWQgZ2V0TmV3Q3Vl
cyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3Vlcyk7Ci0gICAgCisjaWYg
RU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZvaWQgZ2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVm
UHRyPFRleHRUcmFja1JlZ2lvbj4gPiYgb3V0cHV0UmVnaW9ucyk7CisjZW5kaWYKIHByaXZhdGU6
CiAKICAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudApAQCAtNzMsNiArNzgsOSBAQCBwcml2YXRl
OgogICAgIAogICAgIC8vIFdlYlZUVFBhcnNlckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBuZXdD
dWVzUGFyc2VkKCk7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZpcnR1YWwgdm9p
ZCBuZXdSZWdpb25zUGFyc2VkKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZmlsZUZhaWxl
ZFRvUGFyc2UoKTsKICAgICAKICAgICBUZXh0VHJhY2tMb2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xp
ZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCmluZGV4IGUyYjgzYzRmN2E5M2ViYjIyZWI2ZDRhNzYxZDkwMWE0NzA5NTBkYzYuLjlh
MjZmMDc5ZmE3YTI2ZTkyM2JkYjQ4N2EyY2MxZDM1YjJhODFmYjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTMyLDYgKzMyLDcgQEAKICAgIyBUaGUgZm9sbG93aW5nIGRl
ZmluZXMgdHVybiBXZWJLaXQgZmVhdHVyZXMgb24gYW5kIG9mZi4KICAgJ3ZhcmlhYmxlcyc6IHsK
ICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgJ0VOQUJMRV9XRUJWVFRfUkVHSU9OUz0x
JywKICAgICAgICdFTkFCTEVfM0RfUExVR0lOPTEnLAogICAgICAgJ0VOQUJMRV9CQVRURVJZX1NU
QVRVUz0wJywKICAgICAgICdFTkFCTEVfQkxPQj0xJywKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiY2UzYTk5MDM0NjI1OGQz
NTIyOTVkNjJiNTM4YzQ4Mzk0NTA0ZWJiLi5mOTM5ZjQ1YTU5YTA1ZDhkZTJhZDczZDNkNmVjNTk3
ZjRhNzE2ZDkyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMjYgIFZpY3RvciBDYXJi
dW5lICA8dmNhcmJ1bmVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBhcnNpbmcgV2ViVlRUIFJl
Z2lvbiBIZWFkZXIgTWV0YWRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2hlYWRlci1yZWdpb25z
LnZ0dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10
cmFjay1yZWdpb24tcGFyc2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEv
dHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWw6IEFkZGVk
LgorCiAyMDEzLTAzLTI2ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlYmFzZWxpbmUgdGV4dCBvdXRwdXQgZm9yIG9wYXF1ZSBHcmFwaGljc0xheWVy
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2hl
YWRlci1yZWdpb25zLnZ0dCBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0
dC9oZWFkZXItcmVnaW9ucy52dHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM4MTRjZmU5ZjEwZmFkMDQyM2Q3NzUz
NDM2OWE1MTEzN2FiZDM4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL3Ry
YWNrL2NhcHRpb25zLXdlYnZ0dC9oZWFkZXItcmVnaW9ucy52dHQKQEAgLTAsMCArMSwxMSBAQAor
V0VCVlRUIEZJTEUKK1JlZ2lvbjogaWQ9cmVnaW9uX3dpdGhvdXRfc2V0dGluZ3MKK1JlZ2lvbjog
aWQ9cmVnaW9uX3dpdGhfYWxsX3NldHRpbmdzIHdpZHRoPTMyJSBoZWlnaHQ9NSByZWdpb25hbmNo
b3I9NDElLDIwJSB2aWV3cG9ydGFuY2hvcj0zMSUsODQlIHNjcm9sbD11cAorUmVnaW9uOiBpZD1y
ZWdpb25fZmxvYXRpbmdfcG9pbnRfYW5jaG9yIHJlZ2lvbmFuY2hvcj00MS4xMzMlLDIwLjQyJSB2
aWV3cG9ydGFuY2hvcj0zMi4zMyUsMzIuNDQlCitSZWdpb246IGlkPW5vdF91bmlxdWVfaWQgd2lk
dGg9NDIlCitSZWdpb246IGlkPW5vdF91bmlxdWVfaWQgd2lkdGg9NjclCitSZWdpb246IGludmFs
aWRfc2V0dGluZ3MgdmFsdWVzIGJ1dCByZWdpb24gc3RpbGwgY3JlYXRlZAorCisxCiswMDowMDow
MC4wMDAgLS0+IDAwOjAwOjAyLjUwMAorV2UgYXJlIGluIE5ldyBZb3JrIENpdHkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVn
aW9uLXBhcnNlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdpb25z
LXdlYnZ0dC90ZXh0LXRyYWNrLXJlZ2lvbi1wYXJzZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA3MGY0MzFhYWI2OTIxZDNlY2QwZDJhZmNiMGFkZWU2OWI5MjNmZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdpb25zLXdlYnZ0dC90ZXh0LXRyYWNrLXJl
Z2lvbi1wYXJzZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjggQEAKK1Rlc3RzIHByb3BlciBw
YXJzaW5nIG9mIHZhcmlvdXMgcmVnaW9ucyBwcmVzZW50IGluIFdlYlZUVCBoZWFkZXIgYXJlYS4K
KworRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9ucy5sZW5ndGggPT0gJzUnKSBP
SworCitFWFBFQ1RFRCAocmVnaW9uLmlkID09ICdyZWdpb25fd2l0aG91dF9zZXR0aW5ncycpIE9L
CisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJ3JlZ2lvbl93aXRoX2FsbF9zZXR0aW5ncycpIE9L
CitFWFBFQ1RFRCAocmVnaW9uLndpZHRoID09ICczMicpIE9LCitFWFBFQ1RFRCAocmVnaW9uLmhl
aWdodCA9PSAnNScpIE9LCitFWFBFQ1RFRCAocmVnaW9uLnJlZ2lvbkFuY2hvclggPT0gJzQxJykg
T0sKK0VYUEVDVEVEIChyZWdpb24ucmVnaW9uQW5jaG9yWSA9PSAnMjAnKSBPSworRVhQRUNURUQg
KHJlZ2lvbi52aWV3cG9ydEFuY2hvclggPT0gJzMxJykgT0sKK0VYUEVDVEVEIChyZWdpb24udmll
d3BvcnRBbmNob3JZID09ICc4NCcpIE9LCitFWFBFQ1RFRCAocmVnaW9uLnNjcm9sbCA9PSAndXAn
KSBPSworCitFWFBFQ1RFRCAocmVnaW9uLmlkID09ICdyZWdpb25fZmxvYXRpbmdfcG9pbnRfYW5j
aG9yJykgT0sKK0VYUEVDVEVEIChNYXRoLnJvdW5kKHJlZ2lvbi5yZWdpb25BbmNob3JYICogMTAw
MCkgPT0gJzQxMTMzJykgT0sKK0VYUEVDVEVEIChNYXRoLnJvdW5kKHJlZ2lvbi5yZWdpb25BbmNo
b3JZICogMTAwMCkgPT0gJzIwNDIwJykgT0sKK0VYUEVDVEVEIChNYXRoLnJvdW5kKHJlZ2lvbi52
aWV3cG9ydEFuY2hvclggKiAxMDAwKSA9PSAnMzIzMzAnKSBPSworRVhQRUNURUQgKE1hdGgucm91
bmQocmVnaW9uLnZpZXdwb3J0QW5jaG9yWSAqIDEwMDApID09ICczMjQ0MCcpIE9LCisKK0VYUEVD
VEVEIChyZWdpb24uaWQgPT0gJ25vdF91bmlxdWVfaWQnKSBPSworRVhQRUNURUQgKHJlZ2lvbi53
aWR0aCA9PSAnNjcnKSBPSworCitFWFBFQ1RFRCAocmVnaW9uLmlkID09ICcnKSBPSworCitFTkQg
T0YgVEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdpb25zLXdl
YnZ0dC90ZXh0LXRyYWNrLXJlZ2lvbi1wYXJzZXIuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL3Ry
YWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwN2E0MjI3MTRjMzNkZmViNGY2Y2M2MDA3NmM5N2ViNTU2MDY2NGYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdpb25zLXdlYnZ0dC90ZXh0LXRyYWNr
LXJlZ2lvbi1wYXJzZXIuaHRtbApAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUi
IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKworICAgICAgICA8c2NyaXB0
IHNyYz0uLi8uLi9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0u
Li8uLi92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0PgorICAgICAgICB2
YXIgcmVnaW9uOworCisgICAgICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghd2luZG93LlRleHRUcmFja1JlZ2lvbikgeworICAgICAgICAgICAgICAg
IGZhaWxUZXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9ucy5sZW5ndGgiLCA1KTsKKworICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJlZ2lvbiA9IHZpZGVvLnRleHRUcmFja3Nb
MF0ucmVnaW9uc1swXTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLmlkIiwgInJl
Z2lvbl93aXRob3V0X3NldHRpbmdzIik7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7
CisgICAgICAgICAgICByZWdpb24gPSB2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnNbMV07Cisg
ICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5pZCIsICJyZWdpb25fd2l0aF9hbGxfc2V0
dGluZ3MiKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLndpZHRoIiwgMzIpOwor
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24uaGVpZ2h0IiwgNSk7CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5yZWdpb25BbmNob3JYIiwgNDEpOworICAgICAgICAgICAg
dGVzdEV4cGVjdGVkKCJyZWdpb24ucmVnaW9uQW5jaG9yWSIsIDIwKTsKKyAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgicmVnaW9uLnZpZXdwb3J0QW5jaG9yWCIsIDMxKTsKKyAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgicmVnaW9uLnZpZXdwb3J0QW5jaG9yWSIsIDg0KTsKKyAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgicmVnaW9uLnNjcm9sbCIsICJ1cCIpOworCisgICAgICAgICAgICBjb25zb2xl
V3JpdGUoIiIpOworICAgICAgICAgICAgcmVnaW9uID0gdmlkZW8udGV4dFRyYWNrc1swXS5yZWdp
b25zWzJdOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24uaWQiLCAicmVnaW9uX2Zs
b2F0aW5nX3BvaW50X2FuY2hvciIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJNYXRoLnJv
dW5kKHJlZ2lvbi5yZWdpb25BbmNob3JYICogMTAwMCkiLCA0MTEzMyk7CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoIk1hdGgucm91bmQocmVnaW9uLnJlZ2lvbkFuY2hvclkgKiAxMDAwKSIsIDIw
NDIwKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiTWF0aC5yb3VuZChyZWdpb24udmlld3Bv
cnRBbmNob3JYICogMTAwMCkiLCAzMjMzMCk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoIk1h
dGgucm91bmQocmVnaW9uLnZpZXdwb3J0QW5jaG9yWSAqIDEwMDApIiwgMzI0NDApOworCisgICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcmVnaW9uID0gdmlkZW8udGV4
dFRyYWNrc1swXS5yZWdpb25zWzNdOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24u
aWQiLCAibm90X3VuaXF1ZV9pZCIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24u
d2lkdGgiLCA2Nyk7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAg
ICByZWdpb24gPSB2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnNbNF07CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInJlZ2lvbi5pZCIsICIiKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRl
KCIiKTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIDwvc2Ny
aXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHA+VGVzdHMgcHJvcGVyIHBh
cnNpbmcgb2YgdmFyaW91cyByZWdpb25zIHByZXNlbnQgaW4gV2ViVlRUIGhlYWRlciBhcmVhLjwv
cD4KKyAgICAgICAgPHZpZGVvIGNvbnRyb2xzPgorICAgICAgICAgICAgPHRyYWNrIHNyYz0iLi4v
Y2FwdGlvbnMtd2VidnR0L2hlYWRlci1yZWdpb25zLnZ0dCIga2luZD0iY2FwdGlvbnMiIGRlZmF1
bHQgb25sb2FkPSJzdGFydFRlc3QoKSI+CisgICAgICAgIDwvdmlkZW8+CisKKyAgICA8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195181</attachid>
            <date>2013-03-26 16:09:36 -0700</date>
            <delta_ts>2013-04-01 04:06:58 -0700</delta_ts>
            <desc>Disabled regions</desc>
            <filename>bug-109818-20130327010517.patch</filename>
            <type>text/plain</type>
            <size>27825</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjYwZjljMDY2ZWRjYWI5
OTViZjIwYWFjNWU1ZWM2ZjJjMzY0OTIzNi4uNDFiZGUwNGMzMjkzOGRkZDFlNjU5NDBiODk4OTk0
MDk2NTFlNzc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAzLTI2ICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdl
YlZUVCBSZWdpb24gSGVhZGVyIE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgcmVhZGluZyByZWdpb25zIGZy
b20gdGhlIG1ldGFkYXRhIHNlY3Rpb24gb2YKKyAgICAgICAgYSBXZWJWVFQgZmlsZS4gVGhlIHdv
cmsgZm9yIGRlZmluaW5nIGdlbmVyaWMgbWV0YWRhdGEgd2l0aGluIHRoZQorICAgICAgICBXZWJW
VFQgZmlsZSBoZWFkZXIgaXMgc3RpbGwgd29yayBpbiBwcm9ncmVzcyBpbiB0aGUgVGV4dFRyYWNr
IENHLgorCisgICAgICAgIEFzIHByZXZpb3VzIHBhdGNoZXMsIGV2ZXJ5dGhpbmcgaXMgZ3VhcmRl
ZCBieSBXRUJWVFRfUkVHSU9OUyBhbmQKKyAgICAgICAgaXMgYnkgZGVmYXVsdCBkaXNhYmxlZCBp
biBhbGwgcG9ydHMuCisKKyAgICAgICAgVGVzdDogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQv
dGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9h
ZGFibGVUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVnaW9uc0F2YWlsYWJsZSk6IEFkZGVkIG1ldGhvZAor
ICAgICAgICB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyByZWdpb25zIGhhdmUgZmluaXNoZWQgcGFy
c2luZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAg
IChMb2FkYWJsZVRleHRUcmFjayk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDog
Q2hhbmdlZCB0aGUgYWNjZXNzIG1vZGlmaWVycy4KKyAgICAgICAgKFRleHRUcmFjayk6CisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdpb25TZXR0aW5ncyk6IEVudHJ5IHBvaW50IGZvcgorICAg
ICAgICBwYXJzaW5nIHRoZSByZWdpb24gc2V0dGluZ3MgZnJvbSBhIHN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXRTZXR0aW5n
RnJvbVN0cmluZyk6IE1hcHMgYSBzdHJpbmcKKyAgICAgICAgdG8gYSBSZWdpb25TZXR0aW5nIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1
ZSk6IFBhcnNlcyB0aGUgdmFsdWUKKyAgICAgICAgb2YgYSBzcGVjaWZpYyBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmcpOiBQYXJzZXMgYSBz
ZXR0aW5nIHN0cmluZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oOgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlKTogSGVscGVyIG1ldGhvZAorICAgICAgICB0byBwYXJzZSBhIGZsb2F0IHBlcmNlbnRhZ2Ug
dmFsdWUgKGUuZy4gIjUwLjElIikKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIpOiBIZWxwZXIgbWV0aG9kCisgICAgICAgIHRvIHBh
cnNlIGEgZmxvYXQgcGVyY2VudGFnZSB2YWx1ZSBwYWlyIChlLmcuICI1MC4xJSwgMzAuNSUiKQor
ICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKTogUmV0cmlldmVz
IHRoZSBuZXcgcmVnaW9ucworICAgICAgICBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKTogR2VuZXJpYyBmdW5jdGlvbiB0byBjb2xs
ZWN0CisgICAgICAgIGhlYWRlciBpbiB0aGUgbWV0YWRhdGEgcmVnaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24pOiBDcmVhdGVzIG5ldyByZWdpb24g
dXNpbmcKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIGhlYWRlciBuYW1lIGFuZCB2YWx1
ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAoV2ViVlRU
UGFyc2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlZUVFBhcnNlcik6CisgICAgICAgICogbG9hZGVy
L1RleHRUcmFja0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6bmV3UmVnaW9uc1BhcnNlZCk6IENhbGxlZCB3aGVuIHRoZQor
ICAgICAgICByZWdpb25zIGhhdmUgYmVlbiBzdWNjZXNmdWxseSBwYXJzZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tMb2FkZXI6OmdldE5ld1JlZ2lvbnMpOiBHZXRzIHRoZSBuZXcgcmVn
aW9ucy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6CisgICAgICAgIChUZXh0
VHJhY2tMb2FkZXJDbGllbnQpOiBBZGRlZCBtZXRob2RzIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1l
bnRlZC4KKyAgICAgICAgKFRleHRUcmFja0xvYWRlcik6CisKIDIwMTMtMDMtMjYgIFRvbnkgQ2hh
bmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBdXRvZ2VuZXJhdGUgdGhlIHNjcm9s
bEFuaW1hdG9yRW5hYmxlZCBzZXR0aW5nIGluIFNldHRpbmdzLmluCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCmluZGV4IGIxZTg4MmZkNDcwMWRm
YTdkZjlmMTE4ZDIzNjMwZDM0MTEzYWI2MmMuLjllYzZiMjFkODhhODg3ZTFiOTE4OWViMDdkYjUw
MmFmMmIyMTVkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFi
bGVUZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVU
ZXh0VHJhY2suY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJU
ZXh0VHJhY2tDdWVMaXN0LmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uTGlzdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyMyw2ICsxMjQsMjEgQEAgdm9pZCBMb2FkYWJsZVRl
eHRUcmFjazo6Y3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIqIGxvYWRlciwgYm9v
bCBsb2FkaW4KICAgICBtX3RyYWNrRWxlbWVudC0+ZGlkQ29tcGxldGVMb2FkKHRoaXMsIGxvYWRp
bmdGYWlsZWQgPyBIVE1MVHJhY2tFbGVtZW50OjpGYWlsdXJlIDogSFRNTFRyYWNrRWxlbWVudDo6
U3VjY2Vzcyk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCit2b2lkIExvYWRhYmxl
VGV4dFRyYWNrOjpuZXdSZWdpb25zQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciogbG9hZGVyKQor
eworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBtX2xvYWRlciA9PSBsb2FkZXIpOworCisgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4gbmV3UmVnaW9uczsKKyAgICBtX2xvYWRl
ci0+Z2V0TmV3UmVnaW9ucyhuZXdSZWdpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbmV3UmVnaW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBuZXdSZWdpb25zW2ldLT5zZXRU
cmFjayh0aGlzKTsKKyAgICAgICAgZW5zdXJlVGV4dFRyYWNrUmVnaW9uTGlzdCgpLT5hZGQobmV3
UmVnaW9uc1tpXSk7CisgICAgfQorfQorI2VuZGlmCisKIHNpemVfdCBMb2FkYWJsZVRleHRUcmFj
azo6dHJhY2tFbGVtZW50SW5kZXgoKQogewogICAgIEFTU0VSVChtX3RyYWNrRWxlbWVudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgKaW5kZXggY2Qy
ZGQxZWMwYjU5MTk1ZmMyODJmY2MwYmQzZWU2YmEzNWZiN2VlMi4uMzI0ZWIzMmQwNGJkYTlkNDAw
OWFiNTViOGM4YTJiMzlkNTk0ZDJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaApAQCAtNzAsNiArNzAsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciopOwogICAgIHZpcnR1YWwg
dm9pZCBjdWVMb2FkaW5nU3RhcnRlZChUZXh0VHJhY2tMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgY3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIqLCBib29sIGxvYWRpbmdGYWls
ZWQpOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgbmV3UmVn
aW9uc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqKTsKKyNlbmRpZgogCiAgICAgTG9hZGFibGVU
ZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCosIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFjay5oCmluZGV4IGMxYzExMTljOTcyODdmYzNjMWVmMTc0OTBiM2ZkODJiZmFj
NThkNmMuLmMxOTExYmM1ZTcxMmE5MjVjYjViYzIxN2E1NGUyMzM0MDY3NWJkNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaApAQCAtMTU2LDEyICsxNTYsMTIgQEAgcHJvdGVj
dGVkOgogCiAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKIAotcHJpdmF0ZToK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKICAgICBU
ZXh0VHJhY2tSZWdpb25MaXN0KiBlbnN1cmVUZXh0VHJhY2tSZWdpb25MaXN0KCk7CiAgICAgUmVm
UHRyPFRleHRUcmFja1JlZ2lvbkxpc3Q+IG1fcmVnaW9uczsKICNlbmRpZgogCitwcml2YXRlOgog
I2lmIFVTRShQTEFURk9STV9URVhUX1RSQUNLX01FTlUpCiAgICAgdmlydHVhbCBUZXh0VHJhY2sq
IHB1YmxpY1RyYWNrKCkgT1ZFUlJJREUgeyByZXR1cm4gdGhpczsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAKaW5kZXggNmRiYzhjNzUzODNmZWNk
MDA1ODQ5YzlmYzM5MTk4NDY3NDZjYjRmMy4uZDkxZjNjZWIwMGJiN2VlMzAxM2Y2ZGJjNzI5Njc2
MWJiM2U4NDI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVn
aW9uLmNwcApAQCAtMzUsNiArMzUsOSBAQAogI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbi5oIgog
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiV2ViVlRU
UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTk2LDcgKzE5
OSwxMDcgQEAgdm9pZCBUZXh0VHJhY2tSZWdpb246OnVwZGF0ZVBhcmFtZXRlcnNGcm9tUmVnaW9u
KFRleHRUcmFja1JlZ2lvbiogcmVnaW9uKQogCiB2b2lkIFRleHRUcmFja1JlZ2lvbjo6c2V0UmVn
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICAvLyBGSVhNRSgxMDk4MTgp
OiBQYXJzZSByZWdpb24gaGVhZGVyIG1ldGFkYXRhLgorICAgIG1fc2V0dGluZ3MgPSBpbnB1dDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSkgeworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICBwb3NpdGlvbisrOworCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1
dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlU2V0dGluZyhp
bnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisKK1RleHRUcmFja1JlZ2lvbjo6UmVnaW9uU2V0
dGluZyBUZXh0VHJhY2tSZWdpb246OmdldFNldHRpbmdGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c2V0dGluZykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgaWRLZXl3
b3JkLCAoQVNDSUlMaXRlcmFsKCJpZCIpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIGhlaWdodEtleXdvcmQsIChBU0NJSUxpdGVyYWwoImhlaWdodCIpKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHdpZHRoS2V5d29yZCwgKEFTQ0lJTGl0
ZXJhbCgid2lkdGgiKSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBy
ZWdpb25BbmNob3JLZXl3b3JkLCAoQVNDSUlMaXRlcmFsKCJyZWdpb25hbmNob3IiKSkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCB2aWV3cG9ydEFuY2hvcktleXdvcmQs
IChBU0NJSUxpdGVyYWwoInZpZXdwb3J0YW5jaG9yIikpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgc2Nyb2xsS2V5d29yZCwgKEFTQ0lJTGl0ZXJhbCgic2Nyb2xsIikp
KTsKKworICAgIGlmIChzZXR0aW5nID09IGlkS2V5d29yZCkKKyAgICAgICAgcmV0dXJuIElkOwor
ICAgIGlmIChzZXR0aW5nID09IGhlaWdodEtleXdvcmQpCisgICAgICAgIHJldHVybiBIZWlnaHQ7
CisgICAgaWYgKHNldHRpbmcgPT0gd2lkdGhLZXl3b3JkKQorICAgICAgICByZXR1cm4gV2lkdGg7
CisgICAgaWYgKHNldHRpbmcgPT0gdmlld3BvcnRBbmNob3JLZXl3b3JkKQorICAgICAgICByZXR1
cm4gVmlld3BvcnRBbmNob3I7CisgICAgaWYgKHNldHRpbmcgPT0gcmVnaW9uQW5jaG9yS2V5d29y
ZCkKKyAgICAgICAgcmV0dXJuIFJlZ2lvbkFuY2hvcjsKKyAgICBpZiAoc2V0dGluZyA9PSBzY3Jv
bGxLZXl3b3JkKQorICAgICAgICByZXR1cm4gU2Nyb2xsOworCisgICAgcmV0dXJuIE5vbmU7Cit9
CisKK3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZShSZWdpb25TZXR0aW5n
IHNldHRpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHNjcm9sbFVwVmFsdWVLZXl3b3JkLCAoQVNDSUlMaXRlcmFsKCJ1cCIp
KSk7CisKKyAgICBib29sIGlzVmFsaWRTZXR0aW5nOworCisgICAgU3RyaW5nIG51bWJlckFzU3Ry
aW5nOworICAgIGludCBudW1iZXI7CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbjsKKyAgICBGbG9h
dFBvaW50IGFuY2hvclBvc2l0aW9uOworCisgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgY2Fz
ZSBJZDoKKyAgICAgICAgaWYgKHZhbHVlLmZpbmQoIi0tPiIpID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgbV9pZCA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdpZHRoOgorICAg
ICAgICBudW1iZXIgPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFs
dWUsICZpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZykKKyAgICAg
ICAgICAgIG1fd2lkdGggPSBudW1iZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSGVpZ2h0
OgorICAgICAgICBwb3NpdGlvbiA9IDA7CisKKyAgICAgICAgbnVtYmVyQXNTdHJpbmcgPSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3REaWdpdHModmFsdWUsICZwb3NpdGlvbik7CisgICAgICAgIG51bWJl
ciA9IHZhbHVlLnRvSW50KCZpc1ZhbGlkU2V0dGluZyk7CisKKyAgICAgICAgaWYgKGlzVmFsaWRT
ZXR0aW5nICYmIG51bWJlciA+PSAwKQorICAgICAgICAgICAgbV9oZWlnaHRJbkxpbmVzID0gbnVt
YmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlZ2lvbkFuY2hvcjoKKyAgICAgICAgYW5j
aG9yUG9zaXRpb24gPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWly
KHZhbHVlLCAnLCcsICZpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGlu
ZykKKyAgICAgICAgICAgIG1fcmVnaW9uQW5jaG9yID0gYW5jaG9yUG9zaXRpb247CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVmlld3BvcnRBbmNob3I6CisgICAgICAgIGFuY2hvclBvc2l0aW9u
ID0gV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcih2YWx1ZSwgJywn
LCAmaXNWYWxpZFNldHRpbmcpOworICAgICAgICBpZiAoaXNWYWxpZFNldHRpbmcpCisgICAgICAg
ICAgICBtX3ZpZXdwb3J0QW5jaG9yID0gYW5jaG9yUG9zaXRpb247CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2Nyb2xsOgorICAgICAgICBpZiAodmFsdWUgPT0gc2Nyb2xsVXBWYWx1ZUtleXdv
cmQpCisgICAgICAgICAgICBtX3Njcm9sbCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTm9uZToKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHRUcmFja1JlZ2lv
bjo6cGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikK
K3sKKyAgICBTdHJpbmcgc2V0dGluZyA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQs
IHBvc2l0aW9uKTsKKworICAgIHNpemVfdCBlcXVhbE9mZnNldCA9IHNldHRpbmcuZmluZCgnPScs
IDEpOworICAgIGlmIChlcXVhbE9mZnNldCA9PSBub3RGb3VuZCB8fCAhZXF1YWxPZmZzZXQgfHwg
ZXF1YWxPZmZzZXQgPT0gc2V0dGluZy5sZW5ndGgoKSAtIDEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZ2lvblNldHRpbmcgbmFtZSA9IGdldFNldHRpbmdGcm9tU3RyaW5nKHNldHRpbmcuc3Vi
c3RyaW5nKDAsIGVxdWFsT2Zmc2V0KSk7CisgICAgU3RyaW5nIHZhbHVlID0gc2V0dGluZy5zdWJz
dHJpbmcoZXF1YWxPZmZzZXQgKyAxLCBzZXR0aW5nLmxlbmd0aCgpIC0gMSk7CisKKyAgICBwYXJz
ZVNldHRpbmdWYWx1ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oCmluZGV4IDNmM2Q0
M2VmMTljMzk3MTU3NTZjYzhkN2Y3MzU0MTgxNDQwYjI2ZDAuLjAxYjY0Y2U0ZGQ4NDkwNWI1YmZi
NjlmM2QxM2I3M2JhZWIyNzM1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrUmVnaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tSZWdpb24uaApAQCAtOTQsNiArOTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgU2Nyb2xs
CiAgICAgfTsKIAorICAgIFJlZ2lvblNldHRpbmcgZ2V0U2V0dGluZ0Zyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKyAgICB2b2lkIHBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRpbmcsIGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgcGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7CisKICAgICBTdHJpbmcgbV9pZDsKICAgICBTdHJpbmcgbV9zZXR0aW5nczsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCmluZGV4IGQzODNhODRhZDI2
NmQwNTJmNGFkY2E0YTIxNGNkMTZjYjVmMTJhN2QuLjhhNGZkYmE5MjU1NzRlNWRhYmNlMTIxNjEw
YWI4M2VjY2E2NjhmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHAKQEAgLTY2LDYgKzY2LDU3IEBAIFN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3Jk
KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gc3Ry
aW5nLnRvU3RyaW5nKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCitmbG9hdCBX
ZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogaXNWYWxpZFNldHRpbmcpCit7CisgICAgLy8gJyUnIG11c3QgYmUgcHJlc2VudCBh
bmQgYXQgdGhlIGVuZCBvZiB0aGUgc2V0dGluZyB2YWx1ZS4KKyAgICBpZiAodmFsdWUuZmluZCgn
JScsIDEpICE9IHZhbHVlLmxlbmd0aCgpIC0gMSkgeworICAgICAgICAqaXNWYWxpZFNldHRpbmcg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRp
b24gPSAwOworCisgICAgU3RyaW5nQnVpbGRlciBmbG9hdE51bWJlckFzU3RyaW5nOworICAgIGZs
b2F0TnVtYmVyQXNTdHJpbmcuYXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyh2YWx1
ZSwgJnBvc2l0aW9uKSk7CisKKyAgICBpZiAodmFsdWVbcG9zaXRpb25dID09ICcuJykgeworICAg
ICAgICBmbG9hdE51bWJlckFzU3RyaW5nLmFwcGVuZCgiLiIpOworICAgICAgICBwb3NpdGlvbisr
OworCisgICAgICAgIGZsb2F0TnVtYmVyQXNTdHJpbmcuYXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29s
bGVjdERpZ2l0cyh2YWx1ZSwgJnBvc2l0aW9uKSk7CisgICAgfQorICAgIGZsb2F0IG51bWJlciA9
IGZsb2F0TnVtYmVyQXNTdHJpbmcudG9TdHJpbmcoKS50b0Zsb2F0KGlzVmFsaWRTZXR0aW5nKTsK
KworICAgIGlmICgqaXNWYWxpZFNldHRpbmcgJiYgKG51bWJlciA8PSAwIHx8IG51bWJlciA+PSAx
MDApKQorICAgICAgICAqaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKworICAgIHJldHVybiBudW1i
ZXI7Cit9CisKK0Zsb2F0UG9pbnQgV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlUGFpcihjb25zdCBTdHJpbmcmIHZhbHVlLCBjaGFyIGRlbGltaXRlciwgYm9vbCogaXNWYWxp
ZFNldHRpbmcpCit7CisgICAgc2l6ZV90IGRlbGltaXRlck9mZnNldCA9IHZhbHVlLmZpbmQoZGVs
aW1pdGVyLCAxKTsKKyAgICBpZiAoZGVsaW1pdGVyT2Zmc2V0ID09IG5vdEZvdW5kIHx8IGRlbGlt
aXRlck9mZnNldCA9PSB2YWx1ZS5sZW5ndGgoKSAtIDEgfHwgIWRlbGltaXRlck9mZnNldCkgewor
ICAgICAgICAqaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQoMCwgMCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZpcnN0VmFsdWVWYWxpZDsKKyAgICBmbG9h
dCBmaXJzdENvb3JkID0gcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSgKKyAgICAgICAgdmFsdWUu
c3Vic3RyaW5nKDAsIGRlbGltaXRlck9mZnNldCksCisgICAgICAgICZpc0ZpcnN0VmFsdWVWYWxp
ZCk7CisKKyAgICBib29sIGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAgICBmbG9hdCBzZWNvbmRDb29y
ZCA9IHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoCisgICAgICAgIHZhbHVlLnN1YnN0cmluZyhk
ZWxpbWl0ZXJPZmZzZXQgKyAxLCB2YWx1ZS5sZW5ndGgoKSAtIDEpLAorICAgICAgICAmaXNTZWNv
bmRWYWx1ZVZhbGlkKTsKKworICAgICppc1ZhbGlkU2V0dGluZyA9IGlzRmlyc3RWYWx1ZVZhbGlk
ICYmIGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAgICByZXR1cm4gRmxvYXRQb2ludChmaXJzdENvb3Jk
LCBzZWNvbmRDb29yZCk7Cit9CisjZW5kaWYKKwogV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIo
V2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fc3Rh
dGUoSW5pdGlhbCkKQEAgLTgyLDYgKzEzMywxNCBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6Z2V0TmV3
Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3VlcykKICAgICBtX2N1
ZWxpc3QuY2xlYXIoKTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2Vi
VlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+
JiBvdXRwdXRSZWdpb25zKQoreworICAgIG91dHB1dFJlZ2lvbnMgPSBtX3JlZ2lvbkxpc3Q7Cisg
ICAgbV9yZWdpb25MaXN0LmNsZWFyKCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWVFRQYXJzZXI6
OnBhcnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIC8v
IDQuOC4xMC4xMy4zIFdIQVRXRyBXZWJWVFQgUGFyc2VyIGFsZ29yaXRobS4KQEAgLTkwLDcgKzE0
OSw3IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKIAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICAg
ICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7
Ci0gICAgICAgIAorCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIElu
aXRpYWw6CiAgICAgICAgICAgICAvLyBCdWZmZXIgdXAgYXQgbGVhc3QgOSBieXRlcyBiZWZvcmUg
cHJvY2VlZGluZyB3aXRoIGNoZWNraW5nIGZvciB0aGUgZmlsZSBpZGVudGlmaWVyLgpAQCAtMTA4
LDI4ICsxNjcsNDIgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKICAg
ICAgICAgICAgIG1faWRlbnRpZmllckRhdGEuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKKwogICAgICAgICBjYXNlIEhlYWRlcjoKICAgICAgICAgICAgIC8vIDEzLTE4IC0g
QWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorI2lm
IEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiBtX3JlZ2lvbkxpc3Quc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3UmVnaW9uc1BhcnNlZCgpOworCisgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29sbGVjdEhlYWRlcihsaW5lKTsKKworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBNZXRhZGF0YToKKyNlbmRpZgogICAgICAgICAgICAgaWYg
KGxpbmUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJZDsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICBjYXNlIElkOgogICAgICAgICAgICAgLy8g
MTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlh
bGl6ZSBuZXcgY3VlIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUgY29u
dGFpbnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KICAgICAgICAgICAg
IG1fc3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgCisKICAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0dGluZ3M6CiAgICAgICAgICAgICAvLyA0
MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgogICAgICAgICAgICAgbV9zdGF0
ZSA9IGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgCisKICAgICAgICAgY2FzZSBDdWVUZXh0OgogICAgICAgICAgICAgLy8gNDEtNTMg
LSBDb2xsZWN0IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBv
dXRwdXQuCiAgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwgbGVuZ3Ro
LCBwb3NpdGlvbik7CkBAIC0xNjMsNiArMjM2LDMwIEBAIGJvb2wgV2ViVlRUUGFyc2VyOjpoYXNS
ZXF1aXJlZEZpbGVJZGVudGlmaWVyKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJM
RShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKGNvbnN0
IFN0cmluZyYgbGluZSkKK3sKKyAgICAvLyA0LjEgRXh0ZW5zaW9uIG9mIFdlYlZUVCBoZWFkZXIg
cGFyc2luZyAoMTEgLSAxNSkKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
cmVnaW9uSGVhZGVyTmFtZSwgKEFTQ0lJTGl0ZXJhbCgiUmVnaW9uIikpKTsKKworICAgIC8vIDE1
LjQgSWYgbGluZSBjb250YWlucyB0aGUgY2hhcmFjdGVyICI6IiAoQSBVKzAwM0EgQ09MT04pLCB0
aGVuIHNldCBtZXRhZGF0YSdzCisgICAgLy8gbmFtZSB0byB0aGUgc3Vic3RyaW5nIG9mIGxpbmUg
YmVmb3JlIHRoZSBmaXJzdCAiOiIgY2hhcmFjdGVyIGFuZAorICAgIC8vIG1ldGFkYXRhJ3MgdmFs
dWUgdG8gdGhlIHN1YnN0cmluZyBhZnRlciB0aGlzIGNoYXJhY3Rlci4KKyAgICBpZiAoIWxpbmUu
Y29udGFpbnMoIjoiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY29sb25Qb3Np
dGlvbiA9IGxpbmUuZmluZCgiOiIpOworICAgIG1fY3VycmVudEhlYWRlck5hbWUgPSBsaW5lLnN1
YnN0cmluZygwLCBjb2xvblBvc2l0aW9uKTsKKworICAgIC8vIDE1LjUgSWYgbWV0YWRhdGEncyBu
YW1lIGVxdWFscyAiUmVnaW9uIjoKKyAgICBpZiAobV9jdXJyZW50SGVhZGVyTmFtZSA9PSByZWdp
b25IZWFkZXJOYW1lKSB7CisgICAgICAgIG1fY3VycmVudEhlYWRlclZhbHVlID0gbGluZS5zdWJz
dHJpbmcoY29sb25Qb3NpdGlvbiArIDEsIGxpbmUubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgLy8g
MTUuNS4xIC0gMTUuNS44IFJlZ2lvbiBjcmVhdGlvbjogTGV0IHJlZ2lvbiBiZSBhIG5ldyB0ZXh0
IHRyYWNrIHJlZ2lvbiBbLi4uXQorICAgICAgICBjcmVhdGVOZXdSZWdpb24oKTsKKyAgICB9Cit9
CisjZW5kaWYKKwogV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVj
dEN1ZUlkKGNvbnN0IFN0cmluZyYgbGluZSkKIHsKICAgICBpZiAobGluZS5jb250YWlucygiLS0+
IikpCkBAIC0yODIsNiArMzc5LDI1IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpyZXNldEN1ZVZhbHVl
cygpCiAgICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOwogfQogCisjaWYgRU5BQkxFKFdFQlZU
VF9SRUdJT05TKQordm9pZCBXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld1JlZ2lvbigpCit7CisgICAg
aWYgKCFtX2N1cnJlbnRIZWFkZXJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gcmVnaW9uID0gVGV4dFRyYWNrUmVnaW9uOjpjcmVh
dGUoKTsKKyAgICByZWdpb24tPnNldFJlZ2lvblNldHRpbmdzKG1fY3VycmVudEhlYWRlclZhbHVl
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWdpb25MaXN0LnNpemUoKTsgKytp
KQorICAgICAgICBpZiAobV9yZWdpb25MaXN0W2ldLT5pZCgpID09IHJlZ2lvbi0+aWQoKSkgewor
ICAgICAgICAgICAgbV9yZWdpb25MaXN0LnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICBtX3JlZ2lvbkxpc3QuYXBwZW5kKHJlZ2lvbik7Cit9CisjZW5kaWYK
KwogZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxp
bmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKIHsKICAgICAvLyA0LjguMTAuMTMuMyBDb2xsZWN0IGEg
V2ViVlRUIHRpbWVzdGFtcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5o
CmluZGV4IGM1MGMzMDY0MjgzOGZhYjIxMTRhZjIxYTM4NmE0M2I5NDVkOGRiMTUuLjE3OWRlZjgz
OWQwOWRjMzJiODQ5OWQzYjM0NmUyMzJjMGU1YTY4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tD
dWUuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb24uaCIKICNpbmNsdWRlICJXZWJWVFRUb2tl
bml6ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQ5LDE2ICs1MCwyOSBAQCBjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIFdlYlZUVFBhcnNlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViVlRUUGFy
c2VyQ2xpZW50KCkgeyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc1BhcnNlZCgp
ID0gMDsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgdmlydHVhbCB2b2lkIG5ld1Jl
Z2lvbnNQYXJzZWQoKSA9IDA7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZmlsZUZhaWxlZFRv
UGFyc2UoKSA9IDA7CiB9OwogCiBjbGFzcyBXZWJWVFRQYXJzZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYlZUVFBhcnNlcigpIHsgfQotICAgIAotICAgIGVudW0gUGFyc2VTdGF0ZSB7IElu
aXRpYWwsIEhlYWRlciwgSWQsIFRpbWluZ3NBbmRTZXR0aW5ncywgQ3VlVGV4dCwgQmFkQ3VlIH07
CisKKyAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBIZWFk
ZXIsCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgICAgICBNZXRhZGF0YSwKKyNlbmRp
ZgorICAgICAgICBJZCwKKyAgICAgICAgVGltaW5nc0FuZFNldHRpbmdzLAorICAgICAgICBDdWVU
ZXh0LAorICAgICAgICBCYWRDdWUKKyAgICB9OwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
VlRUUGFyc2VyPiBjcmVhdGUoV2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewpAQCAtODgsMTggKzEwMiwyNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
Kik7CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCopOwogCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIC8vIFVzZWZ1bCBmdW5jdGlv
bnMgZm9yIHBhcnNpbmcgcGVyY2VudGFnZSBzZXR0aW5ncy4KKyAgICBzdGF0aWMgZmxvYXQgcGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sKik7CisgICAgc3RhdGlj
IEZsb2F0UG9pbnQgcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiwg
Y2hhciwgYm9vbCopOworI2VuZGlmCisKICAgICAvLyBJbnB1dCBkYXRhIHRvIHRoZSBwYXJzZXIg
dG8gcGFyc2UuCiAgICAgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIGxhc3QgcGFyc2VkIGN1
ZXMgdG8gY2FsbGVyLgogICAgIHZvaWQgZ2V0TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2b2lkIGdldE5ld1Jl
Z2lvbnMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4mKTsKKyNlbmRpZgogCiAgICAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJvbUN1
ZVRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQqKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYlZUVFBhcnNlcihXZWJW
VFRQYXJzZXJDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgCisKICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgUGFy
c2VTdGF0ZSBtX3N0YXRlOwogCkBAIC0xMTMsMTIgKzEzNiwyMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY3JlYXRlTmV3Q3VlKCk7CiAgICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOwogCisjaWYgRU5B
QkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZvaWQgY29sbGVjdEhlYWRlcihjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGNyZWF0ZU5ld1JlZ2lvbigpOworI2VuZGlmCisKICAgICB2b2lkIHNraXBX
aGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CiAgICAgc3RhdGljIHZvaWQgc2tp
cExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7Ci0gICAgCisKICAgICB2b2lkIGNvbnN0cnVj
dFRyZWVGcm9tVG9rZW4oRG9jdW1lbnQqKTsKIAorICAgIFN0cmluZyBtX2N1cnJlbnRIZWFkZXJO
YW1lOworICAgIFN0cmluZyBtX2N1cnJlbnRIZWFkZXJWYWx1ZTsKKwogICAgIFZlY3RvcjxjaGFy
PiBtX2lkZW50aWZpZXJEYXRhOwogICAgIFN0cmluZyBtX2N1cnJlbnRJZDsKICAgICBkb3VibGUg
bV9jdXJyZW50U3RhcnRUaW1lOwpAQCAtMTM1LDYgKzE2NiwxMCBAQCBwcml2YXRlOgogCiAgICAg
VmVjdG9yPEF0b21pY1N0cmluZz4gbV9sYW5ndWFnZVN0YWNrOwogICAgIFZlY3RvcjxSZWZQdHI8
VGV4dFRyYWNrQ3VlPiA+IG1fY3VlbGlzdDsKKworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykK
KyAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gPiBtX3JlZ2lvbkxpc3Q7CisjZW5k
aWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Rl
eHRUcmFja0xvYWRlci5jcHAKaW5kZXggMDBhMWQ4ZmU2NzRmYzY0MWUxNjNmMmQzZmEwM2RmZTVi
ZTkyNjJlMS4uM2Y3NTVhZWFhYjM1ZTEwNTg2NmRjNmJkZWQ0NjQyNzA1NmVkNjYwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKQEAgLTE4OCw2ICsxODgsMTMg
QEAgdm9pZCBUZXh0VHJhY2tMb2FkZXI6Om5ld0N1ZXNQYXJzZWQoKQogICAgIG1fY3VlTG9hZFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3Zv
aWQgVGV4dFRyYWNrTG9hZGVyOjpuZXdSZWdpb25zUGFyc2VkKCkKK3sKKyAgICBtX2NsaWVudC0+
bmV3UmVnaW9uc0F2YWlsYWJsZSh0aGlzKTsgCit9CisjZW5kaWYKKwogdm9pZCBUZXh0VHJhY2tM
b2FkZXI6OmZpbGVGYWlsZWRUb1BhcnNlKCkKIHsKICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tM
b2FkZXI6OmZpbGVGYWlsZWRUb1BhcnNlIik7CkBAIC0yMDcsNiArMjE0LDE2IEBAIHZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpnZXROZXdDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBv
dXRwdXRDdWVzKQogICAgICAgICBtX2N1ZVBhcnNlci0+Z2V0TmV3Q3VlcyhvdXRwdXRDdWVzKTsK
IH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgVGV4dFRyYWNrTG9hZGVyOjpn
ZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+JiBvdXRwdXRSZWdp
b25zKQoreworICAgIEFTU0VSVChtX2N1ZVBhcnNlcik7CisgICAgaWYgKG1fY3VlUGFyc2VyKSB7
CisgICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdSZWdpb25zKG91dHB1dFJlZ2lvbnMpOworICAg
ICAgICBMT0coTWVkaWEsICJHb3QgJWxkIFJlZ2lvbnMhIiwgb3V0cHV0UmVnaW9ucy5zaXplKCkp
OworICAgIH0KK30KKyNlbmRpZgogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0
VHJhY2tMb2FkZXIuaAppbmRleCBlNzcwM2FjN2I4ZWNkZmYxZGEzMDg2MTBlN2U4MGMzZmVjM2M3
NGZiLi5hNWFkMDNmMDUwNTZhMzIwNzY5NzVkNzY3YjVlNDk5ODVjNmFmMmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCkBAIC00OSw2ICs0OSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdTdGFydGVkKFRleHRUcmFja0xvYWRlciopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJhY2tMb2FkZXIq
LCBib29sIGxvYWRpbmdGYWlsZWQpID0gMDsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisg
ICAgdmlydHVhbCB2b2lkIG5ld1JlZ2lvbnNBdmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyKikgPSAw
OworI2VuZGlmCiB9OwogCiBjbGFzcyBUZXh0VHJhY2tMb2FkZXIgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2VDbGllbnQsIHByaXZhdGUgV2ViVlRUUGFyc2VyQ2xpZW50IHsKQEAgLTY0LDcgKzY3LDkg
QEAgcHVibGljOgogICAgIGJvb2wgbG9hZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjcm9z
c09yaWdpbk1vZGUpOwogICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogICAgIHZvaWQgZ2V0TmV3Q3Vl
cyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3Vlcyk7Ci0gICAgCisjaWYg
RU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZvaWQgZ2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVm
UHRyPFRleHRUcmFja1JlZ2lvbj4gPiYgb3V0cHV0UmVnaW9ucyk7CisjZW5kaWYKIHByaXZhdGU6
CiAKICAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudApAQCAtNzMsNiArNzgsOSBAQCBwcml2YXRl
OgogICAgIAogICAgIC8vIFdlYlZUVFBhcnNlckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBuZXdD
dWVzUGFyc2VkKCk7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZpcnR1YWwgdm9p
ZCBuZXdSZWdpb25zUGFyc2VkKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZmlsZUZhaWxl
ZFRvUGFyc2UoKTsKICAgICAKICAgICBUZXh0VHJhY2tMb2FkZXIoVGV4dFRyYWNrTG9hZGVyQ2xp
ZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJjZTNhOTkwMzQ2MjU4ZDM1
MjI5NWQ2MmI1MzhjNDgzOTQ1MDRlYmIuLmY5MzlmNDVhNTlhMDVkOGRlMmFkNzNkM2Q2ZWM1OTdm
NGE3MTZkOTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMy0yNiAgVmljdG9yIENhcmJ1
bmUgIDx2Y2FyYnVuZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGFyc2luZyBXZWJWVFQgUmVn
aW9uIEhlYWRlciBNZXRhZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA5ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBtZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvaGVhZGVyLXJlZ2lvbnMu
dnR0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90cmFjay9yZWdpb25zLXdlYnZ0dC90ZXh0LXRy
YWNrLXJlZ2lvbi1wYXJzZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90
cmFjay9yZWdpb25zLXdlYnZ0dC90ZXh0LXRyYWNrLXJlZ2lvbi1wYXJzZXIuaHRtbDogQWRkZWQu
CisKIDIwMTMtMDMtMjYgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmViYXNlbGluZSB0ZXh0IG91dHB1dCBmb3Igb3BhcXVlIEdyYXBoaWNzTGF5ZXJz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvaGVh
ZGVyLXJlZ2lvbnMudnR0IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0
L2hlYWRlci1yZWdpb25zLnZ0dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzgxNGNmZTlmMTBmYWQwNDIzZDc3NTM0
MzY5YTUxMTM3YWJkMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJh
Y2svY2FwdGlvbnMtd2VidnR0L2hlYWRlci1yZWdpb25zLnZ0dApAQCAtMCwwICsxLDExIEBACitX
RUJWVFQgRklMRQorUmVnaW9uOiBpZD1yZWdpb25fd2l0aG91dF9zZXR0aW5ncworUmVnaW9uOiBp
ZD1yZWdpb25fd2l0aF9hbGxfc2V0dGluZ3Mgd2lkdGg9MzIlIGhlaWdodD01IHJlZ2lvbmFuY2hv
cj00MSUsMjAlIHZpZXdwb3J0YW5jaG9yPTMxJSw4NCUgc2Nyb2xsPXVwCitSZWdpb246IGlkPXJl
Z2lvbl9mbG9hdGluZ19wb2ludF9hbmNob3IgcmVnaW9uYW5jaG9yPTQxLjEzMyUsMjAuNDIlIHZp
ZXdwb3J0YW5jaG9yPTMyLjMzJSwzMi40NCUKK1JlZ2lvbjogaWQ9bm90X3VuaXF1ZV9pZCB3aWR0
aD00MiUKK1JlZ2lvbjogaWQ9bm90X3VuaXF1ZV9pZCB3aWR0aD02NyUKK1JlZ2lvbjogaW52YWxp
ZF9zZXR0aW5ncyB2YWx1ZXMgYnV0IHJlZ2lvbiBzdGlsbCBjcmVhdGVkCisKKzEKKzAwOjAwOjAw
LjAwMCAtLT4gMDA6MDA6MDIuNTAwCitXZSBhcmUgaW4gTmV3IFlvcmsgQ2l0eQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdp
b24tcGFyc2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMt
d2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDcwZjQzMWFhYjY5MjFkM2VjZDBkMmFmY2IwYWRlZTY5YjkyM2ZlOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVn
aW9uLXBhcnNlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOCBAQAorVGVzdHMgcHJvcGVyIHBh
cnNpbmcgb2YgdmFyaW91cyByZWdpb25zIHByZXNlbnQgaW4gV2ViVlRUIGhlYWRlciBhcmVhLgor
CitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrc1swXS5yZWdpb25zLmxlbmd0aCA9PSAnNScpIE9L
CisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJ3JlZ2lvbl93aXRob3V0X3NldHRpbmdzJykgT0sK
KworRVhQRUNURUQgKHJlZ2lvbi5pZCA9PSAncmVnaW9uX3dpdGhfYWxsX3NldHRpbmdzJykgT0sK
K0VYUEVDVEVEIChyZWdpb24ud2lkdGggPT0gJzMyJykgT0sKK0VYUEVDVEVEIChyZWdpb24uaGVp
Z2h0ID09ICc1JykgT0sKK0VYUEVDVEVEIChyZWdpb24ucmVnaW9uQW5jaG9yWCA9PSAnNDEnKSBP
SworRVhQRUNURUQgKHJlZ2lvbi5yZWdpb25BbmNob3JZID09ICcyMCcpIE9LCitFWFBFQ1RFRCAo
cmVnaW9uLnZpZXdwb3J0QW5jaG9yWCA9PSAnMzEnKSBPSworRVhQRUNURUQgKHJlZ2lvbi52aWV3
cG9ydEFuY2hvclkgPT0gJzg0JykgT0sKK0VYUEVDVEVEIChyZWdpb24uc2Nyb2xsID09ICd1cCcp
IE9LCisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJ3JlZ2lvbl9mbG9hdGluZ19wb2ludF9hbmNo
b3InKSBPSworRVhQRUNURUQgKE1hdGgucm91bmQocmVnaW9uLnJlZ2lvbkFuY2hvclggKiAxMDAw
KSA9PSAnNDExMzMnKSBPSworRVhQRUNURUQgKE1hdGgucm91bmQocmVnaW9uLnJlZ2lvbkFuY2hv
clkgKiAxMDAwKSA9PSAnMjA0MjAnKSBPSworRVhQRUNURUQgKE1hdGgucm91bmQocmVnaW9uLnZp
ZXdwb3J0QW5jaG9yWCAqIDEwMDApID09ICczMjMzMCcpIE9LCitFWFBFQ1RFRCAoTWF0aC5yb3Vu
ZChyZWdpb24udmlld3BvcnRBbmNob3JZICogMTAwMCkgPT0gJzMyNDQwJykgT0sKKworRVhQRUNU
RUQgKHJlZ2lvbi5pZCA9PSAnbm90X3VuaXF1ZV9pZCcpIE9LCitFWFBFQ1RFRCAocmVnaW9uLndp
ZHRoID09ICc2NycpIE9LCisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJycpIE9LCisKK0VORCBP
RiBURVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMtd2Vi
dnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJh
Y2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTA3YTQyMjcxNGMzM2RmZWI0ZjZjYzYwMDc2Yzk3ZWI1NTYwNjY0ZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2st
cmVnaW9uLXBhcnNlci5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisgICAgICAgIDxzY3JpcHQg
c3JjPS4uLy4uL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4u
Ly4uL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgIHZh
ciByZWdpb247CisKKyAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCF3aW5kb3cuVGV4dFRyYWNrUmVnaW9uKSB7CisgICAgICAgICAgICAgICAg
ZmFpbFRlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
dmlkZW8udGV4dFRyYWNrc1swXS5yZWdpb25zLmxlbmd0aCIsIDUpOworCisgICAgICAgICAgICBj
b25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcmVnaW9uID0gdmlkZW8udGV4dFRyYWNrc1sw
XS5yZWdpb25zWzBdOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24uaWQiLCAicmVn
aW9uX3dpdGhvdXRfc2V0dGluZ3MiKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsK
KyAgICAgICAgICAgIHJlZ2lvbiA9IHZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9uc1sxXTsKKyAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLmlkIiwgInJlZ2lvbl93aXRoX2FsbF9zZXR0
aW5ncyIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24ud2lkdGgiLCAzMik7Cisg
ICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5oZWlnaHQiLCA1KTsKKyAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgicmVnaW9uLnJlZ2lvbkFuY2hvclgiLCA0MSk7CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInJlZ2lvbi5yZWdpb25BbmNob3JZIiwgMjApOworICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJyZWdpb24udmlld3BvcnRBbmNob3JYIiwgMzEpOworICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJyZWdpb24udmlld3BvcnRBbmNob3JZIiwgODQpOworICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJyZWdpb24uc2Nyb2xsIiwgInVwIik7CisKKyAgICAgICAgICAgIGNvbnNvbGVX
cml0ZSgiIik7CisgICAgICAgICAgICByZWdpb24gPSB2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lv
bnNbMl07CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5pZCIsICJyZWdpb25fZmxv
YXRpbmdfcG9pbnRfYW5jaG9yIik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoIk1hdGgucm91
bmQocmVnaW9uLnJlZ2lvbkFuY2hvclggKiAxMDAwKSIsIDQxMTMzKTsKKyAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgiTWF0aC5yb3VuZChyZWdpb24ucmVnaW9uQW5jaG9yWSAqIDEwMDApIiwgMjA0
MjApOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJNYXRoLnJvdW5kKHJlZ2lvbi52aWV3cG9y
dEFuY2hvclggKiAxMDAwKSIsIDMyMzMwKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiTWF0
aC5yb3VuZChyZWdpb24udmlld3BvcnRBbmNob3JZICogMTAwMCkiLCAzMjQ0MCk7CisKKyAgICAg
ICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICByZWdpb24gPSB2aWRlby50ZXh0
VHJhY2tzWzBdLnJlZ2lvbnNbM107CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5p
ZCIsICJub3RfdW5pcXVlX2lkIik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi53
aWR0aCIsIDY3KTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAg
IHJlZ2lvbiA9IHZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9uc1s0XTsKKyAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgicmVnaW9uLmlkIiwgIiIpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUo
IiIpOworICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgPC9zY3Jp
cHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8cD5UZXN0cyBwcm9wZXIgcGFy
c2luZyBvZiB2YXJpb3VzIHJlZ2lvbnMgcHJlc2VudCBpbiBXZWJWVFQgaGVhZGVyIGFyZWEuPC9w
PgorICAgICAgICA8dmlkZW8gY29udHJvbHM+CisgICAgICAgICAgICA8dHJhY2sgc3JjPSIuLi9j
YXB0aW9ucy13ZWJ2dHQvaGVhZGVyLXJlZ2lvbnMudnR0IiBraW5kPSJjYXB0aW9ucyIgZGVmYXVs
dCBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKyAgICAgICAgPC92aWRlbz4KKworICAgIDwvYm9keT4K
KzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195950</attachid>
            <date>2013-04-01 04:07:06 -0700</date>
            <delta_ts>2013-04-01 04:17:21 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-109818-20130401140657.patch</filename>
            <type>text/plain</type>
            <size>29445</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3Mjg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU5ZjMwN2Y5MDlhZTlh
NTY2NDJjMGQzZGZkNWI3NTMyYzJkNDI3Yi4uMzUxMDQxMDQ3NzVjZDQyYTIzYzFlMjZjZDc4OTg3
N2EzNjQxOWYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTA0LTAxICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdl
YlZUVCBSZWdpb24gSGVhZGVyIE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgcmVhZGluZyByZWdpb25zIGZy
b20gdGhlIG1ldGFkYXRhIHNlY3Rpb24gb2YKKyAgICAgICAgYSBXZWJWVFQgZmlsZS4gVGhlIHdv
cmsgZm9yIGRlZmluaW5nIGdlbmVyaWMgbWV0YWRhdGEgd2l0aGluIHRoZQorICAgICAgICBXZWJW
VFQgZmlsZSBoZWFkZXIgaXMgc3RpbGwgd29yayBpbiBwcm9ncmVzcyBpbiB0aGUgVGV4dFRyYWNr
IENHLgorCisgICAgICAgIEFzIHByZXZpb3VzIHBhdGNoZXMsIGV2ZXJ5dGhpbmcgaXMgZ3VhcmRl
ZCBieSBXRUJWVFRfUkVHSU9OUyBhbmQKKyAgICAgICAgaXMgYnkgZGVmYXVsdCBkaXNhYmxlZCBp
biBhbGwgcG9ydHMuCisKKyAgICAgICAgVGVzdDogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQv
dGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9h
ZGFibGVUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVnaW9uc0F2YWlsYWJsZSk6IEFkZGVkIG1ldGhvZAor
ICAgICAgICB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyByZWdpb25zIGhhdmUgZmluaXNoZWQgcGFy
c2luZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAg
IChMb2FkYWJsZVRleHRUcmFjayk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDog
Q2hhbmdlZCB0aGUgYWNjZXNzIG1vZGlmaWVycy4KKyAgICAgICAgKFRleHRUcmFjayk6CisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdpb25TZXR0aW5ncyk6IEVudHJ5IHBvaW50IGZvcgorICAg
ICAgICBwYXJzaW5nIHRoZSByZWdpb24gc2V0dGluZ3MgZnJvbSBhIHN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXRTZXR0aW5n
RnJvbVN0cmluZyk6IE1hcHMgYSBzdHJpbmcKKyAgICAgICAgdG8gYSBSZWdpb25TZXR0aW5nIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1
ZSk6IFBhcnNlcyB0aGUgdmFsdWUKKyAgICAgICAgb2YgYSBzcGVjaWZpYyBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmcpOiBQYXJzZXMgYSBz
ZXR0aW5nIHN0cmluZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oOgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlKTogSGVscGVyIG1ldGhvZAorICAgICAgICB0byBwYXJzZSBhIGZsb2F0IHBlcmNlbnRhZ2Ug
dmFsdWUgKGUuZy4gIjUwLjElIikKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIpOiBIZWxwZXIgbWV0aG9kCisgICAgICAgIHRvIHBh
cnNlIGEgZmxvYXQgcGVyY2VudGFnZSB2YWx1ZSBwYWlyIChlLmcuICI1MC4xJSwgMzAuNSUiKQor
ICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKTogUmV0cmlldmVz
IHRoZSBuZXcgcmVnaW9ucworICAgICAgICBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKTogR2VuZXJpYyBmdW5jdGlvbiB0byBjb2xs
ZWN0CisgICAgICAgIGhlYWRlciBpbiB0aGUgbWV0YWRhdGEgcmVnaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24pOiBDcmVhdGVzIG5ldyByZWdpb24g
dXNpbmcKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIGhlYWRlciBuYW1lIGFuZCB2YWx1
ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAoV2ViVlRU
UGFyc2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlZUVFBhcnNlcik6CisgICAgICAgICogbG9hZGVy
L1RleHRUcmFja0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6bmV3UmVnaW9uc1BhcnNlZCk6IENhbGxlZCB3aGVuIHRoZQor
ICAgICAgICByZWdpb25zIGhhdmUgYmVlbiBzdWNjZXNmdWxseSBwYXJzZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tMb2FkZXI6OmdldE5ld1JlZ2lvbnMpOiBHZXRzIHRoZSBuZXcgcmVn
aW9ucy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6CisgICAgICAgIChUZXh0
VHJhY2tMb2FkZXJDbGllbnQpOiBBZGRlZCBtZXRob2RzIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1l
bnRlZC4KKyAgICAgICAgKFRleHRUcmFja0xvYWRlcik6CisKIDIwMTMtMDMtMzAgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGluY2x1ZGUg
b2YgUmVndWxhckV4cHJlc3Npb24uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xv
YWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCBiMWU4ODJmZDQ3MDFkZmE3ZGY5ZjExOGQyMzYzMGQz
NDExM2FiNjJjLi4zZGZiOTc3ODRjNTgyMWFjOTlkOTc4ZWU0M2U1ZDc4NTRkNTE3NGM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlTGlzdC5o
IgorI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbkxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xMjMsNiArMTI0LDIxIEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmN1ZUxvYWRp
bmdDb21wbGV0ZWQoVGV4dFRyYWNrTG9hZGVyKiBsb2FkZXIsIGJvb2wgbG9hZGluCiAgICAgbV90
cmFja0VsZW1lbnQtPmRpZENvbXBsZXRlTG9hZCh0aGlzLCBsb2FkaW5nRmFpbGVkID8gSFRNTFRy
YWNrRWxlbWVudDo6RmFpbHVyZSA6IEhUTUxUcmFja0VsZW1lbnQ6OlN1Y2Nlc3MpOwogfQogCisj
aWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQordm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVn
aW9uc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKGxvYWRlciwgbV9sb2FkZXIgPT0gbG9hZGVyKTsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrUmVnaW9uPiA+IG5ld1JlZ2lvbnM7CisgICAgbV9sb2FkZXItPmdldE5ld1JlZ2lvbnMo
bmV3UmVnaW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld1JlZ2lvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgbmV3UmVnaW9uc1tpXS0+c2V0VHJhY2sodGhpcyk7CisgICAg
ICAgIHJlZ2lvbkxpc3QoKS0+YWRkKG5ld1JlZ2lvbnNbaV0pOworICAgIH0KK30KKyNlbmRpZgor
CiBzaXplX3QgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNrRWxlbWVudEluZGV4KCkKIHsKICAgICBB
U1NFUlQobV90cmFja0VsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2Fk
YWJsZVRleHRUcmFjay5oCmluZGV4IGNkMmRkMWVjMGI1OTE5NWZjMjgyZmNjMGJkM2VlNmJhMzVm
YjdlZTIuLjMyNGViMzJkMDRiZGE5ZDQwMDlhYjU1YjhjOGEyYjM5ZDU5NGQyYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgKQEAgLTcwLDYgKzcw
LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0F2YWlsYWJsZShUZXh0VHJh
Y2tMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ1N0YXJ0ZWQoVGV4dFRyYWNr
TG9hZGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdDb21wbGV0ZWQoVGV4dFRyYWNr
TG9hZGVyKiwgYm9vbCBsb2FkaW5nRmFpbGVkKTsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMp
CisgICAgdmlydHVhbCB2b2lkIG5ld1JlZ2lvbnNBdmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyKik7
CisjZW5kaWYKIAogICAgIExvYWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqLCBjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKaW5kZXggMzQzN2Zh
N2UxYWE2NzVlYTkyOTZhNjcyYWU4MWE1ZWJlNzFmYzE5My4uOTdhNjY1Y2E0YWVjZDNjZTE0NDA1
OGRjNmEwMDQ4MjljYzMzODE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmNwcApAQCAtMjgxLDYgKzI4MSwxMSBAQCB2b2lkIFRleHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRU
cmFja0N1ZSogY3VlLCBFeGNlcHRpb25Db2RlJiBlYykKIH0KIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykgJiYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorVGV4dFRyYWNrUmVnaW9uTGlzdCogVGV4
dFRyYWNrOjpyZWdpb25MaXN0KCkKK3sKKyAgICByZXR1cm4gZW5zdXJlVGV4dFRyYWNrUmVnaW9u
TGlzdCgpOworfQorCiBUZXh0VHJhY2tSZWdpb25MaXN0KiBUZXh0VHJhY2s6OmVuc3VyZVRleHRU
cmFja1JlZ2lvbkxpc3QoKQogewogICAgIGlmICghbV9yZWdpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrLmgKaW5kZXggYzFjMTExOWM5NzI4N2ZjM2MxZWYxNzQ5MGIzZmQ4MmJm
YWM1OGQ2Yy4uMmY5ZjhiOTcxZDE4NWI3NDRmNjEwMDE3MTZkNTZlNWExYjljNDE3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCkBAIC0xNTMsMTAgKzE1MywxMiBAQCBwdWJs
aWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFRleHRUcmFja0NsaWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsYWJlbCwgY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlw
ZSk7CisgICAgVGV4dFRyYWNrUmVnaW9uTGlzdCogcmVnaW9uTGlzdCgpOwogCiAgICAgUmVmUHRy
PFRleHRUcmFja0N1ZUxpc3Q+IG1fY3VlczsKIAogcHJpdmF0ZToKKwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykgJiYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQogICAgIFRleHRUcmFja1JlZ2lvbkxp
c3QqIGVuc3VyZVRleHRUcmFja1JlZ2lvbkxpc3QoKTsKICAgICBSZWZQdHI8VGV4dFRyYWNrUmVn
aW9uTGlzdD4gbV9yZWdpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tSZWdpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tSZWdpb24uY3BwCmluZGV4IDZkYmM4Yzc1MzgzZmVjZDAwNTg0OWM5ZmMzOTE5ODQ2NzQ2Y2I0
ZjMuLmRlMWI1Y2FiMmYwMTczM2Q5ZTc3NTdiZWM0MTJkOGJhMWVkMDFhNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAKQEAgLTM1LDYgKzM1LDEw
IEBACiAjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViVlRU
UGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTk2LDcgKzIw
MCwxMTUgQEAgdm9pZCBUZXh0VHJhY2tSZWdpb246OnVwZGF0ZVBhcmFtZXRlcnNGcm9tUmVnaW9u
KFRleHRUcmFja1JlZ2lvbiogcmVnaW9uKQogCiB2b2lkIFRleHRUcmFja1JlZ2lvbjo6c2V0UmVn
aW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICAvLyBGSVhNRSgxMDk4MTgp
OiBQYXJzZSByZWdpb24gaGVhZGVyIG1ldGFkYXRhLgorICAgIG1fc2V0dGluZ3MgPSBpbnB1dDsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1
dC5sZW5ndGgoKSkgeworICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkp
CisgICAgICAgICAgICBwb3NpdGlvbisrOworCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1
dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlU2V0dGluZyhp
bnB1dCwgJnBvc2l0aW9uKTsKKyAgICB9Cit9CisKK1RleHRUcmFja1JlZ2lvbjo6UmVnaW9uU2V0
dGluZyBUZXh0VHJhY2tSZWdpb246OmdldFNldHRpbmdGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c2V0dGluZykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
aWRLZXl3b3JkLCAoImlkIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWlnaHRLZXl3b3Jk
LCAoImhlaWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgd2lkdGhLZXl3b3JkLCAoIndp
ZHRoIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCByZWdpb25BbmNob3JLZXl3b3JkLCAoInJl
Z2lvbmFuY2hvciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgdmlld3BvcnRBbmNob3JLZXl3
b3JkLCAoInZpZXdwb3J0YW5jaG9yIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzY3JvbGxL
ZXl3b3JkLCAoInNjcm9sbCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
KworICAgIGlmIChzZXR0aW5nID09IGlkS2V5d29yZCkKKyAgICAgICAgcmV0dXJuIElkOworICAg
IGlmIChzZXR0aW5nID09IGhlaWdodEtleXdvcmQpCisgICAgICAgIHJldHVybiBIZWlnaHQ7Cisg
ICAgaWYgKHNldHRpbmcgPT0gd2lkdGhLZXl3b3JkKQorICAgICAgICByZXR1cm4gV2lkdGg7Cisg
ICAgaWYgKHNldHRpbmcgPT0gdmlld3BvcnRBbmNob3JLZXl3b3JkKQorICAgICAgICByZXR1cm4g
Vmlld3BvcnRBbmNob3I7CisgICAgaWYgKHNldHRpbmcgPT0gcmVnaW9uQW5jaG9yS2V5d29yZCkK
KyAgICAgICAgcmV0dXJuIFJlZ2lvbkFuY2hvcjsKKyAgICBpZiAoc2V0dGluZyA9PSBzY3JvbGxL
ZXl3b3JkKQorICAgICAgICByZXR1cm4gU2Nyb2xsOworCisgICAgcmV0dXJuIE5vbmU7Cit9CisK
K3ZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZShSZWdpb25TZXR0aW5nIHNl
dHRpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHNjcm9sbFVwVmFsdWVLZXl3b3JkLCAoInVwIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworCisgICAgYm9vbCBpc1ZhbGlkU2V0dGluZzsK
KyAgICBTdHJpbmcgbnVtYmVyQXNTdHJpbmc7CisgICAgaW50IG51bWJlcjsKKyAgICB1bnNpZ25l
ZCBwb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50IGFuY2hvclBvc2l0aW9uOworCisgICAgc3dpdGNo
IChzZXR0aW5nKSB7CisgICAgY2FzZSBJZDoKKyAgICAgICAgaWYgKHZhbHVlLmZpbmQoIi0tPiIp
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgbV9pZCA9IHZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdpZHRoOgorICAgICAgICBudW1iZXIgPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxv
YXRQZXJjZW50YWdlVmFsdWUodmFsdWUsIGlzVmFsaWRTZXR0aW5nKTsKKyAgICAgICAgaWYgKGlz
VmFsaWRTZXR0aW5nKQorICAgICAgICAgICAgbV93aWR0aCA9IG51bWJlcjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdW
YWx1ZSwgaW52YWxpZCBXaWR0aCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhlaWdodDoK
KyAgICAgICAgcG9zaXRpb24gPSAwOworCisgICAgICAgIG51bWJlckFzU3RyaW5nID0gV2ViVlRU
UGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRpb24pOworICAgICAgICBudW1iZXIg
PSB2YWx1ZS50b0ludCgmaXNWYWxpZFNldHRpbmcpOworCisgICAgICAgIGlmIChpc1ZhbGlkU2V0
dGluZyAmJiBudW1iZXIgPj0gMCkKKyAgICAgICAgICAgIG1faGVpZ2h0SW5MaW5lcyA9IG51bWJl
cjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9u
OjpwYXJzZVNldHRpbmdWYWx1ZSwgaW52YWxpZCBIZWlnaHQiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBSZWdpb25BbmNob3I6CisgICAgICAgIGFuY2hvclBvc2l0aW9uID0gV2ViVlRUUGFy
c2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcih2YWx1ZSwgJywnLCBpc1ZhbGlkU2V0
dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZykKKyAgICAgICAgICAgIG1fcmVnaW9u
QW5jaG9yID0gYW5jaG9yUG9zaXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExPRyhN
ZWRpYSwgIlRleHRUcmFja1JlZ2lvbjo6cGFyc2VTZXR0aW5nVmFsdWUsIGludmFsaWQgUmVnaW9u
QW5jaG9yIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlld3BvcnRBbmNob3I6CisgICAg
ICAgIGFuY2hvclBvc2l0aW9uID0gV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlUGFpcih2YWx1ZSwgJywnLCBpc1ZhbGlkU2V0dGluZyk7CisgICAgICAgIGlmIChpc1ZhbGlk
U2V0dGluZykKKyAgICAgICAgICAgIG1fdmlld3BvcnRBbmNob3IgPSBhbmNob3JQb3NpdGlvbjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpw
YXJzZVNldHRpbmdWYWx1ZSwgaW52YWxpZCBWaWV3cG9ydEFuY2hvciIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNjcm9sbDoKKyAgICAgICAgaWYgKHZhbHVlID09IHNjcm9sbFVwVmFsdWVL
ZXl3b3JkKQorICAgICAgICAgICAgbV9zY3JvbGwgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlLCBp
bnZhbGlkIFNjcm9sbCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbmU6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZyhj
b25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAgU3RyaW5nIHNl
dHRpbmcgPSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGlucHV0LCBwb3NpdGlvbik7CisKKyAg
ICBzaXplX3QgZXF1YWxPZmZzZXQgPSBzZXR0aW5nLmZpbmQoJz0nLCAxKTsKKyAgICBpZiAoZXF1
YWxPZmZzZXQgPT0gbm90Rm91bmQgfHwgIWVxdWFsT2Zmc2V0IHx8IGVxdWFsT2Zmc2V0ID09IHNl
dHRpbmcubGVuZ3RoKCkgLSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpb25TZXR0aW5n
IG5hbWUgPSBnZXRTZXR0aW5nRnJvbVN0cmluZyhzZXR0aW5nLnN1YnN0cmluZygwLCBlcXVhbE9m
ZnNldCkpOworICAgIFN0cmluZyB2YWx1ZSA9IHNldHRpbmcuc3Vic3RyaW5nKGVxdWFsT2Zmc2V0
ICsgMSwgc2V0dGluZy5sZW5ndGgoKSAtIDEpOworCisgICAgcGFyc2VTZXR0aW5nVmFsdWUobmFt
ZSwgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaAppbmRleCAzZjNkNDNlZjE5YzM5NzE1NzU2Y2M4
ZDdmNzM1NDE4MTQ0MGIyNmQwLi4wMWI2NGNlNGRkODQ5MDViNWJmYjY5ZjNkMTNiNzNiYWViMjcz
NTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmgKQEAg
LTk0LDYgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFNjcm9sbAogICAgIH07CiAKKyAgICBS
ZWdpb25TZXR0aW5nIGdldFNldHRpbmdGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAg
dm9pZCBwYXJzZVNldHRpbmdWYWx1ZShSZWdpb25TZXR0aW5nLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHBhcnNlU2V0dGluZyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOworCiAgICAgU3Ry
aW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fc2V0dGluZ3M7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svV2ViVlRUUGFyc2VyLmNwcAppbmRleCBkMzgzYTg0YWQyNjZkMDUyZjRhZGNhNGEyMTRj
ZDE2Y2I1ZjEyYTdkLi45YzM1ZDIxYTVlMTk5NmMxNzI2NTdjYTc0ZGRiYTYyODAyYTc4MDM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC02Niw2ICs2
Niw1NiBAQCBTdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmIGlu
cHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCiAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwog
fQogCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorZmxvYXQgV2ViVlRUUGFyc2VyOjpwYXJz
ZUZsb2F0UGVyY2VudGFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIGlzVmFsaWRT
ZXR0aW5nKQoreworICAgIC8vICclJyBtdXN0IGJlIHByZXNlbnQgYW5kIGF0IHRoZSBlbmQgb2Yg
dGhlIHNldHRpbmcgdmFsdWUuCisgICAgaWYgKHZhbHVlLmZpbmQoJyUnLCAxKSAhPSB2YWx1ZS5s
ZW5ndGgoKSAtIDEpIHsKKyAgICAgICAgaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworCisgICAgU3Ry
aW5nQnVpbGRlciBmbG9hdE51bWJlckFzU3RyaW5nOworICAgIGZsb2F0TnVtYmVyQXNTdHJpbmcu
YXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyh2YWx1ZSwgJnBvc2l0aW9uKSk7CisK
KyAgICBpZiAodmFsdWVbcG9zaXRpb25dID09ICcuJykgeworICAgICAgICBmbG9hdE51bWJlckFz
U3RyaW5nLmFwcGVuZCgiLiIpOworICAgICAgICBwb3NpdGlvbisrOworCisgICAgICAgIGZsb2F0
TnVtYmVyQXNTdHJpbmcuYXBwZW5kKFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0cyh2YWx1ZSwg
JnBvc2l0aW9uKSk7CisgICAgfQorICAgIGZsb2F0IG51bWJlciA9IGZsb2F0TnVtYmVyQXNTdHJp
bmcudG9TdHJpbmcoKS50b0Zsb2F0KCZpc1ZhbGlkU2V0dGluZyk7CisKKyAgICBpZiAoaXNWYWxp
ZFNldHRpbmcgJiYgKG51bWJlciA8PSAwIHx8IG51bWJlciA+PSAxMDApKQorICAgICAgICBpc1Zh
bGlkU2V0dGluZyA9IGZhbHNlOworCisgICAgcmV0dXJuIG51bWJlcjsKK30KKworRmxvYXRQb2lu
dCBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGNoYXIgZGVsaW1pdGVyLCBib29sJiBpc1ZhbGlkU2V0dGluZykKK3sKKyAgICAv
LyBUaGUgZGVsaW1pdGVyIGNhbid0IGJlIHRoZSBmaXJzdCBvciBzZWNvbmQgdmFsdWUgYmVjYXVz
ZSBhIHBhaXIgb2YKKyAgICAvLyBwZXJjZW50YWdlcyAoeCUseSUpIGltcGxpZXMgdGhhdCBhdCBs
ZWFzdCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMKKyAgICAvLyBhcmUgdGhlIGZpcnN0IHBlcmNl
bnRhZ2UgdmFsdWUuCisgICAgc2l6ZV90IGRlbGltaXRlck9mZnNldCA9IHZhbHVlLmZpbmQoZGVs
aW1pdGVyLCAyKTsKKyAgICBpZiAoZGVsaW1pdGVyT2Zmc2V0ID09IG5vdEZvdW5kIHx8IGRlbGlt
aXRlck9mZnNldCA9PSB2YWx1ZS5sZW5ndGgoKSAtIDEpIHsKKyAgICAgICAgaXNWYWxpZFNldHRp
bmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoMCwgMCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0ZpcnN0VmFsdWVWYWxpZDsKKyAgICBmbG9hdCBmaXJzdENvb3JkID0gcGFyc2VG
bG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZS5zdWJzdHJpbmcoMCwgZGVsaW1pdGVyT2Zmc2V0KSwg
aXNGaXJzdFZhbHVlVmFsaWQpOworCisgICAgYm9vbCBpc1NlY29uZFZhbHVlVmFsaWQ7CisgICAg
ZmxvYXQgc2Vjb25kQ29vcmQgPSBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKHZhbHVlLnN1YnN0
cmluZyhkZWxpbWl0ZXJPZmZzZXQgKyAxLCB2YWx1ZS5sZW5ndGgoKSAtIDEpLCBpc1NlY29uZFZh
bHVlVmFsaWQpOworCisgICAgaXNWYWxpZFNldHRpbmcgPSBpc0ZpcnN0VmFsdWVWYWxpZCAmJiBp
c1NlY29uZFZhbHVlVmFsaWQ7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoZmlyc3RDb29yZCwgc2Vj
b25kQ29vcmQpOworfQorI2VuZGlmCisKIFdlYlZUVFBhcnNlcjo6V2ViVlRUUGFyc2VyKFdlYlZU
VFBhcnNlckNsaWVudCogY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3N0YXRlKElu
aXRpYWwpCkBAIC04Miw2ICsxMzIsMTQgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OmdldE5ld0N1ZXMo
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG91dHB1dEN1ZXMpCiAgICAgbV9jdWVsaXN0
LmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCit2b2lkIFdlYlZUVFBh
cnNlcjo6Z2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gPiYgb3V0
cHV0UmVnaW9ucykKK3sKKyAgICBvdXRwdXRSZWdpb25zID0gbV9yZWdpb25MaXN0OworICAgIG1f
cmVnaW9uTGlzdC5jbGVhcigpOworfQorI2VuZGlmCisKIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJz
ZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyA0Ljgu
MTAuMTMuMyBXSEFUV0cgV2ViVlRUIFBhcnNlciBhbGdvcml0aG0uCkBAIC05MCw3ICsxNDgsNyBA
QCB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCiAKICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKICAgICAgICAgU3Ry
aW5nIGxpbmUgPSBjb2xsZWN0TmV4dExpbmUoZGF0YSwgbGVuZ3RoLCAmcG9zaXRpb24pOwotICAg
ICAgICAKKwogICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAgICAgICAgY2FzZSBJbml0aWFs
OgogICAgICAgICAgICAgLy8gQnVmZmVyIHVwIGF0IGxlYXN0IDkgYnl0ZXMgYmVmb3JlIHByb2Nl
ZWRpbmcgd2l0aCBjaGVja2luZyBmb3IgdGhlIGZpbGUgaWRlbnRpZmllci4KQEAgLTEwOCwyOCAr
MTY2LDQyIEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgICAgIG1fc3RhdGUgPSBIZWFkZXI7CiAgICAgICAg
ICAgICBtX2lkZW50aWZpZXJEYXRhLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgCisKICAgICAgICAgY2FzZSBIZWFkZXI6CiAgICAgICAgICAgICAvLyAxMy0xOCAtIEFsbG93
IGEgaGVhZGVyIChjb21tZW50IGFyZWEpIHVuZGVyIHRoZSBXRUJWVFQgbGluZS4KKyNpZiBFTkFC
TEUoV0VCVlRUX1JFR0lPTlMpCisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgbV9yZWdpb25MaXN0LnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPm5ld1JlZ2lvbnNQYXJzZWQoKTsKKworICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBJZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbGxlY3RIZWFkZXIobGluZSk7CisKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgTWV0YWRhdGE6CisjZW5kaWYKICAgICAgICAgICAgIGlmIChsaW5l
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSWQ7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgCisKICAgICAgICAgY2FzZSBJZDoKICAgICAgICAgICAgIC8vIDE5LTI5
IC0gQWxsb3cgYW55IG51bWJlciBvZiBsaW5lIHRlcm1pbmF0b3JzLCB0aGVuIGluaXRpYWxpemUg
bmV3IGN1ZSB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXNldEN1ZVZhbHVlcygpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhpcyBsaW5lIGNvbnRhaW5z
IGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCiAgICAgICAgICAgICBtX3N0
YXRlID0gY29sbGVjdEN1ZUlkKGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAor
CiAgICAgICAgIGNhc2UgVGltaW5nc0FuZFNldHRpbmdzOgogICAgICAgICAgICAgLy8gNDAgLSBD
b2xsZWN0IGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KICAgICAgICAgICAgIG1fc3RhdGUgPSBj
b2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAorCiAgICAgICAgIGNhc2UgQ3VlVGV4dDoKICAgICAgICAgICAgIC8vIDQxLTUzIC0gQ29s
bGVjdCB0aGUgY3VlIHRleHQsIGNyZWF0ZSBhIGN1ZSwgYW5kIGFkZCBpdCB0byB0aGUgb3V0cHV0
LgogICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RDdWVUZXh0KGxpbmUsIGxlbmd0aCwgcG9z
aXRpb24pOwpAQCAtMTYzLDYgKzIzNSwzMCBAQCBib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWly
ZWRGaWxlSWRlbnRpZmllcigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoV0VC
VlRUX1JFR0lPTlMpCit2b2lkIFdlYlZUVFBhcnNlcjo6Y29sbGVjdEhlYWRlcihjb25zdCBTdHJp
bmcmIGxpbmUpCit7CisgICAgLy8gNC4xIEV4dGVuc2lvbiBvZiBXZWJWVFQgaGVhZGVyIHBhcnNp
bmcgKDExIC0gMTUpCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IHJlZ2lvbkhlYWRlck5hbWUsICgiUmVnaW9uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpOworCisgICAgLy8gMTUuNCBJZiBsaW5lIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIg
IjoiIChBIFUrMDAzQSBDT0xPTiksIHRoZW4gc2V0IG1ldGFkYXRhJ3MKKyAgICAvLyBuYW1lIHRv
IHRoZSBzdWJzdHJpbmcgb2YgbGluZSBiZWZvcmUgdGhlIGZpcnN0ICI6IiBjaGFyYWN0ZXIgYW5k
CisgICAgLy8gbWV0YWRhdGEncyB2YWx1ZSB0byB0aGUgc3Vic3RyaW5nIGFmdGVyIHRoaXMgY2hh
cmFjdGVyLgorICAgIGlmICghbGluZS5jb250YWlucygiOiIpKQorICAgICAgICByZXR1cm47CisK
KyAgICB1bnNpZ25lZCBjb2xvblBvc2l0aW9uID0gbGluZS5maW5kKCI6Iik7CisgICAgbV9jdXJy
ZW50SGVhZGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNvbG9uUG9zaXRpb24pOworCisgICAg
Ly8gMTUuNSBJZiBtZXRhZGF0YSdzIG5hbWUgZXF1YWxzICJSZWdpb24iOgorICAgIGlmIChtX2N1
cnJlbnRIZWFkZXJOYW1lID09IHJlZ2lvbkhlYWRlck5hbWUpIHsKKyAgICAgICAgbV9jdXJyZW50
SGVhZGVyVmFsdWUgPSBsaW5lLnN1YnN0cmluZyhjb2xvblBvc2l0aW9uICsgMSwgbGluZS5sZW5n
dGgoKSAtIDEpOworICAgICAgICAvLyAxNS41LjEgLSAxNS41LjggUmVnaW9uIGNyZWF0aW9uOiBM
ZXQgcmVnaW9uIGJlIGEgbmV3IHRleHQgdHJhY2sgcmVnaW9uIFsuLi5dCisgICAgICAgIGNyZWF0
ZU5ld1JlZ2lvbigpOworICAgIH0KK30KKyNlbmRpZgorCiBXZWJWVFRQYXJzZXI6OlBhcnNlU3Rh
dGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0Q3VlSWQoY29uc3QgU3RyaW5nJiBsaW5lKQogewogICAg
IGlmIChsaW5lLmNvbnRhaW5zKCItLT4iKSkKQEAgLTI4Miw2ICszNzgsMjcgQEAgdm9pZCBXZWJW
VFRQYXJzZXI6OnJlc2V0Q3VlVmFsdWVzKCkKICAgICBtX2N1cnJlbnRDb250ZW50LmNsZWFyKCk7
CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCit2b2lkIFdlYlZUVFBhcnNlcjo6Y3Jl
YXRlTmV3UmVnaW9uKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudEhlYWRlclZhbHVlLmxlbmd0aCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiByZWdpb24g
PSBUZXh0VHJhY2tSZWdpb246OmNyZWF0ZSgpOworICAgIHJlZ2lvbi0+c2V0UmVnaW9uU2V0dGlu
Z3MobV9jdXJyZW50SGVhZGVyVmFsdWUpOworCisgICAgLy8gMTUuNS4xMCBJZiB0aGUgdGV4dCB0
cmFjayBsaXN0IG9mIHJlZ2lvbnMgcmVnaW9ucyBjb250YWlucyBhIHJlZ2lvbgorICAgIC8vIHdp
dGggdGhlIHNhbWUgcmVnaW9uIGlkZW50aWZpZXIgdmFsdWUgYXMgcmVnaW9uLCByZW1vdmUgdGhh
dCByZWdpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlZ2lvbkxpc3Quc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChtX3JlZ2lvbkxpc3RbaV0tPmlkKCkgPT0gcmVnaW9uLT5pZCgp
KSB7CisgICAgICAgICAgICBtX3JlZ2lvbkxpc3QucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIG1fcmVnaW9uTGlzdC5hcHBlbmQocmVnaW9uKTsKK30KKyNl
bmRpZgorCiBkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmlu
ZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQogewogICAgIC8vIDQuOC4xMC4xMy4zIENvbGxl
Y3QgYSBXZWJWVFQgdGltZXN0YW1wLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFy
c2VyLmgKaW5kZXggYzUwYzMwNjQyODM4ZmFiMjExNGFmMjFhMzg2YTQzYjk0NWQ4ZGIxNS4uZTIz
YzVhOTJlMjk3OTQ0MDhmNWY2ZWI4ZmQxMTQ2Y2YzZjUxYmZkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRU
cmFja0N1ZS5oIgorI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbi5oIgogI2luY2x1ZGUgIldlYlZU
VFRva2VuaXplci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNDksMTYgKzUwLDI5IEBAIGNsYXNzIERvY3VtZW50
OwogY2xhc3MgV2ViVlRUUGFyc2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJW
VFRQYXJzZXJDbGllbnQoKSB7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzUGFy
c2VkKCkgPSAwOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQg
bmV3UmVnaW9uc1BhcnNlZCgpID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmaWxlRmFp
bGVkVG9QYXJzZSgpID0gMDsKIH07CiAKIGNsYXNzIFdlYlZUVFBhcnNlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+V2ViVlRUUGFyc2VyKCkgeyB9Ci0gICAgCi0gICAgZW51bSBQYXJzZVN0YXRl
IHsgSW5pdGlhbCwgSGVhZGVyLCBJZCwgVGltaW5nc0FuZFNldHRpbmdzLCBDdWVUZXh0LCBCYWRD
dWUgfTsKKworICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAg
IEhlYWRlciwKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgICAgIE1ldGFkYXRhLAor
I2VuZGlmCisgICAgICAgIElkLAorICAgICAgICBUaW1pbmdzQW5kU2V0dGluZ3MsCisgICAgICAg
IEN1ZVRleHQsCisgICAgICAgIEJhZEN1ZQorICAgIH07CiAKICAgICBzdGF0aWMgUGFzc093blB0
cjxXZWJWVFRQYXJzZXI+IGNyZWF0ZShXZWJWVFRQYXJzZXJDbGllbnQqIGNsaWVudCwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7CkBAIC04OCwxOCArMTAyLDI3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RXb3JkKGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkKik7CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgLy8gVXNlZnVsIGZ1
bmN0aW9ucyBmb3IgcGFyc2luZyBwZXJjZW50YWdlIHNldHRpbmdzLgorICAgIHN0YXRpYyBmbG9h
dCBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wmKTsKKyAgICBz
dGF0aWMgRmxvYXRQb2ludCBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcihjb25zdCBTdHJp
bmcmLCBjaGFyLCBib29sJik7CisjZW5kaWYKKwogICAgIC8vIElucHV0IGRhdGEgdG8gdGhlIHBh
cnNlciB0byBwYXJzZS4KICAgICB2b2lkIHBhcnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoKTsKIAogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgbGFzdCBwYXJz
ZWQgY3VlcyB0byBjYWxsZXIuCiAgICAgdm9pZCBnZXROZXdDdWVzKFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrQ3VlPiA+Jik7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZvaWQgZ2V0
TmV3UmVnaW9ucyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gPiYpOworI2VuZGlmCiAK
ICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRG
cm9tQ3VlVGV4dChjb25zdCBTdHJpbmcmKTsKICAgICBkb3VibGUgY29sbGVjdFRpbWVTdGFtcChj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViVlRUUGFyc2Vy
KFdlYlZUVFBhcnNlckNsaWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICAKKwog
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAg
ICBQYXJzZVN0YXRlIG1fc3RhdGU7CiAKQEAgLTExMywxMiArMTM2LDIwIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjcmVhdGVOZXdDdWUoKTsKICAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CiAKKyNp
ZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgdm9pZCBjb2xsZWN0SGVhZGVyKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgY3JlYXRlTmV3UmVnaW9uKCk7CisjZW5kaWYKKwogICAgIHZvaWQg
c2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKICAgICBzdGF0aWMgdm9p
ZCBza2lwTGluZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCopOwogICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdE5leHRMaW5lKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKLSAgICAKKwogICAgIHZvaWQgY29u
c3RydWN0VHJlZUZyb21Ub2tlbihEb2N1bWVudCopOwogCisgICAgU3RyaW5nIG1fY3VycmVudEhl
YWRlck5hbWU7CisgICAgU3RyaW5nIG1fY3VycmVudEhlYWRlclZhbHVlOworCiAgICAgVmVjdG9y
PGNoYXI+IG1faWRlbnRpZmllckRhdGE7CiAgICAgU3RyaW5nIG1fY3VycmVudElkOwogICAgIGRv
dWJsZSBtX2N1cnJlbnRTdGFydFRpbWU7CkBAIC0xMzUsNiArMTY2LDEwIEBAIHByaXZhdGU6CiAK
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBtX2xhbmd1YWdlU3RhY2s7CiAgICAgVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+ID4gbV9jdWVsaXN0OworCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJ
T05TKQorICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+IG1fcmVnaW9uTGlzdDsK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAppbmRleCAwMGExZDhmZTY3NGZjNjQxZTE2M2YyZDNmYTAz
ZGZlNWJlOTI2MmUxLi5iNDU3MDIyZTI3YjBhOWMyODMyNzY3OTI1YWRiMTdjZmM3MzIwZTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcApAQCAtMTg4LDYgKzE4
OCwxMyBAQCB2b2lkIFRleHRUcmFja0xvYWRlcjo6bmV3Q3Vlc1BhcnNlZCgpCiAgICAgbV9jdWVM
b2FkVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05T
KQordm9pZCBUZXh0VHJhY2tMb2FkZXI6Om5ld1JlZ2lvbnNQYXJzZWQoKQoreworICAgIG1fY2xp
ZW50LT5uZXdSZWdpb25zQXZhaWxhYmxlKHRoaXMpOyAKK30KKyNlbmRpZgorCiB2b2lkIFRleHRU
cmFja0xvYWRlcjo6ZmlsZUZhaWxlZFRvUGFyc2UoKQogewogICAgIExPRyhNZWRpYSwgIlRleHRU
cmFja0xvYWRlcjo6ZmlsZUZhaWxlZFRvUGFyc2UiKTsKQEAgLTIwNyw2ICsyMTQsMTQgQEAgdm9p
ZCBUZXh0VHJhY2tMb2FkZXI6OmdldE5ld0N1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+
ID4mIG91dHB1dEN1ZXMpCiAgICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdDdWVzKG91dHB1dEN1
ZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQordm9pZCBUZXh0VHJhY2tMb2Fk
ZXI6OmdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4mIG91dHB1
dFJlZ2lvbnMpCit7CisgICAgQVNTRVJUKG1fY3VlUGFyc2VyKTsKKyAgICBpZiAobV9jdWVQYXJz
ZXIpCisgICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdSZWdpb25zKG91dHB1dFJlZ2lvbnMpOwor
fQorI2VuZGlmCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1RleHRUcmFja0xvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRl
ci5oCmluZGV4IGU3NzAzYWM3YjhlY2RmZjFkYTMwODYxMGU3ZTgwYzNmZWMzYzc0ZmIuLmE1YWQw
M2YwNTA1NmEzMjA3Njk3NWQ3NjdiNWU0OTk4NWM2YWYyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmgKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBuZXdDdWVzQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY3VlTG9hZGluZ1N0YXJ0ZWQoVGV4dFRyYWNrTG9hZGVyKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjdWVMb2FkaW5nQ29tcGxldGVkKFRleHRUcmFja0xvYWRlciosIGJvb2wgbG9h
ZGluZ0ZhaWxlZCkgPSAwOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2aXJ0dWFs
IHZvaWQgbmV3UmVnaW9uc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqKSA9IDA7CisjZW5kaWYK
IH07CiAKIGNsYXNzIFRleHRUcmFja0xvYWRlciA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVu
dCwgcHJpdmF0ZSBXZWJWVFRQYXJzZXJDbGllbnQgewpAQCAtNjQsNyArNjcsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBsb2FkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNyb3NzT3JpZ2luTW9k
ZSk7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAgICAgdm9pZCBnZXROZXdDdWVzKFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKTsKLSAgICAKKyNpZiBFTkFCTEUoV0VC
VlRUX1JFR0lPTlMpCisgICAgdm9pZCBnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRy
YWNrUmVnaW9uPiA+JiBvdXRwdXRSZWdpb25zKTsKKyNlbmRpZgogcHJpdmF0ZToKIAogICAgIC8v
IENhY2hlZFJlc291cmNlQ2xpZW50CkBAIC03Myw2ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgLy8gV2ViVlRUUGFyc2VyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNQYXJzZWQo
KTsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgdmlydHVhbCB2b2lkIG5ld1JlZ2lv
bnNQYXJzZWQoKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmaWxlRmFpbGVkVG9QYXJzZSgp
OwogICAgIAogICAgIFRleHRUcmFja0xvYWRlcihUZXh0VHJhY2tMb2FkZXJDbGllbnQqLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjQ3MDdiYTFlMTBhYzE2MzcxYTA0ZjhhOWM3
NzczNmE4MTMzNGJjMS4uN2E0ZDc1MTVmZWRkMmVlZGJiOTcwMzdiODdhMjUxM2YwMDA0OGU4MCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA0LTAxICBWaWN0b3IgQ2FyYnVuZSAgPHZjYXJi
dW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdlYlZUVCBSZWdpb24gSGVhZGVy
IE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIG1lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9oZWFkZXItcmVnaW9ucy52dHQ6IEFkZGVk
LgorICAgICAgICAqIG1lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9u
LXBhcnNlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3RyYWNrL3JlZ2lv
bnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci5odG1sOiBBZGRlZC4KKwogMjAxMy0w
My0zMCAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcm9zcy1P
cmlnaW4gY29weSZwYXN0ZSAvIGRyYWcmZHJvcCBhbGxvd2luZyBYU1MgdmlhIHNyY2RvYyBhdHRy
aWJ1dGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2
dHQvaGVhZGVyLXJlZ2lvbnMudnR0IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMt
d2VidnR0L2hlYWRlci1yZWdpb25zLnZ0dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OWY3MzcxMmQ4Mzc2YjUwNDgz
YTVjZGM1NGQxY2E4YjE1YTE5ZTUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2hlYWRlci1yZWdpb25zLnZ0dApAQCAtMCwwICsxLDEy
IEBACitXRUJWVFQgRklMRQorUmVnaW9uOiBpZD1yZWdpb25fd2l0aG91dF9zZXR0aW5ncworUmVn
aW9uOiBpZD1yZWdpb25fd2l0aF9hbGxfc2V0dGluZ3Mgd2lkdGg9MzIlIGhlaWdodD01IHJlZ2lv
bmFuY2hvcj00MSUsMjAlIHZpZXdwb3J0YW5jaG9yPTMxJSw4NCUgc2Nyb2xsPXVwCitSZWdpb246
IGlkPXJlZ2lvbl9mbG9hdGluZ19wb2ludF9hbmNob3IgcmVnaW9uYW5jaG9yPTQxLjEzMyUsMjAu
NDIlIHZpZXdwb3J0YW5jaG9yPTMyLjMzJSwzMi40NCUKK1JlZ2lvbjogaWQ9bm90X3VuaXF1ZV9p
ZCB3aWR0aD00MiUKK1JlZ2lvbjogaWQ9bm90X3VuaXF1ZV9pZCB3aWR0aD02NyUKK1JlZ2lvbjog
aW52YWxpZF9zZXR0aW5ncyB2YWx1ZXMgYnV0IHJlZ2lvbiBzdGlsbCBjcmVhdGVkCis6IEludmFs
aWQgSGVhZGVyCisKKzEKKzAwOjAwOjAwLjAwMCAtLT4gMDA6MDA6MDIuNTAwCitXZSBhcmUgaW4g
TmV3IFlvcmsgQ2l0eQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svcmVnaW9u
cy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL21lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcwZjQzMWFhYjY5MjFkM2VjZDBkMmFmY2IwYWRlZTY5
YjkyM2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3JlZ2lv
bnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyOCBAQAorVGVzdHMgcHJvcGVyIHBhcnNpbmcgb2YgdmFyaW91cyByZWdpb25zIHByZXNlbnQg
aW4gV2ViVlRUIGhlYWRlciBhcmVhLgorCitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrc1swXS5y
ZWdpb25zLmxlbmd0aCA9PSAnNScpIE9LCisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJ3JlZ2lv
bl93aXRob3V0X3NldHRpbmdzJykgT0sKKworRVhQRUNURUQgKHJlZ2lvbi5pZCA9PSAncmVnaW9u
X3dpdGhfYWxsX3NldHRpbmdzJykgT0sKK0VYUEVDVEVEIChyZWdpb24ud2lkdGggPT0gJzMyJykg
T0sKK0VYUEVDVEVEIChyZWdpb24uaGVpZ2h0ID09ICc1JykgT0sKK0VYUEVDVEVEIChyZWdpb24u
cmVnaW9uQW5jaG9yWCA9PSAnNDEnKSBPSworRVhQRUNURUQgKHJlZ2lvbi5yZWdpb25BbmNob3JZ
ID09ICcyMCcpIE9LCitFWFBFQ1RFRCAocmVnaW9uLnZpZXdwb3J0QW5jaG9yWCA9PSAnMzEnKSBP
SworRVhQRUNURUQgKHJlZ2lvbi52aWV3cG9ydEFuY2hvclkgPT0gJzg0JykgT0sKK0VYUEVDVEVE
IChyZWdpb24uc2Nyb2xsID09ICd1cCcpIE9LCisKK0VYUEVDVEVEIChyZWdpb24uaWQgPT0gJ3Jl
Z2lvbl9mbG9hdGluZ19wb2ludF9hbmNob3InKSBPSworRVhQRUNURUQgKE1hdGgucm91bmQocmVn
aW9uLnJlZ2lvbkFuY2hvclggKiAxMDAwKSA9PSAnNDExMzMnKSBPSworRVhQRUNURUQgKE1hdGgu
cm91bmQocmVnaW9uLnJlZ2lvbkFuY2hvclkgKiAxMDAwKSA9PSAnMjA0MjAnKSBPSworRVhQRUNU
RUQgKE1hdGgucm91bmQocmVnaW9uLnZpZXdwb3J0QW5jaG9yWCAqIDEwMDApID09ICczMjMzMCcp
IE9LCitFWFBFQ1RFRCAoTWF0aC5yb3VuZChyZWdpb24udmlld3BvcnRBbmNob3JZICogMTAwMCkg
PT0gJzMyNDQwJykgT0sKKworRVhQRUNURUQgKHJlZ2lvbi5pZCA9PSAnbm90X3VuaXF1ZV9pZCcp
IE9LCitFWFBFQ1RFRCAocmVnaW9uLndpZHRoID09ICc2NycpIE9LCisKK0VYUEVDVEVEIChyZWdp
b24uaWQgPT0gJycpIE9LCisKK0VORCBPRiBURVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L21lZGlhL3RyYWNrL3JlZ2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci5odG1s
IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdp
b24tcGFyc2VyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA3YTQyMjcxNGMzM2RmZWI0ZjZjYzYwMDc2Yzk3
ZWI1NTYwNjY0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3Jl
Z2lvbnMtd2VidnR0L3RleHQtdHJhY2stcmVnaW9uLXBhcnNlci5odG1sCkBAIC0wLDAgKzEsNjYg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
IiAvPgorCisgICAgICAgIDxzY3JpcHQgc3JjPS4uLy4uL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+
CisgICAgICAgIDxzY3JpcHQgc3JjPS4uLy4uL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAg
ICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciByZWdpb247CisKKyAgICAgICAgZnVuY3Rpb24gc3Rh
cnRUZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF3aW5kb3cuVGV4dFRyYWNrUmVn
aW9uKSB7CisgICAgICAgICAgICAgICAgZmFpbFRlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8udGV4dFRyYWNrc1swXS5yZWdpb25zLmxlbmd0
aCIsIDUpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcmVn
aW9uID0gdmlkZW8udGV4dFRyYWNrc1swXS5yZWdpb25zWzBdOworICAgICAgICAgICAgdGVzdEV4
cGVjdGVkKCJyZWdpb24uaWQiLCAicmVnaW9uX3dpdGhvdXRfc2V0dGluZ3MiKTsKKworICAgICAg
ICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJlZ2lvbiA9IHZpZGVvLnRleHRU
cmFja3NbMF0ucmVnaW9uc1sxXTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLmlk
IiwgInJlZ2lvbl93aXRoX2FsbF9zZXR0aW5ncyIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJyZWdpb24ud2lkdGgiLCAzMik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5o
ZWlnaHQiLCA1KTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLnJlZ2lvbkFuY2hv
clgiLCA0MSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5yZWdpb25BbmNob3JZ
IiwgMjApOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24udmlld3BvcnRBbmNob3JY
IiwgMzEpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24udmlld3BvcnRBbmNob3JZ
IiwgODQpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24uc2Nyb2xsIiwgInVwIik7
CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICByZWdpb24gPSB2
aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnNbMl07CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InJlZ2lvbi5pZCIsICJyZWdpb25fZmxvYXRpbmdfcG9pbnRfYW5jaG9yIik7CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoIk1hdGgucm91bmQocmVnaW9uLnJlZ2lvbkFuY2hvclggKiAxMDAwKSIs
IDQxMTMzKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiTWF0aC5yb3VuZChyZWdpb24ucmVn
aW9uQW5jaG9yWSAqIDEwMDApIiwgMjA0MjApOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJN
YXRoLnJvdW5kKHJlZ2lvbi52aWV3cG9ydEFuY2hvclggKiAxMDAwKSIsIDMyMzMwKTsKKyAgICAg
ICAgICAgIHRlc3RFeHBlY3RlZCgiTWF0aC5yb3VuZChyZWdpb24udmlld3BvcnRBbmNob3JZICog
MTAwMCkiLCAzMjQ0MCk7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAg
ICAgICByZWdpb24gPSB2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnNbM107CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5pZCIsICJub3RfdW5pcXVlX2lkIik7CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi53aWR0aCIsIDY3KTsKKworICAgICAgICAgICAgY29uc29s
ZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJlZ2lvbiA9IHZpZGVvLnRleHRUcmFja3NbMF0ucmVn
aW9uc1s0XTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLmlkIiwgIiIpOworCisg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgZW5kVGVzdCgpOworICAg
ICAgICB9CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAg
ICAgICA8cD5UZXN0cyBwcm9wZXIgcGFyc2luZyBvZiB2YXJpb3VzIHJlZ2lvbnMgcHJlc2VudCBp
biBXZWJWVFQgaGVhZGVyIGFyZWEuPC9wPgorICAgICAgICA8dmlkZW8gY29udHJvbHM+CisgICAg
ICAgICAgICA8dHJhY2sgc3JjPSIuLi9jYXB0aW9ucy13ZWJ2dHQvaGVhZGVyLXJlZ2lvbnMudnR0
IiBraW5kPSJjYXB0aW9ucyIgZGVmYXVsdCBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKyAgICAgICAg
PC92aWRlbz4KKworICAgIDwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195953</attachid>
            <date>2013-04-01 04:17:28 -0700</date>
            <delta_ts>2013-04-01 08:23:02 -0700</delta_ts>
            <desc>Proper guards</desc>
            <filename>bug-109818-20130401141720.patch</filename>
            <type>text/plain</type>
            <size>29504</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3Mjg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU5ZjMwN2Y5MDlhZTlh
NTY2NDJjMGQzZGZkNWI3NTMyYzJkNDI3Yi4uMzUxMDQxMDQ3NzVjZDQyYTIzYzFlMjZjZDc4OTg3
N2EzNjQxOWYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTA0LTAxICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBQYXJzaW5nIFdl
YlZUVCBSZWdpb24gSGVhZGVyIE1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgcmVhZGluZyByZWdpb25zIGZy
b20gdGhlIG1ldGFkYXRhIHNlY3Rpb24gb2YKKyAgICAgICAgYSBXZWJWVFQgZmlsZS4gVGhlIHdv
cmsgZm9yIGRlZmluaW5nIGdlbmVyaWMgbWV0YWRhdGEgd2l0aGluIHRoZQorICAgICAgICBXZWJW
VFQgZmlsZSBoZWFkZXIgaXMgc3RpbGwgd29yayBpbiBwcm9ncmVzcyBpbiB0aGUgVGV4dFRyYWNr
IENHLgorCisgICAgICAgIEFzIHByZXZpb3VzIHBhdGNoZXMsIGV2ZXJ5dGhpbmcgaXMgZ3VhcmRl
ZCBieSBXRUJWVFRfUkVHSU9OUyBhbmQKKyAgICAgICAgaXMgYnkgZGVmYXVsdCBkaXNhYmxlZCBp
biBhbGwgcG9ydHMuCisKKyAgICAgICAgVGVzdDogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQv
dGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9h
ZGFibGVUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVnaW9uc0F2YWlsYWJsZSk6IEFkZGVkIG1ldGhvZAor
ICAgICAgICB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyByZWdpb25zIGhhdmUgZmluaXNoZWQgcGFy
c2luZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmg6CisgICAgICAg
IChMb2FkYWJsZVRleHRUcmFjayk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDog
Q2hhbmdlZCB0aGUgYWNjZXNzIG1vZGlmaWVycy4KKyAgICAgICAgKFRleHRUcmFjayk6CisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrUmVnaW9uOjpzZXRSZWdpb25TZXR0aW5ncyk6IEVudHJ5IHBvaW50IGZvcgorICAg
ICAgICBwYXJzaW5nIHRoZSByZWdpb24gc2V0dGluZ3MgZnJvbSBhIHN0cmluZy4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpnZXRTZXR0aW5n
RnJvbVN0cmluZyk6IE1hcHMgYSBzdHJpbmcKKyAgICAgICAgdG8gYSBSZWdpb25TZXR0aW5nIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1
ZSk6IFBhcnNlcyB0aGUgdmFsdWUKKyAgICAgICAgb2YgYSBzcGVjaWZpYyBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmcpOiBQYXJzZXMgYSBz
ZXR0aW5nIHN0cmluZy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oOgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZh
bHVlKTogSGVscGVyIG1ldGhvZAorICAgICAgICB0byBwYXJzZSBhIGZsb2F0IHBlcmNlbnRhZ2Ug
dmFsdWUgKGUuZy4gIjUwLjElIikKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFy
c2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIpOiBIZWxwZXIgbWV0aG9kCisgICAgICAgIHRvIHBh
cnNlIGEgZmxvYXQgcGVyY2VudGFnZSB2YWx1ZSBwYWlyIChlLmcuICI1MC4xJSwgMzAuNSUiKQor
ICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpnZXROZXdSZWdpb25zKTogUmV0cmlldmVz
IHRoZSBuZXcgcmVnaW9ucworICAgICAgICBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKTogR2VuZXJpYyBmdW5jdGlvbiB0byBjb2xs
ZWN0CisgICAgICAgIGhlYWRlciBpbiB0aGUgbWV0YWRhdGEgcmVnaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24pOiBDcmVhdGVzIG5ldyByZWdpb24g
dXNpbmcKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1ldGFkYXRhIGhlYWRlciBuYW1lIGFuZCB2YWx1
ZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAoV2ViVlRU
UGFyc2VyQ2xpZW50KToKKyAgICAgICAgKFdlYlZUVFBhcnNlcik6CisgICAgICAgICogbG9hZGVy
L1RleHRUcmFja0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6bmV3UmVnaW9uc1BhcnNlZCk6IENhbGxlZCB3aGVuIHRoZQor
ICAgICAgICByZWdpb25zIGhhdmUgYmVlbiBzdWNjZXNmdWxseSBwYXJzZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tMb2FkZXI6OmdldE5ld1JlZ2lvbnMpOiBHZXRzIHRoZSBuZXcgcmVn
aW9ucy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6CisgICAgICAgIChUZXh0
VHJhY2tMb2FkZXJDbGllbnQpOiBBZGRlZCBtZXRob2RzIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1l
bnRlZC4KKyAgICAgICAgKFRleHRUcmFja0xvYWRlcik6CisKIDIwMTMtMDMtMzAgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGluY2x1ZGUg
b2YgUmVndWxhckV4cHJlc3Npb24uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xv
YWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCBiMWU4ODJmZDQ3MDFkZmE3ZGY5ZjExOGQyMzYzMGQz
NDExM2FiNjJjLi4zZGZiOTc3ODRjNTgyMWFjOTlkOTc4ZWU0M2U1ZDc4NTRkNTE3NGM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlTGlzdC5o
IgorI2luY2x1ZGUgIlRleHRUcmFja1JlZ2lvbkxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xMjMsNiArMTI0LDIxIEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6OmN1ZUxvYWRp
bmdDb21wbGV0ZWQoVGV4dFRyYWNrTG9hZGVyKiBsb2FkZXIsIGJvb2wgbG9hZGluCiAgICAgbV90
cmFja0VsZW1lbnQtPmRpZENvbXBsZXRlTG9hZCh0aGlzLCBsb2FkaW5nRmFpbGVkID8gSFRNTFRy
YWNrRWxlbWVudDo6RmFpbHVyZSA6IEhUTUxUcmFja0VsZW1lbnQ6OlN1Y2Nlc3MpOwogfQogCisj
aWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQordm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVn
aW9uc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKGxvYWRlciwgbV9sb2FkZXIgPT0gbG9hZGVyKTsKKworICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrUmVnaW9uPiA+IG5ld1JlZ2lvbnM7CisgICAgbV9sb2FkZXItPmdldE5ld1JlZ2lvbnMo
bmV3UmVnaW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld1JlZ2lvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgbmV3UmVnaW9uc1tpXS0+c2V0VHJhY2sodGhpcyk7CisgICAg
ICAgIHJlZ2lvbkxpc3QoKS0+YWRkKG5ld1JlZ2lvbnNbaV0pOworICAgIH0KK30KKyNlbmRpZgor
CiBzaXplX3QgTG9hZGFibGVUZXh0VHJhY2s6OnRyYWNrRWxlbWVudEluZGV4KCkKIHsKICAgICBB
U1NFUlQobV90cmFja0VsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2Fk
YWJsZVRleHRUcmFjay5oCmluZGV4IGNkMmRkMWVjMGI1OTE5NWZjMjgyZmNjMGJkM2VlNmJhMzVm
YjdlZTIuLjMyNGViMzJkMDRiZGE5ZDQwMDlhYjU1YjhjOGEyYjM5ZDU5NGQyYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgKQEAgLTcwLDYgKzcw
LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc0F2YWlsYWJsZShUZXh0VHJh
Y2tMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ1N0YXJ0ZWQoVGV4dFRyYWNr
TG9hZGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdDb21wbGV0ZWQoVGV4dFRyYWNr
TG9hZGVyKiwgYm9vbCBsb2FkaW5nRmFpbGVkKTsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMp
CisgICAgdmlydHVhbCB2b2lkIG5ld1JlZ2lvbnNBdmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyKik7
CisjZW5kaWYKIAogICAgIExvYWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqLCBjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKaW5kZXggMzQzN2Zh
N2UxYWE2NzVlYTkyOTZhNjcyYWU4MWE1ZWJlNzFmYzE5My4uOTdhNjY1Y2E0YWVjZDNjZTE0NDA1
OGRjNmEwMDQ4MjljYzMzODE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmNwcApAQCAtMjgxLDYgKzI4MSwxMSBAQCB2b2lkIFRleHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRU
cmFja0N1ZSogY3VlLCBFeGNlcHRpb25Db2RlJiBlYykKIH0KIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykgJiYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorVGV4dFRyYWNrUmVnaW9uTGlzdCogVGV4
dFRyYWNrOjpyZWdpb25MaXN0KCkKK3sKKyAgICByZXR1cm4gZW5zdXJlVGV4dFRyYWNrUmVnaW9u
TGlzdCgpOworfQorCiBUZXh0VHJhY2tSZWdpb25MaXN0KiBUZXh0VHJhY2s6OmVuc3VyZVRleHRU
cmFja1JlZ2lvbkxpc3QoKQogewogICAgIGlmICghbV9yZWdpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrLmgKaW5kZXggYzFjMTExOWM5NzI4N2ZjM2MxZWYxNzQ5MGIzZmQ4MmJm
YWM1OGQ2Yy4uYzYwZDc4MjFmMGFmOTFlNTYyNjFjMTJiMDY1YjlmNDc1ZjAwMDMxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCkBAIC0xNTMsMTAgKzE1MywxNCBAQCBwdWJs
aWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFRleHRUcmFja0NsaWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsYWJlbCwgY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRyYWNrVHlw
ZSk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisg
ICAgVGV4dFRyYWNrUmVnaW9uTGlzdCogcmVnaW9uTGlzdCgpOworI2VuZGlmCiAKICAgICBSZWZQ
dHI8VGV4dFRyYWNrQ3VlTGlzdD4gbV9jdWVzOwogCiBwcml2YXRlOgorCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKSAmJiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCiAgICAgVGV4dFRyYWNrUmVnaW9u
TGlzdCogZW5zdXJlVGV4dFRyYWNrUmVnaW9uTGlzdCgpOwogICAgIFJlZlB0cjxUZXh0VHJhY2tS
ZWdpb25MaXN0PiBtX3JlZ2lvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja1JlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja1JlZ2lvbi5jcHAKaW5kZXggNmRiYzhjNzUzODNmZWNkMDA1ODQ5YzlmYzM5MTk4NDY3NDZj
YjRmMy4uZGUxYjVjYWIyZjAxNzMzZDllNzc1N2JlYzQxMmQ4YmExZWQwMWE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcApAQCAtMzUsNiArMzUs
MTAgQEAKICNpbmNsdWRlICJUZXh0VHJhY2tSZWdpb24uaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGVQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJW
VFRQYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xOTYsNyAr
MjAwLDExNSBAQCB2b2lkIFRleHRUcmFja1JlZ2lvbjo6dXBkYXRlUGFyYW1ldGVyc0Zyb21SZWdp
b24oVGV4dFRyYWNrUmVnaW9uKiByZWdpb24pCiAKIHZvaWQgVGV4dFRyYWNrUmVnaW9uOjpzZXRS
ZWdpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQogewotICAgIC8vIEZJWE1FKDEwOTgx
OCk6IFBhcnNlIHJlZ2lvbiBoZWFkZXIgbWV0YWRhdGEuCisgICAgbV9zZXR0aW5ncyA9IGlucHV0
OworICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKworICAgIHdoaWxlIChwb3NpdGlvbiA8IGlu
cHV0Lmxlbmd0aCgpKSB7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgp
ICYmIFdlYlZUVFBhcnNlcjo6aXNWYWxpZFNldHRpbmdEZWxpbWl0ZXIoaW5wdXRbcG9zaXRpb25d
KSkKKyAgICAgICAgICAgIHBvc2l0aW9uKys7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uID49IGlu
cHV0Lmxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcGFyc2VTZXR0aW5n
KGlucHV0LCAmcG9zaXRpb24pOworICAgIH0KK30KKworVGV4dFRyYWNrUmVnaW9uOjpSZWdpb25T
ZXR0aW5nIFRleHRUcmFja1JlZ2lvbjo6Z2V0U2V0dGluZ0Zyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBzZXR0aW5nKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5n
LCBpZEtleXdvcmQsICgiaWQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlaWdodEtleXdv
cmQsICgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCB3aWR0aEtleXdvcmQsICgi
d2lkdGgiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHJlZ2lvbkFuY2hvcktleXdvcmQsICgi
cmVnaW9uYW5jaG9yIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCB2aWV3cG9ydEFuY2hvcktl
eXdvcmQsICgidmlld3BvcnRhbmNob3IiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNjcm9s
bEtleXdvcmQsICgic2Nyb2xsIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworCisgICAgaWYgKHNldHRpbmcgPT0gaWRLZXl3b3JkKQorICAgICAgICByZXR1cm4gSWQ7Cisg
ICAgaWYgKHNldHRpbmcgPT0gaGVpZ2h0S2V5d29yZCkKKyAgICAgICAgcmV0dXJuIEhlaWdodDsK
KyAgICBpZiAoc2V0dGluZyA9PSB3aWR0aEtleXdvcmQpCisgICAgICAgIHJldHVybiBXaWR0aDsK
KyAgICBpZiAoc2V0dGluZyA9PSB2aWV3cG9ydEFuY2hvcktleXdvcmQpCisgICAgICAgIHJldHVy
biBWaWV3cG9ydEFuY2hvcjsKKyAgICBpZiAoc2V0dGluZyA9PSByZWdpb25BbmNob3JLZXl3b3Jk
KQorICAgICAgICByZXR1cm4gUmVnaW9uQW5jaG9yOworICAgIGlmIChzZXR0aW5nID09IHNjcm9s
bEtleXdvcmQpCisgICAgICAgIHJldHVybiBTY3JvbGw7CisKKyAgICByZXR1cm4gTm9uZTsKK30K
Kwordm9pZCBUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRpbmcg
c2V0dGluZywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgc2Nyb2xsVXBWYWx1ZUtleXdvcmQsICgidXAiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisKKyAgICBib29sIGlzVmFsaWRTZXR0aW5n
OworICAgIFN0cmluZyBudW1iZXJBc1N0cmluZzsKKyAgICBpbnQgbnVtYmVyOworICAgIHVuc2ln
bmVkIHBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9zaXRpb247CisKKyAgICBzd2l0
Y2ggKHNldHRpbmcpIHsKKyAgICBjYXNlIElkOgorICAgICAgICBpZiAodmFsdWUuZmluZCgiLS0+
IikgPT0gbm90Rm91bmQpCisgICAgICAgICAgICBtX2lkID0gdmFsdWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV2lkdGg6CisgICAgICAgIG51bWJlciA9IFdlYlZUVFBhcnNlcjo6cGFyc2VG
bG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZSwgaXNWYWxpZFNldHRpbmcpOworICAgICAgICBpZiAo
aXNWYWxpZFNldHRpbmcpCisgICAgICAgICAgICBtX3dpZHRoID0gbnVtYmVyOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGlu
Z1ZhbHVlLCBpbnZhbGlkIFdpZHRoIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSGVpZ2h0
OgorICAgICAgICBwb3NpdGlvbiA9IDA7CisKKyAgICAgICAgbnVtYmVyQXNTdHJpbmcgPSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3REaWdpdHModmFsdWUsICZwb3NpdGlvbik7CisgICAgICAgIG51bWJl
ciA9IHZhbHVlLnRvSW50KCZpc1ZhbGlkU2V0dGluZyk7CisKKyAgICAgICAgaWYgKGlzVmFsaWRT
ZXR0aW5nICYmIG51bWJlciA+PSAwKQorICAgICAgICAgICAgbV9oZWlnaHRJbkxpbmVzID0gbnVt
YmVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdp
b246OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIEhlaWdodCIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFJlZ2lvbkFuY2hvcjoKKyAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBXZWJWVFRQ
YXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKHZhbHVlLCAnLCcsIGlzVmFsaWRT
ZXR0aW5nKTsKKyAgICAgICAgaWYgKGlzVmFsaWRTZXR0aW5nKQorICAgICAgICAgICAgbV9yZWdp
b25BbmNob3IgPSBhbmNob3JQb3NpdGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTE9H
KE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZSwgaW52YWxpZCBSZWdp
b25BbmNob3IiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaWV3cG9ydEFuY2hvcjoKKyAg
ICAgICAgYW5jaG9yUG9zaXRpb24gPSBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdl
VmFsdWVQYWlyKHZhbHVlLCAnLCcsIGlzVmFsaWRTZXR0aW5nKTsKKyAgICAgICAgaWYgKGlzVmFs
aWRTZXR0aW5nKQorICAgICAgICAgICAgbV92aWV3cG9ydEFuY2hvciA9IGFuY2hvclBvc2l0aW9u
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246
OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIFZpZXdwb3J0QW5jaG9yIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2Nyb2xsOgorICAgICAgICBpZiAodmFsdWUgPT0gc2Nyb2xsVXBWYWx1
ZUtleXdvcmQpCisgICAgICAgICAgICBtX3Njcm9sbCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIExPRyhNZWRpYSwgIlRleHRUcmFja1JlZ2lvbjo6cGFyc2VTZXR0aW5nVmFsdWUs
IGludmFsaWQgU2Nyb2xsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uZToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHRUcmFja1JlZ2lvbjo6cGFyc2VTZXR0aW5n
KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICBTdHJpbmcg
c2V0dGluZyA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQsIHBvc2l0aW9uKTsKKwor
ICAgIHNpemVfdCBlcXVhbE9mZnNldCA9IHNldHRpbmcuZmluZCgnPScsIDEpOworICAgIGlmIChl
cXVhbE9mZnNldCA9PSBub3RGb3VuZCB8fCAhZXF1YWxPZmZzZXQgfHwgZXF1YWxPZmZzZXQgPT0g
c2V0dGluZy5sZW5ndGgoKSAtIDEpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lvblNldHRp
bmcgbmFtZSA9IGdldFNldHRpbmdGcm9tU3RyaW5nKHNldHRpbmcuc3Vic3RyaW5nKDAsIGVxdWFs
T2Zmc2V0KSk7CisgICAgU3RyaW5nIHZhbHVlID0gc2V0dGluZy5zdWJzdHJpbmcoZXF1YWxPZmZz
ZXQgKyAxLCBzZXR0aW5nLmxlbmd0aCgpIC0gMSk7CisKKyAgICBwYXJzZVNldHRpbmdWYWx1ZShu
YW1lLCB2YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja1JlZ2lvbi5oCmluZGV4IDNmM2Q0M2VmMTljMzk3MTU3NTZj
YzhkN2Y3MzU0MTgxNDQwYjI2ZDAuLjAxYjY0Y2U0ZGQ4NDkwNWI1YmZiNjlmM2QxM2I3M2JhZWIy
NzM1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVn
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tSZWdpb24uaApA
QCAtOTQsNiArOTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgU2Nyb2xsCiAgICAgfTsKIAorICAg
IFJlZ2lvblNldHRpbmcgZ2V0U2V0dGluZ0Zyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKyAg
ICB2b2lkIHBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRpbmcsIGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgcGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CisKICAgICBT
dHJpbmcgbV9pZDsKICAgICBTdHJpbmcgbV9zZXR0aW5nczsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCmluZGV4IGQzODNhODRhZDI2NmQwNTJmNGFkY2E0YTIx
NGNkMTZjYjVmMTJhN2QuLjljMzVkMjFhNWUxOTk2YzE3MjY1N2NhNzRkZGJhNjI4MDJhNzgwMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTY2LDYg
KzY2LDU2IEBAIFN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGNvbnN0IFN0cmluZyYg
aW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gc3RyaW5nLnRvU3RyaW5nKCk7
CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCitmbG9hdCBXZWJWVFRQYXJzZXI6OnBh
cnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgaXNWYWxp
ZFNldHRpbmcpCit7CisgICAgLy8gJyUnIG11c3QgYmUgcHJlc2VudCBhbmQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2V0dGluZyB2YWx1ZS4KKyAgICBpZiAodmFsdWUuZmluZCgnJScsIDEpICE9IHZhbHVl
Lmxlbmd0aCgpIC0gMSkgeworICAgICAgICBpc1ZhbGlkU2V0dGluZyA9IGZhbHNlOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICBT
dHJpbmdCdWlsZGVyIGZsb2F0TnVtYmVyQXNTdHJpbmc7CisgICAgZmxvYXROdW1iZXJBc1N0cmlu
Zy5hcHBlbmQoV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRpb24pKTsK
KworICAgIGlmICh2YWx1ZVtwb3NpdGlvbl0gPT0gJy4nKSB7CisgICAgICAgIGZsb2F0TnVtYmVy
QXNTdHJpbmcuYXBwZW5kKCIuIik7CisgICAgICAgIHBvc2l0aW9uKys7CisKKyAgICAgICAgZmxv
YXROdW1iZXJBc1N0cmluZy5hcHBlbmQoV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVl
LCAmcG9zaXRpb24pKTsKKyAgICB9CisgICAgZmxvYXQgbnVtYmVyID0gZmxvYXROdW1iZXJBc1N0
cmluZy50b1N0cmluZygpLnRvRmxvYXQoJmlzVmFsaWRTZXR0aW5nKTsKKworICAgIGlmIChpc1Zh
bGlkU2V0dGluZyAmJiAobnVtYmVyIDw9IDAgfHwgbnVtYmVyID49IDEwMCkpCisgICAgICAgIGlz
VmFsaWRTZXR0aW5nID0gZmFsc2U7CisKKyAgICByZXR1cm4gbnVtYmVyOworfQorCitGbG9hdFBv
aW50IFdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIoY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY2hhciBkZWxpbWl0ZXIsIGJvb2wmIGlzVmFsaWRTZXR0aW5nKQoreworICAg
IC8vIFRoZSBkZWxpbWl0ZXIgY2FuJ3QgYmUgdGhlIGZpcnN0IG9yIHNlY29uZCB2YWx1ZSBiZWNh
dXNlIGEgcGFpciBvZgorICAgIC8vIHBlcmNlbnRhZ2VzICh4JSx5JSkgaW1wbGllcyB0aGF0IGF0
IGxlYXN0IHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycworICAgIC8vIGFyZSB0aGUgZmlyc3QgcGVy
Y2VudGFnZSB2YWx1ZS4KKyAgICBzaXplX3QgZGVsaW1pdGVyT2Zmc2V0ID0gdmFsdWUuZmluZChk
ZWxpbWl0ZXIsIDIpOworICAgIGlmIChkZWxpbWl0ZXJPZmZzZXQgPT0gbm90Rm91bmQgfHwgZGVs
aW1pdGVyT2Zmc2V0ID09IHZhbHVlLmxlbmd0aCgpIC0gMSkgeworICAgICAgICBpc1ZhbGlkU2V0
dGluZyA9IGZhbHNlOworICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgwLCAwKTsKKyAgICB9CisK
KyAgICBib29sIGlzRmlyc3RWYWx1ZVZhbGlkOworICAgIGZsb2F0IGZpcnN0Q29vcmQgPSBwYXJz
ZUZsb2F0UGVyY2VudGFnZVZhbHVlKHZhbHVlLnN1YnN0cmluZygwLCBkZWxpbWl0ZXJPZmZzZXQp
LCBpc0ZpcnN0VmFsdWVWYWxpZCk7CisKKyAgICBib29sIGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAg
ICBmbG9hdCBzZWNvbmRDb29yZCA9IHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWUuc3Vi
c3RyaW5nKGRlbGltaXRlck9mZnNldCArIDEsIHZhbHVlLmxlbmd0aCgpIC0gMSksIGlzU2Vjb25k
VmFsdWVWYWxpZCk7CisKKyAgICBpc1ZhbGlkU2V0dGluZyA9IGlzRmlyc3RWYWx1ZVZhbGlkICYm
IGlzU2Vjb25kVmFsdWVWYWxpZDsKKyAgICByZXR1cm4gRmxvYXRQb2ludChmaXJzdENvb3JkLCBz
ZWNvbmRDb29yZCk7Cit9CisjZW5kaWYKKwogV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoV2Vi
VlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fc3RhdGUo
SW5pdGlhbCkKQEAgLTgyLDYgKzEzMiwxNCBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6Z2V0TmV3Q3Vl
cyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYgb3V0cHV0Q3VlcykKICAgICBtX2N1ZWxp
c3QuY2xlYXIoKTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2ViVlRU
UGFyc2VyOjpnZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+JiBv
dXRwdXRSZWdpb25zKQoreworICAgIG91dHB1dFJlZ2lvbnMgPSBtX3JlZ2lvbkxpc3Q7CisgICAg
bV9yZWdpb25MaXN0LmNsZWFyKCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJWVFRQYXJzZXI6OnBh
cnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIC8vIDQu
OC4xMC4xMy4zIFdIQVRXRyBXZWJWVFQgUGFyc2VyIGFsZ29yaXRobS4KQEAgLTkwLDcgKzE0OCw3
IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCkKIAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICAgICBT
dHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7Ci0g
ICAgICAgIAorCiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEluaXRp
YWw6CiAgICAgICAgICAgICAvLyBCdWZmZXIgdXAgYXQgbGVhc3QgOSBieXRlcyBiZWZvcmUgcHJv
Y2VlZGluZyB3aXRoIGNoZWNraW5nIGZvciB0aGUgZmlsZSBpZGVudGlmaWVyLgpAQCAtMTA4LDI4
ICsxNjYsNDIgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICAgICAgbV9zdGF0ZSA9IEhlYWRlcjsKICAgICAg
ICAgICAgIG1faWRlbnRpZmllckRhdGEuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAKKwogICAgICAgICBjYXNlIEhlYWRlcjoKICAgICAgICAgICAgIC8vIDEzLTE4IC0gQWxs
b3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgorI2lmIEVO
QUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiBtX3JlZ2lvbkxpc3Quc2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBtX2NsaWVudC0+bmV3UmVnaW9uc1BhcnNlZCgpOworCisgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29sbGVjdEhlYWRlcihsaW5lKTsKKworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBNZXRhZGF0YToKKyNlbmRpZgogICAgICAgICAgICAgaWYgKGxp
bmUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJZDsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAKKwogICAgICAgICBjYXNlIElkOgogICAgICAgICAgICAgLy8gMTkt
MjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlhbGl6
ZSBuZXcgY3VlIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgLy8gMzAtMzkgLSBDaGVjayBpZiB0aGlzIGxpbmUgY29udGFp
bnMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciBvciB0aW1pbmcgZGF0YS4KICAgICAgICAgICAgIG1f
c3RhdGUgPSBjb2xsZWN0Q3VlSWQobGluZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
CisKICAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0dGluZ3M6CiAgICAgICAgICAgICAvLyA0MCAt
IENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLgogICAgICAgICAgICAgbV9zdGF0ZSA9
IGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgCisKICAgICAgICAgY2FzZSBDdWVUZXh0OgogICAgICAgICAgICAgLy8gNDEtNTMgLSBD
b2xsZWN0IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBvdXRw
dXQuCiAgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwgbGVuZ3RoLCBw
b3NpdGlvbik7CkBAIC0xNjMsNiArMjM1LDMwIEBAIGJvb2wgV2ViVlRUUGFyc2VyOjpoYXNSZXF1
aXJlZEZpbGVJZGVudGlmaWVyKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEVOQUJMRShX
RUJWVFRfUkVHSU9OUykKK3ZvaWQgV2ViVlRUUGFyc2VyOjpjb2xsZWN0SGVhZGVyKGNvbnN0IFN0
cmluZyYgbGluZSkKK3sKKyAgICAvLyA0LjEgRXh0ZW5zaW9uIG9mIFdlYlZUVCBoZWFkZXIgcGFy
c2luZyAoMTEgLSAxNSkKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
ZywgcmVnaW9uSGVhZGVyTmFtZSwgKCJSZWdpb24iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CisKKyAgICAvLyAxNS40IElmIGxpbmUgY29udGFpbnMgdGhlIGNoYXJhY3Rl
ciAiOiIgKEEgVSswMDNBIENPTE9OKSwgdGhlbiBzZXQgbWV0YWRhdGEncworICAgIC8vIG5hbWUg
dG8gdGhlIHN1YnN0cmluZyBvZiBsaW5lIGJlZm9yZSB0aGUgZmlyc3QgIjoiIGNoYXJhY3RlciBh
bmQKKyAgICAvLyBtZXRhZGF0YSdzIHZhbHVlIHRvIHRoZSBzdWJzdHJpbmcgYWZ0ZXIgdGhpcyBj
aGFyYWN0ZXIuCisgICAgaWYgKCFsaW5lLmNvbnRhaW5zKCI6IikpCisgICAgICAgIHJldHVybjsK
KworICAgIHVuc2lnbmVkIGNvbG9uUG9zaXRpb24gPSBsaW5lLmZpbmQoIjoiKTsKKyAgICBtX2N1
cnJlbnRIZWFkZXJOYW1lID0gbGluZS5zdWJzdHJpbmcoMCwgY29sb25Qb3NpdGlvbik7CisKKyAg
ICAvLyAxNS41IElmIG1ldGFkYXRhJ3MgbmFtZSBlcXVhbHMgIlJlZ2lvbiI6CisgICAgaWYgKG1f
Y3VycmVudEhlYWRlck5hbWUgPT0gcmVnaW9uSGVhZGVyTmFtZSkgeworICAgICAgICBtX2N1cnJl
bnRIZWFkZXJWYWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGNvbG9uUG9zaXRpb24gKyAxLCBsaW5lLmxl
bmd0aCgpIC0gMSk7CisgICAgICAgIC8vIDE1LjUuMSAtIDE1LjUuOCBSZWdpb24gY3JlYXRpb246
IExldCByZWdpb24gYmUgYSBuZXcgdGV4dCB0cmFjayByZWdpb24gWy4uLl0KKyAgICAgICAgY3Jl
YXRlTmV3UmVnaW9uKCk7CisgICAgfQorfQorI2VuZGlmCisKIFdlYlZUVFBhcnNlcjo6UGFyc2VT
dGF0ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RDdWVJZChjb25zdCBTdHJpbmcmIGxpbmUpCiB7CiAg
ICAgaWYgKGxpbmUuY29udGFpbnMoIi0tPiIpKQpAQCAtMjgyLDYgKzM3OCwyNyBAQCB2b2lkIFdl
YlZUVFBhcnNlcjo6cmVzZXRDdWVWYWx1ZXMoKQogICAgIG1fY3VycmVudENvbnRlbnQuY2xlYXIo
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKK3ZvaWQgV2ViVlRUUGFyc2VyOjpj
cmVhdGVOZXdSZWdpb24oKQoreworICAgIGlmICghbV9jdXJyZW50SGVhZGVyVmFsdWUubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+IHJlZ2lv
biA9IFRleHRUcmFja1JlZ2lvbjo6Y3JlYXRlKCk7CisgICAgcmVnaW9uLT5zZXRSZWdpb25TZXR0
aW5ncyhtX2N1cnJlbnRIZWFkZXJWYWx1ZSk7CisKKyAgICAvLyAxNS41LjEwIElmIHRoZSB0ZXh0
IHRyYWNrIGxpc3Qgb2YgcmVnaW9ucyByZWdpb25zIGNvbnRhaW5zIGEgcmVnaW9uCisgICAgLy8g
d2l0aCB0aGUgc2FtZSByZWdpb24gaWRlbnRpZmllciB2YWx1ZSBhcyByZWdpb24sIHJlbW92ZSB0
aGF0IHJlZ2lvbi4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVnaW9uTGlzdC5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1fcmVnaW9uTGlzdFtpXS0+aWQoKSA9PSByZWdpb24tPmlk
KCkpIHsKKyAgICAgICAgICAgIG1fcmVnaW9uTGlzdC5yZW1vdmUoaSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgbV9yZWdpb25MaXN0LmFwcGVuZChyZWdpb24pOworfQor
I2VuZGlmCisKIGRvdWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3Ry
aW5nJiBsaW5lLCB1bnNpZ25lZCogcG9zaXRpb24pCiB7CiAgICAgLy8gNC44LjEwLjEzLjMgQ29s
bGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQ
YXJzZXIuaAppbmRleCBjNTBjMzA2NDI4MzhmYWIyMTE0YWYyMWEzODZhNDNiOTQ1ZDhkYjE1Li5l
MjNjNWE5MmUyOTc5NDQwOGY1ZjZlYjhmZDExNDZjZjNmNTFiZmRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVGV4
dFRyYWNrQ3VlLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrUmVnaW9uLmgiCiAjaW5jbHVkZSAiV2Vi
VlRUVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC00OSwxNiArNTAsMjkgQEAgY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBXZWJWVFRQYXJzZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfldl
YlZUVFBhcnNlckNsaWVudCgpIHsgfQotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIG5ld0N1ZXNQ
YXJzZWQoKSA9IDA7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZpcnR1YWwgdm9p
ZCBuZXdSZWdpb25zUGFyc2VkKCkgPSAwOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGZpbGVG
YWlsZWRUb1BhcnNlKCkgPSAwOwogfTsKIAogY2xhc3MgV2ViVlRUUGFyc2VyIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIoKSB7IH0KLSAgICAKLSAgICBlbnVtIFBhcnNlU3Rh
dGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBUaW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJh
ZEN1ZSB9OworCisgICAgZW51bSBQYXJzZVN0YXRlIHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAg
ICAgSGVhZGVyLAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAgICAgTWV0YWRhdGEs
CisjZW5kaWYKKyAgICAgICAgSWQsCisgICAgICAgIFRpbWluZ3NBbmRTZXR0aW5ncywKKyAgICAg
ICAgQ3VlVGV4dCwKKyAgICAgICAgQmFkQ3VlCisgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzT3du
UHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRlKFdlYlZUVFBhcnNlckNsaWVudCogY2xpZW50LCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKQEAgLTg4LDE4ICsxMDIsMjcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCopOwogICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQqKTsKIAorI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICAvLyBVc2VmdWwg
ZnVuY3Rpb25zIGZvciBwYXJzaW5nIHBlcmNlbnRhZ2Ugc2V0dGluZ3MuCisgICAgc3RhdGljIGZs
b2F0IHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCYpOworICAg
IHN0YXRpYyBGbG9hdFBvaW50IHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKGNvbnN0IFN0
cmluZyYsIGNoYXIsIGJvb2wmKTsKKyNlbmRpZgorCiAgICAgLy8gSW5wdXQgZGF0YSB0byB0aGUg
cGFyc2VyIHRvIHBhcnNlLgogICAgIHZvaWQgcGFyc2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBsYXN0IHBh
cnNlZCBjdWVzIHRvIGNhbGxlci4KICAgICB2b2lkIGdldE5ld0N1ZXMoVmVjdG9yPFJlZlB0cjxU
ZXh0VHJhY2tDdWU+ID4mKTsKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCisgICAgdm9pZCBn
ZXROZXdSZWdpb25zKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrUmVnaW9uPiA+Jik7CisjZW5kaWYK
IAogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dEZyb21DdWVUZXh0KGNvbnN0IFN0cmluZyYpOwogICAgIGRvdWJsZSBjb2xsZWN0VGltZVN0YW1w
KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CiAKIHByb3RlY3RlZDoKICAgICBXZWJWVFRQYXJz
ZXIoV2ViVlRUUGFyc2VyQ2xpZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIAor
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
ICAgIFBhcnNlU3RhdGUgbV9zdGF0ZTsKIApAQCAtMTEzLDEyICsxMzYsMjAgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZU5ld0N1ZSgpOwogICAgIHZvaWQgcmVzZXRDdWVWYWx1ZXMoKTsKIAor
I2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2b2lkIGNvbGxlY3RIZWFkZXIoY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCBjcmVhdGVOZXdSZWdpb24oKTsKKyNlbmRpZgorCiAgICAgdm9p
ZCBza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwogICAgIHN0YXRpYyB2
b2lkIHNraXBMaW5lVGVybWluYXRvcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkKik7CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0TmV4dExpbmUoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOwotICAgIAorCiAgICAgdm9pZCBj
b25zdHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7CiAKKyAgICBTdHJpbmcgbV9jdXJyZW50
SGVhZGVyTmFtZTsKKyAgICBTdHJpbmcgbV9jdXJyZW50SGVhZGVyVmFsdWU7CisKICAgICBWZWN0
b3I8Y2hhcj4gbV9pZGVudGlmaWVyRGF0YTsKICAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CiAgICAg
ZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKQEAgLTEzNSw2ICsxNjYsMTAgQEAgcHJpdmF0ZToK
IAogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IG1fbGFuZ3VhZ2VTdGFjazsKICAgICBWZWN0b3I8
UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBtX2N1ZWxpc3Q7CisKKyNpZiBFTkFCTEUoV0VCVlRUX1JF
R0lPTlMpCisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+ID4gbV9yZWdpb25MaXN0
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwCmluZGV4IDAwYTFkOGZlNjc0ZmM2NDFlMTYzZjJkM2Zh
MDNkZmU1YmU5MjYyZTEuLmI0NTcwMjJlMjdiMGE5YzI4MzI3Njc5MjVhZGIxN2NmYzczMjBlMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuY3BwCkBAIC0xODgsNiAr
MTg4LDEzIEBAIHZvaWQgVGV4dFRyYWNrTG9hZGVyOjpuZXdDdWVzUGFyc2VkKCkKICAgICBtX2N1
ZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lP
TlMpCit2b2lkIFRleHRUcmFja0xvYWRlcjo6bmV3UmVnaW9uc1BhcnNlZCgpCit7CisgICAgbV9j
bGllbnQtPm5ld1JlZ2lvbnNBdmFpbGFibGUodGhpcyk7IAorfQorI2VuZGlmCisKIHZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpmaWxlRmFpbGVkVG9QYXJzZSgpCiB7CiAgICAgTE9HKE1lZGlhLCAiVGV4
dFRyYWNrTG9hZGVyOjpmaWxlRmFpbGVkVG9QYXJzZSIpOwpAQCAtMjA3LDYgKzIxNCwxNCBAQCB2
b2lkIFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4gPiYgb3V0cHV0Q3VlcykKICAgICAgICAgbV9jdWVQYXJzZXItPmdldE5ld0N1ZXMob3V0cHV0
Q3Vlcyk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCit2b2lkIFRleHRUcmFja0xv
YWRlcjo6Z2V0TmV3UmVnaW9ucyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gPiYgb3V0
cHV0UmVnaW9ucykKK3sKKyAgICBBU1NFUlQobV9jdWVQYXJzZXIpOworICAgIGlmIChtX2N1ZVBh
cnNlcikKKyAgICAgICAgbV9jdWVQYXJzZXItPmdldE5ld1JlZ2lvbnMob3V0cHV0UmVnaW9ucyk7
Cit9CisjZW5kaWYKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFRyYWNrTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9h
ZGVyLmgKaW5kZXggZTc3MDNhYzdiOGVjZGZmMWRhMzA4NjEwZTdlODBjM2ZlYzNjNzRmYi4uYTVh
ZDAzZjA1MDU2YTMyMDc2OTc1ZDc2N2I1ZTQ5OTg1YzZhZjJhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9UZXh0VHJhY2tMb2FkZXIuaApAQCAtNDksNiArNDksOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIG5ld0N1ZXNBdmFpbGFibGUoVGV4dFRyYWNrTG9hZGVyKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjdWVMb2FkaW5nU3RhcnRlZChUZXh0VHJhY2tMb2FkZXIqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdDb21wbGV0ZWQoVGV4dFRyYWNrTG9hZGVyKiwgYm9vbCBs
b2FkaW5nRmFpbGVkKSA9IDA7CisjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQorICAgIHZpcnR1
YWwgdm9pZCBuZXdSZWdpb25zQXZhaWxhYmxlKFRleHRUcmFja0xvYWRlciopID0gMDsKKyNlbmRp
ZgogfTsKIAogY2xhc3MgVGV4dFRyYWNrTG9hZGVyIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xp
ZW50LCBwcml2YXRlIFdlYlZUVFBhcnNlckNsaWVudCB7CkBAIC02NCw3ICs2Nyw5IEBAIHB1Ymxp
YzoKICAgICBib29sIGxvYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY3Jvc3NPcmlnaW5N
b2RlKTsKICAgICB2b2lkIGNhbmNlbExvYWQoKTsKICAgICB2b2lkIGdldE5ld0N1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG91dHB1dEN1ZXMpOwotICAgIAorI2lmIEVOQUJMRShX
RUJWVFRfUkVHSU9OUykKKyAgICB2b2lkIGdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxUZXh0
VHJhY2tSZWdpb24+ID4mIG91dHB1dFJlZ2lvbnMpOworI2VuZGlmCiBwcml2YXRlOgogCiAgICAg
Ly8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKQEAgLTczLDYgKzc4LDkgQEAgcHJpdmF0ZToKICAgICAK
ICAgICAvLyBXZWJWVFRQYXJzZXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vlc1BhcnNl
ZCgpOworI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgbmV3UmVn
aW9uc1BhcnNlZCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGZpbGVGYWlsZWRUb1BhcnNl
KCk7CiAgICAgCiAgICAgVGV4dFRyYWNrTG9hZGVyKFRleHRUcmFja0xvYWRlckNsaWVudCosIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NDcwN2JhMWUxMGFjMTYzNzFhMDRmOGE5
Yzc3NzM2YTgxMzM0YmMxLi43YTRkNzUxNWZlZGQyZWVkYmI5NzAzN2I4N2EyNTEzZjAwMDQ4ZTgw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDQtMDEgIFZpY3RvciBDYXJidW5lICA8dmNh
cmJ1bmVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBhcnNpbmcgV2ViVlRUIFJlZ2lvbiBIZWFk
ZXIgTWV0YWRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2hlYWRlci1yZWdpb25zLnZ0dDogQWRk
ZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdp
b24tcGFyc2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svcmVn
aW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWw6IEFkZGVkLgorCiAyMDEz
LTAzLTMwICBUb20gU2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyb3Nz
LU9yaWdpbiBjb3B5JnBhc3RlIC8gZHJhZyZkcm9wIGFsbG93aW5nIFhTUyB2aWEgc3JjZG9jIGF0
dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdl
YnZ0dC9oZWFkZXItcmVnaW9ucy52dHQgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9u
cy13ZWJ2dHQvaGVhZGVyLXJlZ2lvbnMudnR0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5ZjczNzEyZDgzNzZiNTA0
ODNhNWNkYzU0ZDFjYThiMTVhMTllNTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9t
ZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvaGVhZGVyLXJlZ2lvbnMudnR0CkBAIC0wLDAgKzEs
MTIgQEAKK1dFQlZUVCBGSUxFCitSZWdpb246IGlkPXJlZ2lvbl93aXRob3V0X3NldHRpbmdzCitS
ZWdpb246IGlkPXJlZ2lvbl93aXRoX2FsbF9zZXR0aW5ncyB3aWR0aD0zMiUgaGVpZ2h0PTUgcmVn
aW9uYW5jaG9yPTQxJSwyMCUgdmlld3BvcnRhbmNob3I9MzElLDg0JSBzY3JvbGw9dXAKK1JlZ2lv
bjogaWQ9cmVnaW9uX2Zsb2F0aW5nX3BvaW50X2FuY2hvciByZWdpb25hbmNob3I9NDEuMTMzJSwy
MC40MiUgdmlld3BvcnRhbmNob3I9MzIuMzMlLDMyLjQ0JQorUmVnaW9uOiBpZD1ub3RfdW5pcXVl
X2lkIHdpZHRoPTQyJQorUmVnaW9uOiBpZD1ub3RfdW5pcXVlX2lkIHdpZHRoPTY3JQorUmVnaW9u
OiBpbnZhbGlkX3NldHRpbmdzIHZhbHVlcyBidXQgcmVnaW9uIHN0aWxsIGNyZWF0ZWQKKzogSW52
YWxpZCBIZWFkZXIKKworMQorMDA6MDA6MDAuMDAwIC0tPiAwMDowMDowMi41MDAKK1dlIGFyZSBp
biBOZXcgWW9yayBDaXR5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdp
b25zLXdlYnZ0dC90ZXh0LXRyYWNrLXJlZ2lvbi1wYXJzZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2Vy
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzBmNDMxYWFiNjkyMWQzZWNkMGQyYWZjYjBhZGVl
NjliOTIzZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svcmVn
aW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI4IEBACitUZXN0cyBwcm9wZXIgcGFyc2luZyBvZiB2YXJpb3VzIHJlZ2lvbnMgcHJlc2Vu
dCBpbiBXZWJWVFQgaGVhZGVyIGFyZWEuCisKK0VYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzWzBd
LnJlZ2lvbnMubGVuZ3RoID09ICc1JykgT0sKKworRVhQRUNURUQgKHJlZ2lvbi5pZCA9PSAncmVn
aW9uX3dpdGhvdXRfc2V0dGluZ3MnKSBPSworCitFWFBFQ1RFRCAocmVnaW9uLmlkID09ICdyZWdp
b25fd2l0aF9hbGxfc2V0dGluZ3MnKSBPSworRVhQRUNURUQgKHJlZ2lvbi53aWR0aCA9PSAnMzIn
KSBPSworRVhQRUNURUQgKHJlZ2lvbi5oZWlnaHQgPT0gJzUnKSBPSworRVhQRUNURUQgKHJlZ2lv
bi5yZWdpb25BbmNob3JYID09ICc0MScpIE9LCitFWFBFQ1RFRCAocmVnaW9uLnJlZ2lvbkFuY2hv
clkgPT0gJzIwJykgT0sKK0VYUEVDVEVEIChyZWdpb24udmlld3BvcnRBbmNob3JYID09ICczMScp
IE9LCitFWFBFQ1RFRCAocmVnaW9uLnZpZXdwb3J0QW5jaG9yWSA9PSAnODQnKSBPSworRVhQRUNU
RUQgKHJlZ2lvbi5zY3JvbGwgPT0gJ3VwJykgT0sKKworRVhQRUNURUQgKHJlZ2lvbi5pZCA9PSAn
cmVnaW9uX2Zsb2F0aW5nX3BvaW50X2FuY2hvcicpIE9LCitFWFBFQ1RFRCAoTWF0aC5yb3VuZChy
ZWdpb24ucmVnaW9uQW5jaG9yWCAqIDEwMDApID09ICc0MTEzMycpIE9LCitFWFBFQ1RFRCAoTWF0
aC5yb3VuZChyZWdpb24ucmVnaW9uQW5jaG9yWSAqIDEwMDApID09ICcyMDQyMCcpIE9LCitFWFBF
Q1RFRCAoTWF0aC5yb3VuZChyZWdpb24udmlld3BvcnRBbmNob3JYICogMTAwMCkgPT0gJzMyMzMw
JykgT0sKK0VYUEVDVEVEIChNYXRoLnJvdW5kKHJlZ2lvbi52aWV3cG9ydEFuY2hvclkgKiAxMDAw
KSA9PSAnMzI0NDAnKSBPSworCitFWFBFQ1RFRCAocmVnaW9uLmlkID09ICdub3RfdW5pcXVlX2lk
JykgT0sKK0VYUEVDVEVEIChyZWdpb24ud2lkdGggPT0gJzY3JykgT0sKKworRVhQRUNURUQgKHJl
Z2lvbi5pZCA9PSAnJykgT0sKKworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svcmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0
bWwgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9yZWdpb25zLXdlYnZ0dC90ZXh0LXRyYWNrLXJl
Z2lvbi1wYXJzZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDdhNDIyNzE0YzMzZGZlYjRmNmNjNjAwNzZj
OTdlYjU1NjA2NjRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2sv
cmVnaW9ucy13ZWJ2dHQvdGV4dC10cmFjay1yZWdpb24tcGFyc2VyLmh0bWwKQEAgLTAsMCArMSw2
NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEg
aHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRm
LTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEtZmlsZS5qcz48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vLi4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAg
ICAgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIHJlZ2lvbjsKKworICAgICAgICBmdW5jdGlvbiBz
dGFydFRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy5UZXh0VHJhY2tS
ZWdpb24pIHsKKyAgICAgICAgICAgICAgICBmYWlsVGVzdCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOwor
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnMubGVu
Z3RoIiwgNSk7CisKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBy
ZWdpb24gPSB2aWRlby50ZXh0VHJhY2tzWzBdLnJlZ2lvbnNbMF07CisgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoInJlZ2lvbi5pZCIsICJyZWdpb25fd2l0aG91dF9zZXR0aW5ncyIpOworCisgICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcmVnaW9uID0gdmlkZW8udGV4
dFRyYWNrc1swXS5yZWdpb25zWzFdOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24u
aWQiLCAicmVnaW9uX3dpdGhfYWxsX3NldHRpbmdzIik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInJlZ2lvbi53aWR0aCIsIDMyKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9u
LmhlaWdodCIsIDUpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24ucmVnaW9uQW5j
aG9yWCIsIDQxKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLnJlZ2lvbkFuY2hv
clkiLCAyMCk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi52aWV3cG9ydEFuY2hv
clgiLCAzMSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi52aWV3cG9ydEFuY2hv
clkiLCA4NCk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInJlZ2lvbi5zY3JvbGwiLCAidXAi
KTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIHJlZ2lvbiA9
IHZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9uc1syXTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgicmVnaW9uLmlkIiwgInJlZ2lvbl9mbG9hdGluZ19wb2ludF9hbmNob3IiKTsKKyAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgiTWF0aC5yb3VuZChyZWdpb24ucmVnaW9uQW5jaG9yWCAqIDEwMDAp
IiwgNDExMzMpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJNYXRoLnJvdW5kKHJlZ2lvbi5y
ZWdpb25BbmNob3JZICogMTAwMCkiLCAyMDQyMCk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
Ik1hdGgucm91bmQocmVnaW9uLnZpZXdwb3J0QW5jaG9yWCAqIDEwMDApIiwgMzIzMzApOworICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJNYXRoLnJvdW5kKHJlZ2lvbi52aWV3cG9ydEFuY2hvclkg
KiAxMDAwKSIsIDMyNDQwKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAg
ICAgICAgIHJlZ2lvbiA9IHZpZGVvLnRleHRUcmFja3NbMF0ucmVnaW9uc1szXTsKKyAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLmlkIiwgIm5vdF91bmlxdWVfaWQiKTsKKyAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgicmVnaW9uLndpZHRoIiwgNjcpOworCisgICAgICAgICAgICBjb25z
b2xlV3JpdGUoIiIpOworICAgICAgICAgICAgcmVnaW9uID0gdmlkZW8udGV4dFRyYWNrc1swXS5y
ZWdpb25zWzRdOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJyZWdpb24uaWQiLCAiIik7CisK
KyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBlbmRUZXN0KCk7Cisg
ICAgICAgIH0KKworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+Cisg
ICAgICAgIDxwPlRlc3RzIHByb3BlciBwYXJzaW5nIG9mIHZhcmlvdXMgcmVnaW9ucyBwcmVzZW50
IGluIFdlYlZUVCBoZWFkZXIgYXJlYS48L3A+CisgICAgICAgIDx2aWRlbyBjb250cm9scz4KKyAg
ICAgICAgICAgIDx0cmFjayBzcmM9Ii4uL2NhcHRpb25zLXdlYnZ0dC9oZWFkZXItcmVnaW9ucy52
dHQiIGtpbmQ9ImNhcHRpb25zIiBkZWZhdWx0IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorICAgICAg
ICA8L3ZpZGVvPgorCisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>