<?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>74603</bug_id>
          
          <creation_ts>2011-12-15 06:02:58 -0800</creation_ts>
          <short_desc>Web Inspector: Implement CSS selector profiler backend</short_desc>
          <delta_ts>2011-12-19 07:14:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>74004</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>521849</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-15 06:02:58 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521883</commentid>
    <comment_count>1</comment_count>
      <attachid>119425</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-15 07:27:27 -0800</bug_when>
    <thetext>Created attachment 119425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521885</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 07:30:15 -0800</bug_when>
    <thetext>Attachment 119425 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:556:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:563:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521891</commentid>
    <comment_count>3</comment_count>
      <attachid>119425</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-15 07:40:28 -0800</bug_when>
    <thetext>Comment on attachment 119425
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:1619
&gt; +                &quot;type&quot;: &quot;object&quot;,

(You should expand the properties here). I don&apos;t think you need a header here. CPU / Heap profilers have it due to historical reasons. I think CSS profiles are lightweight enough to be pushed into the front-end atomically.

&gt; Source/WebCore/inspector/Inspector.json:1628
&gt; +                    { &quot;name&quot;: &quot;hits&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of times this selector was considered a candidate for matching against DOM elements.&quot; },

hitCount ?

&gt; Source/WebCore/inspector/Inspector.json:1629
&gt; +                    { &quot;name&quot;: &quot;matches&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of times this selector actually matched a DOM element.&quot; }

matchCount ?

&gt; Source/WebCore/inspector/Inspector.json:1780
&gt; +                &quot;name&quot;: &quot;stopSelectorProfiler&quot;

This one should return the profile body.

&gt; Source/WebCore/inspector/Inspector.json:1783
&gt; +                &quot;name&quot;: &quot;getProfileHeaders&quot;,

... and you should not need this.

&gt; Source/WebCore/inspector/Inspector.json:1789
&gt; +                &quot;name&quot;: &quot;getProfile&quot;,

and this

&gt; Source/WebCore/inspector/Inspector.json:1798
&gt; +                &quot;name&quot;: &quot;removeProfile&quot;,

and this

&gt; Source/WebCore/inspector/Inspector.json:1804
&gt; +                &quot;name&quot;: &quot;clearProfiles&quot;

and this :)

&gt; Source/WebCore/inspector/Inspector.json:1813
&gt; +                &quot;name&quot;: &quot;addProfileHeader&quot;,

and this

&gt; Source/WebCore/inspector/Inspector.json:1819
&gt; +                &quot;name&quot;: &quot;setRecordingProfile&quot;,

and this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521931</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-15 08:51:37 -0800</bug_when>
    <thetext>An updated patch to be attached shortly.

(In reply to comment #3)
&gt; (From update of attachment 119425 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119425&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/Inspector.json:1619
&gt; &gt; +                &quot;type&quot;: &quot;object&quot;,
&gt; 
&gt; (You should expand the properties here). I don&apos;t think you need a header here. CPU / Heap profilers have it due to historical reasons. I think CSS profiles are lightweight enough to be pushed into the front-end atomically.

Fine with that.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1628
&gt; &gt; +                    { &quot;name&quot;: &quot;hits&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of times this selector was considered a candidate for matching against DOM elements.&quot; },
&gt; 
&gt; hitCount ?

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1629
&gt; &gt; +                    { &quot;name&quot;: &quot;matches&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Number of times this selector actually matched a DOM element.&quot; }
&gt; 
&gt; matchCount ?

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1780
&gt; &gt; +                &quot;name&quot;: &quot;stopSelectorProfiler&quot;
&gt; 
&gt; This one should return the profile body.

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1783
&gt; &gt; +                &quot;name&quot;: &quot;getProfileHeaders&quot;,
&gt; 
&gt; ... and you should not need this.

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1789
&gt; &gt; +                &quot;name&quot;: &quot;getProfile&quot;,
&gt; 
&gt; and this

I will need getProfiles() to load profiles after a frontend has been re-opened.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1798
&gt; &gt; +                &quot;name&quot;: &quot;removeProfile&quot;,
&gt; 
&gt; and this

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1804
&gt; &gt; +                &quot;name&quot;: &quot;clearProfiles&quot;
&gt; 
&gt; and this :)

This one is necessary to react on the &quot;Clear all profiles&quot; button click (so that no profiles will be returned next time the frontend is re-opened.)

&gt; &gt; Source/WebCore/inspector/Inspector.json:1813
&gt; &gt; +                &quot;name&quot;: &quot;addProfileHeader&quot;,
&gt; 
&gt; and this

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1819
&gt; &gt; +                &quot;name&quot;: &quot;setRecordingProfile&quot;,
&gt; 
&gt; and this

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521959</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-15 09:25:17 -0800</bug_when>
    <thetext>&gt; I will need getProfiles() to load profiles after a frontend has been re-opened.

I&apos;m fine with this for now. However, as a debugger, backend should not collect the snapshots unless absolutely necessary. We should establish appropriate persistence for the front-end (like an IDE would have) instead. It might be time to assess IndexedDB for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522639</commentid>
    <comment_count>6</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-16 02:09:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I will need getProfiles() to load profiles after a frontend has been re-opened.
&gt; 
&gt; I&apos;m fine with this for now. However, as a debugger, backend should not collect the snapshots unless absolutely necessary. We should establish appropriate persistence for the front-end (like an IDE would have) instead. It might be time to assess IndexedDB for that.

Is it already in a good shape now?
On a side note, removeProfile() is also necessary, since a user can hit &quot;Delete&quot; on a profile, and it should get removed both in the UI and in the BE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522645</commentid>
    <comment_count>7</comment_count>
      <attachid>119589</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-16 02:24:14 -0800</bug_when>
    <thetext>Created attachment 119589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522647</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 02:28:30 -0800</bug_when>
    <thetext>Attachment 119589 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:550:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:563:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:92:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523438</commentid>
    <comment_count>9</comment_count>
      <attachid>119589</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-18 06:13:35 -0800</bug_when>
    <thetext>Comment on attachment 119589
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:1618
&gt; +                &quot;id&quot;: &quot;ProfileEntry&quot;,

SelectorProfileEntry

&gt; Source/WebCore/inspector/Inspector.json:1629
&gt; +                &quot;id&quot;: &quot;Profile&quot;,

SelectorProfile

&gt; Source/WebCore/inspector/Inspector.json:1633
&gt; +                    { &quot;name&quot;: &quot;uid&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Profile identifier (unique among CSS selector profiles.)&quot; },

Should be of SelectorProfileId type inherited from string.

&gt; Source/WebCore/inspector/Inspector.json:1806
&gt; +                &quot;name&quot;: &quot;setRecordingProfile&quot;,

Why would you need this?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:220
&gt; +        .setData(data);

When will we have types collections?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:245
&gt; +    , m_recordingUserInitiatedSelectorProfile(false)

Nit: managing profile ids is way too complex. Why don&apos;t we persist the profiles in localStorage for now? It would make your change significantly smaller.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:546
&gt; +    toggleRecordButton(true);

You should never control front-end state from the backend. Let is update itself from the callback to startSelectorProfiler command.

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:95
&gt; +    void clearProfiles(ErrorString*) { resetProfilerState(); }

I think it is more appropriate not to introduce getProfiles, removeProfile, clearProfiles in this change and do front-end side persistence. I know you were copying the CPU / Heap profile schema, but it itself is broken in some cases / needs to persist heap snapshot on the page side in other cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523837</commentid>
    <comment_count>10</comment_count>
      <attachid>119847</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 04:39:37 -0800</bug_when>
    <thetext>Created attachment 119847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523838</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 04:43:06 -0800</bug_when>
    <thetext>Attachment 119847 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:549:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:92:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523839</commentid>
    <comment_count>12</comment_count>
      <attachid>119847</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-19 04:43:47 -0800</bug_when>
    <thetext>Comment on attachment 119847
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:1637
&gt; +                    { &quot;name&quot;: &quot;title&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Profile title.&quot; },

You don&apos;t need a title for the profile

&gt; Source/WebCore/inspector/Inspector.json:1638
&gt; +                    { &quot;name&quot;: &quot;uid&quot;, &quot;$ref&quot;: &quot;SelectorProfileId&quot;, &quot;description&quot;: &quot;Profile identifier (unique among CSS selector profiles.)&quot; },

Neither you need the uid or typeId.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:136
&gt; +static const char userInitiatedSelectorProfiling[] = &quot;userInitiatedSelectorProfiling&quot;;

Rename to &quot;selectorProfilerStarted&quot;

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:140
&gt; +static const char* const UserInitiatedProfileName = &quot;org.webkit.profiles.user-initiated&quot;;

ditto

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:193
&gt; +    unsigned m_nextUserInitiatedSelectorProfileNumber;

You don&apos;t need this.

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:203
&gt; +    SelectorProfilesMap m_selectorProfiles;

You don&apos;t need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523853</commentid>
    <comment_count>13</comment_count>
      <attachid>119852</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 05:41:06 -0800</bug_when>
    <thetext>Created attachment 119852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523854</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 05:43:30 -0800</bug_when>
    <thetext>Attachment 119852 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:584:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523863</commentid>
    <comment_count>15</comment_count>
      <attachid>119852</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-19 05:53:08 -0800</bug_when>
    <thetext>Comment on attachment 119852
Patch

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

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:151
&gt; +        : totalTime(0.0), hits(0), matches(0)

m_totalTime, m_hits, m_matches

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:163
&gt; +class SelectorProfile : public RefCounted&lt;SelectorProfile&gt; {

Why is this ref-counted?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:282
&gt; +    , m_recordingSelectorProfile(false)

nuke?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:287
&gt; +    , m_id(1)

nuke?

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:99
&gt; +    int id() const { return m_id; }

You don&apos;t need this id.

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:102
&gt; +    struct RuleMatchData {

Can this still be a part of profile?

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:145
&gt; +    bool m_recordingSelectorProfile;

nuke.

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:153
&gt; +    int m_id;

nuke

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:156
&gt; +    RuleMatchData m_currentMatchData;

move to profile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523890</commentid>
    <comment_count>16</comment_count>
      <attachid>119859</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 06:48:28 -0800</bug_when>
    <thetext>Created attachment 119859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523893</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 06:55:06 -0800</bug_when>
    <thetext>Attachment 119859 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:590:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523895</commentid>
    <comment_count>18</comment_count>
      <attachid>119859</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-12-19 07:02:53 -0800</bug_when>
    <thetext>Comment on attachment 119859
Patch

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

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:332
&gt; +    if (m_state-&gt;getBoolean(CSSAgentState::isSelectorProfiling))

This will not work.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:583
&gt; +    if (m_state-&gt;getBoolean(CSSAgentState::isSelectorProfiling))

so you should remove this check.

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:92
&gt; +    void startSelectorProfiler(ErrorString* = 0);

0 error string would be unexpected to the method implementor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523898</commentid>
    <comment_count>19</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-12-19 07:14:32 -0800</bug_when>
    <thetext>Committed r103236: &lt;http://trac.webkit.org/changeset/103236&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119425</attachid>
            <date>2011-12-15 07:27:27 -0800</date>
            <delta_ts>2011-12-16 02:24:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74603-20111215192725.patch</filename>
            <type>text/plain</type>
            <size>20370</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU0YjY5YjFhYmRhN2U0
Y2E0OGFlNjdhNjMyYmVmNTc0MWVlNzkxNi4uNjBkYjdmZTI5YTkxOWYxMzM5NTk1NmE2NGUyZWZm
NDEwZjJjZTY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDExLTEyLTE1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhl
IGNoYW5nZWQgY29kZSBkb2VzIG5vdCByZXN1bHQgaW4gdmlzaWJsZSBlZmZlY3RzIHlldC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRv
SW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJ
bnNwZWN0b3JDU1NBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3Rv
clByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2Vs
ZWN0b3JQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
UHJvZmlsZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlbW92ZVBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFByb2Nlc3NSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRQcm9jZXNzUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlU2VsZWN0b3JQcm9maWxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRTZWxlY3Rv
clByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVJl
Y29yZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQ
cm9maWxlclN0YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpjbGVhclByb2ZpbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjppZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6UnVsZU1hdGNoaW5nU3RhdHM6OlJ1bGVNYXRjaGluZ1N0YXRz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQ
cm9maWxlOjp+U2VsZWN0b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNT
U0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnVpZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjp0b3RhbE1hdGNoaW5nVGltZU1zKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OlNl
bGVjdG9yUHJvZmlsZSk6CisKIDIwMTEtMTItMTUgIEplc3VzIFNhbmNoZXotUGFsZW5jaWEgIDxq
ZXN1cy5wYWxlbmNpYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBTZXR0aW5n
IERvd25sb2FkIGFzIGFjdGlvbiBmb3IgbmF2aWdhdGlvbiByZXF1ZXN0IGNyYXNoZXMgV2ViUHJv
Y2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IGY5ZmY3NjA2
ZTRiNmQ3NTUxOTMwNmYyMGU3Y2QwMjI2MDM2OWNiY2EuLjNmMTcyN2Y5MmJhYmNlOGI3MzE0NzBk
NTUzYTY2ODNlNTA1N2EyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24KQEAgLTE2MTMsNiArMTYxMywyOSBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNvdXJjZUxpbmUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIkxpbmUgaW4gdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgdGhlIG1lZGlhIHF1ZXJ5
IChub3QgZGVmaW5lZCBmb3IgdGhlIFwic3R5bGVzaGVldFwiIHNvdXJjZSkuIiB9CiAgICAgICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIG1lZGlhIHF1
ZXJ5IGRlc2NyaXB0b3IuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAiaWQiOiAiUHJvZmlsZUhlYWRlciIsCisgICAgICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUHJvZmlsZSBoZWFkZXIu
IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAi
UHJvZmlsZUVudHJ5IiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNlbGVjdG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxlY3Rv
ci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZSIsICJ0eXBlIjogIm51
bWJlciIsICJkZXNjcmlwdGlvbiI6ICJUb3RhbCB0aW1lIHRoaXMgc2VsZWN0b3IgaGFuZGxpbmcg
Y29udHJpYnV0ZWQgdG8gdGhlIGJyb3dzZXIgcnVubmluZyB0aW1lIGR1cmluZyBwcm9maWxpbmcg
KGluIG1pbGxpc2Vjb25kcy4pIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhp
dHMiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiB0aW1lcyB0
aGlzIHNlbGVjdG9yIHdhcyBjb25zaWRlcmVkIGEgY2FuZGlkYXRlIGZvciBtYXRjaGluZyBhZ2Fp
bnN0IERPTSBlbGVtZW50cy4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWF0
Y2hlcyIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHRpbWVz
IHRoaXMgc2VsZWN0b3IgYWN0dWFsbHkgbWF0Y2hlZCBhIERPTSBlbGVtZW50LiIgfQorICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxlY3Rv
ciBwcm9maWxlIGVudHJ5LiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgImlkIjogIlByb2ZpbGUiLAorICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YSIsICJ0eXBlIjogImFycmF5IiwgIml0ZW0iOiB7ICIkcmVmIjogIlBy
b2ZpbGVFbnRyeSIgfSwgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxlY3RvciBwcm9maWxlIGVudHJp
ZXMuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAg
ICAgICAiY29tbWFuZHMiOiBbCkBAIC0xNzQ5LDEyICsxNzcyLDU0IEBACiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY3NzUHJvcGVydGllcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0ZWQgcHJvcGVy
dHkgbmFtZXMuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiUmV0dXJucyBhbGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1lcy4iCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInN0YXJ0
U2VsZWN0b3JQcm9maWxlciIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgIm5hbWUiOiAic3RvcFNlbGVjdG9yUHJvZmlsZXIiCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImdldFByb2ZpbGVIZWFkZXJz
IiwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJoZWFkZXJzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlBy
b2ZpbGVIZWFkZXIiIH0gfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiZ2V0UHJvZmlsZSIsCisgICAgICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dWlkIiwgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZmls
ZSIsICIkcmVmIjogIlByb2ZpbGUiIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInJlbW92ZVByb2ZpbGUi
LAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInVpZCIsICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgICAgICAgICBdCisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImNs
ZWFyUHJvZmlsZXMiCiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMi
OiBbCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWVkaWFRdWVyeVJl
c3VsdENoYW5nZWQiLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlcyB3aGVu
ZXZlciBhIE1lZGlhUXVlcnkgcmVzdWx0IGNoYW5nZXMgKGZvciBleGFtcGxlLCBhZnRlciBhIGJy
b3dzZXIgd2luZG93IGhhcyBiZWVuIHJlc2l6ZWQuKSBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlv
biBjb25zaWRlcnMgb25seSB2aWV3cG9ydC1kZXBlbmRlbnQgbWVkaWEgZmVhdHVyZXMuIgorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJhZGRQ
cm9maWxlSGVhZGVyIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJoZWFkZXIiLCAiJHJlZiI6ICJQcm9maWxlSGVhZGVyIiB9
CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJzZXRSZWNvcmRpbmdQcm9maWxlIiwKKyAgICAgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc1Byb2Zp
bGluZyIsICJ0eXBlIjogImJvb2xlYW4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAg
ICB9CiAgICAgICAgIF0KICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggZTMxNmRkMDlhYjY1ZTczNjliYjY2YmYxMmQwZjczYzEy
OTQxMzE5Ny4uYmMyYzJkNjA3ZTY0MjYxYjdiMjEwYjA0N2RlNWYzMDU4NmMzNTQyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC00Nyw5
ICs0NywxMSBAQAogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKIAorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCiAvLyBDdXJy
ZW50bHkgaW1wbGVtZW50ZWQgbW9kZWw6CiAvLwpAQCAtMTMxLDggKzEzMywxMiBAQAogCiBuYW1l
c3BhY2UgQ1NTQWdlbnRTdGF0ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBjc3NBZ2VudEVuYWJsZWRb
XSA9ICJjc3NBZ2VudEVuYWJsZWQiOworc3RhdGljIGNvbnN0IGNoYXIgdXNlckluaXRpYXRlZFNl
bGVjdG9yUHJvZmlsaW5nW10gPSAidXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsaW5nIjsKIH0K
IAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFNlbGVjdG9yUHJvZmlsZVR5cGUgPSAiU0VMRUNU
T1IiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9
ICJvcmcud2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlhdGVkIjsKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBlbnVtIEZvcmNlUHNldWRvQ2xhc3NGbGFncyB7CkBAIC0xNzIsNiArMTc4LDQ0IEBA
IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKEluc3BlY3RvckFycmF5KiBw
c2V1ZG9DbGFzc0FycmF5KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3JUZXh0LCBkb3VibGUgbWF0Y2hUaW1lTXMsIGJvb2wgbWF0Y2hlZCkKK3sK
KyAgICBtX3RvdGFsTWF0Y2hpbmdUaW1lTXMgKz0gbWF0Y2hUaW1lTXM7CisgICAgcGFpcjxSdWxl
TWF0Y2hpbmdTdGF0c01hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcnVsZU1hdGNoaW5n
U3RhdHMuYWRkKHNlbGVjdG9yVGV4dCwgUnVsZU1hdGNoaW5nU3RhdHMobWF0Y2hUaW1lTXMsIDEs
IG1hdGNoZWQgPyAxIDogMCkpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBy
ZXN1bHQuZmlyc3QtPnNlY29uZC50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7CisgICAgICAgIHJl
c3VsdC5maXJzdC0+c2Vjb25kLmhpdHMgKz0gMTsKKyAgICAgICAgaWYgKG1hdGNoZWQpCisgICAg
ICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZC5tYXRjaGVzICs9IDE7CisgICAgfQorfQorCitp
bmxpbmUgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxl
Y3RvclRpbWUoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGRvdWJsZSBwcm9jZXNzaW5nVGlt
ZU1zKQoreworICAgIG1fdG90YWxNYXRjaGluZ1RpbWVNcyArPSBwcm9jZXNzaW5nVGltZU1zOwor
ICAgIFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjppdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3Rh
dHMuZmluZChzZWxlY3RvclRleHQpOworICAgIGlmIChpdCA9PSBtX3J1bGVNYXRjaGluZ1N0YXRz
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpdC0+c2Vjb25kLnRvdGFsVGltZSArPSBw
cm9jZXNzaW5nVGltZU1zOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdAor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBmb3IgKFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcnVsZU1hdGNoaW5nU3RhdHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5l
bmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6UHJvZmlsZUVu
dHJ5PiBzdGF0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6UHJvZmlsZUVudHJ5OjpjcmVhdGUoKQorICAg
ICAgICAgICAgLnNldFNlbGVjdG9yKGl0LT5maXJzdCkKKyAgICAgICAgICAgIC5zZXRUaW1lKGl0
LT5zZWNvbmQudG90YWxUaW1lKQorICAgICAgICAgICAgLnNldEhpdHMoaXQtPnNlY29uZC5oaXRz
KQorICAgICAgICAgICAgLnNldE1hdGNoZXMoaXQtPnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAg
ZGF0YS0+cHVzaE9iamVjdChzdGF0LnJlbGVhc2UoKSk7CisgICAgfQorICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpQcm9maWxlPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpQcm9maWxl
OjpjcmVhdGUoKQorICAgICAgICAuc2V0RGF0YShkYXRhKTsKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKK30KKwogLy8gc3RhdGljCiBDU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6cGFyZW50U3R5bGVTaGVldChDU1NSdWxlKiBydWxlKQogewpAQCAtMTkzLDEwICsyMzcsMTMg
QEAgSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkKICAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNw
ZWN0b3JDU1NBZ2VudD4oIkNTUyIsIGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlKQogICAgICwg
bV9mcm9udGVuZCgwKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKKyAgICAsIG1fcmVjb3Jk
aW5nVXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZShmYWxzZSkKKyAgICAsIG1fbmV4dFVzZXJJ
bml0aWF0ZWRTZWxlY3RvclByb2ZpbGVOdW1iZXIoMSkKICAgICAsIG1fbGFzdFBzZXVkb1N0YXRl
KDApCiAgICAgLCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkKICAgICAsIG1fbGFzdFJ1bGVJZCgxKQog
ICAgICwgbV9sYXN0U3R5bGVJZCgxKQorICAgICwgbV9pZCgxKQogewogICAgIG1fZG9tQWdlbnQt
PnNldERPTUxpc3RlbmVyKHRoaXMpOwogfQpAQCAtMjE5LDYgKzI2Niw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICAg
ICBtX2Zyb250ZW5kID0gMDsKICAgICBjbGVhclBzZXVkb1N0YXRlKHRydWUpOworICAgIHN0b3BT
ZWxlY3RvclByb2ZpbGVyKCk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0
b3JDU1NBZ2VudCgwKTsKIH0KIApAQCAtMjM0LDYgKzI4Miw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnJlc3RvcmUoKQogICAgICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICAgICAgZW5h
YmxlKCZlcnJvcik7CiAgICAgfQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKENTU0FnZW50
U3RhdGU6OnVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGluZykpCisgICAgICAgIHN0YXJ0U2Vs
ZWN0b3JQcm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCkBA
IC0yOTAsNyArMzQwLDYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQ
c2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIEluc3AKICAgICAgICAgZWxlbWVu
dC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVk
aWF0ZWx5KTsKIH0KIAotCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVz
Rm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGJvb2wqIG5lZWRQc2V1ZG8s
IGJvb2wqIG5lZWRJbmhlcml0ZWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG1hdGNoZWRDU1NS
dWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwpAQCAtNDgyLDYgKzUzMSwxMDggQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyosIFJlZlB0cjxJbnNwZWN0b3IKICAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMu
cmVsZWFzZSgpOwogfQogCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9yUHJv
ZmlsZXIoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIGlmIChtX3JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGUgPSB0cnVlOworICAgIFN0cmluZyB0aXRs
ZSA9IG1ha2VTdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCAnLicsIFN0cmluZzo6bnVt
YmVyKG1fbmV4dFVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGVOdW1iZXIrKykpOworICAgIG1f
Y3VycmVudFNlbGVjdG9yUHJvZmlsZSA9IFNlbGVjdG9yUHJvZmlsZTo6Y3JlYXRlKHRpdGxlKTsK
KyAgICB0b2dnbGVSZWNvcmRCdXR0b24odHJ1ZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihD
U1NBZ2VudFN0YXRlOjp1c2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxpbmcsIHRydWUpOworfQor
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcpCit7CisgICAgaWYgKCFtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxl
Y3RvclByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRTZWxlY3RvclByb2ZpbGUgPSBmYWxzZTsKKyAgICBhZGRTZWxlY3RvclByb2ZpbGUobV9jdXJy
ZW50U2VsZWN0b3JQcm9maWxlKTsKKyAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUuY2xlYXIo
KTsKKyAgICB0b2dnbGVSZWNvcmRCdXR0b24oZmFsc2UpOworICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oQ1NTQWdlbnRTdGF0ZTo6dXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsaW5nLCBmYWxzZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFByb2ZpbGVIZWFkZXJzKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaGVhZGVycykKK3sKKyAgICBTZWxlY3RvclBy
b2ZpbGVzTWFwOjppdGVyYXRvciBzZWxlY3RvclByb2ZpbGVzRW5kID0gbV9zZWxlY3RvclByb2Zp
bGVzLmVuZCgpOworICAgIGZvciAoU2VsZWN0b3JQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBt
X3NlbGVjdG9yUHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gc2VsZWN0b3JQcm9maWxlc0VuZDsgKytp
dCkKKyAgICAgICAgKCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVTZWxlY3RvclByb2ZpbGVI
ZWFkZXIoKml0LT5zZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0UHJv
ZmlsZShFcnJvclN0cmluZyosIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IHByb2ZpbGVPYmplY3QpCit7CisgICAgU2VsZWN0b3JQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3NlbGVjdG9yUHJvZmlsZXMuZmluZCh1aWQpOworICAgIGlmIChpdCAhPSBtX3NlbGVjdG9y
UHJvZmlsZXMuZW5kKCkpIHsKKyAgICAgICAgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcHJvZmls
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICpwcm9maWxlT2JqZWN0ID0gcHJvZmlsZS0+dG9JbnNw
ZWN0b3JPYmplY3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlbW92
ZVByb2ZpbGUoRXJyb3JTdHJpbmcqLCB1bnNpZ25lZCB1aWQpCit7CisgICAgbV9zZWxlY3RvclBy
b2ZpbGVzLnJlbW92ZSh1aWQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsTWF0
Y2hSdWxlKGNvbnN0IENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBpZiAobV9yZWNvcmRpbmdV
c2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlKSB7CisgICAgICAgIG1fY3VycmVudE1hdGNoRGF0
YS5zZWxlY3RvciA9IHJ1bGUtPnNlbGVjdG9yVGV4dCgpOworICAgICAgICBtX2N1cnJlbnRNYXRj
aERhdGEuc3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZU1TKCk7CisgICAgfQorfQorCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpkaWRNYXRjaFJ1bGUoYm9vbCBtYXRjaGVkKQoreworICAgIGlm
IChtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIG1fY3Vy
cmVudFNlbGVjdG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3IobV9jdXJyZW50TWF0Y2hEYXRhLnNl
bGVjdG9yLCBXVEY6OmN1cnJlbnRUaW1lTVMoKSAtIG1fY3VycmVudE1hdGNoRGF0YS5zdGFydFRp
bWUsIG1hdGNoZWQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJvY2Vzc1J1
bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAgIGlmIChtX3JlY29yZGluZ1VzZXJJ
bml0aWF0ZWRTZWxlY3RvclByb2ZpbGUpIHsKKyAgICAgICAgbV9jdXJyZW50TWF0Y2hEYXRhLnNl
bGVjdG9yID0gcnVsZS0+c2VsZWN0b3JUZXh0KCk7CisgICAgICAgIG1fY3VycmVudE1hdGNoRGF0
YS5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lTVMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKCkKK3sKKyAgICBpZiAobV9yZWNvcmRpbmdV
c2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclBy
b2ZpbGUtPmNvbW1pdFNlbGVjdG9yVGltZShtX2N1cnJlbnRNYXRjaERhdGEuc2VsZWN0b3IsIFdU
Rjo6Y3VycmVudFRpbWVNUygpIC0gbV9jdXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZSk7Cit9CisK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlU2Vs
ZWN0b3JQcm9maWxlSGVhZGVyKGNvbnN0IFNlbGVjdG9yUHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0aXRsZSIsIHByb2ZpbGUudGl0bGUoKSk7Cisg
ICAgaGVhZGVyLT5zZXROdW1iZXIoInVpZCIsIHByb2ZpbGUudWlkKCkpOworICAgIGhlYWRlci0+
c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoU2VsZWN0b3JQcm9maWxlVHlwZSkpOworICAgIGhl
YWRlci0+c2V0TnVtYmVyKCJ0b3RhbFRpbWVNcyIsIHByb2ZpbGUudG90YWxNYXRjaGluZ1RpbWVN
cygpKTsKKyAgICByZXR1cm4gaGVhZGVyOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojph
ZGRTZWxlY3RvclByb2ZpbGUoUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGU+IHBycFByb2ZpbGUp
Cit7CisgICAgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7Cisg
ICAgbV9zZWxlY3RvclByb2ZpbGVzLmFkZChwcm9maWxlLT51aWQoKSwgcHJvZmlsZSk7CisgICAg
aWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmFkZFByb2ZpbGVIZWFkZXIoY3Jl
YXRlU2VsZWN0b3JQcm9maWxlSGVhZGVyKCpwcm9maWxlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKQoreworICAgIGlm
IChtX2Zyb250ZW5kKQorICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlz
UHJvZmlsaW5nKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQcm9maWxlclN0
YXRlKCkKK3sKKyAgICBzdG9wU2VsZWN0b3JQcm9maWxlcigpOworICAgIG1fc2VsZWN0b3JQcm9m
aWxlcy5jbGVhcigpOworICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGVOdW1i
ZXIgPSAxOworfQorCiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3Rv
ckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVj
dG9yU3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOwpAQCAtNjk3LDYgKzg0OCw5IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmNsZWFyUHNldWRvU3RhdGUoYm9vbCByZWNhbGNTdHlsZXMpCiAgICAg
fQogfQogCisvLyBzdGF0aWMKK2ludCBJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxl
OjpzX2N1cnJlbnRJZCA9IDE7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCmluZGV4IGQ4YTkyMTNhOTZkNmQwYmU4ZDFmODU4ZWUwZGE0NzIwN2RkNjVjNTUu
LjBkNDc4YTVkZDg4MDY5NGQ4NWI3NzBhYjEzMzI2YzY1NWU3YjVhMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC04OCwxMyArODgsODQgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyosIGNvbnN0IGludCBjb250ZXh0
Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
cmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOwogCisgICAgdm9pZCBzdGFydFNlbGVj
dG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqID0gMCk7CisgICAgdm9pZCBzdG9wU2VsZWN0b3JQcm9m
aWxlcihFcnJvclN0cmluZyogPSAwKTsKKyAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiopOworICAgIHZvaWQgZ2V0UHJvZmlsZShF
cnJvclN0cmluZyosIHVuc2lnbmVkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopOworICAgIHZv
aWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIHVuc2lnbmVkKTsKKyAgICB2b2lkIGNsZWFy
UHJvZmlsZXMoRXJyb3JTdHJpbmcqKSB7IHJlc2V0UHJvZmlsZXJTdGF0ZSgpOyB9CisgICAgdm9p
ZCB3aWxsTWF0Y2hSdWxlKGNvbnN0IENTU1N0eWxlUnVsZSopOworICAgIHZvaWQgZGlkTWF0Y2hS
dWxlKGJvb2wpOworICAgIHZvaWQgd2lsbFByb2Nlc3NSdWxlKGNvbnN0IENTU1N0eWxlUnVsZSop
OworICAgIHZvaWQgZGlkUHJvY2Vzc1J1bGUoKTsKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KKwogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUnVsZU1hdGNoaW5nU3RhdHMgewor
ICAgICAgICBSdWxlTWF0Y2hpbmdTdGF0cygpCisgICAgICAgICAgICA6IHRvdGFsVGltZSgwLjAp
LCBoaXRzKDApLCBtYXRjaGVzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBSdWxl
TWF0Y2hpbmdTdGF0cyhkb3VibGUgdG90YWxUaW1lLCB1bnNpZ25lZCBoaXRzLCB1bnNpZ25lZCBt
YXRjaGVzKQorICAgICAgICAgICAgOiB0b3RhbFRpbWUodG90YWxUaW1lKSwgaGl0cyhoaXRzKSwg
bWF0Y2hlcyhtYXRjaGVzKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZG91YmxlIHRv
dGFsVGltZTsKKyAgICAgICAgdW5zaWduZWQgaGl0czsKKyAgICAgICAgdW5zaWduZWQgbWF0Y2hl
czsKKyAgICB9OworCisgICAgY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8U2VsZWN0b3JQcm9maWxlPiB7CisgICAgcHVibGljOgorICAgICAgICAvLyBGSVhNRTogaGFu
ZGxlIGRpZmZlcmVudCBydWxlcyB3aXRoIHRoZSBzYW1lIHNlbGVjdG9yIGRpZmZlcmVudGx5Pwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGU+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHRpdGxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNlbGVjdG9yUHJvZmlsZShzX2N1cnJlbnRJZCsrLCB0aXRsZSkpOworICAgICAgICB9CisgICAg
ICAgIHZpcnR1YWwgflNlbGVjdG9yUHJvZmlsZSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICAgICAg
dW5zaWduZWQgaW50IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICAgICAgZG91Ymxl
IHRvdGFsTWF0Y2hpbmdUaW1lTXMoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsTWF0Y2hpbmdUaW1l
TXM7IH0KKworICAgICAgICB2b2lkIGNvbW1pdFNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIGRvdWJs
ZSwgYm9vbCk7CisgICAgICAgIHZvaWQgY29tbWl0U2VsZWN0b3JUaW1lKGNvbnN0IFN0cmluZyYs
IGRvdWJsZSk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB0b0luc3BlY3Rv
ck9iamVjdCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgUnVsZU1hdGNoaW5nU3RhdHM+IFJ1bGVNYXRjaGluZ1N0YXRzTWFwOworICAgICAg
ICBTZWxlY3RvclByb2ZpbGUoaW50IGlkLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorICAgICAgICAg
ICAgOiBtX2lkKGlkKSwgbV90aXRsZSh0aXRsZSksIG1fdG90YWxNYXRjaGluZ1RpbWVNcygwLjAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBpbnQgc19jdXJyZW50SWQ7
CisgICAgICAgIGNvbnN0IGludCBtX2lkOworICAgICAgICBjb25zdCBTdHJpbmcgbV90aXRsZTsK
KyAgICAgICAgZG91YmxlIG1fdG90YWxNYXRjaGluZ1RpbWVNczsKKyAgICAgICAgUnVsZU1hdGNo
aW5nU3RhdHNNYXAgbV9ydWxlTWF0Y2hpbmdTdGF0czsKKyAgICB9OworCisgICAgc3RydWN0IFJ1
bGVNYXRjaERhdGEgeworICAgICAgICBTdHJpbmcgc2VsZWN0b3I7CisgICAgICAgIGRvdWJsZSBz
dGFydFRpbWU7CisgICAgfTsKKwogICAgIEluc3BlY3RvckNTU0FnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluc3BlY3RvckRPTUFnZW50Kik7CiAKICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBJZFRvSW5z
cGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxl
U2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiA+IE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7IC8vIGJvZ3Vz
ICJzdHlsZXNoZWV0cyIgd2l0aCBlbGVtZW50cycgaW5saW5lIHN0eWxlcwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBE
b2N1bWVudFRvVmlhSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gInZpYSBpbnNwZWN0b3IiIHN0eWxl
c2hlZXRzCisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNlbGVjdG9y
UHJvZmlsZT4gPiBTZWxlY3RvclByb2ZpbGVzTWFwOworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGNyZWF0ZVNlbGVjdG9yUHJvZmlsZUhlYWRlcihjb25zdCBTZWxlY3RvclByb2Zp
bGUmKTsKKyAgICB2b2lkIGFkZFNlbGVjdG9yUHJvZmlsZShQYXNzUmVmUHRyPFNlbGVjdG9yUHJv
ZmlsZT4pOworICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOworICAgIHZvaWQgcmVz
ZXRQcm9maWxlclN0YXRlKCk7CiAKICAgICB2b2lkIHJlY2FsY1N0eWxlRm9yUHNldWRvU3RhdGVJ
Zk5lZWRlZChFbGVtZW50KiwgSW5zcGVjdG9yQXJyYXkqIGZvcmNlZFBzZXVkb0NsYXNzZXMpOwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogYXNJbnNwZWN0b3JTdHlsZVNo
ZWV0KEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMTE4LDE3ICsxODksMjYgQEAgcHJpdmF0ZToKIAog
ICAgIEluc3BlY3RvckZyb250ZW5kOjpDU1MqIG1fZnJvbnRlbmQ7CiAgICAgSW5zcGVjdG9yRE9N
QWdlbnQqIG1fZG9tQWdlbnQ7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGFzdEVsZW1lbnRXaXRo
UHNldWRvU3RhdGU7Ci0gICAgdW5zaWduZWQgbV9sYXN0UHNldWRvU3RhdGU7CiAKICAgICBJZFRv
SW5zcGVjdG9yU3R5bGVTaGVldCBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIENTU1N0
eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JT
dHlsZVNoZWV0OwogICAgIE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9ub2RlVG9JbnNwZWN0
b3JTdHlsZVNoZWV0OwogICAgIERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0IG1fZG9j
dW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAKKyAgICBib29sIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFNlbGVjdG9yUHJvZmlsZTsKKyAgICB1bnNpZ25lZCBtX25leHRVc2VySW5pdGlhdGVk
U2VsZWN0b3JQcm9maWxlTnVtYmVyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGFzdEVsZW1l
bnRXaXRoUHNldWRvU3RhdGU7CisgICAgdW5zaWduZWQgbV9sYXN0UHNldWRvU3RhdGU7CisKICAg
ICBpbnQgbV9sYXN0U3R5bGVTaGVldElkOwogICAgIGludCBtX2xhc3RSdWxlSWQ7CiAgICAgaW50
IG1fbGFzdFN0eWxlSWQ7CisgICAgaW50IG1faWQ7CisKKyAgICBTZWxlY3RvclByb2ZpbGVzTWFw
IG1fc2VsZWN0b3JQcm9maWxlczsKKyAgICBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBtX2N1cnJl
bnRTZWxlY3RvclByb2ZpbGU7CisgICAgUnVsZU1hdGNoRGF0YSBtX2N1cnJlbnRNYXRjaERhdGE7
CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCAwMmNmOWVmZjY0YzJkZGQ1MTFmNWE3MzZiMmU1NGUx
NWQ3MTlhODM3Li44ZDg5NmNlMmZkMjI0ZjJjYmJkYTVlNWUxYmMzYjQxMmEzMDUwNzlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVs
LmpzCkBAIC04NzEsNiArODcxLDE0IEBAIFdlYkluc3BlY3Rvci5DU1NEaXNwYXRjaGVyLnByb3Rv
dHlwZSA9IHsKICAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZDogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgdGhpcy5fY3NzTW9kZWwubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKKyAgICB9
LAorCisgICAgYWRkUHJvZmlsZUhlYWRlcjogZnVuY3Rpb24ocHJvZmlsZUhlYWRlcikKKyAgICB7
CisgICAgfSwKKworICAgIHNldFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKGlzUHJvZmlsaW5n
KQorICAgIHsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119589</attachid>
            <date>2011-12-16 02:24:14 -0800</date>
            <delta_ts>2011-12-19 04:39:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74603-20111216142412.patch</filename>
            <type>text/plain</type>
            <size>20287</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNlMjdlYWI4OTAwOGYx
MjRiNDBmMWE1Yjc4MGFmODNiZmMyMzY2My4uMjI2NTFlNTJkMDQ0NjM5ODY3NjA0ZDY0ZTJhNmJm
YmY5MzZmNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTEyLTE1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhl
IGNoYW5nZWQgY29kZSBkb2VzIG5vdCByZXN1bHQgaW4gdmlzaWJsZSBlZmZlY3RzIHlldC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRv
SW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJ
bnNwZWN0b3JDU1NBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3Rv
clByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2Vs
ZWN0b3JQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
UHJvZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlbW92ZVBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFByb2Nlc3NSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkaWRQcm9jZXNzUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlU2VsZWN0b3JQcm9maWxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRTZWxlY3Rv
clByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVJl
Y29yZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQ
cm9maWxlclN0YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpjbGVhclByb2ZpbGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjppZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6UnVsZU1hdGNoaW5nU3RhdHM6OlJ1bGVNYXRjaGluZ1N0YXRz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQ
cm9maWxlOjp+U2VsZWN0b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNT
U0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnVpZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjp0b3RhbE1hdGNoaW5nVGltZU1zKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OlNl
bGVjdG9yUHJvZmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1v
ZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU0Rpc3BhdGNoZXIucHJvdG90eXBlLm1l
ZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NEaXNwYXRj
aGVyLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKToKKwogMjAxMS0xMi0xNCAgQ2hyaXMg
TWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgSGFyZHdhcmUgYWNjZWxlcmF0
aW9uIG9mIFczQyBGaWx0ZXIgRWZmZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCmluZGV4IGY5ZmY3NjA2ZTRiNmQ3NTUxOTMwNmYyMGU3Y2QwMjI2MDM2OWNiY2EuLjM4
Zjc3N2YxMmEyNDhiNmI5M2ZkOTYyYTA0MGU5NGNmNzhiNDdiNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE2MTMsNiArMTYxMywyOCBAQAogICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZUxpbmUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkxpbmUgaW4gdGhlIGRvY3VtZW50IGNvbnRh
aW5pbmcgdGhlIG1lZGlhIHF1ZXJ5IChub3QgZGVmaW5lZCBmb3IgdGhlIFwic3R5bGVzaGVldFwi
IHNvdXJjZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3IuIgorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiUHJvZmlsZUVudHJ5IiwKKyAgICAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlbGVjdG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxlY3Rvci4iIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZSIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6
ICJUb3RhbCB0aW1lIHRoaXMgc2VsZWN0b3IgaGFuZGxpbmcgY29udHJpYnV0ZWQgdG8gdGhlIGJy
b3dzZXIgcnVubmluZyB0aW1lIGR1cmluZyBwcm9maWxpbmcgKGluIG1pbGxpc2Vjb25kcy4pIiB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpdENvdW50IiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgdGltZXMgdGhpcyBzZWxlY3RvciB3YXMg
Y29uc2lkZXJlZCBhIGNhbmRpZGF0ZSBmb3IgbWF0Y2hpbmcgYWdhaW5zdCBET00gZWxlbWVudHMu
IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNoQ291bnQiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiB0aW1lcyB0aGlzIHNlbGVjdG9y
IGFjdHVhbGx5IG1hdGNoZWQgYSBET00gZWxlbWVudC4iIH0KKyAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRy
eS4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6
ICJQcm9maWxlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
dGxlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlByb2ZpbGUgdGl0bGUuIiB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVpZCIsICJ0eXBlIjogImludGVnZXIi
LCAiZGVzY3JpcHRpb24iOiAiUHJvZmlsZSBpZGVudGlmaWVyICh1bmlxdWUgYW1vbmcgQ1NTIHNl
bGVjdG9yIHByb2ZpbGVzLikiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlw
ZUlkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlByb2ZpbGUgdHlwZSBpZGVu
dGlmaWVyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0b3RhbFRpbWUiLCAi
dHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiVG90YWwgcHJvY2Vzc2luZyB0aW1lIGZv
ciBhbGwgc2VsZWN0b3JzIGluIHRoZSBwcm9maWxlIChpbiBtaWxsaXNlY29uZHMuKSIgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICIkcmVmIjogIlByb2ZpbGVFbnRyeSIgfSwgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxl
Y3RvciBwcm9maWxlIGVudHJpZXMuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAg
fQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCkBAIC0xNzQ5LDEyICsxNzcxLDQy
IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY3NzUHJvcGVydGllcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6
ICJTdXBwb3J0ZWQgcHJvcGVydHkgbmFtZXMuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBhbGwgc3VwcG9ydGVkIENTUyBwcm9w
ZXJ0eSBuYW1lcy4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJuYW1lIjogInN0YXJ0U2VsZWN0b3JQcm9maWxlciIKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RvcFNlbGVjdG9yUHJvZmlsZXIi
LAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInByb2ZpbGUiLCAiJHJlZiI6ICJQcm9maWxlIiB9CisgICAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJn
ZXRQcm9maWxlcyIsCisgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiaGVhZGVycyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
JHJlZiI6ICJQcm9maWxlIiB9IH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInJlbW92ZVByb2ZpbGUiLAor
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInVpZCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiUHJvZmlsZSBV
SUQgdG8gcmVtb3ZlLiIgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiY2xlYXJQcm9maWxlcyIKICAgICAg
ICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIsCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVzIHdoZW5ldmVyIGEgTWVkaWFRdWVyeSBy
ZXN1bHQgY2hhbmdlcyAoZm9yIGV4YW1wbGUsIGFmdGVyIGEgYnJvd3NlciB3aW5kb3cgaGFzIGJl
ZW4gcmVzaXplZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGNvbnNpZGVycyBvbmx5IHZp
ZXdwb3J0LWRlcGVuZGVudCBtZWRpYSBmZWF0dXJlcy4iCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNldFJlY29yZGluZ1Byb2ZpbGUiLAor
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImlzUHJvZmlsaW5nIiwgInR5cGUiOiAiYm9vbGVhbiIgfQorICAgICAgICAgICAgICAg
IF0KICAgICAgICAgICAgIH0KICAgICAgICAgXQogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBlMzE2ZGQwOWFiNjVlNzM2OWJi
NjZiZjEyZDBmNzNjMTI5NDEzMTk3Li42ZGNjNmZhYWNkNjA3ODUxYTVlMzdjZTI2NTk3NjMxODhi
MzkzZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAKQEAgLTQ3LDkgKzQ3LDExIEBACiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRl
ICJTdHlsZVNoZWV0TGlzdC5oIgogCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
Lmg+CiAKIC8vIEN1cnJlbnRseSBpbXBsZW1lbnRlZCBtb2RlbDoKIC8vCkBAIC0xMzEsOCArMTMz
LDEyIEBACiAKIG5hbWVzcGFjZSBDU1NBZ2VudFN0YXRlIHsKIHN0YXRpYyBjb25zdCBjaGFyIGNz
c0FnZW50RW5hYmxlZFtdID0gImNzc0FnZW50RW5hYmxlZCI7CitzdGF0aWMgY29uc3QgY2hhciB1
c2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxpbmdbXSA9ICJ1c2VySW5pdGlhdGVkU2VsZWN0b3JQ
cm9maWxpbmciOwogfQogCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgU2VsZWN0b3JQcm9maWxl
VHlwZSA9ICJTRUxFQ1RPUiI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlckluaXRpYXRl
ZFByb2ZpbGVOYW1lID0gIm9yZy53ZWJraXQucHJvZmlsZXMudXNlci1pbml0aWF0ZWQiOworCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gRm9yY2VQc2V1ZG9DbGFzc0ZsYWdzIHsKQEAgLTE3
Miw2ICsxNzgsNDkgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soSW5z
cGVjdG9yQXJyYXkqIHBzZXVkb0NsYXNzQXJyYXkpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
aW5saW5lIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGRvdWJsZSBtYXRjaFRpbWVNcywgYm9v
bCBtYXRjaGVkKQoreworICAgIG1fdG90YWxNYXRjaGluZ1RpbWVNcyArPSBtYXRjaFRpbWVNczsK
KyAgICBwYWlyPFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
bV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQoc2VsZWN0b3JUZXh0LCBSdWxlTWF0Y2hpbmdTdGF0cyht
YXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEgOiAwKSk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7CisgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRjaFRpbWVN
czsKKyAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQuaGl0cyArPSAxOworICAgICAgICBpZiAo
bWF0Y2hlZCkKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kLm1hdGNoZXMgKz0gMTsK
KyAgICB9Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2Zp
bGU6OmNvbW1pdFNlbGVjdG9yVGltZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgZG91Ymxl
IHByb2Nlc3NpbmdUaW1lTXMpCit7CisgICAgbV90b3RhbE1hdGNoaW5nVGltZU1zICs9IHByb2Nl
c3NpbmdUaW1lTXM7CisgICAgUnVsZU1hdGNoaW5nU3RhdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9y
dWxlTWF0Y2hpbmdTdGF0cy5maW5kKHNlbGVjdG9yVGV4dCk7CisgICAgaWYgKGl0ID09IG1fcnVs
ZU1hdGNoaW5nU3RhdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5zZWNvbmQu
dG90YWxUaW1lICs9IHByb2Nlc3NpbmdUaW1lTXM7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rvck9i
amVjdCgpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZvciAoUnVsZU1hdGNoaW5nU3RhdHNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5iZWdpbigpOyBpdCAhPSBtX3J1bGVN
YXRjaGluZ1N0YXRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpQcm9maWxlRW50cnk+IHN0YXQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpQcm9maWxlRW50cnk6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPmZpcnN0KQorICAgICAgICAg
ICAgLnNldFRpbWUoaXQtPnNlY29uZC50b3RhbFRpbWUpCisgICAgICAgICAgICAuc2V0SGl0Q291
bnQoaXQtPnNlY29uZC5oaXRzKQorICAgICAgICAgICAgLnNldE1hdGNoQ291bnQoaXQtPnNlY29u
ZC5tYXRjaGVzKTsKKyAgICAgICAgZGF0YS0+cHVzaE9iamVjdChzdGF0LnJlbGVhc2UoKSk7Cisg
ICAgfQorCisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlByb2ZpbGU+IHJlc3VsdCA9IFR5
cGVCdWlsZGVyOjpDU1M6OlByb2ZpbGU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUaXRsZSh0aXRs
ZSgpKQorICAgICAgICAuc2V0VWlkKHVpZCgpKQorICAgICAgICAuc2V0VHlwZUlkKFNlbGVjdG9y
UHJvZmlsZVR5cGUpCisgICAgICAgIC5zZXRUb3RhbFRpbWUodG90YWxNYXRjaGluZ1RpbWVNcygp
KQorICAgICAgICAuc2V0RGF0YShkYXRhKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
K30KKwogLy8gc3RhdGljCiBDU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6cGFyZW50
U3R5bGVTaGVldChDU1NSdWxlKiBydWxlKQogewpAQCAtMTkzLDEwICsyNDIsMTMgQEAgSW5zcGVj
dG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEkKICAgICA6IEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JDU1NB
Z2VudD4oIkNTUyIsIGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlKQogICAgICwgbV9mcm9udGVu
ZCgwKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKKyAgICAsIG1fcmVjb3JkaW5nVXNlcklu
aXRpYXRlZFNlbGVjdG9yUHJvZmlsZShmYWxzZSkKKyAgICAsIG1fbmV4dFVzZXJJbml0aWF0ZWRT
ZWxlY3RvclByb2ZpbGVOdW1iZXIoMSkKICAgICAsIG1fbGFzdFBzZXVkb1N0YXRlKDApCiAgICAg
LCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkKICAgICAsIG1fbGFzdFJ1bGVJZCgxKQogICAgICwgbV9s
YXN0U3R5bGVJZCgxKQorICAgICwgbV9pZCgxKQogewogICAgIG1fZG9tQWdlbnQtPnNldERPTUxp
c3RlbmVyKHRoaXMpOwogfQpAQCAtMjE5LDYgKzI3MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmNsZWFyRnJvbnRlbmQoKQogICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKICAgICBtX2Zyb250
ZW5kID0gMDsKICAgICBjbGVhclBzZXVkb1N0YXRlKHRydWUpOworICAgIHN0b3BTZWxlY3RvclBy
b2ZpbGVyKCk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2Vu
dCgwKTsKIH0KIApAQCAtMjM0LDYgKzI4Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJl
c3RvcmUoKQogICAgICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICAgICAgZW5hYmxlKCZlcnJv
cik7CiAgICAgfQorICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OnVz
ZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGluZykpCisgICAgICAgIHN0YXJ0U2VsZWN0b3JQcm9m
aWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCkBAIC0yOTAsNyAr
MzQ1LDYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0
ZUlmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIEluc3AKICAgICAgICAgZWxlbWVudC0+b3duZXJE
b2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsK
IH0KIAotCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGJvb2wqIG5lZWRQc2V1ZG8sIGJvb2wqIG5l
ZWRJbmhlcml0ZWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG1hdGNoZWRDU1NSdWxlcywgUmVm
UHRyPEluc3BlY3RvckFycmF5PiogcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5
PiogaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZv
cklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwpAQCAtNDgyLDYgKzUzNiwxMDEgQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJl
ZlB0cjxJbnNwZWN0b3IKICAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgp
OwogfQogCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJy
b3JTdHJpbmcqKQoreworICAgIGlmIChtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxlY3RvclBy
b2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxl
Y3RvclByb2ZpbGUgPSB0cnVlOworICAgIFN0cmluZyB0aXRsZSA9IG1ha2VTdHJpbmcoVXNlcklu
aXRpYXRlZFByb2ZpbGVOYW1lLCAnLicsIFN0cmluZzo6bnVtYmVyKG1fbmV4dFVzZXJJbml0aWF0
ZWRTZWxlY3RvclByb2ZpbGVOdW1iZXIrKykpOworICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmls
ZSA9IFNlbGVjdG9yUHJvZmlsZTo6Y3JlYXRlKHRpdGxlKTsKKyAgICB0b2dnbGVSZWNvcmRCdXR0
b24odHJ1ZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjp1c2VySW5p
dGlhdGVkU2VsZWN0b3JQcm9maWxpbmcsIHRydWUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiByZXN1bHQpCit7CisgICAgaWYgKCFtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxl
Y3RvclByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRTZWxlY3RvclByb2ZpbGUgPSBmYWxzZTsKKyAgICBhZGRTZWxlY3RvclByb2ZpbGUobV9jdXJy
ZW50U2VsZWN0b3JQcm9maWxlKTsKKyAgICB0b2dnbGVSZWNvcmRCdXR0b24oZmFsc2UpOworICAg
IG1fc3RhdGUtPnNldEJvb2xlYW4oQ1NTQWdlbnRTdGF0ZTo6dXNlckluaXRpYXRlZFNlbGVjdG9y
UHJvZmlsaW5nLCBmYWxzZSk7CisgICAgaWYgKG1fZnJvbnRlbmQgJiYgcmVzdWx0KQorICAgICAg
ICAqcmVzdWx0ID0gbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT50b0luc3BlY3Rvck9iamVjdCgp
OworICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS5jbGVhcigpOworfQorCit2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRQcm9maWxlcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHByb2ZpbGVzKQoreworICAgIFNlbGVjdG9yUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIHNl
bGVjdG9yUHJvZmlsZXNFbmQgPSBtX3NlbGVjdG9yUHJvZmlsZXMuZW5kKCk7CisgICAgZm9yIChT
ZWxlY3RvclByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fc2VsZWN0b3JQcm9maWxlcy5iZWdp
bigpOyBpdCAhPSBzZWxlY3RvclByb2ZpbGVzRW5kOyArK2l0KQorICAgICAgICAoKnByb2ZpbGVz
KS0+cHVzaE9iamVjdChpdC0+c2Vjb25kLT50b0luc3BlY3Rvck9iamVjdCgpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIHVuc2lnbmVk
IHVpZCkKK3sKKyAgICBtX3NlbGVjdG9yUHJvZmlsZXMucmVtb3ZlKHVpZCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxl
KQoreworICAgIGlmIChtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGUpIHsK
KyAgICAgICAgbV9jdXJyZW50TWF0Y2hEYXRhLnNlbGVjdG9yID0gcnVsZS0+c2VsZWN0b3JUZXh0
KCk7CisgICAgICAgIG1fY3VycmVudE1hdGNoRGF0YS5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRU
aW1lTVMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVs
ZShib29sIG1hdGNoZWQpCit7CisgICAgaWYgKG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFNlbGVj
dG9yUHJvZmlsZSkKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxl
Y3RvcihtX2N1cnJlbnRNYXRjaERhdGEuc2VsZWN0b3IsIFdURjo6Y3VycmVudFRpbWVNUygpIC0g
bV9jdXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZSwgbWF0Y2hlZCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OndpbGxQcm9jZXNzUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7
CisgICAgaWYgKG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZSkgeworICAg
ICAgICBtX2N1cnJlbnRNYXRjaERhdGEuc2VsZWN0b3IgPSBydWxlLT5zZWxlY3RvclRleHQoKTsK
KyAgICAgICAgbV9jdXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWVN
UygpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUHJvY2Vzc1J1bGUo
KQoreworICAgIGlmIChtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGUpCisg
ICAgICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3JUaW1lKG1fY3Vy
cmVudE1hdGNoRGF0YS5zZWxlY3RvciwgV1RGOjpjdXJyZW50VGltZU1TKCkgLSBtX2N1cnJlbnRN
YXRjaERhdGEuc3RhcnRUaW1lKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3RvckNTU0FnZW50OjpjcmVhdGVTZWxlY3RvclByb2ZpbGVIZWFkZXIoY29uc3QgU2VsZWN0
b3JQcm9maWxlJiBwcm9maWxlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRl
ciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaGVhZGVyLT5zZXRTdHJpbmcoInRp
dGxlIiwgcHJvZmlsZS50aXRsZSgpKTsKKyAgICBoZWFkZXItPnNldE51bWJlcigidWlkIiwgcHJv
ZmlsZS51aWQoKSk7CisgICAgaGVhZGVyLT5zZXRTdHJpbmcoInR5cGVJZCIsIFN0cmluZyhTZWxl
Y3RvclByb2ZpbGVUeXBlKSk7CisgICAgaGVhZGVyLT5zZXROdW1iZXIoInRvdGFsVGltZU1zIiwg
cHJvZmlsZS50b3RhbE1hdGNoaW5nVGltZU1zKCkpOworICAgIHJldHVybiBoZWFkZXI7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFNlbGVjdG9yUHJvZmlsZShQYXNzUmVmUHRyPFNl
bGVjdG9yUHJvZmlsZT4gcHJwUHJvZmlsZSkKK3sKKyAgICBSZWZQdHI8U2VsZWN0b3JQcm9maWxl
PiBwcm9maWxlID0gcHJwUHJvZmlsZTsKKyAgICBtX3NlbGVjdG9yUHJvZmlsZXMuYWRkKHByb2Zp
bGUtPnVpZCgpLCBwcm9maWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xl
UmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpCit7CisgICAgLy8gTm90aWZ5IGZyb250ZW5k
IGFib3V0IGVuZG9nZW5pYyBwcm9maWxpbmcgc3RhdGUgY2hhbmdlcworICAgIC8vIChlLmcuIHBy
b2ZpbGVyIHN0b3BwYWdlIGR1ZSB0byBjbGVhcmluZyBhbGwgcHJvZmlsZXMgb3IgZGlkQ29tbWl0
TG9hZCgpIG5vdGlmaWNhdGlvbikuCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJv
bnRlbmQtPnNldFJlY29yZGluZ1Byb2ZpbGUoaXNQcm9maWxpbmcpOworfQorCit2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpyZXNldFByb2ZpbGVyU3RhdGUoKQoreworICAgIHN0b3BTZWxlY3RvclBy
b2ZpbGVyKCk7CisgICAgbV9zZWxlY3RvclByb2ZpbGVzLmNsZWFyKCk7CisgICAgbV9uZXh0VXNl
ckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZU51bWJlciA9IDE7Cit9CisKIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVT
aGVldChFbGVtZW50KiBlbGVtZW50KQogewogICAgIE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoZWxlbWVudCk7
CkBAIC02OTcsNiArODQ2LDkgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJQc2V1ZG9T
dGF0ZShib29sIHJlY2FsY1N0eWxlcykKICAgICB9CiB9CiAKKy8vIHN0YXRpYworaW50IEluc3Bl
Y3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnNfY3VycmVudElkID0gMTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggZDhhOTIxM2E5NmQ2
ZDBiZThkMWY4NThlZTBkYTQ3MjA3ZGQ2NWM1NS4uOGE3OWUyMmM2ODc3ZGQ0ZDg3YmQ1NzgyMWI0
ZmMzODQzZmE5ODlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTg4LDEzICs4OCw4MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRSdWxlKEVy
cm9yU3RyaW5nKiwgY29uc3QgaW50IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJl
c3VsdCk7CiAKKyAgICB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyogPSAw
KTsKKyAgICB2b2lkIHN0b3BTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKiA9IDAsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KiA9IDApOworICAgIHZvaWQgZ2V0UHJvZmlsZXMoRXJyb3JTdHJp
bmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Kik7CisgICAgdm9pZCByZW1vdmVQcm9maWxlKEVy
cm9yU3RyaW5nKiwgdW5zaWduZWQpOworICAgIHZvaWQgY2xlYXJQcm9maWxlcyhFcnJvclN0cmlu
ZyopIHsgcmVzZXRQcm9maWxlclN0YXRlKCk7IH0KKyAgICB2b2lkIHdpbGxNYXRjaFJ1bGUoY29u
c3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7CisgICAgdm9p
ZCB3aWxsUHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBkaWRQcm9j
ZXNzUnVsZSgpOworCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCiBwcml2
YXRlOgorICAgIHN0cnVjdCBSdWxlTWF0Y2hpbmdTdGF0cyB7CisgICAgICAgIFJ1bGVNYXRjaGlu
Z1N0YXRzKCkKKyAgICAgICAgICAgIDogdG90YWxUaW1lKDAuMCksIGhpdHMoMCksIG1hdGNoZXMo
MCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIFJ1bGVNYXRjaGluZ1N0YXRzKGRvdWJs
ZSB0b3RhbFRpbWUsIHVuc2lnbmVkIGhpdHMsIHVuc2lnbmVkIG1hdGNoZXMpCisgICAgICAgICAg
ICA6IHRvdGFsVGltZSh0b3RhbFRpbWUpLCBoaXRzKGhpdHMpLCBtYXRjaGVzKG1hdGNoZXMpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBkb3VibGUgdG90YWxUaW1lOworICAgICAgICB1
bnNpZ25lZCBoaXRzOworICAgICAgICB1bnNpZ25lZCBtYXRjaGVzOworICAgIH07CisKKyAgICBj
bGFzcyBTZWxlY3RvclByb2ZpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTZWxlY3RvclByb2ZpbGU+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgZGlmZmVyZW50IHJ1bGVz
IHdpdGggdGhlIHNhbWUgc2VsZWN0b3IgZGlmZmVyZW50bHk/CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlKHNf
Y3VycmVudElkKyssIHRpdGxlKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+U2VsZWN0
b3JQcm9maWxlKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRpdGxl
KCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAgICAgICB1bnNpZ25lZCBpbnQgdWlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBkb3VibGUgdG90YWxNYXRjaGluZ1RpbWVN
cygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxNYXRjaGluZ1RpbWVNczsgfQorCisgICAgICAgIHZv
aWQgY29tbWl0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgZG91YmxlLCBib29sKTsKKyAgICAgICAg
dm9pZCBjb21taXRTZWxlY3RvclRpbWUoY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHRvSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisK
KyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSdWxlTWF0Y2hp
bmdTdGF0cz4gUnVsZU1hdGNoaW5nU3RhdHNNYXA7CisgICAgICAgIFNlbGVjdG9yUHJvZmlsZShp
bnQgaWQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAgICAgICAgICA6IG1faWQoaWQpLCBtX3Rp
dGxlKHRpdGxlKSwgbV90b3RhbE1hdGNoaW5nVGltZU1zKDAuMCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIGludCBzX2N1cnJlbnRJZDsKKyAgICAgICAgY29uc3QgaW50
IG1faWQ7CisgICAgICAgIGNvbnN0IFN0cmluZyBtX3RpdGxlOworICAgICAgICBkb3VibGUgbV90
b3RhbE1hdGNoaW5nVGltZU1zOworICAgICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcCBtX3J1bGVN
YXRjaGluZ1N0YXRzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUnVsZU1hdGNoRGF0YSB7CisgICAg
ICAgIFN0cmluZyBzZWxlY3RvcjsKKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICB9Owor
CiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVm
IEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRo
IGVsZW1lbnRzJyBpbmxpbmUgc3R5bGVzCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1
bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJbnNwZWN0
b3JTdHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKyAgICB0eXBlZGVm
IEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiA+IFNlbGVjdG9y
UHJvZmlsZXNNYXA7CisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlU2Vs
ZWN0b3JQcm9maWxlSGVhZGVyKGNvbnN0IFNlbGVjdG9yUHJvZmlsZSYpOworICAgIHZvaWQgYWRk
U2VsZWN0b3JQcm9maWxlKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPik7CisgICAgdm9pZCB0
b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CisgICAgdm9pZCByZXNldFByb2ZpbGVyU3RhdGUoKTsK
IAogICAgIHZvaWQgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqLCBJ
bnNwZWN0b3JBcnJheSogZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVu
dCk7CkBAIC0xMTgsMTcgKzE4OCwyNiBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yRnJvbnRl
bmQ6OkNTUyogbV9mcm9udGVuZDsKICAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2VudDsK
LSAgICBSZWZQdHI8RWxlbWVudD4gbV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZTsKLSAgICB1
bnNpZ25lZCBtX2xhc3RQc2V1ZG9TdGF0ZTsKIAogICAgIElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0
IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9y
U3R5bGVTaGVldCBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgTm9k
ZVRvSW5zcGVjdG9yU3R5bGVTaGVldCBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAg
RG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKIAorICAgIGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9m
aWxlOworICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGVOdW1i
ZXI7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZTsK
KyAgICB1bnNpZ25lZCBtX2xhc3RQc2V1ZG9TdGF0ZTsKKwogICAgIGludCBtX2xhc3RTdHlsZVNo
ZWV0SWQ7CiAgICAgaW50IG1fbGFzdFJ1bGVJZDsKICAgICBpbnQgbV9sYXN0U3R5bGVJZDsKKyAg
ICBpbnQgbV9pZDsKKworICAgIFNlbGVjdG9yUHJvZmlsZXNNYXAgbV9zZWxlY3RvclByb2ZpbGVz
OworICAgIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+IG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZTsK
KyAgICBSdWxlTWF0Y2hEYXRhIG1fY3VycmVudE1hdGNoRGF0YTsKIH07CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpz
CmluZGV4IDAyY2Y5ZWZmNjRjMmRkZDUxMWY1YTczNmIyZTU0ZTE1ZDcxOWE4MzcuLmFmZTRkMDFj
MzQwYjNiZjYzZmVmNTI3ZjM2OTVmODQzYzYyZjhiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTg3MSw2ICs4NzEs
MTAgQEAgV2ViSW5zcGVjdG9yLkNTU0Rpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgIG1lZGlh
UXVlcnlSZXN1bHRDaGFuZ2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9jc3NN
b2RlbC5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOworICAgIH0sCisKKyAgICBzZXRSZWNvcmRp
bmdQcm9maWxlOiBmdW5jdGlvbihpc1Byb2ZpbGluZykKKyAgICB7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119847</attachid>
            <date>2011-12-19 04:39:37 -0800</date>
            <delta_ts>2011-12-19 05:40:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74603-20111219163935.patch</filename>
            <type>text/plain</type>
            <size>17918</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZmODI5Yjk1YTMzNGM0
MDI1MGU3YmZlYmM3NTcxNmQ3NjJkMzZmMC4uNmQ3NDA3NzRiMjExNmFiZDU3YzE3ZGRhMzk3YzQy
MDlmMzQyMGZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTE1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhl
IGNoYW5nZWQgY29kZSBkb2VzIG5vdCByZXN1bHQgaW4gdmlzaWJsZSBlZmZlY3RzIHlldC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRv
SW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJ
bnNwZWN0b3JDU1NBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
Y2xlYXJGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3Rv
clByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2Vs
ZWN0b3JQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2ls
bE1hdGNoUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0
Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJvY2Vz
c1J1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTZWxlY3Rv
clByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnJl
c2V0UHJvZmlsZXJTdGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6aWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlJ1bGVNYXRjaGluZ1N0YXRzOjpSdWxlTWF0Y2hp
bmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQ
cm9maWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlNl
bGVjdG9yUHJvZmlsZTo6flNlbGVjdG9yUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjp0aXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjp1aWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6dG90YWxNYXRjaGluZ1Rp
bWVNcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9m
aWxlOjpTZWxlY3RvclByb2ZpbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1NT
U3R5bGVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NEaXNwYXRjaGVyLnByb3Rv
dHlwZS5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NT
RGlzcGF0Y2hlci5wcm90b3R5cGUuc2V0UmVjb3JkaW5nUHJvZmlsZSk6CisKIDIwMTEtMTItMTkg
IEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxk
IGZpeCBmb3IgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gd2hlbiBidWlsZGluZyBvbiBhIGNh
c2Ugc2Vuc2l0aXZlIHN5c3RlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
CmluZGV4IDdmMGJmMjlhNTczMzk1YTA2MDY0NzgzOWFkNmU5NzhlOTY0MDk5ZWIuLjczMzUyMjYx
NzQ3MzAxOGNlZmRhNGUzYzFmNjZjNzg0YTQxMGZiYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE2MTMsNiArMTYxMywzMyBAQAogICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNvdXJjZUxpbmUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9wdGlvbmFs
IjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkxpbmUgaW4gdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcg
dGhlIG1lZGlhIHF1ZXJ5IChub3QgZGVmaW5lZCBmb3IgdGhlIFwic3R5bGVzaGVldFwiIHNvdXJj
ZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3IuIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiU2VsZWN0b3JQcm9maWxlSWQiLAorICAgICAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlNlbGVjdG9yIHByb2ZpbGUgaWRlbnRpZmllci4iCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6ICJTZWxlY3RvclByb2ZpbGVFbnRyeSIsCisg
ICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWxlY3RvciIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJDU1Mgc2VsZWN0b3IuIiB9LAorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWUiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRp
b24iOiAiVG90YWwgdGltZSB0aGlzIHNlbGVjdG9yIGhhbmRsaW5nIGNvbnRyaWJ1dGVkIHRvIHRo
ZSBicm93c2VyIHJ1bm5pbmcgdGltZSBkdXJpbmcgcHJvZmlsaW5nIChpbiBtaWxsaXNlY29uZHMu
KSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaXRDb3VudCIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHRpbWVzIHRoaXMgc2VsZWN0b3Ig
d2FzIGNvbnNpZGVyZWQgYSBjYW5kaWRhdGUgZm9yIG1hdGNoaW5nIGFnYWluc3QgRE9NIGVsZW1l
bnRzLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaENvdW50IiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgdGltZXMgdGhpcyBzZWxl
Y3RvciBhY3R1YWxseSBtYXRjaGVkIGEgRE9NIGVsZW1lbnQuIiB9CisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHNlbGVjdG9yIHByb2ZpbGUg
ZW50cnkuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAi
aWQiOiAiU2VsZWN0b3JQcm9maWxlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpdGxlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlByb2Zp
bGUgdGl0bGUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVpZCIsICIkcmVm
IjogIlNlbGVjdG9yUHJvZmlsZUlkIiwgImRlc2NyaXB0aW9uIjogIlByb2ZpbGUgaWRlbnRpZmll
ciAodW5pcXVlIGFtb25nIENTUyBzZWxlY3RvciBwcm9maWxlcy4pIiB9LAorICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInR5cGVJZCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJQcm9maWxlIHR5cGUgaWRlbnRpZmllci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidG90YWxUaW1lIiwgInR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIlRv
dGFsIHByb2Nlc3NpbmcgdGltZSBmb3IgYWxsIHNlbGVjdG9ycyBpbiB0aGUgcHJvZmlsZSAoaW4g
bWlsbGlzZWNvbmRzLikiIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YSIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJTZWxlY3RvclByb2ZpbGVFbnRy
eSIgfSwgImRlc2NyaXB0aW9uIjogIkNTUyBzZWxlY3RvciBwcm9maWxlIGVudHJpZXMuIiB9Cisg
ICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29t
bWFuZHMiOiBbCkBAIC0xNzQ5LDYgKzE3NzYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjc3NQcm9wZXJ0aWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIlN1cHBvcnRlZCBwcm9wZXJ0eSBuYW1lcy4i
IH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJS
ZXR1cm5zIGFsbCBzdXBwb3J0ZWQgQ1NTIHByb3BlcnR5IG5hbWVzLiIKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RhcnRTZWxlY3RvclBy
b2ZpbGVyIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAi
bmFtZSI6ICJzdG9wU2VsZWN0b3JQcm9maWxlciIsCisgICAgICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZmlsZSIsICIkcmVmIjogIlNl
bGVjdG9yUHJvZmlsZSIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAg
ICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IGUzMTZkZDA5YWI2NWU3MzY5YmI2NmJmMTJkMGY3
M2MxMjk0MTMxOTcuLjYwMmMxZjNmYzkyYzg1MmM3NTBhYmM2NDM3ZWFlZmQ2YmM5NDk1Y2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAt
NDcsOSArNDcsMTEgQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlU2hl
ZXRMaXN0LmgiCiAKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogLy8g
Q3VycmVudGx5IGltcGxlbWVudGVkIG1vZGVsOgogLy8KQEAgLTEzMSw4ICsxMzMsMTIgQEAKIAog
bmFtZXNwYWNlIENTU0FnZW50U3RhdGUgewogc3RhdGljIGNvbnN0IGNoYXIgY3NzQWdlbnRFbmFi
bGVkW10gPSAiY3NzQWdlbnRFbmFibGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyIHVzZXJJbml0aWF0
ZWRTZWxlY3RvclByb2ZpbGluZ1tdID0gInVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGluZyI7
CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTZWxlY3RvclByb2ZpbGVUeXBlID0gIlNF
TEVDVE9SIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogZW51bSBGb3JjZVBzZXVkb0NsYXNzRmxhZ3MgewpAQCAtMTcyLDYgKzE3OCw0
OSBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFzayhJbnNwZWN0b3JBcnJh
eSogcHNldWRvQ2xhc3NBcnJheSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgZG91YmxlIG1hdGNoVGltZU1zLCBib29sIG1hdGNoZWQp
Cit7CisgICAgbV90b3RhbE1hdGNoaW5nVGltZU1zICs9IG1hdGNoVGltZU1zOworICAgIHBhaXI8
UnVsZU1hdGNoaW5nU3RhdHNNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3J1bGVNYXRj
aGluZ1N0YXRzLmFkZChzZWxlY3RvclRleHQsIFJ1bGVNYXRjaGluZ1N0YXRzKG1hdGNoVGltZU1z
LCAxLCBtYXRjaGVkID8gMSA6IDApKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAg
ICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQudG90YWxUaW1lICs9IG1hdGNoVGltZU1zOworICAgICAg
ICByZXN1bHQuZmlyc3QtPnNlY29uZC5oaXRzICs9IDE7CisgICAgICAgIGlmIChtYXRjaGVkKQor
ICAgICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQubWF0Y2hlcyArPSAxOworICAgIH0KK30K
KworaW5saW5lIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0
U2VsZWN0b3JUaW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBkb3VibGUgcHJvY2Vzc2lu
Z1RpbWVNcykKK3sKKyAgICBtX3RvdGFsTWF0Y2hpbmdUaW1lTXMgKz0gcHJvY2Vzc2luZ1RpbWVN
czsKKyAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRjaGlu
Z1N0YXRzLmZpbmQoc2VsZWN0b3JUZXh0KTsKKyAgICBpZiAoaXQgPT0gbV9ydWxlTWF0Y2hpbmdT
dGF0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC50b3RhbFRpbWUg
Kz0gcHJvY2Vzc2luZ1RpbWVNczsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3RvckNTU0FnZW50OjpTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0KCkgY29u
c3QKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisgICAgZm9yIChSdWxlTWF0Y2hpbmdTdGF0c01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmJlZ2luKCk7IGl0ICE9IG1fcnVsZU1hdGNoaW5nU3Rh
dHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVj
dG9yUHJvZmlsZUVudHJ5PiBzdGF0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxl
RW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0U2VsZWN0b3IoaXQtPmZpcnN0KQorICAg
ICAgICAgICAgLnNldFRpbWUoaXQtPnNlY29uZC50b3RhbFRpbWUpCisgICAgICAgICAgICAuc2V0
SGl0Q291bnQoaXQtPnNlY29uZC5oaXRzKQorICAgICAgICAgICAgLnNldE1hdGNoQ291bnQoaXQt
PnNlY29uZC5tYXRjaGVzKTsKKyAgICAgICAgZGF0YS0+cHVzaE9iamVjdChzdGF0LnJlbGVhc2Uo
KSk7CisgICAgfQorCisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmls
ZT4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlOjpjcmVhdGUoKQor
ICAgICAgICAuc2V0VGl0bGUodGl0bGUoKSkKKyAgICAgICAgLnNldFVpZChTdHJpbmc6Om51bWJl
cih1aWQoKSkpCisgICAgICAgIC5zZXRUeXBlSWQoU2VsZWN0b3JQcm9maWxlVHlwZSkKKyAgICAg
ICAgLnNldFRvdGFsVGltZSh0b3RhbE1hdGNoaW5nVGltZU1zKCkpCisgICAgICAgIC5zZXREYXRh
KGRhdGEpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCiAvLyBzdGF0aWMKIENT
U1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHlsZVNoZWV0KENTU1J1bGUq
IHJ1bGUpCiB7CkBAIC0xOTMsMTAgKzI0MiwxMyBAQCBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVj
dG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSQog
ICAgIDogSW5zcGVjdG9yQmFzZUFnZW50PEluc3BlY3RvckNTU0FnZW50PigiQ1NTIiwgaW5zdHJ1
bWVudGluZ0FnZW50cywgc3RhdGUpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2RvbUFn
ZW50KGRvbUFnZW50KQorICAgICwgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9m
aWxlKGZhbHNlKQorICAgICwgbV9uZXh0VXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZU51bWJl
cigxKQogICAgICwgbV9sYXN0UHNldWRvU3RhdGUoMCkKICAgICAsIG1fbGFzdFN0eWxlU2hlZXRJ
ZCgxKQogICAgICwgbV9sYXN0UnVsZUlkKDEpCiAgICAgLCBtX2xhc3RTdHlsZUlkKDEpCisgICAg
LCBtX2lkKDEpCiB7CiAgICAgbV9kb21BZ2VudC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7CiB9CkBA
IC0yMTksNiArMjcxLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCgp
CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogICAgIG1fZnJvbnRlbmQgPSAwOwogICAgIGNsZWFy
UHNldWRvU3RhdGUodHJ1ZSk7CisgICAgc3RvcFNlbGVjdG9yUHJvZmlsZXIoKTsKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckNTU0FnZW50KDApOwogfQogCkBAIC0yMzQs
NiArMjg3LDggQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzdG9yZSgpCiAgICAgICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgICAgICBlbmFibGUoJmVycm9yKTsKICAgICB9CisgICAgaWYg
KG1fc3RhdGUtPmdldEJvb2xlYW4oQ1NTQWdlbnRTdGF0ZTo6dXNlckluaXRpYXRlZFNlbGVjdG9y
UHJvZmlsaW5nKSkKKyAgICAgICAgc3RhcnRTZWxlY3RvclByb2ZpbGVyKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKQEAgLTI5MCw3ICszNDUsNiBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpyZWNhbGNTdHlsZUZvclBzZXVkb1N0YXRlSWZOZWVkZWQoRWxlbWVudCog
ZWxlbWVudCwgSW5zcAogICAgICAgICBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQogCi0KIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNl
dWRvQ2xhc3NlcywgYm9vbCogbmVlZFBzZXVkbywgYm9vbCogbmVlZEluaGVyaXRlZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBwc2V1ZG9JZFJ1bGVzLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBpbmhlcml0ZWRFbnRyaWVz
KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5v
ZGVJZCk7CkBAIC00ODIsNiArNTM2LDcxIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yCiAgICAg
KmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKIH0KIAordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKikKK3sKKyAgICBp
ZiAobV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlKQorICAgICAgICByZXR1
cm47CisgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlID0gdHJ1ZTsK
KyAgICBTdHJpbmcgdGl0bGUgPSBtYWtlU3RyaW5nKFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSwg
Jy4nLCBTdHJpbmc6Om51bWJlcihtX25leHRVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlTnVt
YmVyKyspKTsKKyAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUgPSBTZWxlY3RvclByb2ZpbGU6
OmNyZWF0ZSh0aXRsZSk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjp1
c2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxpbmcsIHRydWUpOworfQorCit2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyosIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiByZXN1bHQpCit7CisgICAgaWYgKCFtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY29yZGluZ1VzZXJJ
bml0aWF0ZWRTZWxlY3RvclByb2ZpbGUgPSBmYWxzZTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KENTU0FnZW50U3RhdGU6OnVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGluZywgZmFsc2UpOwor
ICAgIGlmIChtX2Zyb250ZW5kICYmIHJlc3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IG1fY3VycmVu
dFNlbGVjdG9yUHJvZmlsZS0+dG9JbnNwZWN0b3JPYmplY3QoKTsKKyAgICBtX2N1cnJlbnRTZWxl
Y3RvclByb2ZpbGUuY2xlYXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbE1h
dGNoUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKG1fcmVjb3JkaW5n
VXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZSkgeworICAgICAgICBtX2N1cnJlbnRNYXRjaERh
dGEuc2VsZWN0b3IgPSBydWxlLT5zZWxlY3RvclRleHQoKTsKKyAgICAgICAgbV9jdXJyZW50TWF0
Y2hEYXRhLnN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWVNUygpOworICAgIH0KK30KKwordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0Y2hSdWxlKGJvb2wgbWF0Y2hlZCkKK3sKKyAgICBp
ZiAobV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1
cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1pdFNlbGVjdG9yKG1fY3VycmVudE1hdGNoRGF0YS5z
ZWxlY3RvciwgV1RGOjpjdXJyZW50VGltZU1TKCkgLSBtX2N1cnJlbnRNYXRjaERhdGEuc3RhcnRU
aW1lLCBtYXRjaGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFByb2Nlc3NS
dWxlKGNvbnN0IENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBpZiAobV9yZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkU2VsZWN0b3JQcm9maWxlKSB7CisgICAgICAgIG1fY3VycmVudE1hdGNoRGF0YS5z
ZWxlY3RvciA9IHJ1bGUtPnNlbGVjdG9yVGV4dCgpOworICAgICAgICBtX2N1cnJlbnRNYXRjaERh
dGEuc3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZU1TKCk7CisgICAgfQorfQorCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpkaWRQcm9jZXNzUnVsZSgpCit7CisgICAgaWYgKG1fcmVjb3JkaW5n
VXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZSkKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQ
cm9maWxlLT5jb21taXRTZWxlY3RvclRpbWUobV9jdXJyZW50TWF0Y2hEYXRhLnNlbGVjdG9yLCBX
VEY6OmN1cnJlbnRUaW1lTVMoKSAtIG1fY3VycmVudE1hdGNoRGF0YS5zdGFydFRpbWUpOworfQor
CitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVNl
bGVjdG9yUHJvZmlsZUhlYWRlcihjb25zdCBTZWxlY3RvclByb2ZpbGUmIHByb2ZpbGUpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBwcm9maWxlLnRpdGxlKCkpOwor
ICAgIGhlYWRlci0+c2V0TnVtYmVyKCJ1aWQiLCBwcm9maWxlLnVpZCgpKTsKKyAgICBoZWFkZXIt
PnNldFN0cmluZygidHlwZUlkIiwgU3RyaW5nKFNlbGVjdG9yUHJvZmlsZVR5cGUpKTsKKyAgICBo
ZWFkZXItPnNldE51bWJlcigidG90YWxUaW1lTXMiLCBwcm9maWxlLnRvdGFsTWF0Y2hpbmdUaW1l
TXMoKSk7CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVzZXRQcm9maWxlclN0YXRlKCkKK3sKKyAgICBzdG9wU2VsZWN0b3JQcm9maWxlcigpOworICAg
IG1fbmV4dFVzZXJJbml0aWF0ZWRTZWxlY3RvclByb2ZpbGVOdW1iZXIgPSAxOworfQorCiBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3Bl
Y3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBOb2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5k
KGVsZW1lbnQpOwpAQCAtNjk3LDYgKzgxNiw5IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNs
ZWFyUHNldWRvU3RhdGUoYm9vbCByZWNhbGNTdHlsZXMpCiAgICAgfQogfQogCisvLyBzdGF0aWMK
K2ludCBJbnNwZWN0b3JDU1NBZ2VudDo6U2VsZWN0b3JQcm9maWxlOjpzX2N1cnJlbnRJZCA9IDE7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGQ4
YTkyMTNhOTZkNmQwYmU4ZDFmODU4ZWUwZGE0NzIwN2RkNjVjNTUuLmRmZjdlMzYwZWExMWIxMzAy
ZTNmZjg2MTRkNGU3Njg2OWM0YmZhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5oCkBAIC04OCwxMyArODgsNzggQEAgcHVibGljOgogICAgIHZvaWQg
YWRkUnVsZShFcnJvclN0cmluZyosIGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKICAgICB2b2lk
IGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiByZXN1bHQpOwogCisgICAgdm9pZCBzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JT
dHJpbmcqID0gMCk7CisgICAgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyog
PSAwLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogPSAwKTsKKyAgICB2b2lkIHdpbGxNYXRjaFJ1
bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7Cisg
ICAgdm9pZCB3aWxsUHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBk
aWRQcm9jZXNzUnVsZSgpOworCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQor
CiBwcml2YXRlOgorICAgIHN0cnVjdCBSdWxlTWF0Y2hpbmdTdGF0cyB7CisgICAgICAgIFJ1bGVN
YXRjaGluZ1N0YXRzKCkKKyAgICAgICAgICAgIDogdG90YWxUaW1lKDAuMCksIGhpdHMoMCksIG1h
dGNoZXMoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIFJ1bGVNYXRjaGluZ1N0YXRz
KGRvdWJsZSB0b3RhbFRpbWUsIHVuc2lnbmVkIGhpdHMsIHVuc2lnbmVkIG1hdGNoZXMpCisgICAg
ICAgICAgICA6IHRvdGFsVGltZSh0b3RhbFRpbWUpLCBoaXRzKGhpdHMpLCBtYXRjaGVzKG1hdGNo
ZXMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBkb3VibGUgdG90YWxUaW1lOworICAg
ICAgICB1bnNpZ25lZCBoaXRzOworICAgICAgICB1bnNpZ25lZCBtYXRjaGVzOworICAgIH07CisK
KyAgICBjbGFzcyBTZWxlY3RvclByb2ZpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTZWxlY3RvclBy
b2ZpbGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgZGlmZmVyZW50
IHJ1bGVzIHdpdGggdGhlIHNhbWUgc2VsZWN0b3IgZGlmZmVyZW50bHk/CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdGl0bGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9m
aWxlKHNfY3VycmVudElkKyssIHRpdGxlKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+
U2VsZWN0b3JQcm9maWxlKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5n
IHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAgICAgICB1bnNpZ25lZCBpbnQg
dWlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBkb3VibGUgdG90YWxNYXRjaGlu
Z1RpbWVNcygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxNYXRjaGluZ1RpbWVNczsgfQorCisgICAg
ICAgIHZvaWQgY29tbWl0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgZG91YmxlLCBib29sKTsKKyAg
ICAgICAgdm9pZCBjb21taXRTZWxlY3RvclRpbWUoY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHRvSW5zcGVjdG9yT2JqZWN0KCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSdWxl
TWF0Y2hpbmdTdGF0cz4gUnVsZU1hdGNoaW5nU3RhdHNNYXA7CisgICAgICAgIFNlbGVjdG9yUHJv
ZmlsZShpbnQgaWQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAgICAgICAgICA6IG1faWQoaWQp
LCBtX3RpdGxlKHRpdGxlKSwgbV90b3RhbE1hdGNoaW5nVGltZU1zKDAuMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGludCBzX2N1cnJlbnRJZDsKKyAgICAgICAgY29u
c3QgaW50IG1faWQ7CisgICAgICAgIGNvbnN0IFN0cmluZyBtX3RpdGxlOworICAgICAgICBkb3Vi
bGUgbV90b3RhbE1hdGNoaW5nVGltZU1zOworICAgICAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcCBt
X3J1bGVNYXRjaGluZ1N0YXRzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUnVsZU1hdGNoRGF0YSB7
CisgICAgICAgIFN0cmluZyBzZWxlY3RvcjsKKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAg
ICB9OworCiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvclN0YXRlKiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXQ+ID4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0
eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU+ID4gTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gYm9ndXMgInN0eWxlc2hlZXRz
IiB3aXRoIGVsZW1lbnRzJyBpbmxpbmUgc3R5bGVzCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxEb2N1bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9WaWFJ
bnNwZWN0b3JTdHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKyAgICB0
eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiA+IFNl
bGVjdG9yUHJvZmlsZXNNYXA7CisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3Jl
YXRlU2VsZWN0b3JQcm9maWxlSGVhZGVyKGNvbnN0IFNlbGVjdG9yUHJvZmlsZSYpOworICAgIHZv
aWQgcmVzZXRQcm9maWxlclN0YXRlKCk7CiAKICAgICB2b2lkIHJlY2FsY1N0eWxlRm9yUHNldWRv
U3RhdGVJZk5lZWRlZChFbGVtZW50KiwgSW5zcGVjdG9yQXJyYXkqIGZvcmNlZFBzZXVkb0NsYXNz
ZXMpOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogYXNJbnNwZWN0b3JT
dHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMTE4LDE3ICsxODMsMjYgQEAgcHJpdmF0
ZToKIAogICAgIEluc3BlY3RvckZyb250ZW5kOjpDU1MqIG1fZnJvbnRlbmQ7CiAgICAgSW5zcGVj
dG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGFzdEVsZW1l
bnRXaXRoUHNldWRvU3RhdGU7Ci0gICAgdW5zaWduZWQgbV9sYXN0UHNldWRvU3RhdGU7CiAKICAg
ICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldCBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAg
IENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9jc3NTdHlsZVNoZWV0VG9JbnNw
ZWN0b3JTdHlsZVNoZWV0OwogICAgIE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9ub2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0
IG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAKKyAgICBib29sIG1fcmVjb3JkaW5n
VXNlckluaXRpYXRlZFNlbGVjdG9yUHJvZmlsZTsKKyAgICB1bnNpZ25lZCBtX25leHRVc2VySW5p
dGlhdGVkU2VsZWN0b3JQcm9maWxlTnVtYmVyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fbGFz
dEVsZW1lbnRXaXRoUHNldWRvU3RhdGU7CisgICAgdW5zaWduZWQgbV9sYXN0UHNldWRvU3RhdGU7
CisKICAgICBpbnQgbV9sYXN0U3R5bGVTaGVldElkOwogICAgIGludCBtX2xhc3RSdWxlSWQ7CiAg
ICAgaW50IG1fbGFzdFN0eWxlSWQ7CisgICAgaW50IG1faWQ7CisKKyAgICBTZWxlY3RvclByb2Zp
bGVzTWFwIG1fc2VsZWN0b3JQcm9maWxlczsKKyAgICBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBt
X2N1cnJlbnRTZWxlY3RvclByb2ZpbGU7CisgICAgUnVsZU1hdGNoRGF0YSBtX2N1cnJlbnRNYXRj
aERhdGE7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCAwMmNmOWVmZjY0YzJkZGQ1MTFmNWE3MzZi
MmU1NGUxNWQ3MTlhODM3Li5hZmU0ZDAxYzM0MGIzYmY2M2ZlZjUyN2YzNjk1Zjg0M2M2MmY4YjQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxl
TW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHls
ZU1vZGVsLmpzCkBAIC04NzEsNiArODcxLDEwIEBAIFdlYkluc3BlY3Rvci5DU1NEaXNwYXRjaGVy
LnByb3RvdHlwZSA9IHsKICAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZDogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgdGhpcy5fY3NzTW9kZWwubWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsK
KyAgICB9LAorCisgICAgc2V0UmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24oaXNQcm9maWxpbmcp
CisgICAgewogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119852</attachid>
            <date>2011-12-19 05:41:06 -0800</date>
            <delta_ts>2011-12-19 06:48:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74603-20111219174104.patch</filename>
            <type>text/plain</type>
            <size>14626</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZmODI5Yjk1YTMzNGM0
MDI1MGU3YmZlYmM3NTcxNmQ3NjJkMzZmMC4uOGIyODE3MmViNGEyNGY0M2FhNjFlYTY1NzNiNWIz
ZjgyNzE5YzM5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTEyLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhl
IGNoYW5nZWQgY29kZSBkb2VzIG5vdCByZXN1bHQgaW4gdmlzaWJsZSBlZmZlY3RzIHlldC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZU1hdGNoaW5nU3Rh
dHM6OlJ1bGVNYXRjaGluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6flNlbGVjdG9y
UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OnRvdGFsTWF0Y2hp
bmdUaW1lTXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpTZWxlY3RvclBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9yT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbE1hdGNoUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0Y2hSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJvY2Vzc1J1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpyZXNldFByb2ZpbGVyU3RhdGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmlkKToKKwogMjAxMS0xMi0xOSAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBTY3JvbGxpbmdDb29y
ZGluYXRvck1hYy5tbSB3aGVuIGJ1aWxkaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgc3lzdGVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggN2YwYmYyOWE1NzMzOTVh
MDYwNjQ3ODM5YWQ2ZTk3OGU5NjQwOTllYi4uMDIyY2YzZDNjZjFjOGVmODhjY2M3MThhYTM1M2E1
NTg2NGI0OWQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAt
MTYxMyw2ICsxNjEzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNl
TGluZSIsICJ0eXBlIjogImludGVnZXIiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24i
OiAiTGluZSBpbiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgbWVkaWEgcXVlcnkgKG5vdCBk
ZWZpbmVkIGZvciB0aGUgXCJzdHlsZXNoZWV0XCIgc291cmNlKS4iIH0KICAgICAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1MgbWVkaWEgcXVlcnkgZGVz
Y3JpcHRvci4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICJpZCI6ICJTZWxlY3RvclByb2ZpbGVFbnRyeSIsCisgICAgICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzZWxlY3RvciIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJDU1Mgc2VsZWN0b3IuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWUiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiVG90YWwgdGltZSB0aGlzIHNl
bGVjdG9yIGhhbmRsaW5nIGNvbnRyaWJ1dGVkIHRvIHRoZSBicm93c2VyIHJ1bm5pbmcgdGltZSBk
dXJpbmcgcHJvZmlsaW5nIChpbiBtaWxsaXNlY29uZHMuKSIgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJoaXRDb3VudCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiTnVtYmVyIG9mIHRpbWVzIHRoaXMgc2VsZWN0b3Igd2FzIGNvbnNpZGVyZWQgYSBjYW5kaWRh
dGUgZm9yIG1hdGNoaW5nIGFnYWluc3QgRE9NIGVsZW1lbnRzLiIgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtYXRjaENvdW50IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJOdW1iZXIgb2YgdGltZXMgdGhpcyBzZWxlY3RvciBhY3R1YWxseSBtYXRjaGVkIGEg
RE9NIGVsZW1lbnQuIiB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiQ1NTIHNlbGVjdG9yIHByb2ZpbGUgZW50cnkuIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiU2VsZWN0b3JQcm9maWxlIiwK
KyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRvdGFsVGltZSIsICJ0
eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJUb3RhbCBwcm9jZXNzaW5nIHRpbWUgZm9y
IGFsbCBzZWxlY3RvcnMgaW4gdGhlIHByb2ZpbGUgKGluIG1pbGxpc2Vjb25kcy4pIiB9LAorICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgIiRyZWYiOiAiU2VsZWN0b3JQcm9maWxlRW50cnkiIH0sICJkZXNjcmlwdGlvbiI6ICJD
U1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyaWVzLiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAg
ICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwpAQCAtMTc0OSw2ICsx
NzY4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY3NzUHJvcGVydGllcyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlw
dGlvbiI6ICJTdXBwb3J0ZWQgcHJvcGVydHkgbmFtZXMuIiB9CiAgICAgICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyBhbGwgc3VwcG9ydGVkIENT
UyBwcm9wZXJ0eSBuYW1lcy4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICJuYW1lIjogInN0YXJ0U2VsZWN0b3JQcm9maWxlciIKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RvcFNlbGVjdG9yUHJv
ZmlsZXIiLAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByb2ZpbGUiLCAiJHJlZiI6ICJTZWxlY3RvclByb2ZpbGUiIH0KKyAgICAg
ICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMi
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApp
bmRleCBlMzE2ZGQwOWFiNjVlNzM2OWJiNjZiZjEyZDBmNzNjMTI5NDEzMTk3Li4xYTAwMDMzYjRk
ZDJhOGE4ZGQ5MDcyYTg3MWRlYzA4ZWFhOWY3YTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQ3LDkgKzQ3LDExIEBACiAjaW5jbHVk
ZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIC8vIEN1cnJlbnRseSBpbXBsZW1lbnRlZCBt
b2RlbDoKIC8vCkBAIC0xMzEsNiArMTMzLDcgQEAKIAogbmFtZXNwYWNlIENTU0FnZW50U3RhdGUg
ewogc3RhdGljIGNvbnN0IGNoYXIgY3NzQWdlbnRFbmFibGVkW10gPSAiY3NzQWdlbnRFbmFibGVk
IjsKK3N0YXRpYyBjb25zdCBjaGFyIGlzU2VsZWN0b3JQcm9maWxpbmdbXSA9ICJpc1NlbGVjdG9y
UHJvZmlsaW5nIjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQzLDYgKzE0Niw0OSBA
QCBlbnVtIEZvcmNlUHNldWRvQ2xhc3NGbGFncyB7CiAgICAgUHNldWRvVmlzaXRlZCA9IDEgPDwg
MwogfTsKIAorc3RydWN0IFJ1bGVNYXRjaGluZ1N0YXRzIHsKKyAgICBSdWxlTWF0Y2hpbmdTdGF0
cygpCisgICAgICAgIDogdG90YWxUaW1lKDAuMCksIGhpdHMoMCksIG1hdGNoZXMoMCkKKyAgICB7
CisgICAgfQorICAgIFJ1bGVNYXRjaGluZ1N0YXRzKGRvdWJsZSB0b3RhbFRpbWUsIHVuc2lnbmVk
IGhpdHMsIHVuc2lnbmVkIG1hdGNoZXMpCisgICAgICAgIDogdG90YWxUaW1lKHRvdGFsVGltZSks
IGhpdHMoaGl0cyksIG1hdGNoZXMobWF0Y2hlcykKKyAgICB7CisgICAgfQorICAgIGRvdWJsZSB0
b3RhbFRpbWU7CisgICAgdW5zaWduZWQgaGl0czsKKyAgICB1bnNpZ25lZCBtYXRjaGVzOworfTsK
KworY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIFJlZkNvdW50ZWQ8U2VsZWN0b3JQcm9m
aWxlPiB7CitwdWJsaWM6CisgICAgLy8gRklYTUU6IGhhbmRsZSBkaWZmZXJlbnQgcnVsZXMgd2l0
aCB0aGUgc2FtZSBzZWxlY3RvciBkaWZmZXJlbnRseT8KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
ZWxlY3RvclByb2ZpbGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNlbGVjdG9yUHJvZmlsZSgpKTsKKyAgICB9CisgICAgdmlydHVhbCB+U2VsZWN0b3JQcm9m
aWxlKCkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRvdGFsTWF0Y2hpbmdUaW1lTXMoKSBj
b25zdCB7IHJldHVybiBtX3RvdGFsTWF0Y2hpbmdUaW1lTXM7IH0KKworICAgIHZvaWQgY29tbWl0
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgZG91YmxlLCBib29sKTsKKyAgICB2b2lkIGNvbW1pdFNl
bGVjdG9yVGltZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB0b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJ1bGVNYXRjaGluZ1N0YXRzPiBSdWxlTWF0Y2hpbmdTdGF0
c01hcDsKKyAgICBTZWxlY3RvclByb2ZpbGUoKQorICAgICAgICA6IG1fdG90YWxNYXRjaGluZ1Rp
bWVNcygwLjApCisgICAgeworICAgIH0KKworICAgIGRvdWJsZSBtX3RvdGFsTWF0Y2hpbmdUaW1l
TXM7CisgICAgUnVsZU1hdGNoaW5nU3RhdHNNYXAgbV9ydWxlTWF0Y2hpbmdTdGF0czsKK307CisK
Kwogc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soSW5zcGVjdG9yQXJyYXkq
IHBzZXVkb0NsYXNzQXJyYXkpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFj
dGl2ZSwgKCJhY3RpdmUiKSk7CkBAIC0xNzIsNiArMjE4LDQ2IEBAIHN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlUHNldWRvQ2xhc3NNYXNrKEluc3BlY3RvckFycmF5KiBwc2V1ZG9DbGFzc0FycmF5KQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29t
bWl0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGRvdWJsZSBtYXRjaFRpbWVN
cywgYm9vbCBtYXRjaGVkKQoreworICAgIG1fdG90YWxNYXRjaGluZ1RpbWVNcyArPSBtYXRjaFRp
bWVNczsKKyAgICBwYWlyPFJ1bGVNYXRjaGluZ1N0YXRzTWFwOjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5hZGQoc2VsZWN0b3JUZXh0LCBSdWxlTWF0Y2hpbmdT
dGF0cyhtYXRjaFRpbWVNcywgMSwgbWF0Y2hlZCA/IDEgOiAwKSk7CisgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kLnRvdGFsVGltZSArPSBtYXRj
aFRpbWVNczsKKyAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQuaGl0cyArPSAxOworICAgICAg
ICBpZiAobWF0Y2hlZCkKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kLm1hdGNoZXMg
Kz0gMTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2Vs
ZWN0b3JUaW1lKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBkb3VibGUgcHJvY2Vzc2luZ1Rp
bWVNcykKK3sKKyAgICBtX3RvdGFsTWF0Y2hpbmdUaW1lTXMgKz0gcHJvY2Vzc2luZ1RpbWVNczsK
KyAgICBSdWxlTWF0Y2hpbmdTdGF0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3J1bGVNYXRjaGluZ1N0
YXRzLmZpbmQoc2VsZWN0b3JUZXh0KTsKKyAgICBpZiAoaXQgPT0gbV9ydWxlTWF0Y2hpbmdTdGF0
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC50b3RhbFRpbWUgKz0g
cHJvY2Vzc2luZ1RpbWVNczsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFNlbGVj
dG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gZGF0YSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKFJ1
bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3Rh
dHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgeworICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IHN0YXQg
PSBUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIC5zZXRTZWxlY3RvcihpdC0+Zmlyc3QpCisgICAgICAgICAgICAuc2V0VGltZShpdC0+
c2Vjb25kLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhp
dHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAg
ICAgICBkYXRhLT5wdXNoT2JqZWN0KHN0YXQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBUeXBlQnVpbGRl
cjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUb3RhbFRpbWUo
dG90YWxNYXRjaGluZ1RpbWVNcygpKQorICAgICAgICAuc2V0RGF0YShkYXRhKTsKKyAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogLy8gc3RhdGljCiBDU1NTdHlsZVNoZWV0KiBJbnNw
ZWN0b3JDU1NBZ2VudDo6cGFyZW50U3R5bGVTaGVldChDU1NSdWxlKiBydWxlKQogewpAQCAtMTkz
LDEwICsyNzksMTIgQEAgSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEkKICAgICA6IEluc3BlY3RvckJh
c2VBZ2VudDxJbnNwZWN0b3JDU1NBZ2VudD4oIkNTUyIsIGluc3RydW1lbnRpbmdBZ2VudHMsIHN0
YXRlKQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKKyAg
ICAsIG1fcmVjb3JkaW5nU2VsZWN0b3JQcm9maWxlKGZhbHNlKQogICAgICwgbV9sYXN0UHNldWRv
U3RhdGUoMCkKICAgICAsIG1fbGFzdFN0eWxlU2hlZXRJZCgxKQogICAgICwgbV9sYXN0UnVsZUlk
KDEpCiAgICAgLCBtX2xhc3RTdHlsZUlkKDEpCisgICAgLCBtX2lkKDEpCiB7CiAgICAgbV9kb21B
Z2VudC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7CiB9CkBAIC0yMTksNiArMzA3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9udGVuZCgpCiAgICAgQVNTRVJUKG1fZnJvbnRlbmQp
OwogICAgIG1fZnJvbnRlbmQgPSAwOwogICAgIGNsZWFyUHNldWRvU3RhdGUodHJ1ZSk7CisgICAg
c3RvcFNlbGVjdG9yUHJvZmlsZXIoKTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldElu
c3BlY3RvckNTU0FnZW50KDApOwogfQogCkBAIC0yMzQsNiArMzIzLDggQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6cmVzdG9yZSgpCiAgICAgICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgICAg
ICBlbmFibGUoJmVycm9yKTsKICAgICB9CisgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oQ1NT
QWdlbnRTdGF0ZTo6aXNTZWxlY3RvclByb2ZpbGluZykpCisgICAgICAgIHN0YXJ0U2VsZWN0b3JQ
cm9maWxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCkBAIC0yOTAs
NyArMzgxLDYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9T
dGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIEluc3AKICAgICAgICAgZWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5
KTsKIH0KIAotCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9k
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGJvb2wqIG5lZWRQc2V1ZG8sIGJvb2wq
IG5lZWRJbmhlcml0ZWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG1hdGNoZWRDU1NSdWxlcywg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVu
dEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwpAQCAtNDgyLDYgKzU3Miw1OSBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvcgogICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5yZWxlYXNl
KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0YXJ0U2VsZWN0b3JQcm9maWxlcihF
cnJvclN0cmluZyopCit7CisgICAgaWYgKG1fcmVjb3JkaW5nU2VsZWN0b3JQcm9maWxlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9yZWNvcmRpbmdTZWxlY3RvclByb2ZpbGUgPSB0cnVlOworICAg
IG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSA9IFNlbGVjdG9yUHJvZmlsZTo6Y3JlYXRlKCk7Cisg
ICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1NlbGVjdG9yUHJvZmlsaW5n
LCB0cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmls
ZXIoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQoreworICAg
IGlmICghbV9yZWNvcmRpbmdTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3JlY29yZGluZ1NlbGVjdG9yUHJvZmlsZSA9IGZhbHNlOworICAgIG1fc3RhdGUtPnNldEJvb2xl
YW4oQ1NTQWdlbnRTdGF0ZTo6aXNTZWxlY3RvclByb2ZpbGluZywgZmFsc2UpOworICAgIGlmICht
X2Zyb250ZW5kICYmIHJlc3VsdCkKKyAgICAgICAgKnJlc3VsdCA9IG1fY3VycmVudFNlbGVjdG9y
UHJvZmlsZS0+dG9JbnNwZWN0b3JPYmplY3QoKTsKKyAgICBtX2N1cnJlbnRTZWxlY3RvclByb2Zp
bGUuY2xlYXIoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbE1hdGNoUnVsZShj
b25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKG1fcmVjb3JkaW5nU2VsZWN0b3JQ
cm9maWxlKSB7CisgICAgICAgIG1fY3VycmVudE1hdGNoRGF0YS5zZWxlY3RvciA9IHJ1bGUtPnNl
bGVjdG9yVGV4dCgpOworICAgICAgICBtX2N1cnJlbnRNYXRjaERhdGEuc3RhcnRUaW1lID0gV1RG
OjpjdXJyZW50VGltZU1TKCk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aWRNYXRjaFJ1bGUoYm9vbCBtYXRjaGVkKQoreworICAgIGlmIChtX3JlY29yZGluZ1NlbGVjdG9y
UHJvZmlsZSkKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3Rv
cihtX2N1cnJlbnRNYXRjaERhdGEuc2VsZWN0b3IsIFdURjo6Y3VycmVudFRpbWVNUygpIC0gbV9j
dXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZSwgbWF0Y2hlZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OndpbGxQcm9jZXNzUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7Cisg
ICAgaWYgKG1fcmVjb3JkaW5nU2VsZWN0b3JQcm9maWxlKSB7CisgICAgICAgIG1fY3VycmVudE1h
dGNoRGF0YS5zZWxlY3RvciA9IHJ1bGUtPnNlbGVjdG9yVGV4dCgpOworICAgICAgICBtX2N1cnJl
bnRNYXRjaERhdGEuc3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZU1TKCk7CisgICAgfQorfQor
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRQcm9jZXNzUnVsZSgpCit7CisgICAgaWYgKG1f
cmVjb3JkaW5nU2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2Zp
bGUtPmNvbW1pdFNlbGVjdG9yVGltZShtX2N1cnJlbnRNYXRjaERhdGEuc2VsZWN0b3IsIFdURjo6
Y3VycmVudFRpbWVNUygpIC0gbV9jdXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZSk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0UHJvZmlsZXJTdGF0ZSgpCit7CisgICAgc3RvcFNl
bGVjdG9yUHJvZmlsZXIoKTsKK30KKwogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1l
bnQpCiB7CiAgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQgPSBtX25v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggZDhhOTIxM2E5NmQ2ZDBiZThkMWY4
NThlZTBkYTQ3MjA3ZGQ2NWM1NS4uNTc0NDIxZmE4YmVmZTdkYmM1OGRjNTZkZTQyYTE5YWQ1NTc4
YzI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgK
QEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnN0cnVt
ZW50aW5nQWdlbnRzOwogY2xhc3MgTmFtZU5vZGVNYXA7CiBjbGFzcyBOb2RlOworY2xhc3MgU2Vs
ZWN0b3JQcm9maWxlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIApAQCAtODgsNyArODksMjEg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkUnVsZShFcnJvclN0cmluZyosIGNvbnN0IGludCBjb250
ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiogcmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJp
bmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOwogCisgICAgdm9pZCBzdGFydFNl
bGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqID0gMCk7CisgICAgdm9pZCBzdG9wU2VsZWN0b3JQ
cm9maWxlcihFcnJvclN0cmluZyogPSAwLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogPSAwKTsK
KyAgICB2b2lkIHdpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBk
aWRNYXRjaFJ1bGUoYm9vbCk7CisgICAgdm9pZCB3aWxsUHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5
bGVSdWxlKik7CisgICAgdm9pZCBkaWRQcm9jZXNzUnVsZSgpOworCisgICAgaW50IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorCiBwcml2YXRlOgorICAgIHN0cnVjdCBSdWxlTWF0Y2hEYXRh
IHsKKyAgICAgICAgU3RyaW5nIHNlbGVjdG9yOworICAgICAgICBkb3VibGUgc3RhcnRUaW1lOwor
ICAgIH07CisKICAgICBJbnNwZWN0b3JDU1NBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5z
cGVjdG9yU3RhdGUqLCBJbnNwZWN0b3JET01BZ2VudCopOwogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gSWRUb0luc3BlY3RvclN0eWxl
U2hlZXQ7CkBAIC05Niw2ICsxMTEsOSBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxO
b2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdpdGggZWxlbWVudHMn
IGlubGluZSBzdHlsZXMKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3VtZW50PiwgUmVm
UHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hl
ZXQ7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cwogCisgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGNyZWF0ZVNlbGVjdG9yUHJvZmlsZUhlYWRlcihjb25zdCBTZWxlY3RvclBy
b2ZpbGUmKTsKKyAgICB2b2lkIHJlc2V0UHJvZmlsZXJTdGF0ZSgpOworCiAgICAgdm9pZCByZWNh
bGNTdHlsZUZvclBzZXVkb1N0YXRlSWZOZWVkZWQoRWxlbWVudCosIEluc3BlY3RvckFycmF5KiBm
b3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KTsKICAgICBFbGVtZW50
KiBlbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkKTsKQEAgLTExOCwxNyArMTM2
LDI0IEBAIHByaXZhdGU6CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6Q1NTKiBtX2Zyb250ZW5k
OwogICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwotICAgIFJlZlB0cjxFbGVtZW50
PiBtX2xhc3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlOwotICAgIHVuc2lnbmVkIG1fbGFzdFBzZXVk
b1N0YXRlOwogCiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9pZFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKICAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5
bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBEb2N1bWVudFRvVmlhSW5zcGVj
dG9yU3R5bGVTaGVldCBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogCisgICAgYm9v
bCBtX3JlY29yZGluZ1NlbGVjdG9yUHJvZmlsZTsKKworICAgIFJlZlB0cjxFbGVtZW50PiBtX2xh
c3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlOworICAgIHVuc2lnbmVkIG1fbGFzdFBzZXVkb1N0YXRl
OworCiAgICAgaW50IG1fbGFzdFN0eWxlU2hlZXRJZDsKICAgICBpbnQgbV9sYXN0UnVsZUlkOwog
ICAgIGludCBtX2xhc3RTdHlsZUlkOworICAgIGludCBtX2lkOworCisgICAgUmVmUHRyPFNlbGVj
dG9yUHJvZmlsZT4gbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlOworICAgIFJ1bGVNYXRjaERhdGEg
bV9jdXJyZW50TWF0Y2hEYXRhOwogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119859</attachid>
            <date>2011-12-19 06:48:28 -0800</date>
            <delta_ts>2011-12-19 07:02:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74603-20111219184826.patch</filename>
            <type>text/plain</type>
            <size>12879</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZmODI5Yjk1YTMzNGM0
MDI1MGU3YmZlYmM3NTcxNmQ3NjJkMzZmMC4uNGIyNTYxNDg3YWYzOWJkNmQ5ZWY4Y2ZkODFkNzFh
ZTk1M2MyMjczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTE5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IENTUyBzZWxlY3RvciBwcm9maWxlciBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhl
IGNoYW5nZWQgY29kZSBkb2VzIG5vdCByZXN1bHQgaW4gdmlzaWJsZSBlZmZlY3RzIHlldC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZU1hdGNoaW5nU3Rh
dHM6OlJ1bGVNYXRjaGluZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmls
ZTo6U2VsZWN0b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6
flNlbGVjdG9yUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvclByb2ZpbGU6OnRv
dGFsTWF0Y2hpbmdUaW1lTXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpz
dGFydFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjpjb21taXRTZWxl
Y3RvclRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rv
ck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y2xlYXJGcm9u
dGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6cmVzdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbE1hdGNoUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0Y2hSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJvY2Vzc1J1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKwogMjAxMS0xMi0xOSAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4
IGZvciBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSB3aGVuIGJ1aWxkaW5nIG9uIGEgY2FzZSBz
ZW5zaXRpdmUgc3lzdGVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5k
ZXggN2YwYmYyOWE1NzMzOTVhMDYwNjQ3ODM5YWQ2ZTk3OGU5NjQwOTllYi4uMDIyY2YzZDNjZjFj
OGVmODhjY2M3MThhYTM1M2E1NTg2NGI0OWQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbgpAQCAtMTYxMyw2ICsxNjEzLDI1IEBACiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic291cmNlTGluZSIsICJ0eXBlIjogImludGVnZXIiLCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiTGluZSBpbiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUg
bWVkaWEgcXVlcnkgKG5vdCBkZWZpbmVkIGZvciB0aGUgXCJzdHlsZXNoZWV0XCIgc291cmNlKS4i
IH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJD
U1MgbWVkaWEgcXVlcnkgZGVzY3JpcHRvci4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICJpZCI6ICJTZWxlY3RvclByb2ZpbGVFbnRyeSIsCisgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWxlY3RvciIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJDU1Mgc2VsZWN0b3IuIiB9LAorICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWUiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAi
VG90YWwgdGltZSB0aGlzIHNlbGVjdG9yIGhhbmRsaW5nIGNvbnRyaWJ1dGVkIHRvIHRoZSBicm93
c2VyIHJ1bm5pbmcgdGltZSBkdXJpbmcgcHJvZmlsaW5nIChpbiBtaWxsaXNlY29uZHMuKSIgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaXRDb3VudCIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHRpbWVzIHRoaXMgc2VsZWN0b3Igd2FzIGNv
bnNpZGVyZWQgYSBjYW5kaWRhdGUgZm9yIG1hdGNoaW5nIGFnYWluc3QgRE9NIGVsZW1lbnRzLiIg
fSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaENvdW50IiwgInR5cGUiOiAi
aW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgdGltZXMgdGhpcyBzZWxlY3RvciBh
Y3R1YWxseSBtYXRjaGVkIGEgRE9NIGVsZW1lbnQuIiB9CisgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHNlbGVjdG9yIHByb2ZpbGUgZW50cnku
IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAi
U2VsZWN0b3JQcm9maWxlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRvdGFsVGltZSIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJUb3RhbCBw
cm9jZXNzaW5nIHRpbWUgZm9yIGFsbCBzZWxlY3RvcnMgaW4gdGhlIHByb2ZpbGUgKGluIG1pbGxp
c2Vjb25kcy4pIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU2VsZWN0b3JQcm9maWxlRW50cnkiIH0s
ICJkZXNjcmlwdGlvbiI6ICJDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyaWVzLiIgfQorICAgICAg
ICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRz
IjogWwpAQCAtMTc0OSw2ICsxNzY4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY3NzUHJvcGVydGllcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJTdXBwb3J0ZWQgcHJvcGVydHkgbmFtZXMuIiB9CiAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJu
cyBhbGwgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBuYW1lcy4iCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInN0YXJ0U2VsZWN0b3JQcm9maWxl
ciIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUi
OiAic3RvcFNlbGVjdG9yUHJvZmlsZXIiLAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2ZpbGUiLCAiJHJlZiI6ICJTZWxlY3Rv
clByb2ZpbGUiIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAgIF0s
CiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAppbmRleCBlMzE2ZGQwOWFiNjVlNzM2OWJiNjZiZjEyZDBmNzNjMTI5
NDEzMTk3Li40YjFjOGQ1NmM2ZTQwNDEwODA4ZDBhMjU2OTA2NmYzOWJlMDE4YWE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0
LmgiCiAKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CkBAIC0xMzEsNiArMTMyLDcgQEAKIAogbmFtZXNwYWNlIENTU0FnZW50U3RhdGUgewogc3Rh
dGljIGNvbnN0IGNoYXIgY3NzQWdlbnRFbmFibGVkW10gPSAiY3NzQWdlbnRFbmFibGVkIjsKK3N0
YXRpYyBjb25zdCBjaGFyIGlzU2VsZWN0b3JQcm9maWxpbmdbXSA9ICJpc1NlbGVjdG9yUHJvZmls
aW5nIjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQzLDYgKzE0NSw1MSBAQCBlbnVt
IEZvcmNlUHNldWRvQ2xhc3NGbGFncyB7CiAgICAgUHNldWRvVmlzaXRlZCA9IDEgPDwgMwogfTsK
IAorc3RydWN0IFJ1bGVNYXRjaGluZ1N0YXRzIHsKKyAgICBSdWxlTWF0Y2hpbmdTdGF0cygpCisg
ICAgICAgIDogdG90YWxUaW1lKDAuMCksIGhpdHMoMCksIG1hdGNoZXMoMCkKKyAgICB7CisgICAg
fQorICAgIFJ1bGVNYXRjaGluZ1N0YXRzKGRvdWJsZSB0b3RhbFRpbWUsIHVuc2lnbmVkIGhpdHMs
IHVuc2lnbmVkIG1hdGNoZXMpCisgICAgICAgIDogdG90YWxUaW1lKHRvdGFsVGltZSksIGhpdHMo
aGl0cyksIG1hdGNoZXMobWF0Y2hlcykKKyAgICB7CisgICAgfQorICAgIGRvdWJsZSB0b3RhbFRp
bWU7CisgICAgdW5zaWduZWQgaGl0czsKKyAgICB1bnNpZ25lZCBtYXRjaGVzOworfTsKKworY2xh
c3MgU2VsZWN0b3JQcm9maWxlIHsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogaGFuZGxlIGRpZmZl
cmVudCBydWxlcyB3aXRoIHRoZSBzYW1lIHNlbGVjdG9yIGRpZmZlcmVudGx5PworICAgIFNlbGVj
dG9yUHJvZmlsZSgpCisgICAgICAgIDogbV90b3RhbE1hdGNoaW5nVGltZU1zKDAuMCkKKyAgICB7
CisgICAgfQorICAgIHZpcnR1YWwgflNlbGVjdG9yUHJvZmlsZSgpCisgICAgeworICAgIH0KKwor
ICAgIGRvdWJsZSB0b3RhbE1hdGNoaW5nVGltZU1zKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbE1h
dGNoaW5nVGltZU1zOyB9CisKKyAgICB2b2lkIHN0YXJ0U2VsZWN0b3IoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBjb21taXRTZWxlY3Rvcihib29sKTsKKyAgICB2b2lkIGNvbW1pdFNlbGVjdG9y
VGltZSgpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB0b0luc3BlY3Rvck9iamVj
dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJ1bGVN
YXRjaGluZ1N0YXRzPiBSdWxlTWF0Y2hpbmdTdGF0c01hcDsKKyAgICBzdHJ1Y3QgUnVsZU1hdGNo
RGF0YSB7CisgICAgICAgIFN0cmluZyBzZWxlY3RvcjsKKyAgICAgICAgZG91YmxlIHN0YXJ0VGlt
ZTsKKyAgICB9OworCisgICAgZG91YmxlIG1fdG90YWxNYXRjaGluZ1RpbWVNczsKKyAgICBSdWxl
TWF0Y2hpbmdTdGF0c01hcCBtX3J1bGVNYXRjaGluZ1N0YXRzOworICAgIFJ1bGVNYXRjaERhdGEg
bV9jdXJyZW50TWF0Y2hEYXRhOworfTsKKworCiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVk
b0NsYXNzTWFzayhJbnNwZWN0b3JBcnJheSogcHNldWRvQ2xhc3NBcnJheSkKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWN0aXZlLCAoImFjdGl2ZSIpKTsKQEAgLTE3Miw2ICsy
MTksNTQgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soSW5zcGVjdG9y
QXJyYXkqIHBzZXVkb0NsYXNzQXJyYXkpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5l
IHZvaWQgU2VsZWN0b3JQcm9maWxlOjpzdGFydFNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3JUZXh0KQoreworICAgIG1fY3VycmVudE1hdGNoRGF0YS5zZWxlY3RvciA9IHNlbGVjdG9yVGV4
dDsKKyAgICBtX2N1cnJlbnRNYXRjaERhdGEuc3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZU1T
KCk7Cit9CisKK2lubGluZSB2b2lkIFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3IoYm9v
bCBtYXRjaGVkKQoreworICAgIGRvdWJsZSBtYXRjaFRpbWVNcyA9IFdURjo6Y3VycmVudFRpbWVN
UygpIC0gbV9jdXJyZW50TWF0Y2hEYXRhLnN0YXJ0VGltZTsKKyAgICBtX3RvdGFsTWF0Y2hpbmdU
aW1lTXMgKz0gbWF0Y2hUaW1lTXM7CisgICAgcGFpcjxSdWxlTWF0Y2hpbmdTdGF0c01hcDo6aXRl
cmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcnVsZU1hdGNoaW5nU3RhdHMuYWRkKG1fY3VycmVudE1h
dGNoRGF0YS5zZWxlY3RvciwgUnVsZU1hdGNoaW5nU3RhdHMobWF0Y2hUaW1lTXMsIDEsIG1hdGNo
ZWQgPyAxIDogMCkpOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICByZXN1bHQu
Zmlyc3QtPnNlY29uZC50b3RhbFRpbWUgKz0gbWF0Y2hUaW1lTXM7CisgICAgICAgIHJlc3VsdC5m
aXJzdC0+c2Vjb25kLmhpdHMgKz0gMTsKKyAgICAgICAgaWYgKG1hdGNoZWQpCisgICAgICAgICAg
ICByZXN1bHQuZmlyc3QtPnNlY29uZC5tYXRjaGVzICs9IDE7CisgICAgfQorfQorCitpbmxpbmUg
dm9pZCBTZWxlY3RvclByb2ZpbGU6OmNvbW1pdFNlbGVjdG9yVGltZSgpCit7CisgICAgZG91Ymxl
IHByb2Nlc3NpbmdUaW1lTXMgPSBXVEY6OmN1cnJlbnRUaW1lTVMoKSAtIG1fY3VycmVudE1hdGNo
RGF0YS5zdGFydFRpbWU7CisgICAgbV90b3RhbE1hdGNoaW5nVGltZU1zICs9IHByb2Nlc3NpbmdU
aW1lTXM7CisgICAgUnVsZU1hdGNoaW5nU3RhdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0
Y2hpbmdTdGF0cy5maW5kKG1fY3VycmVudE1hdGNoRGF0YS5zZWxlY3Rvcik7CisgICAgaWYgKGl0
ID09IG1fcnVsZU1hdGNoaW5nU3RhdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0
LT5zZWNvbmQudG90YWxUaW1lICs9IFdURjo6Y3VycmVudFRpbWVNUygpIC0gbV9jdXJyZW50TWF0
Y2hEYXRhLnN0YXJ0VGltZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFNlbGVj
dG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gZGF0YSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKFJ1
bGVNYXRjaGluZ1N0YXRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcnVsZU1hdGNoaW5nU3Rh
dHMuYmVnaW4oKTsgaXQgIT0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5lbmQoKTsgKytpdCkgeworICAg
ICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50cnk+IHN0YXQg
PSBUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIC5zZXRTZWxlY3RvcihpdC0+Zmlyc3QpCisgICAgICAgICAgICAuc2V0VGltZShpdC0+
c2Vjb25kLnRvdGFsVGltZSkKKyAgICAgICAgICAgIC5zZXRIaXRDb3VudChpdC0+c2Vjb25kLmhp
dHMpCisgICAgICAgICAgICAuc2V0TWF0Y2hDb3VudChpdC0+c2Vjb25kLm1hdGNoZXMpOworICAg
ICAgICBkYXRhLT5wdXNoT2JqZWN0KHN0YXQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBUeXBlQnVpbGRl
cjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUb3RhbFRpbWUo
dG90YWxNYXRjaGluZ1RpbWVNcygpKQorICAgICAgICAuc2V0RGF0YShkYXRhKTsKKyAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogLy8gc3RhdGljCiBDU1NTdHlsZVNoZWV0KiBJbnNw
ZWN0b3JDU1NBZ2VudDo6cGFyZW50U3R5bGVTaGVldChDU1NSdWxlKiBydWxlKQogewpAQCAtMjE5
LDcgKzMxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAg
IEFTU0VSVChtX2Zyb250ZW5kKTsKICAgICBtX2Zyb250ZW5kID0gMDsKICAgICBjbGVhclBzZXVk
b1N0YXRlKHRydWUpOwotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NT
QWdlbnQoMCk7CisgICAgc3RvcFNlbGVjdG9yUHJvZmlsZXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTIzNCw2ICszMjksOCBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpyZXN0b3JlKCkKICAgICAgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICAg
ICAgIGVuYWJsZSgmZXJyb3IpOwogICAgIH0KKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihD
U1NBZ2VudFN0YXRlOjppc1NlbGVjdG9yUHJvZmlsaW5nKSkKKyAgICAgICAgc3RhcnRTZWxlY3Rv
clByb2ZpbGVyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKQEAgLTI5
MCw3ICszODcsNiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZWNhbGNTdHlsZUZvclBzZXVk
b1N0YXRlSWZOZWVkZWQoRWxlbWVudCogZWxlbWVudCwgSW5zcAogICAgICAgICBlbGVtZW50LT5v
d25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRl
bHkpOwogfQogCi0KIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JO
b2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPElu
c3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgYm9vbCogbmVlZFBzZXVkbywgYm9v
bCogbmVlZEluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbWF0Y2hlZENTU1J1bGVz
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBwc2V1ZG9JZFJ1bGVzLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBpbmhlcml0ZWRFbnRyaWVzKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CkBAIC00ODIsNiArNTc4LDQ2IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yCiAgICAgKmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVh
c2UoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVy
KEVycm9yU3RyaW5nKikKK3sKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihDU1NBZ2VudFN0
YXRlOjppc1NlbGVjdG9yUHJvZmlsaW5nKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY3VycmVu
dFNlbGVjdG9yUHJvZmlsZSA9IGFkb3B0UHRyKG5ldyBTZWxlY3RvclByb2ZpbGUoKSk7CisgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudCh0aGlzKTsKKyAgICBt
X3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIHRy
dWUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihF
cnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpCit7CisgICAgaWYg
KCFtX3N0YXRlLT5nZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcp
KQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRl
Ojppc1NlbGVjdG9yUHJvZmlsaW5nLCBmYWxzZSk7CisgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRz
LT5zZXRJbnNwZWN0b3JDU1NBZ2VudCgwKTsKKyAgICBpZiAobV9mcm9udGVuZCAmJiByZXN1bHQp
CisgICAgICAgICpyZXN1bHQgPSBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnRvSW5zcGVjdG9y
T2JqZWN0KCk7CisgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLmNsZWFyKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBy
dWxlKQoreworICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihydWxl
LT5zZWxlY3RvclRleHQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNo
UnVsZShib29sIG1hdGNoZWQpCit7CisgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5jb21t
aXRTZWxlY3RvcihtYXRjaGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6d2lsbFBy
b2Nlc3NSdWxlKGNvbnN0IENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBtX2N1cnJlbnRTZWxl
Y3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3IocnVsZS0+c2VsZWN0b3JUZXh0KCkpOworfQorCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRQcm9jZXNzUnVsZSgpCit7CisgICAgbV9jdXJyZW50
U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3RvclRpbWUoKTsKK30KKwogSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHls
ZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVl
dDo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChlbGVtZW50
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXgg
ZDhhOTIxM2E5NmQ2ZDBiZThkMWY4NThlZTBkYTQ3MjA3ZGQ2NWM1NS4uYjEzNjdjYzIwZTgwZTM2
ZmI0YTY0NWUxODMxNDc0MjgyMzljMmNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgTmFtZU5vZGVNYXA7CiBj
bGFzcyBOb2RlOworY2xhc3MgU2VsZWN0b3JQcm9maWxlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKIApAQCAtODgsNiArODksMTMgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUnVsZShFcnJvclN0
cmluZyosIGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBvcnRlZENT
U1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQp
OwogCisgICAgdm9pZCBzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqID0gMCk7Cisg
ICAgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyogPSAwLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiogPSAwKTsKKyAgICB2b2lkIHdpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5
bGVSdWxlKik7CisgICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7CisgICAgdm9pZCB3aWxsUHJv
Y2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBkaWRQcm9jZXNzUnVsZSgp
OworCiBwcml2YXRlOgogICAgIEluc3BlY3RvckNTU0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
LCBJbnNwZWN0b3JTdGF0ZSosIEluc3BlY3RvckRPTUFnZW50Kik7CiAKQEAgLTExOCwxNyArMTI2
LDIwIEBAIHByaXZhdGU6CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6Q1NTKiBtX2Zyb250ZW5k
OwogICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2RvbUFnZW50OwotICAgIFJlZlB0cjxFbGVtZW50
PiBtX2xhc3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlOwotICAgIHVuc2lnbmVkIG1fbGFzdFBzZXVk
b1N0YXRlOwogCiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQgbV9pZFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKICAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0IG1fY3NzU3R5
bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICBEb2N1bWVudFRvVmlhSW5zcGVj
dG9yU3R5bGVTaGVldCBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogCisgICAgUmVm
UHRyPEVsZW1lbnQ+IG1fbGFzdEVsZW1lbnRXaXRoUHNldWRvU3RhdGU7CisgICAgdW5zaWduZWQg
bV9sYXN0UHNldWRvU3RhdGU7CisKICAgICBpbnQgbV9sYXN0U3R5bGVTaGVldElkOwogICAgIGlu
dCBtX2xhc3RSdWxlSWQ7CiAgICAgaW50IG1fbGFzdFN0eWxlSWQ7CisKKyAgICBPd25QdHI8U2Vs
ZWN0b3JQcm9maWxlPiBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGU7CiB9OwogCiAjZW5kaWYK
</data>
<flag name="review"
          id="119990"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>