<?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>114529</bug_id>
          
          <creation_ts>2013-04-12 13:21:23 -0700</creation_ts>
          <short_desc>HeapTimer lifetime should be less complicated</short_desc>
          <delta_ts>2013-04-15 16:16:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>874922</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-12 13:21:23 -0700</bug_when>
    <thetext>Right now our HeapTimer lifetime is rather complicated. HeapTimers are &quot;owned&quot; by the JSGlobalData, but there&apos;s an issue in that there can be races between a thread that is trying to tear down a JSGlobalData and the HeapTimer&apos;s fire function. Our current code for tearing down HeapTimers is an intricate and delicate dance which probably contains subtle bugs.

We can make our lives easier by changing things around a bit. 

(1) We should free the API lock from being solely owned by the JSGlobalData so we don&apos;t have to worry about grabbing the lock out of invalid memory when our HeapTimer callback fires. 
(2) We should also make it so that we deref the JSGlobalData first, then unlock the API lock so that when we have the lock, the JSGlobalData is in one of two states: fully valid or completely destroyed, and we know exactly which one. 
(3) The JSLock can tell us this information by keeping a back pointer to the JSGlobalData. When the JSGlobalData&apos;s destructor is called, it clears this pointer in the JSLock. Other clients of the API lock can then check this pointer to determine whether or not the JSGlobalData is still around.
(4) The CFRunLoopTimer will use the API lock as its context rather than the HeapTimer itself. The only way the HeapTimer&apos;s callback can get to the HeapTimer is through the API lock&apos;s JSGlobalData pointer.
(5) The CFRunLoopTimerContext struct has two fields for retain and release callbacks for the context&apos;s info field. We&apos;ll provide these callbacks to ref() and deref() the JSLock as necessary. Thus, the timer becomes the other owner of the JSLock apart from the JSGlobalData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874931</commentid>
    <comment_count>1</comment_count>
      <attachid>197880</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-12 13:39:08 -0700</bug_when>
    <thetext>Created attachment 197880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874935</commentid>
    <comment_count>2</comment_count>
      <attachid>197880</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-04-12 13:51:11 -0700</bug_when>
    <thetext>Comment on attachment 197880
Patch

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

review- because I think you’ll want to make at least one of the changes I suggest

&gt; Source/JavaScriptCore/jsc.cpp:765
&gt; -    RefPtr&lt;JSGlobalData&gt; globalData = JSGlobalData::create(LargeHeap);
&gt; -    JSLockHolder lock(globalData.get());
&gt; +    JSGlobalData* globalData = JSGlobalData::create(LargeHeap).leakRef();
&gt; +    APIEntryShim shim(globalData);

I don’t understand this change. Change log does not make it clear. Per-function comments can sometimes help with this.

&gt; Source/JavaScriptCore/testRegExp.cpp:504
&gt; -    RefPtr&lt;JSGlobalData&gt; globalData = JSGlobalData::create(LargeHeap);
&gt; -    JSLockHolder lock(globalData.get());
&gt; +    JSGlobalData* globalData = JSGlobalData::create(LargeHeap).leakRef();
&gt; +    APIEntryShim shim(globalData);

I don’t understand this change.

&gt; Source/JavaScriptCore/heap/Heap.cpp:266
&gt; +    , m_activityCallback(adoptPtr(DefaultGCActivityCallback::create(this)))
&gt; +    , m_sweeper(adoptPtr(IncrementalSweeper::create(this)))

Instead of changing these call sites, the return types of the create functions should be changed to PassOwnPtr. We want the calls to adoptPtr to be right where the call to new is, not somewhere else.

&gt; Source/JavaScriptCore/heap/Heap.cpp:816
&gt;  void Heap::setActivityCallback(GCActivityCallback* activityCallback)
&gt;  {
&gt; -    m_activityCallback = activityCallback;
&gt; +    m_activityCallback = adoptPtr(activityCallback);
&gt;  }

The argument type of setActivityCallback should be changed to PassOwnPtr. We want the calls to adoptPtr to be right where the call to new is, not somewhere else.

&gt; Source/JavaScriptCore/heap/HeapTimer.cpp:56
&gt; +    m_context.retain = &amp;retainAPILock;
&gt; +    m_context.release = &amp;releaseAPILock;

I don’t think these &amp; operators are needed, and I normally prefer to omit them.

&gt; Source/JavaScriptCore/heap/HeapTimer.h:29
&gt; +#include &quot;JSLock.h&quot;

Why is this include needed? I don’t see any changes to the header below that seem to require it.

&gt; Source/JavaScriptCore/heap/HeapTimer.h:73
&gt; +    static const void* retainAPILock(const void*);
&gt; +    static void releaseAPILock(const void*);

Why do these need to be member functions? Can’t they just be free functions, private to the cpp file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875063</commentid>
    <comment_count>3</comment_count>
      <attachid>197912</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-12 17:12:54 -0700</bug_when>
    <thetext>Created attachment 197912
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875072</commentid>
    <comment_count>4</comment_count>
      <attachid>197912</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-12 17:26:31 -0700</bug_when>
    <thetext>Comment on attachment 197912
Patch

Attachment 197912 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/107068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875073</commentid>
    <comment_count>5</comment_count>
      <attachid>197912</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-12 17:27:53 -0700</bug_when>
    <thetext>Comment on attachment 197912
Patch

Attachment 197912 did not pass qt-wk2-ews (qt):
Output: http://webkit-queues.appspot.com/results/96075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875150</commentid>
    <comment_count>6</comment_count>
      <attachid>197912</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-04-13 06:25:36 -0700</bug_when>
    <thetext>Comment on attachment 197912
Patch

Attachment 197912 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/97134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875247</commentid>
    <comment_count>7</comment_count>
      <attachid>197962</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-13 16:36:51 -0700</bug_when>
    <thetext>Created attachment 197962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875248</commentid>
    <comment_count>8</comment_count>
      <attachid>197962</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-13 16:45:26 -0700</bug_when>
    <thetext>Comment on attachment 197962
Patch

Attachment 197962 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/95332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875303</commentid>
    <comment_count>9</comment_count>
      <attachid>197962</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-14 01:47:53 -0700</bug_when>
    <thetext>Comment on attachment 197962
Patch

Attachment 197962 did not pass qt-wk2-ews (qt):
Output: http://webkit-queues.appspot.com/results/154081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875878</commentid>
    <comment_count>10</comment_count>
      <attachid>198131</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-15 09:54:37 -0700</bug_when>
    <thetext>Created attachment 198131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875901</commentid>
    <comment_count>11</comment_count>
      <attachid>198131</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-04-15 10:54:40 -0700</bug_when>
    <thetext>Comment on attachment 198131
Patch

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

&gt; Source/JavaScriptCore/testRegExp.cpp:504
&gt; -    RefPtr&lt;JSGlobalData&gt; globalData = JSGlobalData::create(LargeHeap);
&gt; -    JSLockHolder lock(globalData.get());
&gt; +    JSGlobalData* globalData = JSGlobalData::create(LargeHeap).leakRef();
&gt; +    APIEntryShim shim(globalData);

Why can&apos;t we use a refptr here anymore?

&gt; Source/JavaScriptCore/API/APIShims.h:55
&gt;      JSGlobalData* m_globalData;

Just make m_globalData a RefPtr&lt;&gt; now

&gt; Source/JavaScriptCore/API/APIShims.h:79
&gt; +        RefPtr&lt;JSLock&gt; apiLock = &amp;m_globalData-&gt;apiLock();
&gt; +        m_globalData-&gt;deref();
&gt; +        apiLock-&gt;unlock();

Just make APIEntryShim have a JSLockHolder to hold on to apiLock, if it&apos;s still strictly necessary you can just do m_globalData.clear()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875909</commentid>
    <comment_count>12</comment_count>
      <attachid>198131</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-15 11:05:58 -0700</bug_when>
    <thetext>Comment on attachment 198131
Patch

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

&gt;&gt; Source/JavaScriptCore/testRegExp.cpp:504
&gt;&gt; +    APIEntryShim shim(globalData);
&gt; 
&gt; Why can&apos;t we use a refptr here anymore?

Because we need to hold the lock when we destroy a JSGlobalData, but we destroy the JSLockHolder first (which releases the lock), then the RefPtr (which destroys the JSGlobalData).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875911</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-15 11:08:16 -0700</bug_when>
    <thetext>&gt; Because we need to hold the lock when we destroy a JSGlobalData, but we destroy the JSLockHolder first (which releases the lock), then the RefPtr (which destroys the JSGlobalData).

I guess we could continue to use a RefPtr, but explicitly clear it prior to releasing the API lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875933</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-04-15 12:07:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 198131 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=198131&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/testRegExp.cpp:504
&gt; &gt;&gt; +    APIEntryShim shim(globalData);
&gt; &gt; 
&gt; &gt; Why can&apos;t we use a refptr here anymore?
&gt; 
&gt; Because we need to hold the lock when we destroy a JSGlobalData, but we destroy the JSLockHolder first (which releases the lock), then the RefPtr (which destroys the JSGlobalData).

What happens if we just make the api lock object refcounted, the heap can reference it, the timer can reference it, etc, etc.

Then the lock automatically becomes the last thing to die</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876036</commentid>
    <comment_count>15</comment_count>
      <attachid>198180</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-15 13:45:46 -0700</bug_when>
    <thetext>Created attachment 198180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876119</commentid>
    <comment_count>16</comment_count>
      <attachid>198180</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-15 16:16:33 -0700</bug_when>
    <thetext>Comment on attachment 198180
Patch

Clearing flags on attachment: 198180

Committed r148475: &lt;http://trac.webkit.org/changeset/148475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876120</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-15 16:16:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197880</attachid>
            <date>2013-04-12 13:39:08 -0700</date>
            <delta_ts>2013-04-12 17:12:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114529-20130412133846.patch</filename>
            <type>text/plain</type>
            <size>19331</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEzLTA0LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGVhcFRpbWVyIGxpZmV0aW1lIHNob3VsZCBiZSBsZXNzIGNvbXBsaWNhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSaWdodCBub3cg
b3VyIEhlYXBUaW1lciBsaWZldGltZSBpcyByYXRoZXIgY29tcGxpY2F0ZWQuIEhlYXBUaW1lcnMg
YXJlICJvd25lZCIgYnkgdGhlIEpTR2xvYmFsRGF0YSwgCisgICAgICAgIGJ1dCB0aGVyZSdzIGFu
IGlzc3VlIGluIHRoYXQgdGhlcmUgY2FuIGJlIHJhY2VzIGJldHdlZW4gYSB0aHJlYWQgdGhhdCBp
cyB0cnlpbmcgdG8gdGVhciBkb3duIGEgSlNHbG9iYWxEYXRhIAorICAgICAgICBhbmQgdGhlIEhl
YXBUaW1lcidzIGZpcmUgZnVuY3Rpb24uIE91ciBjdXJyZW50IGNvZGUgZm9yIHRlYXJpbmcgZG93
biBIZWFwVGltZXJzIGlzIGFuIGludHJpY2F0ZSBhbmQgZGVsaWNhdGUgCisgICAgICAgIGRhbmNl
IHdoaWNoIHByb2JhYmx5IGNvbnRhaW5zIHN1YnRsZSBidWdzLgorCisgICAgICAgIFdlIGNhbiBt
YWtlIG91ciBsaXZlcyBlYXNpZXIgYnkgY2hhbmdpbmcgdGhpbmdzIGFyb3VuZCBhIGJpdC4gCisK
KyAgICAgICAgMSkgV2Ugc2hvdWxkIGZyZWUgdGhlIEFQSSBsb2NrIGZyb20gYmVpbmcgc29sZWx5
IG93bmVkIGJ5IHRoZSBKU0dsb2JhbERhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCAKKyAgICAgICAgICAgZ3JhYmJpbmcgdGhlIGxvY2sgb3V0IG9mIGludmFsaWQgbWVtb3J5IHdo
ZW4gb3VyIEhlYXBUaW1lciBjYWxsYmFjayBmaXJlcy4gCisKKyAgICAgICAgMikgV2Ugc2hvdWxk
IGFsc28gbWFrZSBpdCBzbyB0aGF0IHdlIGRlcmVmIHRoZSBKU0dsb2JhbERhdGEgZmlyc3QsIHRo
ZW4gdW5sb2NrIHRoZSBBUEkgbG9jayBzbyB0aGF0IHdoZW4gd2UgCisgICAgICAgICAgIGhhdmUg
dGhlIGxvY2ssIHRoZSBKU0dsb2JhbERhdGEgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXM6IGZ1bGx5
IHZhbGlkIG9yIGNvbXBsZXRlbHkgZGVzdHJveWVkLCBhbmQgd2Uga25vdyBleGFjdGx5IHdoaWNo
IG9uZS4gCisKKyAgICAgICAgMykgVGhlIEpTTG9jayBjYW4gdGVsbCB1cyB0aGlzIGluZm9ybWF0
aW9uIGJ5IGtlZXBpbmcgYSBiYWNrIHBvaW50ZXIgdG8gdGhlIEpTR2xvYmFsRGF0YS4gV2hlbiB0
aGUgSlNHbG9iYWxEYXRhJ3MgCisgICAgICAgICAgIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBpdCBj
bGVhcnMgdGhpcyBwb2ludGVyIGluIHRoZSBKU0xvY2suIE90aGVyIGNsaWVudHMgb2YgdGhlIEFQ
SSBsb2NrIGNhbiB0aGVuIGNoZWNrIAorICAgICAgICAgICB0aGlzIHBvaW50ZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgb3Igbm90IHRoZSBKU0dsb2JhbERhdGEgaXMgc3RpbGwgYXJvdW5kLgorCisg
ICAgICAgIDQpIFRoZSBDRlJ1bkxvb3BUaW1lciB3aWxsIHVzZSB0aGUgQVBJIGxvY2sgYXMgaXRz
IGNvbnRleHQgcmF0aGVyIHRoYW4gdGhlIEhlYXBUaW1lciBpdHNlbGYuIFRoZSBvbmx5IHdheSAK
KyAgICAgICAgICAgdGhlIEhlYXBUaW1lcidzIGNhbGxiYWNrIGNhbiBnZXQgdG8gdGhlIEhlYXBU
aW1lciBpcyB0aHJvdWdoIHRoZSBBUEkgbG9jaydzIEpTR2xvYmFsRGF0YSBwb2ludGVyLgorCisg
ICAgICAgIDUpIFRoZSBDRlJ1bkxvb3BUaW1lckNvbnRleHQgc3RydWN0IGhhcyB0d28gZmllbGRz
IGZvciByZXRhaW4gYW5kIHJlbGVhc2UgY2FsbGJhY2tzIGZvciB0aGUgY29udGV4dCdzIGluZm8g
ZmllbGQuIAorICAgICAgICAgICBXZSdsbCBwcm92aWRlIHRoZXNlIGNhbGxiYWNrcyB0byByZWYo
KSBhbmQgZGVyZWYoKSB0aGUgSlNMb2NrIGFzIG5lY2Vzc2FyeS4gVGh1cywgdGhlIHRpbWVyIGJl
Y29tZXMgdGhlIG90aGVyIAorICAgICAgICAgICBvd25lciBvZiB0aGUgSlNMb2NrIGFwYXJ0IGZy
b20gdGhlIEpTR2xvYmFsRGF0YS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2sp
OgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVudHJ5U2hpbVdp
dGhvdXRMb2NrKToKKyAgICAgICAgKEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAg
KEpTQzo6QVBJRW50cnlTaGltOjpBUElFbnRyeVNoaW0pOgorICAgICAgICAoSlNDOjpBUElFbnRy
eVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQp
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgor
ICAgICAgICAoSlNDOjpIZWFwOjp+SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEFjdGl2
aXR5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjphY3Rpdml0eUNhbGxiYWNrKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9IZWFwVGltZXIuY3BwOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OkhlYXBU
aW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6cmV0YWluQVBJTG9jayk6CisgICAgICAg
IChKU0M6OkhlYXBUaW1lcjo6cmVsZWFzZUFQSUxvY2spOgorICAgICAgICAoSlNDOjpIZWFwVGlt
ZXI6OnRpbWVyRGlkRmlyZSk6CisgICAgICAgICogaGVhcC9IZWFwVGltZXIuaDoKKyAgICAgICAg
KEhlYXBUaW1lcik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGpzY21haW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6On5KU0dsb2Jh
bERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0ds
b2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmFwaUxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xv
Y2tIb2xkZXIpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OndpbGxEZXN0cm95R2xvYmFsRGF0YSk6
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTTG9j
a0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChKU0M6OkpTTG9jazo6SlNMb2NrKToK
KyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAg
ICAgICAgKEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Z2xvYmFsRGF0YSk6CisgICAg
ICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChyZWFsTWFpbik6CisKIDIwMTMtMDQtMTEg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWVyZ2Ug
Q2hhcmFjdGVyQ2xhc3NUYWJsZSBpbnRvIENoYXJhY3RlckNsYXNzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkocmV2aXNpb24gMTQ4MzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCisjaW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgi
CkBAIC03NjAsOCArNzYxLDggQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0aW9ucyBwYXJzaW5nIGNhbiBhZmZlY3QgSlNHbG9iYWxE
YXRhIGNyZWF0aW9uLCBhbmQgdGh1cwogICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRM
aW5lIG9wdGlvbnMoYXJnYywgYXJndik7Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFs
RGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKExhcmdlSGVhcCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
SlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisgICAgQVBJRW50cnlT
aGltIHNoaW0oZ2xvYmFsRGF0YSk7CiAgICAgaW50IHJlc3VsdDsKIAogICAgIGlmIChvcHRpb25z
Lm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAkocmV2aXNpb24gMTQ4MzAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAKKyNp
bmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpA
QCAtNDk5LDggKzUwMCw4IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBj
aGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBSZWZQdHI8
SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFw
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKKyAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtS
ZWYoKTsKKyAgICBBUElFbnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKIAogICAgIENvbW1hbmRM
aW5lIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCShyZXZpc2lvbiAxNDgzMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDE4ICszNSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVudHJ5U2hpbVdp
dGhvdXRMb2NrIHsKLXB1YmxpYzoKLSAgICBlbnVtIFJlZkdsb2JhbERhdGFUYWcgeyBEb250UmVm
R2xvYmFsRGF0YSA9IDAsIFJlZkdsb2JhbERhdGEgfTsKLQogcHJvdGVjdGVkOgotICAgIEFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3Rl
clRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICA6
IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBtX2ds
b2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2VudHJ5SWRlbnRpZmllclRhYmxlKHd0
ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEtPmlkZW50
aWZpZXJUYWJsZSkpCiAgICAgewotICAgICAgICBpZiAoc2hvdWxkUmVmR2xvYmFsRGF0YSkKLSAg
ICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+cmVmKCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdp
c3RlclRocmVhZCk7CiAgICAgICAgIGlmIChyZWdpc3RlclRocmVhZCkKICAgICAgICAgICAgIGds
b2JhbERhdGEtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7
CkBAIC01NiwxMiArNDksOSBAQCBwcm90ZWN0ZWQ6CiAgICAgfkFQSUVudHJ5U2hpbVdpdGhvdXRM
b2NrKCkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmll
clRhYmxlKG1fZW50cnlJZGVudGlmaWVyVGFibGUpOwotICAgICAgICBpZiAobV9zaG91bGRSZWZH
bG9iYWxEYXRhKQotICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5kZXJlZigpOwogICAgIH0KIAog
cHJvdGVjdGVkOgotICAgIFJlZkdsb2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwog
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9l
bnRyeUlkZW50aWZpZXJUYWJsZTsKIH07CkBAIC03MCwzNSArNjAsMzAgQEAgY2xhc3MgQVBJRW50
cnlTaGltIDogcHVibGljIEFQSUVudHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkg
ZW50cnkKICAgICBBUElFbnRyeVNoaW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhy
ZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xv
YmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YSkKLSAgICB7Ci0gICAgICAg
IGluaXQoKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5lY2Vzc2FyeSBm
b3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVudGFsbHkgcmVzdXJyZWN0aW5n
IAotICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRhLgotICAgIEFQ
SUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZkdsb2JhbERhdGFUYWcgcmVm
R2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50
cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQsIHJlZkdsb2JhbERh
dGEpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEo
KSwgcmVnaXN0ZXJUaHJlYWQpCiAgICAgewogICAgICAgICBpbml0KCk7CiAgICAgfQogCiAgICAg
Ly8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAgICAg
QVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVh
ZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwg
cmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2JhbERhdGEpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0
aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQpCiAgICAgewogICAgICAgICBpbml0
KCk7CiAgICAgfQogCiAgICAgfkFQSUVudHJ5U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2Jh
bERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKKyAgICAgICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9j
ayA9ICZtX2dsb2JhbERhdGEtPmFwaUxvY2soKTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5kZXJl
ZigpOworICAgICAgICBhcGlMb2NrLT51bmxvY2soKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBpbml0KCkKICAgICB7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2so
KTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTQ4MzAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MiwxNCArMjYy
LDE1IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9sYXN0R0NMZW5ndGgoMCkKICAgICAsIG1f
bGFzdENvZGVEaXNjYXJkVGltZShXVEY6OmN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX2FjdGl2aXR5
Q2FsbGJhY2soRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlKHRoaXMpKQotICAgICwg
bV9zd2VlcGVyKEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9hY3Rp
dml0eUNhbGxiYWNrKGFkb3B0UHRyKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh0
aGlzKSkpCisgICAgLCBtX3N3ZWVwZXIoYWRvcHRQdHIoSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVh
dGUodGhpcykpKQogewogICAgIG1fc3RvcmFnZVNwYWNlLmluaXQoKTsKIH0KIAogSGVhcDo6fkhl
YXAoKQogeworICAgIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiB9CiAKIGJvb2wgSGVhcDo6aXNQ
YWdlZE91dChkb3VibGUgZGVhZGxpbmUpCkBAIC04MTEsMTcgKzgxMiwxNyBAQCB2b2lkIEhlYXA6
Om1hcmtEZWFkT2JqZWN0cygpCiAKIHZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhHQ0Fj
dGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2spCiB7Ci0gICAgbV9hY3Rpdml0eUNhbGxi
YWNrID0gYWN0aXZpdHlDYWxsYmFjazsKKyAgICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhZG9wdFB0
cihhY3Rpdml0eUNhbGxiYWNrKTsKIH0KIAogR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rp
dml0eUNhbGxiYWNrKCkKIHsKLSAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrOworICAgIHJl
dHVybiBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0KCk7CiB9CiAKIEluY3JlbWVudGFsU3dlZXBlciog
SGVhcDo6c3dlZXBlcigpCiB7Ci0gICAgcmV0dXJuIG1fc3dlZXBlcjsKKyAgICByZXR1cm4gbV9z
d2VlcGVyLmdldCgpOwogfQogCiB2b2lkIEhlYXA6OnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJF
bmFibGVkKGJvb2wgZW5hYmxlKQpAQCAtODY0LDE1ICs4NjUsNiBAQCB2b2lkIEhlYXA6OmFkZENv
bXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzCiAgICAgbV9jb21waWxlZENvZGUuYXBwZW5kKGV4ZWN1
dGFibGUpOwogfQogCi12b2lkIEhlYXA6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCi17Ci0gICAgbV9h
Y3Rpdml0eUNhbGxiYWNrLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKLSAgICBtX2FjdGl2aXR5Q2Fs
bGJhY2sgPSAwOwotICAgIG1fc3dlZXBlci0+ZGlkU3RhcnRWTVNodXRkb3duKCk7Ci0gICAgbV9z
d2VlcGVyID0gMDsKLSAgICBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotfQotCiBjbGFzcyBab21i
aWZ5IDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CiBwdWJsaWM6CiAgICAgdm9p
ZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDE0ODMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsKIAogICAgICAgICBib29sIGlzUGFnZWRPdXQo
ZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgdm9pZCBkaWRTdGFydFZNU2h1dGRvd24oKTsKICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMo
KSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQogCkBAIC0yNjUsOCArMjY0LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4g
bV9jb21waWxlZENvZGU7CiAgICAgICAgIAotICAgICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIG1f
YWN0aXZpdHlDYWxsYmFjazsKLSAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBtX3N3ZWVwZXI7
CisgICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsK
KyAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwogICAgICAgICBW
ZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25hcHNob3Q7CiAgICAgfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCShyZXZpc2lvbiAxNDgzMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw5IEBAIEhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xv
YmEKICAgICAsIG1fcnVuTG9vcChydW5Mb29wKQogewogICAgIG1lbXNldCgmbV9jb250ZXh0LCAw
LCBzaXplb2YoQ0ZSdW5Mb29wVGltZXJDb250ZXh0KSk7Ci0gICAgbV9jb250ZXh0LmluZm8gPSB0
aGlzOworICAgIG1fY29udGV4dC5pbmZvID0gJmdsb2JhbERhdGEtPmFwaUxvY2soKTsKKyAgICBt
X2NvbnRleHQucmV0YWluID0gJnJldGFpbkFQSUxvY2s7CisgICAgbV9jb250ZXh0LnJlbGVhc2Ug
PSAmcmVsZWFzZUFQSUxvY2s7CiAgICAgbV90aW1lci5hZG9wdENGKENGUnVuTG9vcFRpbWVyQ3Jl
YXRlKDAsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUs
ICZtX2NvbnRleHQpKTsKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1f
dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9CkBAIC03MSwzOSArNzMsNDMg
QEAgdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKICAgICBDRlJ1bkxvb3BBZGRUaW1lciht
X3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9
CiAKLXZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKK2NvbnN0IHZvaWQqIEhlYXBUaW1lcjo6
cmV0YWluQVBJTG9jayhjb25zdCB2b2lkKiBpbmZvKQogewotICAgIG1fZ2xvYmFsRGF0YSA9IDA7
Ci0gICAgQ0ZSdW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzX2RlY2FkZSk7CisgICAgc3RhdGljX2Nhc3Q8SlNMb2Nr
Kj4oY29uc3RfY2FzdDx2b2lkKj4oaW5mbykpLT5yZWYoKTsKKyAgICByZXR1cm4gaW5mbzsKIH0K
IAotdm9pZCBIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCit2b2lkIEhlYXBUaW1lcjo6
cmVsZWFzZUFQSUxvY2soY29uc3Qgdm9pZCogaW5mbykKIHsKLSAgICBpZiAoQ0ZSdW5Mb29wR2V0
Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0g
ICAgICAgIGRlbGV0ZSB0aGlzOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgh
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7Ci0gICAgaW52YWxpZGF0ZSgp
OworICAgIHN0YXRpY19jYXN0PEpTTG9jayo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGluZm8pKS0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJl
Ziwgdm9pZCogaW5mbykKK3ZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGlt
ZXJSZWYgdGltZXIsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSGVhcFRpbWVyKiBhZ2VudCA9IHN0
YXRpY19jYXN0PEhlYXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgu
bG9jaygpOwotICAgIGlmICghYWdlbnQtPm1fZ2xvYmFsRGF0YSkgewotICAgICAgICBhZ2VudC0+
bV9zaHV0ZG93bk11dGV4LnVubG9jaygpOwotICAgICAgICBkZWxldGUgYWdlbnQ7CisgICAgSlNM
b2NrKiBhcGlMb2NrID0gc3RhdGljX2Nhc3Q8SlNMb2NrKj4oY29udGV4dCk7CisgICAgYXBpTG9j
ay0+bG9jaygpOworCisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gYXBpTG9jay0+Z2xv
YmFsRGF0YSgpOworICAgIC8vIFRoZSBKU0dsb2JhbERhdGEgaGFzIGJlZW4gZGVzdHJveWVkLCBz
byB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgIGlmICghZ2xvYmFsRGF0YSkgeworICAgICAg
ICBhcGlMb2NrLT51bmxvY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEhlYXBU
aW1lciogaGVhcFRpbWVyOworICAgIGlmIChnbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJh
Y2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAgICAgaGVhcFRpbWVyID0gZ2xvYmFs
RGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgZWxzZSBpZiAoZ2xvYmFsRGF0YS0+
aGVhcC5zd2VlcGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCisgICAgICAgIGhlYXBUaW1l
ciA9IGdsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwogICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgcmVm
IGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVjdGluZyB0aGUgcmVmIGNvdW50IG9mIGEg
ImRlYWQiIEpTR2xvYmFsRGF0YS4KLSAgICAgICAgQVBJRW50cnlTaGltIHNoaW0oYWdlbnQtPm1f
Z2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExvY2s6OkRvbnRSZWZHbG9iYWxEYXRhKTsK
LSAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgICAgICBBUElFbnRyeVNoaW0gc2hpbShnbG9i
YWxEYXRhKTsKKyAgICAgICAgaGVhcFRpbWVyLT5kb1dvcmsoKTsKICAgICB9Ci0gICAgYWdlbnQt
Pm1fc2h1dGRvd25NdXRleC51bmxvY2soKTsKKworICAgIGFwaUxvY2stPnVubG9jaygpOwogfQog
CiAjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDE0ODMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIEhlYXBUaW1lcl9oCiAjZGVmaW5lIEhlYXBUaW1lcl9oCiAKKyNpbmNsdWRlICJKU0xvY2su
aCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogCkBAIC01OSw3ICs2MCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGlt
ZXIoKTsKIAotICAgIHZvaWQgZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgdmlydHVhbCB2b2lk
IHN5bmNocm9uaXplKCk7CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKICAgICAKQEAg
LTY5LDYgKzY5LDkgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShDRikKICAgICBzdGF0aWMgY29uc3Qg
Q0ZUaW1lSW50ZXJ2YWwgc19kZWNhZGU7CiAKKyAgICBzdGF0aWMgY29uc3Qgdm9pZCogcmV0YWlu
QVBJTG9jayhjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUFQSUxvY2soY29u
c3Qgdm9pZCopOworCiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOwog
ICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsKICAgICBDRlJ1bkxvb3BUaW1l
ckNvbnRleHQgbV9jb250ZXh0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxNDgzMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
MTEgKzEzNCwxMSBAQCBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsCiAj
ZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRh
KEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKLSAgICA6
CisgICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkpCiAjaWYgRU5BQkxF
KEFTU0VNQkxFUikKLSAgICAgIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpLAorICAgICwgZXhl
Y3V0YWJsZUFsbG9jYXRvcigqdGhpcykKICNlbmRpZgotICAgICAgaGVhcCh0aGlzLCBoZWFwVHlw
ZSkKKyAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCiAgICAgLCBnbG9iYWxEYXRhVHlwZShnbG9i
YWxEYXRhVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcENhbGxGcmFtZShDYWxs
RnJhbWU6Om5vQ2FsbGVyKCkpCkBAIC0yNzAsOCArMjcwLDggQEAgSlNHbG9iYWxEYXRhOjp+SlNH
bG9iYWxEYXRhKCkKICAgICAvLyBDbGVhciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IG5vYm9k
eSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0LgogICAgIG1fcGVyQnl0ZWNvZGVQ
cm9maWxlci5jbGVhcigpOwogICAgIAotICAgIEFTU0VSVCghbV9hcGlMb2NrLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIGhlYXAuZGlkU3RhcnRWTVNodXRkb3duKCk7CisgICAg
QVNTRVJUKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgbV9h
cGlMb2NrLT53aWxsRGVzdHJveUdsb2JhbERhdGEodGhpcyk7CiAKICAgICBkZWxldGUgaW50ZXJw
cmV0ZXI7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0ODMwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyAr
MTkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0
aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRp
cGxlVGhyZWFkcygpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU0xvY2sgbV9hcGlMb2Nr
OworICAgICAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CiAKICAgICBwdWJsaWM6CiAjaWYg
RU5BQkxFKEFTU0VNQkxFUikKQEAgLTQ2OCw3ICs0NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0
dXJuIG1fYXBpTG9jazsgfQorICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVybiAqbV9h
cGlMb2NrOyB9CiAgICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hlKCkgeyByZXR1cm4gbV9jb2Rl
Q2FjaGUuZ2V0KCk7IH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRpc2NhcmRB
bGxDb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJ
KHJldmlzaW9uIDE0ODMwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDMyICs1MSw0NyBAQCB2b2lkIEdsb2JhbEpTTG9j
azo6aW5pdGlhbGl6ZSgpCiB9CiAKIEpTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0
ZSogZXhlYykKLSAgICA6IG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQorICAgIDog
bV9nbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmFw
aUxvY2soKS5sb2NrKCk7CisgICAgaW5pdCgpOwogfQogCiBKU0xvY2tIb2xkZXI6OkpTTG9ja0hv
bGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKKyAgICA6IG1fZ2xvYmFsRGF0YSgqZ2xvYmFsRGF0YSkKIHsKLSAgICBtX2dsb2JhbERh
dGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgaW5pdCgpOwogfQogCiBKU0xvY2tIb2xkZXI6OkpT
TG9ja0hvbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEo
Jmdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBpbml0
KCk7Cit9CisKK3ZvaWQgSlNMb2NrOjp3aWxsRGVzdHJveUdsb2JhbERhdGEoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogewotICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIG1fZ2xvYmFsRGF0YSA9PSBnbG9iYWxEYXRhKTsK
KyAgICBtX2dsb2JhbERhdGEgPSAwOworfQorCit2b2lkIEpTTG9ja0hvbGRlcjo6aW5pdCgpCit7
CisgICAgbV9nbG9iYWxEYXRhLmFwaUxvY2soKS5sb2NrKCk7CisgICAgbV9nbG9iYWxEYXRhLnJl
ZigpOwogfQogCiBKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQogewotICAgIG1fZ2xvYmFs
RGF0YS0+YXBpTG9jaygpLnVubG9jaygpOworICAgIFJlZlB0cjxKU0xvY2s+IGFwaUxvY2soJm1f
Z2xvYmFsRGF0YS5hcGlMb2NrKCkpOworICAgIG1fZ2xvYmFsRGF0YS5kZXJlZigpOworICAgIGFw
aUxvY2stPnVubG9jaygpOwogfQogCi1KU0xvY2s6OkpTTG9jaygpCitKU0xvY2s6OkpTTG9jayhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBtX293bmVyVGhyZWFkKDApCiAgICAgLCBt
X2xvY2tDb3VudCgwKQogICAgICwgbV9sb2NrRHJvcERlcHRoKDApCisgICAgLCBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKIHsKICAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxNDgzMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzIs
MTMgKzcyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5KU0xvY2tIb2xkZXIoKTsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNHbG9iYWxE
YXRhPiBtX2dsb2JhbERhdGE7CisgICAgICAgIHZvaWQgaW5pdCgpOworCisgICAgICAgIEpTR2xv
YmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIH07CiAKLSAgICBjbGFzcyBKU0xvY2sgeworICAg
IGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAg
IEpTTG9jaygpOworICAgICAgICBKU0xvY2soSlNHbG9iYWxEYXRhKik7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIH5KU0xvY2soKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGxvY2soKTsKQEAgLTg5LDEyICs5MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgbG9jayhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2Nr
KEpTR2xvYmFsRGF0YSYpOwogCisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsg
cmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQorCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIAogICAgICAgICB1bnNpZ25lZCBkcm9wQWxs
TG9ja3MoKTsKICAgICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7
CiAgICAgICAgIHZvaWQgZ3JhYkFsbExvY2tzKHVuc2lnbmVkIGxvY2tDb3VudCk7CiAKKyAgICAg
ICAgdm9pZCB3aWxsRGVzdHJveUdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CisKICAgICAgICAg
Y2xhc3MgRHJvcEFsbExvY2tzIHsKICAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERy
b3BBbGxMb2Nrcyk7CiAgICAgICAgIHB1YmxpYzoKQEAgLTExMyw2ICsxMTksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOwogICAgICAg
ICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9sb2NrRHJvcERlcHRo
OworICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197912</attachid>
            <date>2013-04-12 17:12:54 -0700</date>
            <delta_ts>2013-04-13 16:36:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114529-20130412171233.patch</filename>
            <type>text/plain</type>
            <size>24172</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEzLTA0LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGVhcFRpbWVyIGxpZmV0aW1lIHNob3VsZCBiZSBsZXNzIGNvbXBsaWNhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSaWdodCBub3cg
b3VyIEhlYXBUaW1lciBsaWZldGltZSBpcyByYXRoZXIgY29tcGxpY2F0ZWQuIEhlYXBUaW1lcnMg
YXJlICJvd25lZCIgYnkgdGhlIEpTR2xvYmFsRGF0YSwgCisgICAgICAgIGJ1dCB0aGVyZSdzIGFu
IGlzc3VlIGluIHRoYXQgdGhlcmUgY2FuIGJlIHJhY2VzIGJldHdlZW4gYSB0aHJlYWQgdGhhdCBp
cyB0cnlpbmcgdG8gdGVhciBkb3duIGEgSlNHbG9iYWxEYXRhIAorICAgICAgICBhbmQgdGhlIEhl
YXBUaW1lcidzIGZpcmUgZnVuY3Rpb24uIE91ciBjdXJyZW50IGNvZGUgZm9yIHRlYXJpbmcgZG93
biBIZWFwVGltZXJzIGlzIGFuIGludHJpY2F0ZSBhbmQgZGVsaWNhdGUgCisgICAgICAgIGRhbmNl
IHdoaWNoIHByb2JhYmx5IGNvbnRhaW5zIHN1YnRsZSBidWdzLgorCisgICAgICAgIFdlIGNhbiBt
YWtlIG91ciBsaXZlcyBlYXNpZXIgYnkgY2hhbmdpbmcgdGhpbmdzIGFyb3VuZCBhIGJpdC4gCisK
KyAgICAgICAgMSkgV2Ugc2hvdWxkIGZyZWUgdGhlIEFQSSBsb2NrIGZyb20gYmVpbmcgc29sZWx5
IG93bmVkIGJ5IHRoZSBKU0dsb2JhbERhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCAKKyAgICAgICAgICAgZ3JhYmJpbmcgdGhlIGxvY2sgb3V0IG9mIGludmFsaWQgbWVtb3J5IHdo
ZW4gb3VyIEhlYXBUaW1lciBjYWxsYmFjayBmaXJlcy4gCisKKyAgICAgICAgMikgV2Ugc2hvdWxk
IGFsc28gbWFrZSBpdCBzbyB0aGF0IHdlIGRlcmVmIHRoZSBKU0dsb2JhbERhdGEgZmlyc3QsIHRo
ZW4gdW5sb2NrIHRoZSBBUEkgbG9jayBzbyB0aGF0IHdoZW4gd2UgCisgICAgICAgICAgIGhhdmUg
dGhlIGxvY2ssIHRoZSBKU0dsb2JhbERhdGEgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXM6IGZ1bGx5
IHZhbGlkIG9yIGNvbXBsZXRlbHkgZGVzdHJveWVkLCBhbmQgd2Uga25vdyBleGFjdGx5IHdoaWNo
IG9uZS4gCisKKyAgICAgICAgMykgVGhlIEpTTG9jayBjYW4gdGVsbCB1cyB0aGlzIGluZm9ybWF0
aW9uIGJ5IGtlZXBpbmcgYSBiYWNrIHBvaW50ZXIgdG8gdGhlIEpTR2xvYmFsRGF0YS4gV2hlbiB0
aGUgSlNHbG9iYWxEYXRhJ3MgCisgICAgICAgICAgIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBpdCBj
bGVhcnMgdGhpcyBwb2ludGVyIGluIHRoZSBKU0xvY2suIE90aGVyIGNsaWVudHMgb2YgdGhlIEFQ
SSBsb2NrIGNhbiB0aGVuIGNoZWNrIAorICAgICAgICAgICB0aGlzIHBvaW50ZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgb3Igbm90IHRoZSBKU0dsb2JhbERhdGEgaXMgc3RpbGwgYXJvdW5kLgorCisg
ICAgICAgIDQpIFRoZSBDRlJ1bkxvb3BUaW1lciB3aWxsIHVzZSB0aGUgQVBJIGxvY2sgYXMgaXRz
IGNvbnRleHQgcmF0aGVyIHRoYW4gdGhlIEhlYXBUaW1lciBpdHNlbGYuIFRoZSBvbmx5IHdheSAK
KyAgICAgICAgICAgdGhlIEhlYXBUaW1lcidzIGNhbGxiYWNrIGNhbiBnZXQgdG8gdGhlIEhlYXBU
aW1lciBpcyB0aHJvdWdoIHRoZSBBUEkgbG9jaydzIEpTR2xvYmFsRGF0YSBwb2ludGVyLgorCisg
ICAgICAgIDUpIFRoZSBDRlJ1bkxvb3BUaW1lckNvbnRleHQgc3RydWN0IGhhcyB0d28gZmllbGRz
IGZvciByZXRhaW4gYW5kIHJlbGVhc2UgY2FsbGJhY2tzIGZvciB0aGUgY29udGV4dCdzIGluZm8g
ZmllbGQuIAorICAgICAgICAgICBXZSdsbCBwcm92aWRlIHRoZXNlIGNhbGxiYWNrcyB0byByZWYo
KSBhbmQgZGVyZWYoKSB0aGUgSlNMb2NrIGFzIG5lY2Vzc2FyeS4gVGh1cywgdGhlIHRpbWVyIGJl
Y29tZXMgdGhlIG90aGVyIAorICAgICAgICAgICBvd25lciBvZiB0aGUgSlNMb2NrIGFwYXJ0IGZy
b20gdGhlIEpTR2xvYmFsRGF0YS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOiBSZW1vdmUg
dGhlIGNydWZ0IHRoYXQgd2FzIHJlcXVpcmVkIGJ5IHRoZSBwcmV2aW91cyBkZXNpZ24sIHN1Y2gg
YXMgUmVmR2xvYmFsRGF0YVRhZy4KKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2s6On5BUElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChBUElFbnRy
eVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlT
aGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjp+QVBJRW50cnlTaGltKTogUHJvdGVj
dCB0aGUgQVBJIGxvY2sgd2l0aCBhIFJlZlB0ciwgZGVyZWYgdGhlIEpTR2xvYmFsRGF0YSwgd2hp
Y2ggY291bGQgZGVzdHJveSBpdCwKKyAgICAgICAgdGhlbiB1bmxvY2sgdGhlIEFQSSBsb2NrLiBU
aGlzIG9yZGVyaW5nIHByZXZlbnRzIG90aGVycyBmcm9tIG9idGFpbmluZyB0aGUgQVBJIGxvY2sg
d2hpbGUgdGhlIEpTR2xvYmFsRGF0YSBpcyBpbiB0aGUgCisgICAgICAgIG1pZGRsZSBvZiBiZWlu
ZyB0b3JuIGRvd24uCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6aW5pdCk6IFdlIG5vdyB0
YWtlIHRoZSBsb2NrLCB0aGVuIHJlZiB0aGUgSlNHbG9iYWxEYXRhLCB3aGljaCBpcyB0aGUgb3Bw
b3NpdGUgb3JkZXIgb2Ygd2hlbiB3ZSAKKyAgICAgICAgdGVhciBkb3duIHRoZSBzaGltLgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEFjdGl2aXR5Q2Fs
bGJhY2spOiBVc2UgUGFzc093blB0ciBub3cuCisgICAgICAgIChKU0M6OkhlYXA6OmFjdGl2aXR5
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6IERpdHRvLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmV0YWluQVBJTG9j
ayk6IFJldGFpbiBjYWxsYmFjayBmb3IgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAg
ICAgICAgKEpTQzo6cmVsZWFzZUFQSUxvY2spOiBSZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgQ0ZS
dW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpIZWFw
VGltZXIpOiBVc2UgdGhlIEFQSSBsb2NrIGFzIHRoZSBjb250ZXh0J3MgaW5mbyBmaWVsZCByYXRo
ZXIgdGhhbiB0aGUgSGVhcFRpbWVyLgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlk
RmlyZSk6IEdyYWIgdGhlIEFQSSBsb2NrLiBSZXR1cm4gZWFybHkgaWYgdGhlIEpTR2xvYmFsRGF0
YSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBmaWd1cmUg
b3V0IHdoaWNoIGtpbmQgb2YgSGVhcFRpbWVyIHdlIGFyZSBiYXNlZCBvbiB0aGUgQ0ZSdW5Mb29w
VGltZXJSZWYgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhbmQgCisgICAgICAgIGNhbGwgdGhlIEhl
YXBUaW1lcidzIGNhbGxiYWNrLgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmg6CisgICAgICAg
IChIZWFwVGltZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOiBQYXNzT3duUHRyIGFsbCB0
aGUgdGhpbmdzLgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAg
IChJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2Nt
YWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hpbSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUg
SlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVlZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBK
U0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwgaG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVu
dHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4KKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oOgorICAgICAgICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IE5v
dGlmeSB0aGUgQVBJIGxvY2sgdGhhdCB0aGUgSlNHbG9iYWxEYXRhIGlzIGJlaW5nIHRvcm4gZG93
bi4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogUmVmLCB0aGVuIGxvY2sgKGp1c3QgbGlrZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsRGVzdHJveUdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xk
ZXI6On5KU0xvY2tIb2xkZXIpOiBQcm90ZWN0LCBkZXJlZiwgdGhlbiB1bmxvY2sgKGp1c3QgbGlr
ZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAg
ICogcnVudGltZS9KU0xvY2suaDogQWRkIGJhY2sgcG9pbnRlciB0byB0aGUgSlNHbG9iYWxEYXRh
IGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBKU0dsb2JhbERhdGEgaXMgYmVpbmcKKyAgICAg
ICAgdG9ybiBkb3duIHRoYXQgY2xlYXJzIHRoaXMgcG9pbnRlciB0byBub3RpZnkgb3RoZXIgY2xp
ZW50cyAoaS5lLiB0aW1lciBjYWxsYmFja3MpIHRoYXQgdGhlIEpTR2xvYmFsRGF0YSBpcyBubwor
ICAgICAgICBsb25nZXIgdmFsaWQuCisgICAgICAgIChKU0xvY2tIb2xkZXIpOgorICAgICAgICAo
SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKiB0
ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hp
bSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUgSlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVl
ZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBKU0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwg
aG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVudHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4K
KwogMjAxMy0wNC0xMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNZXJnZSBDaGFyYWN0ZXJDbGFzc1RhYmxlIGludG8gQ2hhcmFjdGVyQ2xhc3MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNDgzMDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgIkJ1dHRl
cmZseUlubGluZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkNvbXBsZXRpb24uaCIKQEAgLTc2MCw4ICs3NjEsOCBAQCBpbnQganNjbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcHRpb25zIHBhcnNpbmcgY2FuIGFm
ZmVjdCBKU0dsb2JhbERhdGEgY3JlYXRpb24sIGFuZCB0aHVzCiAgICAgLy8gY29tZXMgZmlyc3Qu
CiAgICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKLSAgICBSZWZQdHI8SlNHbG9i
YWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKKyAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsK
KyAgICBBUElFbnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKICAgICBpbnQgcmVzdWx0OwogCiAg
ICAgaWYgKG9wdGlvbnMubV9wcm9maWxlICYmICFnbG9iYWxEYXRhLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCShyZXZpc2lvbiAx
NDgzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZWdFeHAuaCIKIAorI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCkBAIC00OTksOCArNTAwLDggQEAgc3RhdGljIHZvaWQgcGFyc2VBcmd1bWVu
dHMoaW50IGFyZ2MsIGNoYQogCiBpbnQgcmVhbE1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ewotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNy
ZWF0ZShMYXJnZUhlYXApOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkp
OworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKExh
cmdlSGVhcCkubGVha1JlZigpOworICAgIEFQSUVudHJ5U2hpbSBzaGltKGdsb2JhbERhdGEpOwog
CiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2
LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHJldmlz
aW9uIDE0ODMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTggKzM1LDExIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgewotcHVibGljOgotICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OwotCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkLCBSZWZHbG9iYWxEYXRhVGFnIHNob3VsZFJlZkdsb2JhbERh
dGEpCi0gICAgICAgIDogbV9zaG91bGRSZWZHbG9iYWxEYXRhKHNob3VsZFJlZkdsb2JhbERhdGEp
Ci0gICAgICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgQVBJRW50cnlTaGltV2l0
aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkKQor
ICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7Ci0gICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQotICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKQEAgLTU2LDEyICs0OSw5IEBAIHByb3RlY3RlZDoKICAgICB+QVBJRW50
cnlTaGltV2l0aG91dExvY2soKQogICAgIHsKICAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1
cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7Ci0gICAgICAgIGlm
IChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCi0gICAgICAgICAgICBtX2dsb2JhbERhdGEtPmRlcmVm
KCk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVmR2xvYmFsRGF0YVRhZyBtX3Nob3VsZFJl
Zkdsb2JhbERhdGE7CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgSWRlbnRp
ZmllclRhYmxlKiBtX2VudHJ5SWRlbnRpZmllclRhYmxlOwogfTsKQEAgLTcwLDM1ICs2MCwzMCBA
QCBjbGFzcyBBUElFbnRyeVNoaW0gOiBwdWJsaWMgQVBJRW50cnlTaGltCiBwdWJsaWM6CiAgICAg
Ly8gTm9ybWFsIEFQSSBlbnRyeQogICAgIEFQSUVudHJ5U2hpbShFeGVjU3RhdGUqIGV4ZWMsIGJv
b2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVlKQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRM
b2NrKCZleGVjLT5nbG9iYWxEYXRhKCksIHJlZ2lzdGVyVGhyZWFkLCBSZWZHbG9iYWxEYXRhKQot
ICAgIHsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
aXMgbmVjZXNzYXJ5IGZvciBIZWFwVGltZXIgdG8gcHJldmVudCBpdCBmcm9tIGFjY2lkZW50YWxs
eSByZXN1cnJlY3RpbmcgCi0gICAgLy8gdGhlIHJlZiBjb3VudCBvZiBhICJkZWFkIiBKU0dsb2Jh
bERhdGEuCi0gICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmR2xv
YmFsRGF0YVRhZyByZWZHbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAg
ICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVh
ZCwgcmVmR2xvYmFsRGF0YSkKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCkKICAgICB7CiAgICAgICAgIGluaXQoKTsK
ICAgICB9CiAKICAgICAvLyBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yIG9ubHkgaGFzIGEgZ2xv
YmFsRGF0YS4KICAgICBBUElFbnRyeVNoaW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29s
IHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9j
ayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YSkKKyAgICAgICAgOiBB
UElFbnRyeVNoaW1XaXRob3V0TG9jayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVhZCkKICAgICB7
CiAgICAgICAgIGluaXQoKTsKICAgICB9CiAKICAgICB+QVBJRW50cnlTaGltKCkKICAgICB7Ci0g
ICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOworICAgICAgICBSZWZQdHI8
SlNMb2NrPiBhcGlMb2NrID0gJm1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpOworICAgICAgICBtX2ds
b2JhbERhdGEtPmRlcmVmKCk7CisgICAgICAgIGFwaUxvY2stPnVubG9jaygpOwogICAgIH0KIAog
cHJpdmF0ZToKICAgICB2b2lkIGluaXQoKQogICAgIHsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5h
cGlMb2NrKCkubG9jaygpOworICAgICAgICBtX2dsb2JhbERhdGEtPnJlZigpOwogICAgIH0KIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNDgzMDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODA5LDE5ICs4MDksMTkgQEAgdm9pZCBIZWFwOjptYXJrRGVhZE9iamVjdHMoKQogICAgIG1f
b2JqZWN0U3BhY2UuZm9yRWFjaERlYWRDZWxsPE1hcmtPYmplY3Q+KCk7CiB9CiAKLXZvaWQgSGVh
cDo6c2V0QWN0aXZpdHlDYWxsYmFjayhHQ0FjdGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJh
Y2spCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCiB7CiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrID0g
YWN0aXZpdHlDYWxsYmFjazsKIH0KIAogR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rpdml0
eUNhbGxiYWNrKCkKIHsKLSAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrOworICAgIHJldHVy
biBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0KCk7CiB9CiAKIEluY3JlbWVudGFsU3dlZXBlciogSGVh
cDo6c3dlZXBlcigpCiB7Ci0gICAgcmV0dXJuIG1fc3dlZXBlcjsKKyAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOwogfQogCiB2b2lkIEhlYXA6OnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFi
bGVkKGJvb2wgZW5hYmxlKQpAQCAtODY0LDE1ICs4NjQsNiBAQCB2b2lkIEhlYXA6OmFkZENvbXBp
bGVkQ29kZShFeGVjdXRhYmxlQmFzCiAgICAgbV9jb21waWxlZENvZGUuYXBwZW5kKGV4ZWN1dGFi
bGUpOwogfQogCi12b2lkIEhlYXA6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCi17Ci0gICAgbV9hY3Rp
dml0eUNhbGxiYWNrLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKLSAgICBtX2FjdGl2aXR5Q2FsbGJh
Y2sgPSAwOwotICAgIG1fc3dlZXBlci0+ZGlkU3RhcnRWTVNodXRkb3duKCk7Ci0gICAgbV9zd2Vl
cGVyID0gMDsKLSAgICBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotfQotCiBjbGFzcyBab21iaWZ5
IDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CiBwdWJsaWM6CiAgICAgdm9pZCBv
cGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDE0ODMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJl
YWRzOyB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBh
Y3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0
aXZpdHlDYWxsYmFjayhHQ0FjdGl2aXR5Q2FsbGJhY2sqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxi
YWNrPik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rp
b25UaW1lckVuYWJsZWQoYm9vbCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVt
ZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CkBAIC0xNzIsNyArMTcyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZGlkQWJhbmRvbihzaXplX3QpOwogCiAgICAgICAgIGJvb2wgaXNQ
YWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwotICAgICAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93
bigpOwogICAgICAgICAKICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJS
b3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CiAKQEAgLTI2NSw4ICsyNjQs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFi
bGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKICAgICAgICAgCi0gICAgICAgIEdDQWN0aXZpdHlDYWxs
YmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOwotICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1f
c3dlZXBlcjsKKyAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNh
bGxiYWNrOworICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7CiAg
ICAgICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tTbmFwc2hvdDsKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDE0
ODMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEyICs0NiwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKIGNvbnN0
IENGVGltZUludGVydmFsIEhlYXBUaW1lcjo6c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUg
KiAxMDsKIAorc3RhdGljIGNvbnN0IHZvaWQqIHJldGFpbkFQSUxvY2soY29uc3Qgdm9pZCogaW5m
bykKK3sKKyAgICBzdGF0aWNfY2FzdDxKU0xvY2sqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSkt
PnJlZigpOworICAgIHJldHVybiBpbmZvOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlQVBJTG9j
ayhjb25zdCB2b2lkKiBpbmZvKQoreworICAgIHN0YXRpY19jYXN0PEpTTG9jayo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KGluZm8pKS0+ZGVyZWYoKTsKK30KKwogSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDRlJ1bkxvb3BSZWYgcnVuTG9vcCkKICAgICA6IG1fZ2xv
YmFsRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9ydW5Mb29wKHJ1bkxvb3ApCiB7CiAgICAgbWVt
c2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKLSAgICBt
X2NvbnRleHQuaW5mbyA9IHRoaXM7CisgICAgbV9jb250ZXh0LmluZm8gPSAmZ2xvYmFsRGF0YS0+
YXBpTG9jaygpOworICAgIG1fY29udGV4dC5yZXRhaW4gPSByZXRhaW5BUElMb2NrOworICAgIG1f
Y29udGV4dC5yZWxlYXNlID0gcmVsZWFzZUFQSUxvY2s7CiAgICAgbV90aW1lci5hZG9wdENGKENG
UnVuTG9vcFRpbWVyQ3JlYXRlKDAsIHNfZGVjYWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVy
Ojp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQpKTsKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1
bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9CkBA
IC03MSwzOSArODQsMzIgQEAgdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKICAgICBDRlJ1
bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7CiB9CiAKLXZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKK3ZvaWQgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQqIGNvbnRl
eHQpCiB7Ci0gICAgbV9nbG9iYWxEYXRhID0gMDsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRG
aXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHNfZGVj
YWRlKTsKLX0KKyAgICBKU0xvY2sqIGFwaUxvY2sgPSBzdGF0aWNfY2FzdDxKU0xvY2sqPihjb250
ZXh0KTsKKyAgICBhcGlMb2NrLT5sb2NrKCk7CiAKLXZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZN
U2h1dGRvd24oKQotewotICAgIGlmIChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29w
LmdldCgpKSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgZGVsZXRlIHRoaXM7Cisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gYXBpTG9jay0+Z2xvYmFsRGF0YSgpOworICAg
IC8vIFRoZSBKU0dsb2JhbERhdGEgaGFzIGJlZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgorICAgIGlmICghZ2xvYmFsRGF0YSkgeworICAgICAgICBhcGlMb2NrLT51bmxv
Y2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+
YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3NodXRkb3duTXV0ZXgpOwotICAgIGludmFsaWRhdGUoKTsKLX0KIAotdm9pZCBI
ZWFwVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogaW5mbykKLXsK
LSAgICBIZWFwVGltZXIqIGFnZW50ID0gc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4oaW5mbyk7Ci0g
ICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC5sb2NrKCk7Ci0gICAgaWYgKCFhZ2VudC0+bV9nbG9i
YWxEYXRhKSB7Ci0gICAgICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7Ci0gICAg
ICAgIGRlbGV0ZSBhZ2VudDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBIZWFwVGltZXIq
IGhlYXBUaW1lcjsKKyAgICBpZiAoZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCkt
Pm1fdGltZXIuZ2V0KCkgPT0gdGltZXIpCisgICAgICAgIGhlYXBUaW1lciA9IGdsb2JhbERhdGEt
PmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpOworICAgIGVsc2UgaWYgKGdsb2JhbERhdGEtPmhlYXAu
c3dlZXBlcigpLT5tX3RpbWVyLmdldCgpID09IHRpbWVyKQorICAgICAgICBoZWFwVGltZXIgPSBn
bG9iYWxEYXRhLT5oZWFwLnN3ZWVwZXIoKTsKKyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKICAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHJlZiBoZXJl
IHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBhICJkZWFk
IiBKU0dsb2JhbERhdGEuCi0gICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5tX2dsb2Jh
bERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7Ci0gICAg
ICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICAgICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0
YSk7CisgICAgICAgIGhlYXBUaW1lci0+ZG9Xb3JrKCk7CiAgICAgfQotICAgIGFnZW50LT5tX3No
dXRkb3duTXV0ZXgudW5sb2NrKCk7CisKKyAgICBhcGlMb2NrLT51bmxvY2soKTsKIH0KIAogI2Vs
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKQEAgLTEzNCwxMSArMTQwLDYgQEAgdm9pZCBIZWFwVGlt
ZXI6OmludmFsaWRhdGUoKQogewogfQogCi12b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRk
b3duKCkKLXsKLSAgICBkZWxldGUgdGhpczsKLX0KLQogI2VsaWYgUExBVEZPUk0oUVQpCiAKIEhl
YXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTIxMiwxMSAr
MjEzLDYgQEAgSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKIH0KIAotdm9pZCBIZWFwVGltZXI6
OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCi17Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KIHZvaWQgSGVh
cFRpbWVyOjpzeW5jaHJvbml6ZSgpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaAkocmV2aXNpb24gMTQ4MzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgfkhlYXBUaW1lcigpOwogCi0gICAgdm9pZCBkaWRTdGFydFZN
U2h1dGRvd24oKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZG9Xb3JrKCkgPSAwOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxNDgzMDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKEgKIHsKIH0KIAotSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1lbnRhbFN3ZWVwZXI6
OmNyZWF0ZShIZWFwKiBoZWFwKQorUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3Jl
bWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIG5ldyBJbmNy
ZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BHZXRDdXJyZW50
KCkpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAt
NzYsOSArNzYsOSBAQCBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihICiB7
CiB9CiAKLUluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVh
cCogaGVhcCkKK1Bhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBJbmNyZW1lbnRhbFN3ZWVw
ZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxTd2Vl
cGVyKGhlYXApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhl
YXApKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAt
MTU5LDkgKzE1OSw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpkb1dvcmsoKQogewogfQog
Ci1JbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhl
YXApCitQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50YWxTd2VlcGVyOjpj
cmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlciho
ZWFwLT5nbG9iYWxEYXRhKCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5jcmVtZW50YWxT
d2VlcGVyKGhlYXAtPmdsb2JhbERhdGEoKSkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBl
cjo6c3RhcnRTd2VlcGluZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMTQ4
MzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgSGVhcDsKIAogY2xhc3MgSW5j
cmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhlYXAqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3ZWVw
aW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+Jik7CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpOwog
ICAgIHZvaWQgc3dlZXBOZXh0QmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCShyZXZpc2lvbiAxNDgzMDEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2sgOiBwdWJsaWMgR0NBY3Rpdml0eUNhbGxiYWNrIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayogY3JlYXRlKEhlYXAqKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBjcmVhdGUoSGVh
cCopOwogCiAgICAgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhIZWFwKik7CiAKQEAgLTk0LDkg
Kzk0LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotaW5saW5lIERlZmF1bHRHQ0FjdGl2aXR5
Q2FsbGJhY2sqIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZShIZWFwKiBoZWFwKQor
aW5saW5lIFBhc3NPd25QdHI8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjaz4gRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIG5ldyBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrKGhlYXApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTQ4MzAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDExICsxMzQsMTEgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1i
bGVyKEV4ZWN1dGFibGVBbAogI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQogCiBKU0dsb2Jh
bERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCi0gICAgOgorICAgIDogbV9hcGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2so
dGhpcykpKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgICBleGVjdXRhYmxlQWxsb2NhdG9y
KCp0aGlzKSwKKyAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYKLSAgICAg
IGhlYXAodGhpcywgaGVhcFR5cGUpCisgICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBlKQogICAgICwg
Z2xvYmFsRGF0YVR5cGUoZ2xvYmFsRGF0YVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAg
LCB0b3BDYWxsRnJhbWUoQ2FsbEZyYW1lOjpub0NhbGxlcigpKQpAQCAtMjcwLDggKzI3MCw5IEBA
IEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0
byBlbnN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4K
ICAgICBtX3BlckJ5dGVjb2RlUHJvZmlsZXIuY2xlYXIoKTsKICAgICAKLSAgICBBU1NFUlQoIW1f
YXBpTG9jay5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKLSAgICBoZWFwLmRpZFN0YXJ0
Vk1TaHV0ZG93bigpOworICAgIEFTU0VSVChtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkpOworICAgIG1fYXBpTG9jay0+d2lsbERlc3Ryb3lHbG9iYWxEYXRhKHRoaXMpOwor
ICAgIGhlYXAubGFzdENoYW5jZVRvRmluYWxpemUoKTsKIAogICAgIGRlbGV0ZSBpbnRlcnByZXRl
cjsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTQ4MzAxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxl
VGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVU
aHJlYWRzKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTTG9jayBtX2FwaUxvY2s7Cisg
ICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsKIAogICAgIHB1YmxpYzoKICNpZiBFTkFC
TEUoQVNTRU1CTEVSKQpAQCAtNDY4LDcgKzQ2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4g
bV9hcGlMb2NrOyB9CisgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuICptX2FwaUxv
Y2s7IH0KICAgICAgICAgQ29kZUNhY2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNo
ZS5nZXQoKTsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENv
ZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2
aXNpb24gMTQ4MzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsMzIgKzUxLDQ3IEBAIHZvaWQgR2xvYmFsSlNMb2NrOjpp
bml0aWFsaXplKCkKIH0KIAogSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBl
eGVjKQotICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCisgICAgOiBtX2ds
b2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpKQogewotICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9j
aygpLmxvY2soKTsKKyAgICBpbml0KCk7CiB9CiAKIEpTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIDogbV9nbG9iYWxEYXRhKCpnbG9iYWxEYXRhKQogewotICAgIG1fZ2xvYmFsRGF0YS0+
YXBpTG9jaygpLmxvY2soKTsKKyAgICBpbml0KCk7CiB9CiAKIEpTTG9ja0hvbGRlcjo6SlNMb2Nr
SG9sZGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICA6IG1fZ2xvYmFsRGF0YSgmZ2xv
YmFsRGF0YSkKKyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAgIGluaXQoKTsK
K30KKwordm9pZCBKU0xvY2s6OndpbGxEZXN0cm95R2xvYmFsRGF0YShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgIEFT
U0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgbV9nbG9iYWxEYXRhID09IGdsb2JhbERhdGEpOworICAg
IG1fZ2xvYmFsRGF0YSA9IDA7Cit9CisKK3ZvaWQgSlNMb2NrSG9sZGVyOjppbml0KCkKK3sKKyAg
ICBtX2dsb2JhbERhdGEuYXBpTG9jaygpLmxvY2soKTsKKyAgICBtX2dsb2JhbERhdGEucmVmKCk7
CiB9CiAKIEpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcigpCiB7Ci0gICAgbV9nbG9iYWxEYXRh
LT5hcGlMb2NrKCkudW5sb2NrKCk7CisgICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jaygmbV9nbG9i
YWxEYXRhLmFwaUxvY2soKSk7CisgICAgbV9nbG9iYWxEYXRhLmRlcmVmKCk7CisgICAgYXBpTG9j
ay0+dW5sb2NrKCk7CiB9CiAKLUpTTG9jazo6SlNMb2NrKCkKK0pTTG9jazo6SlNMb2NrKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICA6IG1fb3duZXJUaHJlYWQoMCkKICAgICAsIG1fbG9j
a0NvdW50KDApCiAgICAgLCBtX2xvY2tEcm9wRGVwdGgoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YShn
bG9iYWxEYXRhKQogewogICAgIG1fc3BpbkxvY2suSW5pdCgpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHJldmlzaW9uIDE0ODMwMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMyAr
NzIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpT
TG9ja0hvbGRlcigpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+
IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAgdm9pZCBpbml0KCk7CisKKyAgICAgICAgSlNHbG9iYWxE
YXRhJiBtX2dsb2JhbERhdGE7CiAgICAgfTsKIAotICAgIGNsYXNzIEpTTG9jayB7CisgICAgY2xh
c3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwogICAgIHB1YmxpYzoKLSAgICAgICAgSlNM
b2NrKCk7CisgICAgICAgIEpTTG9jayhKU0dsb2JhbERhdGEqKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgfkpTTG9jaygpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9j
aygpOwpAQCAtODksMTIgKzkxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
dm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBzdGF0aWMgdm9pZCB1bmxvY2soSlNH
bG9iYWxEYXRhJik7CiAKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyByZXR1
cm4gbV9nbG9iYWxEYXRhOyB9CisKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOwogCiAgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nr
cygpOwogICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKICAg
ICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKIAorICAgICAgICB2
b2lkIHdpbGxEZXN0cm95R2xvYmFsRGF0YShKU0dsb2JhbERhdGEqKTsKKwogICAgICAgICBjbGFz
cyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFs
bExvY2tzKTsKICAgICAgICAgcHVibGljOgpAQCAtMTEzLDYgKzExOSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIGlu
dHB0cl90IG1fbG9ja0NvdW50OwogICAgICAgICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7Cisg
ICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197962</attachid>
            <date>2013-04-13 16:36:51 -0700</date>
            <delta_ts>2013-04-15 09:54:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114529-20130413163628.patch</filename>
            <type>text/plain</type>
            <size>24195</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEzLTA0LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGVhcFRpbWVyIGxpZmV0aW1lIHNob3VsZCBiZSBsZXNzIGNvbXBsaWNhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSaWdodCBub3cg
b3VyIEhlYXBUaW1lciBsaWZldGltZSBpcyByYXRoZXIgY29tcGxpY2F0ZWQuIEhlYXBUaW1lcnMg
YXJlICJvd25lZCIgYnkgdGhlIEpTR2xvYmFsRGF0YSwgCisgICAgICAgIGJ1dCB0aGVyZSdzIGFu
IGlzc3VlIGluIHRoYXQgdGhlcmUgY2FuIGJlIHJhY2VzIGJldHdlZW4gYSB0aHJlYWQgdGhhdCBp
cyB0cnlpbmcgdG8gdGVhciBkb3duIGEgSlNHbG9iYWxEYXRhIAorICAgICAgICBhbmQgdGhlIEhl
YXBUaW1lcidzIGZpcmUgZnVuY3Rpb24uIE91ciBjdXJyZW50IGNvZGUgZm9yIHRlYXJpbmcgZG93
biBIZWFwVGltZXJzIGlzIGFuIGludHJpY2F0ZSBhbmQgZGVsaWNhdGUgCisgICAgICAgIGRhbmNl
IHdoaWNoIHByb2JhYmx5IGNvbnRhaW5zIHN1YnRsZSBidWdzLgorCisgICAgICAgIFdlIGNhbiBt
YWtlIG91ciBsaXZlcyBlYXNpZXIgYnkgY2hhbmdpbmcgdGhpbmdzIGFyb3VuZCBhIGJpdC4gCisK
KyAgICAgICAgMSkgV2Ugc2hvdWxkIGZyZWUgdGhlIEFQSSBsb2NrIGZyb20gYmVpbmcgc29sZWx5
IG93bmVkIGJ5IHRoZSBKU0dsb2JhbERhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCAKKyAgICAgICAgICAgZ3JhYmJpbmcgdGhlIGxvY2sgb3V0IG9mIGludmFsaWQgbWVtb3J5IHdo
ZW4gb3VyIEhlYXBUaW1lciBjYWxsYmFjayBmaXJlcy4gCisKKyAgICAgICAgMikgV2Ugc2hvdWxk
IGFsc28gbWFrZSBpdCBzbyB0aGF0IHdlIGRlcmVmIHRoZSBKU0dsb2JhbERhdGEgZmlyc3QsIHRo
ZW4gdW5sb2NrIHRoZSBBUEkgbG9jayBzbyB0aGF0IHdoZW4gd2UgCisgICAgICAgICAgIGhhdmUg
dGhlIGxvY2ssIHRoZSBKU0dsb2JhbERhdGEgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXM6IGZ1bGx5
IHZhbGlkIG9yIGNvbXBsZXRlbHkgZGVzdHJveWVkLCBhbmQgd2Uga25vdyBleGFjdGx5IHdoaWNo
IG9uZS4gCisKKyAgICAgICAgMykgVGhlIEpTTG9jayBjYW4gdGVsbCB1cyB0aGlzIGluZm9ybWF0
aW9uIGJ5IGtlZXBpbmcgYSBiYWNrIHBvaW50ZXIgdG8gdGhlIEpTR2xvYmFsRGF0YS4gV2hlbiB0
aGUgSlNHbG9iYWxEYXRhJ3MgCisgICAgICAgICAgIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBpdCBj
bGVhcnMgdGhpcyBwb2ludGVyIGluIHRoZSBKU0xvY2suIE90aGVyIGNsaWVudHMgb2YgdGhlIEFQ
SSBsb2NrIGNhbiB0aGVuIGNoZWNrIAorICAgICAgICAgICB0aGlzIHBvaW50ZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgb3Igbm90IHRoZSBKU0dsb2JhbERhdGEgaXMgc3RpbGwgYXJvdW5kLgorCisg
ICAgICAgIDQpIFRoZSBDRlJ1bkxvb3BUaW1lciB3aWxsIHVzZSB0aGUgQVBJIGxvY2sgYXMgaXRz
IGNvbnRleHQgcmF0aGVyIHRoYW4gdGhlIEhlYXBUaW1lciBpdHNlbGYuIFRoZSBvbmx5IHdheSAK
KyAgICAgICAgICAgdGhlIEhlYXBUaW1lcidzIGNhbGxiYWNrIGNhbiBnZXQgdG8gdGhlIEhlYXBU
aW1lciBpcyB0aHJvdWdoIHRoZSBBUEkgbG9jaydzIEpTR2xvYmFsRGF0YSBwb2ludGVyLgorCisg
ICAgICAgIDUpIFRoZSBDRlJ1bkxvb3BUaW1lckNvbnRleHQgc3RydWN0IGhhcyB0d28gZmllbGRz
IGZvciByZXRhaW4gYW5kIHJlbGVhc2UgY2FsbGJhY2tzIGZvciB0aGUgY29udGV4dCdzIGluZm8g
ZmllbGQuIAorICAgICAgICAgICBXZSdsbCBwcm92aWRlIHRoZXNlIGNhbGxiYWNrcyB0byByZWYo
KSBhbmQgZGVyZWYoKSB0aGUgSlNMb2NrIGFzIG5lY2Vzc2FyeS4gVGh1cywgdGhlIHRpbWVyIGJl
Y29tZXMgdGhlIG90aGVyIAorICAgICAgICAgICBvd25lciBvZiB0aGUgSlNMb2NrIGFwYXJ0IGZy
b20gdGhlIEpTR2xvYmFsRGF0YS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOiBSZW1vdmUg
dGhlIGNydWZ0IHRoYXQgd2FzIHJlcXVpcmVkIGJ5IHRoZSBwcmV2aW91cyBkZXNpZ24sIHN1Y2gg
YXMgUmVmR2xvYmFsRGF0YVRhZy4KKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2s6On5BUElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChBUElFbnRy
eVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlT
aGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjp+QVBJRW50cnlTaGltKTogUHJvdGVj
dCB0aGUgQVBJIGxvY2sgd2l0aCBhIFJlZlB0ciwgZGVyZWYgdGhlIEpTR2xvYmFsRGF0YSwgd2hp
Y2ggY291bGQgZGVzdHJveSBpdCwKKyAgICAgICAgdGhlbiB1bmxvY2sgdGhlIEFQSSBsb2NrLiBU
aGlzIG9yZGVyaW5nIHByZXZlbnRzIG90aGVycyBmcm9tIG9idGFpbmluZyB0aGUgQVBJIGxvY2sg
d2hpbGUgdGhlIEpTR2xvYmFsRGF0YSBpcyBpbiB0aGUgCisgICAgICAgIG1pZGRsZSBvZiBiZWlu
ZyB0b3JuIGRvd24uCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6aW5pdCk6IFdlIG5vdyB0
YWtlIHRoZSBsb2NrLCB0aGVuIHJlZiB0aGUgSlNHbG9iYWxEYXRhLCB3aGljaCBpcyB0aGUgb3Bw
b3NpdGUgb3JkZXIgb2Ygd2hlbiB3ZSAKKyAgICAgICAgdGVhciBkb3duIHRoZSBzaGltLgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEFjdGl2aXR5Q2Fs
bGJhY2spOiBVc2UgUGFzc093blB0ciBub3cuCisgICAgICAgIChKU0M6OkhlYXA6OmFjdGl2aXR5
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6IERpdHRvLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmV0YWluQVBJTG9j
ayk6IFJldGFpbiBjYWxsYmFjayBmb3IgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAg
ICAgICAgKEpTQzo6cmVsZWFzZUFQSUxvY2spOiBSZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgQ0ZS
dW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpIZWFw
VGltZXIpOiBVc2UgdGhlIEFQSSBsb2NrIGFzIHRoZSBjb250ZXh0J3MgaW5mbyBmaWVsZCByYXRo
ZXIgdGhhbiB0aGUgSGVhcFRpbWVyLgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlk
RmlyZSk6IEdyYWIgdGhlIEFQSSBsb2NrLiBSZXR1cm4gZWFybHkgaWYgdGhlIEpTR2xvYmFsRGF0
YSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBmaWd1cmUg
b3V0IHdoaWNoIGtpbmQgb2YgSGVhcFRpbWVyIHdlIGFyZSBiYXNlZCBvbiB0aGUgQ0ZSdW5Mb29w
VGltZXJSZWYgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhbmQgCisgICAgICAgIGNhbGwgdGhlIEhl
YXBUaW1lcidzIGNhbGxiYWNrLgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmg6CisgICAgICAg
IChIZWFwVGltZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOiBQYXNzT3duUHRyIGFsbCB0
aGUgdGhpbmdzLgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAg
IChJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2Nt
YWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hpbSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUg
SlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVlZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBK
U0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwgaG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVu
dHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4KKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oOgorICAgICAgICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IE5v
dGlmeSB0aGUgQVBJIGxvY2sgdGhhdCB0aGUgSlNHbG9iYWxEYXRhIGlzIGJlaW5nIHRvcm4gZG93
bi4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogUmVmLCB0aGVuIGxvY2sgKGp1c3QgbGlrZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsRGVzdHJveUdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xk
ZXI6On5KU0xvY2tIb2xkZXIpOiBQcm90ZWN0LCBkZXJlZiwgdGhlbiB1bmxvY2sgKGp1c3QgbGlr
ZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAg
ICogcnVudGltZS9KU0xvY2suaDogQWRkIGJhY2sgcG9pbnRlciB0byB0aGUgSlNHbG9iYWxEYXRh
IGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBKU0dsb2JhbERhdGEgaXMgYmVpbmcKKyAgICAg
ICAgdG9ybiBkb3duIHRoYXQgY2xlYXJzIHRoaXMgcG9pbnRlciB0byBub3RpZnkgb3RoZXIgY2xp
ZW50cyAoaS5lLiB0aW1lciBjYWxsYmFja3MpIHRoYXQgdGhlIEpTR2xvYmFsRGF0YSBpcyBubwor
ICAgICAgICBsb25nZXIgdmFsaWQuCisgICAgICAgIChKU0xvY2tIb2xkZXIpOgorICAgICAgICAo
SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKiB0
ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hp
bSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUgSlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVl
ZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBKU0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwg
aG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVudHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4K
KwogMjAxMy0wNC0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgbWlzc2luZyBleHBvcnQgbWFjcm8gdG8gU3ltYm9sVGFibGVFbnRyeTo6ZnJl
ZUZhdEVudHJ5U2xvdygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTQ4Mzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQVBJU2hpbXMu
aCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCkBAIC03NjAsOCArNzYxLDggQEAgaW50
IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0
aW9ucyBwYXJzaW5nIGNhbiBhZmZlY3QgSlNHbG9iYWxEYXRhIGNyZWF0aW9uLCBhbmQgdGh1cwog
ICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7
Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKExhcmdlSGVhcCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFy
Z2VIZWFwKS5sZWFrUmVmKCk7CisgICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7CiAg
ICAgaW50IHJlc3VsdDsKIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0
YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVn
RXhwLmNwcAkocmV2aXNpb24gMTQ4MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RS
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtNDk5LDggKzUwMCw4IEBAIHN0YXRp
YyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRh
ID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhnbG9iYWxEYXRhLmdldCgpKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0ds
b2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBBUElFbnRyeVNoaW0g
c2hpbShnbG9iYWxEYXRhKTsKIAogICAgIENvbW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElTaGltcy5oCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwxMSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFJlZkdsb2JhbERhdGFUYWcgeyBEb250UmVmR2xvYmFsRGF0YSA9IDAsIFJlZkdsb2Jh
bERhdGEgfTsKLQogcHJvdGVjdGVkOgotICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRh
ZyBzaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShz
aG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQor
ICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9v
bCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAgICAgLCBtX2VudHJ5SWRlbnRpZmllclRhYmxlKHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSkpCiAgICAgewotICAg
ICAgICBpZiAoc2hvdWxkUmVmR2xvYmFsRGF0YSkKLSAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+
cmVmKCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlclRocmVhZCk7CiAgICAgICAgIGlm
IChyZWdpc3RlclRocmVhZCkKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAubWFjaGluZVRo
cmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5h
Y3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7CkBAIC01NiwxMiArNDksOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgfkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCkKICAgICB7CiAgICAgICAgIHd0
ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZW50cnlJZGVudGlmaWVy
VGFibGUpOwotICAgICAgICBpZiAobV9zaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAgICAg
bV9nbG9iYWxEYXRhLT5kZXJlZigpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFJlZkdsb2Jh
bERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsKIH07
CkBAIC03MCwzNSArNjAsMzAgQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVudHJ5
U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNoaW0o
RXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBB
UElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVh
ZCwgUmVmR2xvYmFsRGF0YSkKLSAgICB7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQg
aXQgZnJvbSBhY2NpZGVudGFsbHkgcmVzdXJyZWN0aW5nIAotICAgIC8vIHRoZSByZWYgY291bnQg
b2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRhLgotICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFJlZkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3Rl
clRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFs
RGF0YSwgcmVnaXN0ZXJUaHJlYWQsIHJlZkdsb2JhbERhdGEpCisgICAgICAgIDogQVBJRW50cnlT
aGltV2l0aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQpCiAgICAg
ewogICAgICAgICBpbml0KCk7CiAgICAgfQogCiAgICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVs
YXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAgICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJ
RW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2Jh
bERhdGEpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVn
aXN0ZXJUaHJlYWQpCiAgICAgewogICAgICAgICBpbml0KCk7CiAgICAgfQogCiAgICAgfkFQSUVu
dHJ5U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2so
KTsKKyAgICAgICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jayA9ICZtX2dsb2JhbERhdGEtPmFwaUxv
Y2soKTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5kZXJlZigpOworICAgICAgICBhcGlMb2NrLT51
bmxvY2soKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KCkKICAgICB7CiAgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKKyAgICAgICAgbV9nbG9iYWxEYXRh
LT5yZWYoKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMTQ4MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwOSwxOSArODA5LDE5IEBAIHZvaWQgSGVhcDo6bWFya0Rl
YWRPYmplY3RzKCkKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbDxNYXJrT2JqZWN0
PigpOwogfQogCi12b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxi
YWNrKiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBh
c3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1f
YWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5Q2FsbGJhY2s7CiB9CiAKIEdDQWN0aXZpdHlDYWxs
YmFjayogSGVhcDo6YWN0aXZpdHlDYWxsYmFjaygpCiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZpdHlD
YWxsYmFjazsKKyAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrLmdldCgpOwogfQogCiBJbmNy
ZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIoKQogewotICAgIHJldHVybiBtX3N3ZWVwZXI7
CisgICAgcmV0dXJuIG1fc3dlZXBlci5nZXQoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRHYXJiYWdl
Q29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKQEAgLTg2NCwxNSArODY0LDYgQEAg
dm9pZCBIZWFwOjphZGRDb21waWxlZENvZGUoRXhlY3V0YWJsZUJhcwogICAgIG1fY29tcGlsZWRD
b2RlLmFwcGVuZChleGVjdXRhYmxlKTsKIH0KIAotdm9pZCBIZWFwOjpkaWRTdGFydFZNU2h1dGRv
d24oKQotewotICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkU3RhcnRWTVNodXRkb3duKCk7Ci0g
ICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gMDsKLSAgICBtX3N3ZWVwZXItPmRpZFN0YXJ0Vk1TaHV0
ZG93bigpOwotICAgIG1fc3dlZXBlciA9IDA7Ci0gICAgbGFzdENoYW5jZVRvRmluYWxpemUoKTsK
LX0KLQogY2xhc3MgWm9tYmlmeSA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3Igewog
cHVibGljOgogICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyBy
ZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdD
QWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3du
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4pOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwpAQCAtMTcyLDcgKzE3
Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsK
IAogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgdm9p
ZCBkaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsg
fQogCkBAIC0yNjUsOCArMjY0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRG91Ymx5
TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CiAgICAgICAgIAotICAg
ICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIG1fYWN0aXZpdHlDYWxsYmFjazsKLSAgICAgICAgSW5j
cmVtZW50YWxTd2VlcGVyKiBtX3N3ZWVwZXI7CisgICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsKKyAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dl
ZXBlcj4gbV9zd2VlcGVyOwogICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25h
cHNob3Q7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGlt
ZXIuY3BwCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMjUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgCiBjb25zdCBDRlRpbWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0g
NjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CiAKK3N0YXRpYyBjb25zdCB2b2lkKiByZXRhaW5BUElM
b2NrKGNvbnN0IHZvaWQqIGluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8SlNMb2NrKj4oY29uc3Rf
Y2FzdDx2b2lkKj4oaW5mbykpLT5yZWYoKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZUFQSUxvY2soY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBzdGF0aWNfY2Fz
dDxKU0xvY2sqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSktPmRlcmVmKCk7Cit9CisKIEhlYXBU
aW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ0ZSdW5Mb29wUmVmIHJ1
bkxvb3ApCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fcnVuTG9vcChy
dW5Mb29wKQogewogICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0KSk7Ci0gICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOworICAgIG1fY29udGV4dC5p
bmZvID0gJmdsb2JhbERhdGEtPmFwaUxvY2soKTsKKyAgICBtX2NvbnRleHQucmV0YWluID0gcmV0
YWluQVBJTG9jazsKKyAgICBtX2NvbnRleHQucmVsZWFzZSA9IHJlbGVhc2VBUElMb2NrOwogICAg
IG1fdGltZXIuYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZSgwLCBzX2RlY2FkZSwgc19kZWNh
ZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250ZXh0KSk7CiAgICAgQ0ZS
dW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29w
Q29tbW9uTW9kZXMpOwogfQpAQCAtNzEsMzkgKzg0LDMyIEBAIHZvaWQgSGVhcFRpbWVyOjpzeW5j
aHJvbml6ZSgpCiAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwogfQogCi12b2lkIEhlYXBUaW1lcjo6aW52
YWxpZGF0ZSgpCit2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVm
IHRpbWVyLCB2b2lkKiBjb250ZXh0KQogewotICAgIG1fZ2xvYmFsRGF0YSA9IDA7Ci0gICAgQ0ZS
dW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCkgLSBzX2RlY2FkZSk7Ci19CisgICAgSlNMb2NrKiBhcGlMb2NrID0gc3RhdGlj
X2Nhc3Q8SlNMb2NrKj4oY29udGV4dCk7CisgICAgYXBpTG9jay0+bG9jaygpOwogCi12b2lkIEhl
YXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKLXsKLSAgICBpZiAoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGFwaUxvY2st
Pmdsb2JhbERhdGEoKTsKKyAgICAvLyBUaGUgSlNHbG9iYWxEYXRhIGhhcyBiZWVuIGRlc3Ryb3ll
ZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAgICBpZiAoIWdsb2JhbERhdGEpIHsKKyAg
ICAgICAgYXBpTG9jay0+dW5sb2NrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNT
RVJUKCFtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaHV0ZG93bk11dGV4KTsKLSAgICBpbnZhbGlk
YXRlKCk7Ci19CiAKLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJS
ZWYsIHZvaWQqIGluZm8pCi17Ci0gICAgSGVhcFRpbWVyKiBhZ2VudCA9IHN0YXRpY19jYXN0PEhl
YXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgubG9jaygpOwotICAg
IGlmICghYWdlbnQtPm1fZ2xvYmFsRGF0YSkgewotICAgICAgICBhZ2VudC0+bV9zaHV0ZG93bk11
dGV4LnVubG9jaygpOwotICAgICAgICBkZWxldGUgYWdlbnQ7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgSGVhcFRpbWVyKiBoZWFwVGltZXIgPSAwOworICAgIGlmIChnbG9iYWxEYXRhLT5o
ZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAgICAg
aGVhcFRpbWVyID0gZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgZWxz
ZSBpZiAoZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIp
CisgICAgICAgIGhlYXBUaW1lciA9IGdsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpOworICAgIGVs
c2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwogICAgIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3QgcmVmIGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVjdGluZyB0
aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFsRGF0YS4KLSAgICAgICAgQVBJRW50cnlT
aGltIHNoaW0oYWdlbnQtPm1fZ2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExvY2s6OkRv
bnRSZWZHbG9iYWxEYXRhKTsKLSAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgICAgICBBUElF
bnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKKyAgICAgICAgaGVhcFRpbWVyLT5kb1dvcmsoKTsK
ICAgICB9Ci0gICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2soKTsKKworICAgIGFwaUxv
Y2stPnVubG9jaygpOwogfQogCiAjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQpAQCAtMTM0LDEx
ICsxNDAsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7CiB9CiAKLXZvaWQgSGVh
cFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCiAj
ZWxpZiBQTEFURk9STShRVCkKIAogSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQpAQCAtMjEyLDExICsyMTMsNiBAQCBIZWFwVGltZXI6On5IZWFwVGltZXIoKQog
ewogfQogCi12b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKLXsKLSAgICBkZWxl
dGUgdGhpczsKLX0KLQogdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCShyZXZpc2lvbiAxNDgzNzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+SGVhcFRpbWVyKCk7
CiAKLSAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
aHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJ
KHJldmlzaW9uIDE0ODM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVu
dGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSW5jcmVtZW50
YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSAogewogfQogCi1JbmNyZW1lbnRhbFN3ZWVw
ZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitQYXNzT3duUHRyPElu
Y3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkK
IHsKLSAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhl
YXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBl
cjo6c2NoZWR1bGVUaW1lcigpCkBAIC03Niw5ICs3Niw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6
SW5jcmVtZW50YWxTd2VlcGVyKEgKIHsKIH0KIAotSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1l
bnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQorUGFzc093blB0cjxJbmNyZW1lbnRhbFN3
ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0
dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBl
cjo6c2NoZWR1bGVUaW1lcigpCkBAIC0xNTksOSArMTU5LDkgQEAgdm9pZCBJbmNyZW1lbnRhbFN3
ZWVwZXI6OmRvV29yaygpCiB7CiB9CiAKLUluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxT
d2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK1Bhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVy
PiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBu
ZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKSk7CiB9CiAK
IHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9j
ayo+JikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFs
U3dlZXBlci5oCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBj
bGFzcyBIZWFwOwogCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW5jcmVtZW50YWxTd2VlcGVyKiBjcmVhdGUoSGVhcCop
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gY3JlYXRlKEhlYXAq
KTsKICAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKTsKICAgICB2
aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAgICAgdm9pZCBzd2VlcE5leHRCbG9jaygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNr
LmgJKHJldmlzaW9uIDE0ODM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dD
QWN0aXZpdHlDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3Rl
Y3RlZDoKIAogY2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2
aXR5Q2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrKiBjcmVhdGUoSGVhcCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2
aXR5Q2FsbGJhY2s+IGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrKEhlYXAqKTsKIApAQCAtOTQsOSArOTQsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1p
bmxpbmUgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayogRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFj
azo6Y3JlYXRlKEhlYXAqIGhlYXApCitpbmxpbmUgUGFzc093blB0cjxEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkK
IHsKLSAgICByZXR1cm4gbmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKGhlYXApKTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTEgKzEzNCwxMSBAQCBz
dGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsCiAjZW5kaWYgLy8gRU5BQkxF
KCFBU1NFTUJMRVIpCiAKIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBl
IGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKLSAgICA6CisgICAgOiBtX2FwaUxv
Y2soYWRvcHRSZWYobmV3IEpTTG9jayh0aGlzKSkpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAg
ICAgIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpLAorICAgICwgZXhlY3V0YWJsZUFsbG9jYXRv
cigqdGhpcykKICNlbmRpZgotICAgICAgaGVhcCh0aGlzLCBoZWFwVHlwZSkKKyAgICAsIGhlYXAo
dGhpcywgaGVhcFR5cGUpCiAgICAgLCBnbG9iYWxEYXRhVHlwZShnbG9iYWxEYXRhVHlwZSkKICAg
ICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVy
KCkpCkBAIC0yNzAsOCArMjcwLDkgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAg
ICAvLyBDbGVhciB0aGlzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1v
dmUgdGhlbXNlbHZlcyBmcm9tIGl0LgogICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigp
OwogICAgIAotICAgIEFTU0VSVCghbV9hcGlMb2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwotICAgIGhlYXAuZGlkU3RhcnRWTVNodXRkb3duKCk7CisgICAgQVNTRVJUKG1fYXBpTG9j
ay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgbV9hcGlMb2NrLT53aWxsRGVz
dHJveUdsb2JhbERhdGEodGhpcyk7CisgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwog
CiAgICAgZGVsZXRlIGludGVycHJldGVyOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDgzNzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCku
bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgSlNMb2NrIG1fYXBpTG9jazsKKyAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwog
CiAgICAgcHVibGljOgogI2lmIEVOQUJMRShBU1NFTUJMRVIpCkBAIC00NjgsNyArNDY4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBKU0xv
Y2smIGFwaUxvY2soKSB7IHJldHVybiBtX2FwaUxvY2s7IH0KKyAgICAgICAgSlNMb2NrJiBhcGlM
b2NrKCkgeyByZXR1cm4gKm1fYXBpTG9jazsgfQogICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNo
ZSgpIHsgcmV0dXJuIG1fY29kZUNhY2hlLmdldCgpOyB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCShyZXZpc2lvbiAxNDgzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzMiArNTEsNDcg
QEAgdm9pZCBHbG9iYWxKU0xvY2s6OmluaXRpYWxpemUoKQogfQogCiBKU0xvY2tIb2xkZXI6OkpT
TG9ja0hvbGRlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2dsb2JhbERhdGEoJmV4ZWMtPmds
b2JhbERhdGEoKSkKKyAgICA6IG1fZ2xvYmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCkpCiB7Ci0g
ICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgIGluaXQoKTsKIH0KIAogSlNM
b2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDog
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoKmdsb2JhbERhdGEp
CiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgIGluaXQoKTsKIH0K
IAogSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQot
ICAgIDogbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2Jh
bERhdGEpCit7CisgICAgaW5pdCgpOworfQorCit2b2lkIEpTTG9jazo6d2lsbERlc3Ryb3lHbG9i
YWxEYXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmFw
aUxvY2soKS5sb2NrKCk7CisgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxEYXRhLCBtX2dsb2JhbERh
dGEgPT0gZ2xvYmFsRGF0YSk7CisgICAgbV9nbG9iYWxEYXRhID0gMDsKK30KKwordm9pZCBKU0xv
Y2tIb2xkZXI6OmluaXQoKQoreworICAgIG1fZ2xvYmFsRGF0YS5hcGlMb2NrKCkubG9jaygpOwor
ICAgIG1fZ2xvYmFsRGF0YS5yZWYoKTsKIH0KIAogSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVy
KCkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKKyAgICBSZWZQdHI8
SlNMb2NrPiBhcGlMb2NrKCZtX2dsb2JhbERhdGEuYXBpTG9jaygpKTsKKyAgICBtX2dsb2JhbERh
dGEuZGVyZWYoKTsKKyAgICBhcGlMb2NrLT51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2so
KQorSlNMb2NrOjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9vd25l
clRocmVhZCgwKQogICAgICwgbV9sb2NrQ291bnQoMCkKICAgICAsIG1fbG9ja0Ryb3BEZXB0aCgw
KQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CiAgICAgbV9zcGluTG9jay5Jbml0
KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2aXNp
b24gMTQ4MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDEzICs3MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrSG9sZGVyKCk7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgICAgICB2b2lkIGluaXQo
KTsKKworICAgICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCi0gICAg
Y2xhc3MgSlNMb2NrIHsKKyAgICBjbGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SlNMb2NrPiB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTTG9jayk7CiAg
ICAgcHVibGljOgotICAgICAgICBKU0xvY2soKTsKKyAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0
YSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrKCk7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7CkBAIC04OSwxMiArOTEsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soSlNHbG9iYWxEYXRhJik7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHVubG9jayhKU0dsb2JhbERhdGEmKTsKIAorICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKICAgICAg
ICAgdW5zaWduZWQgZHJvcEFsbExvY2tzKCk7CiAgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nr
c1VuY29uZGl0aW9uYWxseSgpOwogICAgICAgICB2b2lkIGdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBs
b2NrQ291bnQpOwogCisgICAgICAgIHZvaWQgd2lsbERlc3Ryb3lHbG9iYWxEYXRhKEpTR2xvYmFs
RGF0YSopOworCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9ja3MpOwogICAgICAgICBwdWJsaWM6CkBAIC0xMTMs
NiArMTE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9v
d25lclRocmVhZDsKICAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgICAgIHVuc2ln
bmVkIG1fbG9ja0Ryb3BEZXB0aDsKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198131</attachid>
            <date>2013-04-15 09:54:37 -0700</date>
            <delta_ts>2013-04-15 13:45:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114529-20130415095412.patch</filename>
            <type>text/plain</type>
            <size>25026</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEzLTA0LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGVhcFRpbWVyIGxpZmV0aW1lIHNob3VsZCBiZSBsZXNzIGNvbXBsaWNhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSaWdodCBub3cg
b3VyIEhlYXBUaW1lciBsaWZldGltZSBpcyByYXRoZXIgY29tcGxpY2F0ZWQuIEhlYXBUaW1lcnMg
YXJlICJvd25lZCIgYnkgdGhlIEpTR2xvYmFsRGF0YSwgCisgICAgICAgIGJ1dCB0aGVyZSdzIGFu
IGlzc3VlIGluIHRoYXQgdGhlcmUgY2FuIGJlIHJhY2VzIGJldHdlZW4gYSB0aHJlYWQgdGhhdCBp
cyB0cnlpbmcgdG8gdGVhciBkb3duIGEgSlNHbG9iYWxEYXRhIAorICAgICAgICBhbmQgdGhlIEhl
YXBUaW1lcidzIGZpcmUgZnVuY3Rpb24uIE91ciBjdXJyZW50IGNvZGUgZm9yIHRlYXJpbmcgZG93
biBIZWFwVGltZXJzIGlzIGFuIGludHJpY2F0ZSBhbmQgZGVsaWNhdGUgCisgICAgICAgIGRhbmNl
IHdoaWNoIHByb2JhYmx5IGNvbnRhaW5zIHN1YnRsZSBidWdzLgorCisgICAgICAgIFdlIGNhbiBt
YWtlIG91ciBsaXZlcyBlYXNpZXIgYnkgY2hhbmdpbmcgdGhpbmdzIGFyb3VuZCBhIGJpdC4gCisK
KyAgICAgICAgMSkgV2Ugc2hvdWxkIGZyZWUgdGhlIEFQSSBsb2NrIGZyb20gYmVpbmcgc29sZWx5
IG93bmVkIGJ5IHRoZSBKU0dsb2JhbERhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCAKKyAgICAgICAgICAgZ3JhYmJpbmcgdGhlIGxvY2sgb3V0IG9mIGludmFsaWQgbWVtb3J5IHdo
ZW4gb3VyIEhlYXBUaW1lciBjYWxsYmFjayBmaXJlcy4gCisKKyAgICAgICAgMikgV2Ugc2hvdWxk
IGFsc28gbWFrZSBpdCBzbyB0aGF0IHdlIGRlcmVmIHRoZSBKU0dsb2JhbERhdGEgZmlyc3QsIHRo
ZW4gdW5sb2NrIHRoZSBBUEkgbG9jayBzbyB0aGF0IHdoZW4gd2UgCisgICAgICAgICAgIGhhdmUg
dGhlIGxvY2ssIHRoZSBKU0dsb2JhbERhdGEgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXM6IGZ1bGx5
IHZhbGlkIG9yIGNvbXBsZXRlbHkgZGVzdHJveWVkLCBhbmQgd2Uga25vdyBleGFjdGx5IHdoaWNo
IG9uZS4gCisKKyAgICAgICAgMykgVGhlIEpTTG9jayBjYW4gdGVsbCB1cyB0aGlzIGluZm9ybWF0
aW9uIGJ5IGtlZXBpbmcgYSBiYWNrIHBvaW50ZXIgdG8gdGhlIEpTR2xvYmFsRGF0YS4gV2hlbiB0
aGUgSlNHbG9iYWxEYXRhJ3MgCisgICAgICAgICAgIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBpdCBj
bGVhcnMgdGhpcyBwb2ludGVyIGluIHRoZSBKU0xvY2suIE90aGVyIGNsaWVudHMgb2YgdGhlIEFQ
SSBsb2NrIGNhbiB0aGVuIGNoZWNrIAorICAgICAgICAgICB0aGlzIHBvaW50ZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgb3Igbm90IHRoZSBKU0dsb2JhbERhdGEgaXMgc3RpbGwgYXJvdW5kLgorCisg
ICAgICAgIDQpIFRoZSBDRlJ1bkxvb3BUaW1lciB3aWxsIHVzZSB0aGUgQVBJIGxvY2sgYXMgaXRz
IGNvbnRleHQgcmF0aGVyIHRoYW4gdGhlIEhlYXBUaW1lciBpdHNlbGYuIFRoZSBvbmx5IHdheSAK
KyAgICAgICAgICAgdGhlIEhlYXBUaW1lcidzIGNhbGxiYWNrIGNhbiBnZXQgdG8gdGhlIEhlYXBU
aW1lciBpcyB0aHJvdWdoIHRoZSBBUEkgbG9jaydzIEpTR2xvYmFsRGF0YSBwb2ludGVyLgorCisg
ICAgICAgIDUpIFRoZSBDRlJ1bkxvb3BUaW1lckNvbnRleHQgc3RydWN0IGhhcyB0d28gZmllbGRz
IGZvciByZXRhaW4gYW5kIHJlbGVhc2UgY2FsbGJhY2tzIGZvciB0aGUgY29udGV4dCdzIGluZm8g
ZmllbGQuIAorICAgICAgICAgICBXZSdsbCBwcm92aWRlIHRoZXNlIGNhbGxiYWNrcyB0byByZWYo
KSBhbmQgZGVyZWYoKSB0aGUgSlNMb2NrIGFzIG5lY2Vzc2FyeS4gVGh1cywgdGhlIHRpbWVyIGJl
Y29tZXMgdGhlIG90aGVyIAorICAgICAgICAgICBvd25lciBvZiB0aGUgSlNMb2NrIGFwYXJ0IGZy
b20gdGhlIEpTR2xvYmFsRGF0YS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOiBSZW1vdmUg
dGhlIGNydWZ0IHRoYXQgd2FzIHJlcXVpcmVkIGJ5IHRoZSBwcmV2aW91cyBkZXNpZ24sIHN1Y2gg
YXMgUmVmR2xvYmFsRGF0YVRhZy4KKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2s6On5BUElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChBUElFbnRy
eVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlT
aGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjp+QVBJRW50cnlTaGltKTogUHJvdGVj
dCB0aGUgQVBJIGxvY2sgd2l0aCBhIFJlZlB0ciwgZGVyZWYgdGhlIEpTR2xvYmFsRGF0YSwgd2hp
Y2ggY291bGQgZGVzdHJveSBpdCwKKyAgICAgICAgdGhlbiB1bmxvY2sgdGhlIEFQSSBsb2NrLiBU
aGlzIG9yZGVyaW5nIHByZXZlbnRzIG90aGVycyBmcm9tIG9idGFpbmluZyB0aGUgQVBJIGxvY2sg
d2hpbGUgdGhlIEpTR2xvYmFsRGF0YSBpcyBpbiB0aGUgCisgICAgICAgIG1pZGRsZSBvZiBiZWlu
ZyB0b3JuIGRvd24uCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6aW5pdCk6IFdlIG5vdyB0
YWtlIHRoZSBsb2NrLCB0aGVuIHJlZiB0aGUgSlNHbG9iYWxEYXRhLCB3aGljaCBpcyB0aGUgb3Bw
b3NpdGUgb3JkZXIgb2Ygd2hlbiB3ZSAKKyAgICAgICAgdGVhciBkb3duIHRoZSBzaGltLgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEFjdGl2aXR5Q2Fs
bGJhY2spOiBVc2UgUGFzc093blB0ciBub3cuCisgICAgICAgIChKU0M6OkhlYXA6OmFjdGl2aXR5
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6IERpdHRvLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmV0YWluQVBJTG9j
ayk6IFJldGFpbiBjYWxsYmFjayBmb3IgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAg
ICAgICAgKEpTQzo6cmVsZWFzZUFQSUxvY2spOiBSZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgQ0ZS
dW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpIZWFw
VGltZXIpOiBVc2UgdGhlIEFQSSBsb2NrIGFzIHRoZSBjb250ZXh0J3MgaW5mbyBmaWVsZCByYXRo
ZXIgdGhhbiB0aGUgSGVhcFRpbWVyLgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlk
RmlyZSk6IEdyYWIgdGhlIEFQSSBsb2NrLiBSZXR1cm4gZWFybHkgaWYgdGhlIEpTR2xvYmFsRGF0
YSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBmaWd1cmUg
b3V0IHdoaWNoIGtpbmQgb2YgSGVhcFRpbWVyIHdlIGFyZSBiYXNlZCBvbiB0aGUgQ0ZSdW5Mb29w
VGltZXJSZWYgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhbmQgCisgICAgICAgIGNhbGwgdGhlIEhl
YXBUaW1lcidzIGNhbGxiYWNrLgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmg6CisgICAgICAg
IChIZWFwVGltZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOiBQYXNzT3duUHRyIGFsbCB0
aGUgdGhpbmdzLgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAg
IChJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2Nt
YWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hpbSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUg
SlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVlZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBK
U0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwgaG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVu
dHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4KKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oOgorICAgICAgICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IE5v
dGlmeSB0aGUgQVBJIGxvY2sgdGhhdCB0aGUgSlNHbG9iYWxEYXRhIGlzIGJlaW5nIHRvcm4gZG93
bi4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogUmVmLCB0aGVuIGxvY2sgKGp1c3QgbGlrZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsRGVzdHJveUdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xk
ZXI6On5KU0xvY2tIb2xkZXIpOiBQcm90ZWN0LCBkZXJlZiwgdGhlbiB1bmxvY2sgKGp1c3QgbGlr
ZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAg
ICogcnVudGltZS9KU0xvY2suaDogQWRkIGJhY2sgcG9pbnRlciB0byB0aGUgSlNHbG9iYWxEYXRh
IGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBKU0dsb2JhbERhdGEgaXMgYmVpbmcKKyAgICAg
ICAgdG9ybiBkb3duIHRoYXQgY2xlYXJzIHRoaXMgcG9pbnRlciB0byBub3RpZnkgb3RoZXIgY2xp
ZW50cyAoaS5lLiB0aW1lciBjYWxsYmFja3MpIHRoYXQgdGhlIEpTR2xvYmFsRGF0YSBpcyBubwor
ICAgICAgICBsb25nZXIgdmFsaWQuCisgICAgICAgIChKU0xvY2tIb2xkZXIpOgorICAgICAgICAo
SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKiB0
ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hp
bSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUgSlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVl
ZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBKU0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwg
aG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVudHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4K
KwogMjAxMy0wNC0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgbWlzc2luZyBleHBvcnQgbWFjcm8gdG8gU3ltYm9sVGFibGVFbnRyeTo6ZnJl
ZUZhdEVudHJ5U2xvdygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTQ4NDQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQVBJU2hpbXMu
aCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCkBAIC03NjAsOCArNzYxLDggQEAgaW50
IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0
aW9ucyBwYXJzaW5nIGNhbiBhZmZlY3QgSlNHbG9iYWxEYXRhIGNyZWF0aW9uLCBhbmQgdGh1cwog
ICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7
Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKExhcmdlSGVhcCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFy
Z2VIZWFwKS5sZWFrUmVmKCk7CisgICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7CiAg
ICAgaW50IHJlc3VsdDsKIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0
YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVn
RXhwLmNwcAkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RS
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtNDk5LDggKzUwMCw4IEBAIHN0YXRp
YyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRh
ID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhnbG9iYWxEYXRhLmdldCgpKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0ds
b2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBBUElFbnRyeVNoaW0g
c2hpbShnbG9iYWxEYXRhKTsKIAogICAgIENvbW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElTaGltcy5oCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwxMSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFJlZkdsb2JhbERhdGFUYWcgeyBEb250UmVmR2xvYmFsRGF0YSA9IDAsIFJlZkdsb2Jh
bERhdGEgfTsKLQogcHJvdGVjdGVkOgotICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRh
ZyBzaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShz
aG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQor
ICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9v
bCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAgICAgLCBtX2VudHJ5SWRlbnRpZmllclRhYmxlKHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSkpCiAgICAgewotICAg
ICAgICBpZiAoc2hvdWxkUmVmR2xvYmFsRGF0YSkKLSAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+
cmVmKCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlclRocmVhZCk7CiAgICAgICAgIGlm
IChyZWdpc3RlclRocmVhZCkKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAubWFjaGluZVRo
cmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5h
Y3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7CkBAIC01NiwxMiArNDksOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgfkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCkKICAgICB7CiAgICAgICAgIHd0
ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZW50cnlJZGVudGlmaWVy
VGFibGUpOwotICAgICAgICBpZiAobV9zaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAgICAg
bV9nbG9iYWxEYXRhLT5kZXJlZigpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFJlZkdsb2Jh
bERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsKIH07
CkBAIC03MCwzNSArNjAsMzAgQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVudHJ5
U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNoaW0o
RXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBB
UElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVh
ZCwgUmVmR2xvYmFsRGF0YSkKLSAgICB7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQg
aXQgZnJvbSBhY2NpZGVudGFsbHkgcmVzdXJyZWN0aW5nIAotICAgIC8vIHRoZSByZWYgY291bnQg
b2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRhLgotICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFJlZkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3Rl
clRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFs
RGF0YSwgcmVnaXN0ZXJUaHJlYWQsIHJlZkdsb2JhbERhdGEpCisgICAgICAgIDogQVBJRW50cnlT
aGltV2l0aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQpCiAgICAg
ewogICAgICAgICBpbml0KCk7CiAgICAgfQogCiAgICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVs
YXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAgICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJ
RW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2Jh
bERhdGEpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVn
aXN0ZXJUaHJlYWQpCiAgICAgewogICAgICAgICBpbml0KCk7CiAgICAgfQogCiAgICAgfkFQSUVu
dHJ5U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2so
KTsKKyAgICAgICAgUmVmUHRyPEpTTG9jaz4gYXBpTG9jayA9ICZtX2dsb2JhbERhdGEtPmFwaUxv
Y2soKTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5kZXJlZigpOworICAgICAgICBhcGlMb2NrLT51
bmxvY2soKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KCkKICAgICB7CiAgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKKyAgICAgICAgbV9nbG9iYWxEYXRh
LT5yZWYoKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwOSwxOSArODA5LDE5IEBAIHZvaWQgSGVhcDo6bWFya0Rl
YWRPYmplY3RzKCkKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbDxNYXJrT2JqZWN0
PigpOwogfQogCi12b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxi
YWNrKiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBh
c3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1f
YWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5Q2FsbGJhY2s7CiB9CiAKIEdDQWN0aXZpdHlDYWxs
YmFjayogSGVhcDo6YWN0aXZpdHlDYWxsYmFjaygpCiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZpdHlD
YWxsYmFjazsKKyAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrLmdldCgpOwogfQogCiBJbmNy
ZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIoKQogewotICAgIHJldHVybiBtX3N3ZWVwZXI7
CisgICAgcmV0dXJuIG1fc3dlZXBlci5nZXQoKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRHYXJiYWdl
Q29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKQEAgLTg2NCwxNSArODY0LDYgQEAg
dm9pZCBIZWFwOjphZGRDb21waWxlZENvZGUoRXhlY3V0YWJsZUJhcwogICAgIG1fY29tcGlsZWRD
b2RlLmFwcGVuZChleGVjdXRhYmxlKTsKIH0KIAotdm9pZCBIZWFwOjpkaWRTdGFydFZNU2h1dGRv
d24oKQotewotICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkU3RhcnRWTVNodXRkb3duKCk7Ci0g
ICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gMDsKLSAgICBtX3N3ZWVwZXItPmRpZFN0YXJ0Vk1TaHV0
ZG93bigpOwotICAgIG1fc3dlZXBlciA9IDA7Ci0gICAgbGFzdENoYW5jZVRvRmluYWxpemUoKTsK
LX0KLQogY2xhc3MgWm9tYmlmeSA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3Igewog
cHVibGljOgogICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyBy
ZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdD
QWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3du
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4pOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwpAQCAtMTcyLDcgKzE3
Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRpZEFiYW5kb24oc2l6ZV90KTsK
IAogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKLSAgICAgICAgdm9p
ZCBkaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsg
fQogCkBAIC0yNjUsOCArMjY0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRG91Ymx5
TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CiAgICAgICAgIAotICAg
ICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIG1fYWN0aXZpdHlDYWxsYmFjazsKLSAgICAgICAgSW5j
cmVtZW50YWxTd2VlcGVyKiBtX3N3ZWVwZXI7CisgICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsKKyAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dl
ZXBlcj4gbV9zd2VlcGVyOwogICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiBtX2Jsb2NrU25h
cHNob3Q7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGlt
ZXIuY3BwCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMjUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgCiBjb25zdCBDRlRpbWVJbnRlcnZhbCBIZWFwVGltZXI6OnNfZGVjYWRlID0g
NjAgKiA2MCAqIDI0ICogMzY1ICogMTA7CiAKK3N0YXRpYyBjb25zdCB2b2lkKiByZXRhaW5BUElM
b2NrKGNvbnN0IHZvaWQqIGluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8SlNMb2NrKj4oY29uc3Rf
Y2FzdDx2b2lkKj4oaW5mbykpLT5yZWYoKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZUFQSUxvY2soY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBzdGF0aWNfY2Fz
dDxKU0xvY2sqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSktPmRlcmVmKCk7Cit9CisKIEhlYXBU
aW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ0ZSdW5Mb29wUmVmIHJ1
bkxvb3ApCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fcnVuTG9vcChy
dW5Mb29wKQogewogICAgIG1lbXNldCgmbV9jb250ZXh0LCAwLCBzaXplb2YoQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0KSk7Ci0gICAgbV9jb250ZXh0LmluZm8gPSB0aGlzOworICAgIG1fY29udGV4dC5p
bmZvID0gJmdsb2JhbERhdGEtPmFwaUxvY2soKTsKKyAgICBtX2NvbnRleHQucmV0YWluID0gcmV0
YWluQVBJTG9jazsKKyAgICBtX2NvbnRleHQucmVsZWFzZSA9IHJlbGVhc2VBUElMb2NrOwogICAg
IG1fdGltZXIuYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZSgwLCBzX2RlY2FkZSwgc19kZWNh
ZGUsIDAsIDAsIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlLCAmbV9jb250ZXh0KSk7CiAgICAgQ0ZS
dW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29w
Q29tbW9uTW9kZXMpOwogfQpAQCAtNzEsMzkgKzg0LDMyIEBAIHZvaWQgSGVhcFRpbWVyOjpzeW5j
aHJvbml6ZSgpCiAgICAgQ0ZSdW5Mb29wQWRkVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVy
LmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwogfQogCi12b2lkIEhlYXBUaW1lcjo6aW52
YWxpZGF0ZSgpCit2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVm
IHRpbWVyLCB2b2lkKiBjb250ZXh0KQogewotICAgIG1fZ2xvYmFsRGF0YSA9IDA7Ci0gICAgQ0ZS
dW5Mb29wVGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCkgLSBzX2RlY2FkZSk7Ci19CisgICAgSlNMb2NrKiBhcGlMb2NrID0gc3RhdGlj
X2Nhc3Q8SlNMb2NrKj4oY29udGV4dCk7CisgICAgYXBpTG9jay0+bG9jaygpOwogCi12b2lkIEhl
YXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKLXsKLSAgICBpZiAoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IGFwaUxvY2st
Pmdsb2JhbERhdGEoKTsKKyAgICAvLyBUaGUgSlNHbG9iYWxEYXRhIGhhcyBiZWVuIGRlc3Ryb3ll
ZCwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KKyAgICBpZiAoIWdsb2JhbERhdGEpIHsKKyAg
ICAgICAgYXBpTG9jay0+dW5sb2NrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNT
RVJUKCFtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaHV0ZG93bk11dGV4KTsKLSAgICBpbnZhbGlk
YXRlKCk7Ci19CiAKLXZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJS
ZWYsIHZvaWQqIGluZm8pCi17Ci0gICAgSGVhcFRpbWVyKiBhZ2VudCA9IHN0YXRpY19jYXN0PEhl
YXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgubG9jaygpOwotICAg
IGlmICghYWdlbnQtPm1fZ2xvYmFsRGF0YSkgewotICAgICAgICBhZ2VudC0+bV9zaHV0ZG93bk11
dGV4LnVubG9jaygpOwotICAgICAgICBkZWxldGUgYWdlbnQ7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgSGVhcFRpbWVyKiBoZWFwVGltZXIgPSAwOworICAgIGlmIChnbG9iYWxEYXRhLT5o
ZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+bV90aW1lci5nZXQoKSA9PSB0aW1lcikKKyAgICAgICAg
aGVhcFRpbWVyID0gZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCk7CisgICAgZWxz
ZSBpZiAoZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCktPm1fdGltZXIuZ2V0KCkgPT0gdGltZXIp
CisgICAgICAgIGhlYXBUaW1lciA9IGdsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpOworICAgIGVs
c2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwogICAgIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3QgcmVmIGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVjdGluZyB0
aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFsRGF0YS4KLSAgICAgICAgQVBJRW50cnlT
aGltIHNoaW0oYWdlbnQtPm1fZ2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExvY2s6OkRv
bnRSZWZHbG9iYWxEYXRhKTsKLSAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgICAgICBBUElF
bnRyeVNoaW0gc2hpbShnbG9iYWxEYXRhKTsKKyAgICAgICAgaGVhcFRpbWVyLT5kb1dvcmsoKTsK
ICAgICB9Ci0gICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2soKTsKKworICAgIGFwaUxv
Y2stPnVubG9jaygpOwogfQogCiAjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQpAQCAtMTM0LDEx
ICsxNDAsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7CiB9CiAKLXZvaWQgSGVh
cFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQotCiAj
ZWxpZiBQTEFURk9STShRVCkKIAogSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQpAQCAtMTUzLDYgKzE1NCw4IEBAIEhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xv
YmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKKyAgICBRTXV0ZXhM
b2NrZXIgbG9jaygmbV9tdXRleCk7CisgICAgbV90aW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgSGVh
cFRpbWVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKQEAgLTE2Myw3ICsxNjYsNyBAQCB2b2lk
IEhlYXBUaW1lcjo6dGltZXJFdmVudChRVGltZXJFdmVudCopCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdp
dGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7CisgICAgQVBJRW50cnlTaGltIHNoaW0obV9n
bG9iYWxEYXRhKTsKICAgICBkb1dvcmsoKTsKIH0KIApAQCAtMTg3LDIxICsxOTAsNiBAQCB2b2lk
IEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwVGltZXI6Omlu
dmFsaWRhdGUoKQotewotICAgIFFNdXRleExvY2tlciBsb2NrKCZtX211dGV4KTsKLSAgICBtX3Rp
bWVyLnN0b3AoKTsKLX0KLQotdm9pZCBIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCi17
Ci0gICAgaW52YWxpZGF0ZSgpOwotICAgIGlmICh0aHJlYWQoKSA9PSBRVGhyZWFkOjpjdXJyZW50
VGhyZWFkKCkpCi0gICAgICAgIGRlbGV0ZSB0aGlzOwotICAgIGVsc2UKLSAgICAgICAgZGVsZXRl
TGF0ZXIoKTsKLX0KLQogI2Vsc2UKIEhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtMjEyLDExICsy
MDAsNiBAQCBIZWFwVGltZXI6On5IZWFwVGltZXIoKQogewogfQogCi12b2lkIEhlYXBUaW1lcjo6
ZGlkU3RhcnRWTVNodXRkb3duKCkKLXsKLSAgICBkZWxldGUgdGhpczsKLX0KLQogdm9pZCBIZWFw
VGltZXI6OnN5bmNocm9uaXplKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdmlydHVhbCB+SGVhcFRpbWVyKCk7CiAKLSAgICB2b2lkIGRpZFN0YXJ0Vk1T
aHV0ZG93bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBkb1dvcmsoKSA9IDA7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3
ZWVwZXIoSAogewogfQogCi1JbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6
Y3JlYXRlKEhlYXAqIGhlYXApCitQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVt
ZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gbmV3IEluY3Jl
bWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCkpOworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQo
KSkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcigpCkBAIC03
Niw5ICs3Niw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEgKIHsK
IH0KIAotSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFw
KiBoZWFwKQorUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBl
cjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVw
ZXIoaGVhcCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVh
cCkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2NoZWR1bGVUaW1lcigpCkBAIC0x
NTksOSArMTU5LDkgQEAgdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OmRvV29yaygpCiB7CiB9CiAK
LUluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVh
cCkKK1Bhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNy
ZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhl
YXAtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3
ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKSk7CiB9CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVy
OjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxNDg0
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBIZWFwOwogCiBjbGFzcyBJbmNy
ZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
SW5jcmVtZW50YWxTd2VlcGVyKiBjcmVhdGUoSGVhcCopOworICAgIHN0YXRpYyBQYXNzT3duUHRy
PEluY3JlbWVudGFsU3dlZXBlcj4gY3JlYXRlKEhlYXAqKTsKICAgICB2b2lkIHN0YXJ0U3dlZXBp
bmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAg
ICAgdm9pZCBzd2VlcE5leHRCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDE0ODQ0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJhY2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKiBjcmVhdGUoSGVhcCopOworICAg
IHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZShIZWFw
Kik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqKTsKIApAQCAtOTQsOSAr
OTQsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgRGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjayogRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlKEhlYXAqIGhlYXApCitp
bmxpbmUgUGFzc093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gbmV3IERlZmF1
bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrKGhlYXApKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxNDg0NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzQsMTEgKzEzNCwxMSBAQCBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJs
ZXIoRXhlY3V0YWJsZUFsCiAjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAKIEpTR2xvYmFs
RGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKLSAgICA6CisgICAgOiBtX2FwaUxvY2soYWRvcHRSZWYobmV3IEpTTG9jayh0
aGlzKSkpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAgIGV4ZWN1dGFibGVBbGxvY2F0b3Io
KnRoaXMpLAorICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKICNlbmRpZgotICAgICAg
aGVhcCh0aGlzLCBoZWFwVHlwZSkKKyAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCiAgICAgLCBn
bG9iYWxEYXRhVHlwZShnbG9iYWxEYXRhVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAs
IHRvcENhbGxGcmFtZShDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCkBAIC0yNzAsOCArMjcwLDkgQEAg
SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICAvLyBDbGVhciB0aGlzIGZpcnN0IHRv
IGVuc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIGl0Lgog
ICAgIG1fcGVyQnl0ZWNvZGVQcm9maWxlci5jbGVhcigpOwogICAgIAotICAgIEFTU0VSVCghbV9h
cGlMb2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIGhlYXAuZGlkU3RhcnRW
TVNodXRkb3duKCk7CisgICAgQVNTRVJUKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CisgICAgbV9hcGlMb2NrLT53aWxsRGVzdHJveUdsb2JhbERhdGEodGhpcyk7Cisg
ICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgZGVsZXRlIGludGVycHJldGVy
OwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVU
aHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRo
cmVhZHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNMb2NrIG1fYXBpTG9jazsKKyAg
ICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwogCiAgICAgcHVibGljOgogI2lmIEVOQUJM
RShBU1NFTUJMRVIpCkBAIC00NjgsNyArNDY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVybiBt
X2FwaUxvY2s7IH0KKyAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4gKm1fYXBpTG9j
azsgfQogICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSgpIHsgcmV0dXJuIG1fY29kZUNhY2hl
LmdldCgpOyB9CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29k
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCShyZXZp
c2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSwzMiArNTEsNDcgQEAgdm9pZCBHbG9iYWxKU0xvY2s6Omlu
aXRpYWxpemUoKQogfQogCiBKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihFeGVjU3RhdGUqIGV4
ZWMpCi0gICAgOiBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKKyAgICA6IG1fZ2xv
YmFsRGF0YShleGVjLT5nbG9iYWxEYXRhKCkpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5hcGlMb2Nr
KCkubG9jaygpOworICAgIGluaXQoKTsKIH0KIAogSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEp
CisgICAgOiBtX2dsb2JhbERhdGEoKmdsb2JhbERhdGEpCiB7Ci0gICAgbV9nbG9iYWxEYXRhLT5h
cGlMb2NrKCkubG9jaygpOworICAgIGluaXQoKTsKIH0KIAogSlNMb2NrSG9sZGVyOjpKU0xvY2tI
b2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIDogbV9nbG9iYWxEYXRhKCZnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCit7CisgICAgaW5pdCgpOwor
fQorCit2b2lkIEpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgQVNT
RVJUX1VOVVNFRChnbG9iYWxEYXRhLCBtX2dsb2JhbERhdGEgPT0gZ2xvYmFsRGF0YSk7CisgICAg
bV9nbG9iYWxEYXRhID0gMDsKK30KKwordm9pZCBKU0xvY2tIb2xkZXI6OmluaXQoKQoreworICAg
IG1fZ2xvYmFsRGF0YS5hcGlMb2NrKCkubG9jaygpOworICAgIG1fZ2xvYmFsRGF0YS5yZWYoKTsK
IH0KIAogSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBtX2dsb2JhbERhdGEt
PmFwaUxvY2soKS51bmxvY2soKTsKKyAgICBSZWZQdHI8SlNMb2NrPiBhcGlMb2NrKCZtX2dsb2Jh
bERhdGEuYXBpTG9jaygpKTsKKyAgICBtX2dsb2JhbERhdGEuZGVyZWYoKTsKKyAgICBhcGlMb2Nr
LT51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soKQorSlNMb2NrOjpKU0xvY2soSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9vd25lclRocmVhZCgwKQogICAgICwgbV9sb2Nr
Q291bnQoMCkKICAgICAsIG1fbG9ja0Ryb3BEZXB0aCgwKQorICAgICwgbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCiB7CiAgICAgbV9zcGluTG9jay5Jbml0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEzICs3
MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNM
b2NrSG9sZGVyKCk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4g
bV9nbG9iYWxEYXRhOworICAgICAgICB2b2lkIGluaXQoKTsKKworICAgICAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCi0gICAgY2xhc3MgSlNMb2NrIHsKKyAgICBjbGFz
cyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEpTTG9jayk7CiAgICAgcHVibGljOgotICAgICAgICBKU0xv
Y2soKTsKKyAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB+SlNMb2NrKCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2Nr
KCk7CkBAIC04OSwxMiArOTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGxvY2soSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhKU0ds
b2JhbERhdGEmKTsKIAorICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVy
biBtX2dsb2JhbERhdGE7IH0KKwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKICAgICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tz
KCk7CiAgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOwogICAg
ICAgICB2b2lkIGdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQpOwogCisgICAgICAgIHZv
aWQgd2lsbERlc3Ryb3lHbG9iYWxEYXRhKEpTR2xvYmFsRGF0YSopOworCiAgICAgICAgIGNsYXNz
IERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcm9wQWxs
TG9ja3MpOwogICAgICAgICBwdWJsaWM6CkBAIC0xMTMsNiArMTE5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKICAgICAgICAgaW50
cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKKyAg
ICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198180</attachid>
            <date>2013-04-15 13:45:46 -0700</date>
            <delta_ts>2013-04-15 16:16:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114529-20130415134520.patch</filename>
            <type>text/plain</type>
            <size>25073</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEzLTA0LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGVhcFRpbWVyIGxpZmV0aW1lIHNob3VsZCBiZSBsZXNzIGNvbXBsaWNhdGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSaWdodCBub3cg
b3VyIEhlYXBUaW1lciBsaWZldGltZSBpcyByYXRoZXIgY29tcGxpY2F0ZWQuIEhlYXBUaW1lcnMg
YXJlICJvd25lZCIgYnkgdGhlIEpTR2xvYmFsRGF0YSwgCisgICAgICAgIGJ1dCB0aGVyZSdzIGFu
IGlzc3VlIGluIHRoYXQgdGhlcmUgY2FuIGJlIHJhY2VzIGJldHdlZW4gYSB0aHJlYWQgdGhhdCBp
cyB0cnlpbmcgdG8gdGVhciBkb3duIGEgSlNHbG9iYWxEYXRhIAorICAgICAgICBhbmQgdGhlIEhl
YXBUaW1lcidzIGZpcmUgZnVuY3Rpb24uIE91ciBjdXJyZW50IGNvZGUgZm9yIHRlYXJpbmcgZG93
biBIZWFwVGltZXJzIGlzIGFuIGludHJpY2F0ZSBhbmQgZGVsaWNhdGUgCisgICAgICAgIGRhbmNl
IHdoaWNoIHByb2JhYmx5IGNvbnRhaW5zIHN1YnRsZSBidWdzLgorCisgICAgICAgIFdlIGNhbiBt
YWtlIG91ciBsaXZlcyBlYXNpZXIgYnkgY2hhbmdpbmcgdGhpbmdzIGFyb3VuZCBhIGJpdC4gCisK
KyAgICAgICAgMSkgV2Ugc2hvdWxkIGZyZWUgdGhlIEFQSSBsb2NrIGZyb20gYmVpbmcgc29sZWx5
IG93bmVkIGJ5IHRoZSBKU0dsb2JhbERhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCAKKyAgICAgICAgICAgZ3JhYmJpbmcgdGhlIGxvY2sgb3V0IG9mIGludmFsaWQgbWVtb3J5IHdo
ZW4gb3VyIEhlYXBUaW1lciBjYWxsYmFjayBmaXJlcy4gCisKKyAgICAgICAgMikgV2Ugc2hvdWxk
IGFsc28gbWFrZSBpdCBzbyB0aGF0IHdlIGRlcmVmIHRoZSBKU0dsb2JhbERhdGEgZmlyc3QsIHRo
ZW4gdW5sb2NrIHRoZSBBUEkgbG9jayBzbyB0aGF0IHdoZW4gd2UgCisgICAgICAgICAgIGhhdmUg
dGhlIGxvY2ssIHRoZSBKU0dsb2JhbERhdGEgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXM6IGZ1bGx5
IHZhbGlkIG9yIGNvbXBsZXRlbHkgZGVzdHJveWVkLCBhbmQgd2Uga25vdyBleGFjdGx5IHdoaWNo
IG9uZS4gCisKKyAgICAgICAgMykgVGhlIEpTTG9jayBjYW4gdGVsbCB1cyB0aGlzIGluZm9ybWF0
aW9uIGJ5IGtlZXBpbmcgYSBiYWNrIHBvaW50ZXIgdG8gdGhlIEpTR2xvYmFsRGF0YS4gV2hlbiB0
aGUgSlNHbG9iYWxEYXRhJ3MgCisgICAgICAgICAgIGRlc3RydWN0b3IgaXMgY2FsbGVkLCBpdCBj
bGVhcnMgdGhpcyBwb2ludGVyIGluIHRoZSBKU0xvY2suIE90aGVyIGNsaWVudHMgb2YgdGhlIEFQ
SSBsb2NrIGNhbiB0aGVuIGNoZWNrIAorICAgICAgICAgICB0aGlzIHBvaW50ZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgb3Igbm90IHRoZSBKU0dsb2JhbERhdGEgaXMgc3RpbGwgYXJvdW5kLgorCisg
ICAgICAgIDQpIFRoZSBDRlJ1bkxvb3BUaW1lciB3aWxsIHVzZSB0aGUgQVBJIGxvY2sgYXMgaXRz
IGNvbnRleHQgcmF0aGVyIHRoYW4gdGhlIEhlYXBUaW1lciBpdHNlbGYuIFRoZSBvbmx5IHdheSAK
KyAgICAgICAgICAgdGhlIEhlYXBUaW1lcidzIGNhbGxiYWNrIGNhbiBnZXQgdG8gdGhlIEhlYXBU
aW1lciBpcyB0aHJvdWdoIHRoZSBBUEkgbG9jaydzIEpTR2xvYmFsRGF0YSBwb2ludGVyLgorCisg
ICAgICAgIDUpIFRoZSBDRlJ1bkxvb3BUaW1lckNvbnRleHQgc3RydWN0IGhhcyB0d28gZmllbGRz
IGZvciByZXRhaW4gYW5kIHJlbGVhc2UgY2FsbGJhY2tzIGZvciB0aGUgY29udGV4dCdzIGluZm8g
ZmllbGQuIAorICAgICAgICAgICBXZSdsbCBwcm92aWRlIHRoZXNlIGNhbGxiYWNrcyB0byByZWYo
KSBhbmQgZGVyZWYoKSB0aGUgSlNMb2NrIGFzIG5lY2Vzc2FyeS4gVGh1cywgdGhlIHRpbWVyIGJl
Y29tZXMgdGhlIG90aGVyIAorICAgICAgICAgICBvd25lciBvZiB0aGUgSlNMb2NrIGFwYXJ0IGZy
b20gdGhlIEpTR2xvYmFsRGF0YS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOiBSZW1vdmUg
dGhlIGNydWZ0IHRoYXQgd2FzIHJlcXVpcmVkIGJ5IHRoZSBwcmV2aW91cyBkZXNpZ24sIHN1Y2gg
YXMgUmVmR2xvYmFsRGF0YVRhZy4KKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGlt
V2l0aG91dExvY2s6On5BUElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChBUElFbnRy
eVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlT
aGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjp+QVBJRW50cnlTaGltKTogUHJvdGVj
dCB0aGUgQVBJIGxvY2sgd2l0aCBhIFJlZlB0ciwgZGVyZWYgdGhlIEpTR2xvYmFsRGF0YSwgd2hp
Y2ggY291bGQgZGVzdHJveSBpdCwKKyAgICAgICAgdGhlbiB1bmxvY2sgdGhlIEFQSSBsb2NrLiBU
aGlzIG9yZGVyaW5nIHByZXZlbnRzIG90aGVycyBmcm9tIG9idGFpbmluZyB0aGUgQVBJIGxvY2sg
d2hpbGUgdGhlIEpTR2xvYmFsRGF0YSBpcyBpbiB0aGUgCisgICAgICAgIG1pZGRsZSBvZiBiZWlu
ZyB0b3JuIGRvd24uCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6aW5pdCk6IFdlIG5vdyB0
YWtlIHRoZSBsb2NrLCB0aGVuIHJlZiB0aGUgSlNHbG9iYWxEYXRhLCB3aGljaCBpcyB0aGUgb3Bw
b3NpdGUgb3JkZXIgb2Ygd2hlbiB3ZSAKKyAgICAgICAgdGVhciBkb3duIHRoZSBzaGltLgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnNldEFjdGl2aXR5Q2Fs
bGJhY2spOiBVc2UgUGFzc093blB0ciBub3cuCisgICAgICAgIChKU0M6OkhlYXA6OmFjdGl2aXR5
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6IERpdHRvLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgor
ICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDoKKyAgICAgICAgKEpTQzo6cmV0YWluQVBJTG9j
ayk6IFJldGFpbiBjYWxsYmFjayBmb3IgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAg
ICAgICAgKEpTQzo6cmVsZWFzZUFQSUxvY2spOiBSZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgQ0ZS
dW5Mb29wVGltZXJDb250ZXh0IHN0cnVjdC4KKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjpIZWFw
VGltZXIpOiBVc2UgdGhlIEFQSSBsb2NrIGFzIHRoZSBjb250ZXh0J3MgaW5mbyBmaWVsZCByYXRo
ZXIgdGhhbiB0aGUgSGVhcFRpbWVyLgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlk
RmlyZSk6IEdyYWIgdGhlIEFQSSBsb2NrLiBSZXR1cm4gZWFybHkgaWYgdGhlIEpTR2xvYmFsRGF0
YSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBmaWd1cmUg
b3V0IHdoaWNoIGtpbmQgb2YgSGVhcFRpbWVyIHdlIGFyZSBiYXNlZCBvbiB0aGUgQ0ZSdW5Mb29w
VGltZXJSZWYgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhbmQgCisgICAgICAgIGNhbGwgdGhlIEhl
YXBUaW1lcidzIGNhbGxiYWNrLgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmg6CisgICAgICAg
IChIZWFwVGltZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOiBQYXNzT3duUHRyIGFsbCB0
aGUgdGhpbmdzLgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAg
IChJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2Nt
YWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hpbSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUg
SlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVlZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBK
U0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwgaG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVu
dHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4KKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oOgorICAgICAgICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAg
IChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IE5v
dGlmeSB0aGUgQVBJIGxvY2sgdGhhdCB0aGUgSlNHbG9iYWxEYXRhIGlzIGJlaW5nIHRvcm4gZG93
bi4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogUmVmLCB0aGVuIGxvY2sgKGp1c3QgbGlrZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp3aWxsRGVzdHJveUdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0xvY2tIb2xkZXI6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0xvY2tIb2xk
ZXI6On5KU0xvY2tIb2xkZXIpOiBQcm90ZWN0LCBkZXJlZiwgdGhlbiB1bmxvY2sgKGp1c3QgbGlr
ZSB0aGUgQVBJIHNoaW0pLgorICAgICAgICAoSlNDOjpKU0xvY2s6OkpTTG9jayk6CisgICAgICAg
ICogcnVudGltZS9KU0xvY2suaDogQWRkIGJhY2sgcG9pbnRlciB0byB0aGUgSlNHbG9iYWxEYXRh
IGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBKU0dsb2JhbERhdGEgaXMgYmVpbmcKKyAgICAg
ICAgdG9ybiBkb3duIHRoYXQgY2xlYXJzIHRoaXMgcG9pbnRlciB0byBub3RpZnkgb3RoZXIgY2xp
ZW50cyAoaS5lLiB0aW1lciBjYWxsYmFja3MpIHRoYXQgdGhlIEpTR2xvYmFsRGF0YSBpcyBubwor
ICAgICAgICBsb25nZXIgdmFsaWQuCisgICAgICAgIChKU0xvY2tIb2xkZXIpOgorICAgICAgICAo
SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpnbG9iYWxEYXRhKToKKyAgICAgICAgKiB0
ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKTogV2UgdXNlIGFuIEFQSUVudHJ5U2hp
bSBpbnN0ZWFkIG9mIGEgUmVmUHRyIGZvciB0aGUgSlNHbG9iYWxEYXRhIGJlY2F1c2Ugd2UgbmVl
ZCB0byAKKyAgICAgICAgdGVhciBkb3duIHRoZSBKU0dsb2JhbERhdGEgd2hpbGUgd2Ugc3RpbGwg
aG9sZCB0aGUgbG9jaywgd2hpY2ggdGhlIEFQSUVudHJ5U2hpbSBoYW5kbGVzIGNvcnJlY3RseS4K
KwogMjAxMy0wNC0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgbWlzc2luZyBleHBvcnQgbWFjcm8gdG8gU3ltYm9sVGFibGVFbnRyeTo6ZnJl
ZUZhdEVudHJ5U2xvdygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTQ4NDQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQVBJU2hpbXMu
aCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCkBAIC03NjAsOCArNzYxLDggQEAgaW50
IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8vIE5vdGUgdGhhdCB0aGUgb3B0
aW9ucyBwYXJzaW5nIGNhbiBhZmZlY3QgSlNHbG9iYWxEYXRhIGNyZWF0aW9uLCBhbmQgdGh1cwog
ICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7
Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKExhcmdlSGVhcCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFy
Z2VIZWFwKS5sZWFrUmVmKCk7CisgICAgQVBJRW50cnlTaGltIHNoaW0oZ2xvYmFsRGF0YSk7CiAg
ICAgaW50IHJlc3VsdDsKIAogICAgIGlmIChvcHRpb25zLm1fcHJvZmlsZSAmJiAhZ2xvYmFsRGF0
YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVn
RXhwLmNwcAkocmV2aXNpb24gMTQ4NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RS
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpAQCAtNDk5LDggKzUwMCw4IEBAIHN0YXRp
YyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRh
ID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhnbG9iYWxEYXRhLmdldCgpKTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0ds
b2JhbERhdGE6OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBBUElFbnRyeVNoaW0g
c2hpbShnbG9iYWxEYXRhKTsKIAogICAgIENvbW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElTaGltcy5oCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwxMSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFJlZkdsb2JhbERhdGFUYWcgeyBEb250UmVmR2xvYmFsRGF0YSA9IDAsIFJlZkdsb2Jh
bERhdGEgfTsKLQogcHJvdGVjdGVkOgotICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRh
ZyBzaG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShz
aG91bGRSZWZHbG9iYWxEYXRhKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQor
ICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9v
bCByZWdpc3RlclRocmVhZCkKKyAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAgICAgLCBtX2VudHJ5SWRlbnRpZmllclRhYmxlKHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSkpCiAgICAgewotICAg
ICAgICBpZiAoc2hvdWxkUmVmR2xvYmFsRGF0YSkKLSAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+
cmVmKCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZWdpc3RlclRocmVhZCk7CiAgICAgICAgIGlm
IChyZWdpc3RlclRocmVhZCkKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAubWFjaGluZVRo
cmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5h
Y3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7CkBAIC01NiwxMyArNDksMTAgQEAgcHJv
dGVjdGVkOgogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewogICAgICAgICB3
dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShtX2VudHJ5SWRlbnRpZmll
clRhYmxlKTsKLSAgICAgICAgaWYgKG1fc2hvdWxkUmVmR2xvYmFsRGF0YSkKLSAgICAgICAgICAg
IG1fZ2xvYmFsRGF0YS0+ZGVyZWYoKTsKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICBSZWZHbG9i
YWxEYXRhVGFnIG1fc2hvdWxkUmVmR2xvYmFsRGF0YTsKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xv
YmFsRGF0YTsKKyAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgSWRl
bnRpZmllclRhYmxlKiBtX2VudHJ5SWRlbnRpZmllclRhYmxlOwogfTsKIApAQCAtNzAsMzYgKzYw
LDI2IEBAIGNsYXNzIEFQSUVudHJ5U2hpbSA6IHB1YmxpYyBBUElFbnRyeVNoaW0KIHB1YmxpYzoK
ICAgICAvLyBOb3JtYWwgQVBJIGVudHJ5CiAgICAgQVBJRW50cnlTaGltKEV4ZWNTdGF0ZSogZXhl
YywgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0
aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2JhbERh
dGEpCi0gICAgewotICAgICAgICBpbml0KCk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjb25zdHJ1
Y3RvciBpcyBuZWNlc3NhcnkgZm9yIEhlYXBUaW1lciB0byBwcmV2ZW50IGl0IGZyb20gYWNjaWRl
bnRhbGx5IHJlc3VycmVjdGluZyAKLSAgICAvLyB0aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpT
R2xvYmFsRGF0YS4KLSAgICBBUElFbnRyeVNoaW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBS
ZWZHbG9iYWxEYXRhVGFnIHJlZkdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVl
KQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVy
VGhyZWFkLCByZWZHbG9iYWxEYXRhKQorICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2Nr
KCZleGVjLT5nbG9iYWxEYXRhKCksIHJlZ2lzdGVyVGhyZWFkKQorICAgICAgICAsIG1fbG9ja0hv
bGRlcihleGVjKQogICAgIHsKLSAgICAgICAgaW5pdCgpOwogICAgIH0KIAogICAgIC8vIEpTUHJv
cGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMgYSBnbG9iYWxEYXRhLgogICAgIEFQSUVudHJ5
U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVl
KQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVy
VGhyZWFkLCBSZWZHbG9iYWxEYXRhKQorICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2Nr
KGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkKQorICAgICAgICAsIG1fbG9ja0hvbGRlcihnbG9i
YWxEYXRhKQogICAgIHsKLSAgICAgICAgaW5pdCgpOwogICAgIH0KIAogICAgIH5BUElFbnRyeVNo
aW0oKQogICAgIHsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkudW5sb2NrKCk7Cisg
ICAgICAgIC8vIERlc3Ryb3lpbmcgb3VyIEpTTG9ja0hvbGRlciBzaG91bGQgYWxzbyBkZXN0cm95
IHRoZSBKU0dsb2JhbERhdGEuCisgICAgICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoKQotICAgIHsKLSAgICAgICAgbV9nbG9iYWxEYXRh
LT5hcGlMb2NrKCkubG9jaygpOwotICAgIH0KKyAgICBKU0xvY2tIb2xkZXIgbV9sb2NrSG9sZGVy
OwogfTsKIAogY2xhc3MgQVBJQ2FsbGJhY2tTaGltIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNDg0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA5LDE5ICs4MDksMTkgQEAgdm9pZCBI
ZWFwOjptYXJrRGVhZE9iamVjdHMoKQogICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaERlYWRDZWxs
PE1hcmtPYmplY3Q+KCk7CiB9CiAKLXZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhHQ0Fj
dGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2spCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5
Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2sp
CiB7CiAgICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFjazsKIH0KIAogR0NB
Y3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rpdml0eUNhbGxiYWNrKCkKIHsKLSAgICByZXR1cm4g
bV9hY3Rpdml0eUNhbGxiYWNrOworICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0KCk7
CiB9CiAKIEluY3JlbWVudGFsU3dlZXBlciogSGVhcDo6c3dlZXBlcigpCiB7Ci0gICAgcmV0dXJu
IG1fc3dlZXBlcjsKKyAgICByZXR1cm4gbV9zd2VlcGVyLmdldCgpOwogfQogCiB2b2lkIEhlYXA6
OnNldEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpAQCAtODY0LDE1
ICs4NjQsNiBAQCB2b2lkIEhlYXA6OmFkZENvbXBpbGVkQ29kZShFeGVjdXRhYmxlQmFzCiAgICAg
bV9jb21waWxlZENvZGUuYXBwZW5kKGV4ZWN1dGFibGUpOwogfQogCi12b2lkIEhlYXA6OmRpZFN0
YXJ0Vk1TaHV0ZG93bigpCi17Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrLT5kaWRTdGFydFZNU2h1
dGRvd24oKTsKLSAgICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSAwOwotICAgIG1fc3dlZXBlci0+ZGlk
U3RhcnRWTVNodXRkb3duKCk7Ci0gICAgbV9zd2VlcGVyID0gMDsKLSAgICBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwotfQotCiBjbGFzcyBab21iaWZ5IDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7CiBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEw
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRo
cmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBhY3Rpdml0eUNhbGxiYWNrKCk7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhHQ0FjdGl2aXR5Q2Fs
bGJhY2sqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxi
YWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPik7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCk7CiAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CkBA
IC0xNzIsNyArMTcyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGlkQWJhbmRv
bihzaXplX3QpOwogCiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwot
ICAgICAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93bigpOwogICAgICAgICAKICAgICAgICAgY29u
c3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1
YlJvdXRpbmVzOyB9CiAKQEAgLTI2NSw4ICsyNjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKICAg
ICAgICAgCi0gICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOwot
ICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAgICAgT3duUHRyPEdD
QWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNrOworICAgICAgICBPd25QdHI8SW5j
cmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7CiAgICAgICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+
IG1fYmxvY2tTbmFwc2hvdDsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwyNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAKIGNvbnN0IENGVGltZUludGVydmFsIEhlYXBUaW1lcjo6
c19kZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKIAorc3RhdGljIGNvbnN0IHZvaWQq
IHJldGFpbkFQSUxvY2soY29uc3Qgdm9pZCogaW5mbykKK3sKKyAgICBzdGF0aWNfY2FzdDxKU0xv
Y2sqPihjb25zdF9jYXN0PHZvaWQqPihpbmZvKSktPnJlZigpOworICAgIHJldHVybiBpbmZvOwor
fQorCitzdGF0aWMgdm9pZCByZWxlYXNlQVBJTG9jayhjb25zdCB2b2lkKiBpbmZvKQoreworICAg
IHN0YXRpY19jYXN0PEpTTG9jayo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGluZm8pKS0+ZGVyZWYoKTsK
K30KKwogSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDRlJ1
bkxvb3BSZWYgcnVuTG9vcCkKICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICwg
bV9ydW5Mb29wKHJ1bkxvb3ApCiB7CiAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihD
RlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKLSAgICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7CisgICAg
bV9jb250ZXh0LmluZm8gPSAmZ2xvYmFsRGF0YS0+YXBpTG9jaygpOworICAgIG1fY29udGV4dC5y
ZXRhaW4gPSByZXRhaW5BUElMb2NrOworICAgIG1fY29udGV4dC5yZWxlYXNlID0gcmVsZWFzZUFQ
SUxvY2s7CiAgICAgbV90aW1lci5hZG9wdENGKENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIHNfZGVj
YWRlLCBzX2RlY2FkZSwgMCwgMCwgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUsICZtX2NvbnRleHQp
KTsKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCks
IGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9CkBAIC03MSwzOSArODQsMzIgQEAgdm9pZCBIZWFw
VGltZXI6OnN5bmNocm9uaXplKCkKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihtX3J1bkxvb3AuZ2V0
KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiB9CiAKLXZvaWQgSGVh
cFRpbWVyOjppbnZhbGlkYXRlKCkKK3ZvaWQgSGVhcFRpbWVyOjp0aW1lckRpZEZpcmUoQ0ZSdW5M
b29wVGltZXJSZWYgdGltZXIsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgbV9nbG9iYWxEYXRhID0g
MDsKLSAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFi
c29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHNfZGVjYWRlKTsKLX0KKyAgICBKU0xvY2sqIGFwaUxv
Y2sgPSBzdGF0aWNfY2FzdDxKU0xvY2sqPihjb250ZXh0KTsKKyAgICBhcGlMb2NrLT5sb2NrKCk7
CiAKLXZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQotewotICAgIGlmIChDRlJ1
bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgpKSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gYXBpTG9jay0+Z2xvYmFsRGF0YSgpOworICAgIC8vIFRoZSBKU0dsb2JhbERhdGEgaGFzIGJl
ZW4gZGVzdHJveWVkLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgIGlmICghZ2xvYmFs
RGF0YSkgeworICAgICAgICBhcGlMb2NrLT51bmxvY2soKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NodXRkb3duTXV0ZXgpOwot
ICAgIGludmFsaWRhdGUoKTsKLX0KIAotdm9pZCBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1
bkxvb3BUaW1lclJlZiwgdm9pZCogaW5mbykKLXsKLSAgICBIZWFwVGltZXIqIGFnZW50ID0gc3Rh
dGljX2Nhc3Q8SGVhcFRpbWVyKj4oaW5mbyk7Ci0gICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC5s
b2NrKCk7Ci0gICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7Ci0gICAgICAgIGFnZW50LT5t
X3NodXRkb3duTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgIGRlbGV0ZSBhZ2VudDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBIZWFwVGltZXIqIGhlYXBUaW1lciA9IDA7CisgICAgaWYgKGds
b2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5tX3RpbWVyLmdldCgpID09IHRpbWVy
KQorICAgICAgICBoZWFwVGltZXIgPSBnbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2so
KTsKKyAgICBlbHNlIGlmIChnbG9iYWxEYXRhLT5oZWFwLnN3ZWVwZXIoKS0+bV90aW1lci5nZXQo
KSA9PSB0aW1lcikKKyAgICAgICAgaGVhcFRpbWVyID0gZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVy
KCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCiAg
ICAgewotICAgICAgICAvLyBXZSBkb24ndCByZWYgaGVyZSB0byBwcmV2ZW50IHVzIGZyb20gcmVz
dXJyZWN0aW5nIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRhLgotICAgICAg
ICBBUElFbnRyeVNoaW0gc2hpbShhZ2VudC0+bV9nbG9iYWxEYXRhLCBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jazo6RG9udFJlZkdsb2JhbERhdGEpOwotICAgICAgICBhZ2VudC0+ZG9Xb3JrKCk7Cisg
ICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGdsb2JhbERhdGEpOworICAgICAgICBoZWFwVGltZXIt
PmRvV29yaygpOwogICAgIH0KLSAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LnVubG9jaygpOwor
CisgICAgYXBpTG9jay0+dW5sb2NrKCk7CiB9CiAKICNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CkBAIC0xMzQsMTEgKzE0MCw2IEBAIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkKIHsKIH0K
IAotdm9pZCBIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCi17Ci0gICAgZGVsZXRlIHRo
aXM7Ci19Ci0KICNlbGlmIFBMQVRGT1JNKFFUKQogCiBIZWFwVGltZXI6OkhlYXBUaW1lcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC0xNTMsNiArMTU0LDggQEAgSGVhcFRpbWVyOjpIZWFw
VGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYQogCiBIZWFwVGltZXI6On5IZWFwVGltZXIoKQogewor
ICAgIFFNdXRleExvY2tlciBsb2NrKCZtX211dGV4KTsKKyAgICBtX3RpbWVyLnN0b3AoKTsKIH0K
IAogdm9pZCBIZWFwVGltZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQpAQCAtMTYzLDcgKzE2
Niw3IEBAIHZvaWQgSGVhcFRpbWVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KikKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEFQSUVudHJ5U2hpbSBzaGltKG1fZ2xvYmFsRGF0YSwgQVBJ
RW50cnlTaGltV2l0aG91dExvY2s6OkRvbnRSZWZHbG9iYWxEYXRhKTsKKyAgICBBUElFbnRyeVNo
aW0gc2hpbShtX2dsb2JhbERhdGEpOwogICAgIGRvV29yaygpOwogfQogCkBAIC0xODcsMjEgKzE5
MCw2IEBAIHZvaWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiAgICAgfQogfQogCi12b2lkIEhl
YXBUaW1lcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgUU11dGV4TG9ja2VyIGxvY2soJm1fbXV0ZXgp
OwotICAgIG1fdGltZXIuc3RvcCgpOwotfQotCi12b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNo
dXRkb3duKCkKLXsKLSAgICBpbnZhbGlkYXRlKCk7Ci0gICAgaWYgKHRocmVhZCgpID09IFFUaHJl
YWQ6OmN1cnJlbnRUaHJlYWQoKSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgZWxzZQotICAg
ICAgICBkZWxldGVMYXRlcigpOwotfQotCiAjZWxzZQogSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCkBA
IC0yMTIsMTEgKzIwMCw2IEBAIEhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCiB7CiB9CiAKLXZvaWQg
SGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQotewotICAgIGRlbGV0ZSB0aGlzOwotfQot
CiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogewogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKIAotICAgIHZvaWQg
ZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMTQ4
NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBJbmNyZW1lbnRhbFN3ZWVwZXI6Oklu
Y3JlbWVudGFsU3dlZXBlcihICiB7CiB9CiAKLUluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50
YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK1Bhc3NPd25QdHI8SW5jcmVtZW50YWxTd2Vl
cGVyPiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVy
biBuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpKSk7CiB9CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRp
bWVyKCkKQEAgLTc2LDkgKzc2LDkgQEAgSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3
ZWVwZXIoSAogewogfQogCi1JbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6
Y3JlYXRlKEhlYXAqIGhlYXApCitQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVt
ZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gbmV3IEluY3Jl
bWVudGFsU3dlZXBlcihoZWFwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3JlbWVudGFs
U3dlZXBlcihoZWFwKSk7CiB9CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRp
bWVyKCkKQEAgLTE1OSw5ICsxNTksOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3Jr
KCkKIHsKIH0KIAotSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0
ZShIZWFwKiBoZWFwKQorUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFs
U3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRh
bFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IElu
Y3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKIH0KIAogdm9pZCBJbmNyZW1l
bnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHJl
dmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFs
U3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEhlYXA7CiAK
IGNsYXNzIEluY3JlbWVudGFsU3dlZXBlciA6IHB1YmxpYyBIZWFwVGltZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOwogICAgIHZvaWQg
c3RhcnRTd2VlcGluZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKTsKICAgICB2b2lkIHN3ZWVwTmV4dEJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAkocmV2aXNpb24g
MTQ4NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogCiBjbGFz
cyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrIDogcHVibGljIEdDQWN0aXZpdHlDYWxsYmFjayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIGNyZWF0ZShI
ZWFwKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjaz4g
Y3JlYXRlKEhlYXAqKTsKIAogICAgIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVhcCopOwog
CkBAIC05NCw5ICs5NCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLWlubGluZSBEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrKiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVh
cCogaGVhcCkKK2lubGluZSBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+IERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVy
biBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlz
aW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxMSArMTM0LDExIEBAIHN0YXRpYyBib29sIGVu
YWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWwKICNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikK
IAogSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQotICAgIDoKKyAgICA6IG1fYXBpTG9jayhhZG9wdFJlZihu
ZXcgSlNMb2NrKHRoaXMpKSkKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgICAgZXhlY3V0YWJs
ZUFsbG9jYXRvcigqdGhpcyksCisgICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2Vu
ZGlmCi0gICAgICBoZWFwKHRoaXMsIGhlYXBUeXBlKQorICAgICwgaGVhcCh0aGlzLCBoZWFwVHlw
ZSkKICAgICAsIGdsb2JhbERhdGFUeXBlKGdsb2JhbERhdGFUeXBlKQogICAgICwgY2xpZW50RGF0
YSgwKQogICAgICwgdG9wQ2FsbEZyYW1lKENhbGxGcmFtZTo6bm9DYWxsZXIoKSkKQEAgLTI3MCw4
ICsyNzAsOSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogICAgIC8vIENsZWFyIHRo
aXMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHJlbW92ZSB0aGVtc2VsdmVz
IGZyb20gaXQuCiAgICAgbV9wZXJCeXRlY29kZVByb2ZpbGVyLmNsZWFyKCk7CiAgICAgCi0gICAg
QVNTRVJUKCFtX2FwaUxvY2suY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0gICAgaGVh
cC5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBBU1NFUlQobV9hcGlMb2NrLT5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBtX2FwaUxvY2stPndpbGxEZXN0cm95R2xvYmFsRGF0
YSh0aGlzKTsKKyAgICBoZWFwLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKICAgICBkZWxldGUg
aW50ZXJwcmV0ZXI7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTEsNyArMTkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZy
b21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJv
bU11bHRpcGxlVGhyZWFkcygpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU0xvY2sgbV9h
cGlMb2NrOworICAgICAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CiAKICAgICBwdWJsaWM6
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKQEAgLTQ2OCw3ICs0NjgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9jayYgYXBpTG9jaygp
IHsgcmV0dXJuIG1fYXBpTG9jazsgfQorICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7IHJldHVy
biAqbV9hcGlMb2NrOyB9CiAgICAgICAgIENvZGVDYWNoZSogY29kZUNhY2hlKCkgeyByZXR1cm4g
bV9jb2RlQ2FjaGUuZ2V0KCk7IH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRp
c2NhcmRBbGxDb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAJKHJldmlzaW9uIDE0ODQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDMwICs1MywzOCBAQCB2b2lkIEdsb2Jh
bEpTTG9jazo6aW5pdGlhbGl6ZSgpCiBKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgOiBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKIHsKLSAg
ICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgaW5pdCgpOwogfQogCiBKU0xv
Y2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgOiBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKLSAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5s
b2NrKCk7CisgICAgaW5pdCgpOwogfQogCiBKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCiB7
CisgICAgaW5pdCgpOworfQorCit2b2lkIEpTTG9ja0hvbGRlcjo6aW5pdCgpCit7CiAgICAgbV9n
bG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOwogfQogCiBKU0xvY2tIb2xkZXI6On5KU0xvY2tI
b2xkZXIoKQogewotICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOworICAgIFJl
ZlB0cjxKU0xvY2s+IGFwaUxvY2soJm1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpKTsKKyAgICBtX2ds
b2JhbERhdGEuY2xlYXIoKTsKKyAgICBhcGlMb2NrLT51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpK
U0xvY2soKQorSlNMb2NrOjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDog
bV9vd25lclRocmVhZCgwKQogICAgICwgbV9sb2NrQ291bnQoMCkKICAgICAsIG1fbG9ja0Ryb3BE
ZXB0aCgwKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CiAgICAgbV9zcGluTG9j
ay5Jbml0KCk7CiB9CkBAIC04NSw2ICs5MywxMiBAQCBKU0xvY2s6On5KU0xvY2soKQogewogfQog
Cit2b2lkIEpTTG9jazo6d2lsbERlc3Ryb3lHbG9iYWxEYXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIG1fZ2xvYmFsRGF0YSA9PSBn
bG9iYWxEYXRhKTsKKyAgICBtX2dsb2JhbERhdGEgPSAwOworfQorCiB2b2lkIEpTTG9jazo6bG9j
aygpCiB7CiAgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50
VGhyZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2
aXNpb24gMTQ4NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDEzICs3MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNMb2NrSG9sZGVyKCk7CiAgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBpbml0KCk7CisKICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9i
YWxEYXRhOwogICAgIH07CiAKLSAgICBjbGFzcyBKU0xvY2sgeworICAgIGNsYXNzIEpTTG9jayA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTTG9jaygpOworICAg
ICAgICBKU0xvY2soSlNHbG9iYWxEYXRhKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5K
U0xvY2soKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxvY2soKTsKQEAgLTg5
LDEyICs5MSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEpTR2xvYmFsRGF0YSYp
OwogCisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFs
RGF0YTsgfQorCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKTsKIAogICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3MoKTsKICAgICAg
ICAgdW5zaWduZWQgZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7CiAgICAgICAgIHZvaWQg
Z3JhYkFsbExvY2tzKHVuc2lnbmVkIGxvY2tDb3VudCk7CiAKKyAgICAgICAgdm9pZCB3aWxsRGVz
dHJveUdsb2JhbERhdGEoSlNHbG9iYWxEYXRhKik7CisKICAgICAgICAgY2xhc3MgRHJvcEFsbExv
Y2tzIHsKICAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyb3BBbGxMb2Nrcyk7CiAg
ICAgICAgIHB1YmxpYzoKQEAgLTExMyw2ICsxMTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOwogICAgICAgICBpbnRwdHJfdCBtX2xv
Y2tDb3VudDsKICAgICAgICAgdW5zaWduZWQgbV9sb2NrRHJvcERlcHRoOworICAgICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>