<?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>50826</bug_id>
          
          <creation_ts>2010-12-10 10:16:14 -0800</creation_ts>
          <short_desc>GeolocationPositionCache needs refactoring</short_desc>
          <delta_ts>2011-07-28 07:59:11 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>50825</blocked>
    
    <blocked>65289</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andreip</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jake</cc>
    
    <cc>jorlow</cc>
    
    <cc>steveblock</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>320221</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-10 10:16:14 -0800</bug_when>
    <thetext>Currently, Geolocation position cache uses numerous static members. Refactoring to use a single instance of the class will make the code cleaner and make it simpler to move database access to a background thread in Bug 50825.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320245</commentid>
    <comment_count>1</comment_count>
      <attachid>76221</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-10 10:48:19 -0800</bug_when>
    <thetext>Created attachment 76221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321941</commentid>
    <comment_count>2</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-12-14 06:39:47 -0800</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323159</commentid>
    <comment_count>3</comment_count>
      <attachid>76221</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-16 07:12:50 -0800</bug_when>
    <thetext>Comment on attachment 76221
Patch

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

overall, things are looking better

&gt; WebCore/page/GeolocationPositionCache.cpp:44
&gt; +    static GeolocationPositionCache* instance = 0;

I believe DEFINE_STATIC_LOCAL is preferred.

&gt; WebCore/page/GeolocationPositionCache.cpp:46
&gt; +        instance = new GeolocationPositionCache();

What&apos;s the webkit policy on leaking things like this?  I know we do it in some places, but I imagine it&apos;s kind of frowned upon.

I wonder if this class should instead be ref counted, be saved to some static member variable as a pointer, and then have it&apos;s destructor zero out the pointer in addition to writing to disk.  The downside is that if you then go back to a site that wants to use the cached value, it&apos;ll be a bit slower.  The upside is that it&apos;d be cleaner in that it won&apos;t leak or require manual (and thus error prone) ref counting.

&gt; WebCore/page/GeolocationPositionCache.cpp:87
&gt; +    return m_cachedPosition.get();

The calling code handles null, right?

&gt; WebCore/page/GeolocationPositionCache.cpp:90
&gt; +void GeolocationPositionCache::readFromDatabase()

This will block the main thread, right?  That seems bad.  Can it be avoided?

&gt; WebCore/page/GeolocationPositionCache.h:38
&gt; +// Maintains a cached position for Geolocation.

Not sure this is necessary.

&gt; WebCore/page/GeolocationPositionCache.h:61
&gt; +class GeolocationPositionCacheWrapper {

This should be in its own file or a sub class

&gt; WebCore/page/GeolocationPositionCache.h:66
&gt; +        ASSERT(m_cache);

no need</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323187</commentid>
    <comment_count>4</comment_count>
      <attachid>76221</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-16 08:27:44 -0800</bug_when>
    <thetext>Comment on attachment 76221
Patch

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

&gt;&gt; WebCore/page/GeolocationPositionCache.cpp:44
&gt;&gt; +    static GeolocationPositionCache* instance = 0;
&gt; 
&gt; I believe DEFINE_STATIC_LOCAL is preferred.

Will do

&gt;&gt; WebCore/page/GeolocationPositionCache.cpp:46
&gt;&gt; +        instance = new GeolocationPositionCache();
&gt; 
&gt; What&apos;s the webkit policy on leaking things like this?  I know we do it in some places, but I imagine it&apos;s kind of frowned upon.
&gt; 
&gt; I wonder if this class should instead be ref counted, be saved to some static member variable as a pointer, and then have it&apos;s destructor zero out the pointer in addition to writing to disk.  The downside is that if you then go back to a site that wants to use the cached value, it&apos;ll be a bit slower.  The upside is that it&apos;d be cleaner in that it won&apos;t leak or require manual (and thus error prone) ref counting.

I think we leak plenty of small static objects like this. Personally I think that it&apos;s worth it to keep the cached position in memory.

&gt;&gt; WebCore/page/GeolocationPositionCache.cpp:87
&gt;&gt; +    return m_cachedPosition.get();
&gt; 
&gt; The calling code handles null, right?

Correct

&gt;&gt; WebCore/page/GeolocationPositionCache.cpp:90
&gt;&gt; +void GeolocationPositionCache::readFromDatabase()
&gt; 
&gt; This will block the main thread, right?  That seems bad.  Can it be avoided?

Yes, this will be done in Bug 50825, which is the motivation for this refactoring.

&gt;&gt; WebCore/page/GeolocationPositionCache.h:38
&gt;&gt; +// Maintains a cached position for Geolocation.
&gt; 
&gt; Not sure this is necessary.

Sure

&gt;&gt; WebCore/page/GeolocationPositionCache.h:61
&gt;&gt; +class GeolocationPositionCacheWrapper {
&gt; 
&gt; This should be in its own file or a sub class

Will do

&gt;&gt; WebCore/page/GeolocationPositionCache.h:66
&gt;&gt; +        ASSERT(m_cache);
&gt; 
&gt; no need

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323189</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-16 08:29:36 -0800</bug_when>
    <thetext>k.  give me a new patch and i&apos;ll LGTM it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323197</commentid>
    <comment_count>6</comment_count>
      <attachid>76773</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-16 08:47:38 -0800</bug_when>
    <thetext>Created attachment 76773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323221</commentid>
    <comment_count>7</comment_count>
      <attachid>76773</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-12-16 09:35:06 -0800</bug_when>
    <thetext>Comment on attachment 76773
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323265</commentid>
    <comment_count>8</comment_count>
      <attachid>76773</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-16 10:42:11 -0800</bug_when>
    <thetext>Comment on attachment 76773
Patch

Rejecting attachment 76773 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;apply-attachment&apos;, &apos;--non-interactive&apos;, 76773]&quot; exit_code: 2
Last 500 characters of output:
ailed to merge in the changes.
Patch failed at 0001 2010-12-16  Yury Semikhatsky  &lt;yurys@chromium.org&gt;

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at WebKitTools/Scripts/update-webkit line 132.

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2

Full output: http://queues.webkit.org/results/7179078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323369</commentid>
    <comment_count>9</comment_count>
      <attachid>76805</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-16 13:01:36 -0800</bug_when>
    <thetext>Created attachment 76805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323531</commentid>
    <comment_count>10</comment_count>
      <attachid>76805</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-16 17:22:07 -0800</bug_when>
    <thetext>Comment on attachment 76805
Patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323565</commentid>
    <comment_count>11</comment_count>
      <attachid>76805</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-16 18:47:25 -0800</bug_when>
    <thetext>Comment on attachment 76805
Patch

Clearing flags on attachment: 76805

Committed r74226: &lt;http://trac.webkit.org/changeset/74226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323566</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-16 18:47:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323567</commentid>
    <comment_count>13</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-12-16 18:51:15 -0800</bug_when>
    <thetext>The name of the reviewer in the commit http://trac.webkit.org/changeset/74226 is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323579</commentid>
    <comment_count>14</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-12-16 19:40:19 -0800</bug_when>
    <thetext>All Qt bots (windows, minimal, arm) but linux 32bits do not seem to build after this patch:

(...)
/Qt-4.7.1/lib -L/usr/X11R6/lib -lQtNetwork -lQtCore -lpthread  
obj/release/Geolocation.o: In function `WebCore::Geolocation::~Geolocation()&apos;:
Geolocation.cpp:(.text._ZN7WebCore11GeolocationD1Ev+0x30): undefined reference to `WebCore::GeolocationPositionCache::removeUser()&apos;
Geolocation.cpp:(.text._ZN7WebCore11GeolocationD1Ev+0x11c): undefined reference to `WebCore::GeolocationPositionCache::removeUser()&apos;
collect2: ld returned 1 exit status
make[1]: *** [../lib/libQtWebKit.so.4.9.0] Error 1
make[1]: Leaving directory `/home/webkitbuildbot/slaves/release32bitMinimal/buildslave/qt-linux-release-minimal/build/WebKitBuild/Release/WebCore&apos;
make: *** [sub-WebCore-make_default-ordered] Error 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323607</commentid>
    <comment_count>15</comment_count>
    <who name="Jake">jake</who>
    <bug_when>2010-12-16 22:38:00 -0800</bug_when>
    <thetext>To get this to build locally on windows/Qt I added these #ifdefs in Geolocation.h:


    class PositionCacheWrapper {
    public:
        PositionCacheWrapper()
            : m_cache
#if ENABLE(GEOLOCATION)
			(GeolocationPositionCache::instance())
#else
			(0)
#endif
        {
#if ENABLE(GEOLOCATION)
            m_cache-&gt;addUser();
#endif
        }
        ~PositionCacheWrapper()
        {
#if ENABLE(GEOLOCATION)
			m_cache-&gt;removeUser();
#endif
        }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323640</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-12-17 00:49:40 -0800</bug_when>
    <thetext>It fails to build gtk port without geolocation support too, one #ifdef was enough for me to fix it:

+#if ENABLE(GEOLOCATION)
     PositionCacheWrapper m_positionCache;
+#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323667</commentid>
    <comment_count>17</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-17 02:13:53 -0800</bug_when>
    <thetext>&gt; The name of the reviewer in the commit http://trac.webkit.org/changeset/74226
&gt; is wrong.
Aargh. I knew I wouldn&apos;t be around to watch the build, so I wanted to commit via the commit-queue to make sure that I landed exactly the patch that had passed the try-bots. I hoped that the commit queue would be smart enough to set jorlow as reviewer. Would it have helped if I&apos;d set him as reviewer in my patch, or would the commit-queue have overridden it anyway?

&gt; All Qt bots (windows, minimal, arm) but linux 32bits do not seem to build after
&gt; this patch:
Apologies. Should be fixed with http://trac.webkit.org/changeset/74240</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76221</attachid>
            <date>2010-12-10 10:48:19 -0800</date>
            <delta_ts>2010-12-16 08:47:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50826-20101210184817.patch</filename>
            <type>text/plain</type>
            <size>12856</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzc0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMTItMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBuZWVkcyByZWZhY3RvcmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4MjYKKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkSW50ZXJu
YWwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6YWRkVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRl
VG9EYXRhYmFzZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXI6Okdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6fkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6c2V0
Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlV3JhcHBlcjo6Y2FjaGVkUG9zaXRpb24pOgorCiAyMDEwLTEyLTEwICBIaXJvbm9yaSBCb25v
ICA8aGJvbm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWku
CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDczNzQyKQorKysgV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw2IEBAIEdlb2xv
Y2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3NlcnZpY2UoR2VvbG9j
YXRpb25TZXJ2aWNlOjpjcmVhdGUodGhpcykpCiAjZW5kaWYKICAgICAsIG1fYWxsb3dHZW9sb2Nh
dGlvbihVbmtub3duKQotICAgICwgbV9wb3NpdGlvbkNhY2hlKG5ldyBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0zNTgs
NyArMzU3LDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbAogICAg
IEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdD
YWNoZWRQb3NpdGlvbi5lbmQoKTsKICAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVy
LT5nZXQoKTsKLSAgICAgICAgbm90aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFjayhtX3Bvc2l0aW9u
Q2FjaGUtPmNhY2hlZFBvc2l0aW9uKCkpOworICAgICAgICBub3RpZmllci0+cnVuU3VjY2Vzc0Nh
bGxiYWNrKG1fcG9zaXRpb25DYWNoZS5jYWNoZWRQb3NpdGlvbigpKTsKIAogICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUg
d2F0Y2ggc3RpbGwKICAgICAgICAgLy8gZXhpc3RzLCBzdGFydCB0aGUgc2VydmljZSB0byBnZXQg
dXBkYXRlcy4KQEAgLTM4OSwxNCArMzg4LDE0IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RU
aW1lZE91dChHZW9Ob3QKIAogYm9vbCBHZW9sb2NhdGlvbjo6aGF2ZVN1aXRhYmxlQ2FjaGVkUG9z
aXRpb24oUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQogewotICAgIGlmICghbV9wb3NpdGlvbkNh
Y2hlLT5jYWNoZWRQb3NpdGlvbigpKQorICAgIGlmICghbV9wb3NpdGlvbkNhY2hlLmNhY2hlZFBv
c2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW9wdGlvbnMtPmhhc01h
eGltdW1BZ2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFvcHRpb25zLT5tYXhp
bXVtQWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBET01UaW1lU3RhbXAgY3VycmVu
dFRpbWVNaWxsaXMgPSBjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkp
OwotICAgIHJldHVybiBtX3Bvc2l0aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9uKCktPnRpbWVzdGFt
cCgpID4gY3VycmVudFRpbWVNaWxsaXMgLSBvcHRpb25zLT5tYXhpbXVtQWdlKCk7CisgICAgcmV0
dXJuIG1fcG9zaXRpb25DYWNoZS5jYWNoZWRQb3NpdGlvbigpLT50aW1lc3RhbXAoKSA+IGN1cnJl
bnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOwogfQogCiB2b2lkIEdlb2xvY2F0
aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQpAQCAtNjExLDcgKzYxMCw3IEBAIHZvaWQgR2Vv
bG9jYXRpb246OnJlcXVlc3RQZXJtaXNzaW9uKCkKIAogdm9pZCBHZW9sb2NhdGlvbjo6cG9zaXRp
b25DaGFuZ2VkSW50ZXJuYWwoKQogewotICAgIG1fcG9zaXRpb25DYWNoZS0+c2V0Q2FjaGVkUG9z
aXRpb24obGFzdFBvc2l0aW9uKCkpOworICAgIG1fcG9zaXRpb25DYWNoZS5zZXRDYWNoZWRQb3Np
dGlvbihsYXN0UG9zaXRpb24oKSk7CiAKICAgICAvLyBTdG9wIGFsbCBjdXJyZW50bHkgcnVubmlu
ZyB0aW1lcnMuCiAgICAgc3RvcFRpbWVycygpOwpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9u
IDczNzQyKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4OSw5ICsxODksNyBAQCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xv
Y2F0aW9uOwogCi0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIE93blB0cjxHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGU+IG1fcG9zaXRpb25DYWNoZTsKLSNlbmRpZgorICAgIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZVdyYXBwZXIgbV9wb3NpdGlvbkNhY2hlOwogICAgIEdlb05vdGlmaWVyU2V0
IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uOwogfTsKICAgICAKSW5kZXg6IFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3Mzc0MikKKysr
IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw1NSArMzcsNjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29u
c3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsKK3N0YXRpYyBp
bnQgbnVtVXNlcnMgPSAwOwogCi1pbnQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzX2luc3Rh
bmNlcyA9IDA7Ci1SZWZQdHI8R2VvcG9zaXRpb24+KiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OnNfY2FjaGVkUG9zaXRpb247Ci1TdHJpbmcqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c19k
YXRhYmFzZUZpbGUgPSAwOworR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlKiBpbnN0YW5jZSA9IDA7CisgICAgaWYgKCFpbnN0YW5jZSkKKyAgICAgICAgaW5zdGFu
Y2UgPSBuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQogCiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZSgpCisgICAgOiBtX2hhdmVSZWFkRnJvbURhdGFiYXNlKGZhbHNlKQogewotICAgIGlmICghKHNf
aW5zdGFuY2VzKyspKSB7Ci0gICAgICAgIHNfY2FjaGVkUG9zaXRpb24gPSBuZXcgUmVmUHRyPEdl
b3Bvc2l0aW9uPjsKLSAgICAgICAgKnNfY2FjaGVkUG9zaXRpb24gPSByZWFkRnJvbURCKCk7Ci0g
ICAgfQogfQogCi1HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6On5HZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGUoKQordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmFkZFVzZXIoKQoreworICAg
IEFTU0VSVChudW1Vc2VycyA+PSAwKTsKKyAgICArK251bVVzZXJzOworfQorCit2b2lkIEdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZTo6cmVtb3ZlVXNlcigpCit7CisgICAgaWYgKCEoLS1udW1Vc2Vy
cykgJiYgbV9jYWNoZWRQb3NpdGlvbikKKyAgICAgICAgd3JpdGVUb0RhdGFiYXNlKCk7CisgICAg
QVNTRVJUKG51bVVzZXJzID49IDApOworfQorCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoISgtLXNf
aW5zdGFuY2VzKSkgewotICAgICAgICBpZiAoKnNfY2FjaGVkUG9zaXRpb24pCi0gICAgICAgICAg
ICB3cml0ZVRvREIoc19jYWNoZWRQb3NpdGlvbi0+Z2V0KCkpOwotICAgICAgICBkZWxldGUgc19j
YWNoZWRQb3NpdGlvbjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0gIkNh
Y2hlZEdlb3Bvc2l0aW9uLmRiIjsKKyAgICBTdHJpbmcgbmV3RmlsZSA9IFNRTGl0ZUZpbGVTeXN0
ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgocGF0aCwgZGF0YWJhc2VOYW1lKTsKKyAg
ICBpZiAobV9kYXRhYmFzZUZpbGUgIT0gbmV3RmlsZSkgeworICAgICAgICBtX2RhdGFiYXNlRmls
ZSA9IG5ld0ZpbGU7CisgICAgICAgIG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UgPSBmYWxzZTsKICAg
ICB9CiB9CiAKIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlv
bihHZW9wb3NpdGlvbiogY2FjaGVkUG9zaXRpb24pCiB7Ci0gICAgKnNfY2FjaGVkUG9zaXRpb24g
PSBjYWNoZWRQb3NpdGlvbjsKKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gY2FjaGVkUG9zaXRpb247
CiB9CiAKIEdlb3Bvc2l0aW9uKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0
aW9uKCkKIHsKLSAgICByZXR1cm4gc19jYWNoZWRQb3NpdGlvbi0+Z2V0KCk7CisgICAgaWYgKCFt
X2hhdmVSZWFkRnJvbURhdGFiYXNlICYmICFtX2NhY2hlZFBvc2l0aW9uKQorICAgICAgICByZWFk
RnJvbURhdGFiYXNlKCk7CisgICAgcmV0dXJuIG1fY2FjaGVkUG9zaXRpb24uZ2V0KCk7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZy
b21EYXRhYmFzZSgpCiB7Ci0gICAgaWYgKCFzX2RhdGFiYXNlRmlsZSkKLSAgICAgICAgc19kYXRh
YmFzZUZpbGUgPSBuZXcgU3RyaW5nOwotICAgICpzX2RhdGFiYXNlRmlsZSA9IFNRTGl0ZUZpbGVT
eXN0ZW06OmFwcGVuZERhdGFiYXNlRmlsZU5hbWVUb1BhdGgoZGF0YWJhc2VQYXRoLCBkYXRhYmFz
ZU5hbWUpOwotICAgIC8vIElmIHdlIGRvbid0IGhhdmUgaGF2ZSBhIGNhY2hlZCBwb3NpdGlvbiwg
YXR0ZW1wdCB0byByZWFkIG9uZSBmcm9tIHRoZQotICAgIC8vIERCIGF0IHRoZSBuZXcgcGF0aC4K
LSAgICBpZiAoc19pbnN0YW5jZXMgJiYgISgqc19jYWNoZWRQb3NpdGlvbikpCi0gICAgICAgICpz
X2NhY2hlZFBvc2l0aW9uID0gcmVhZEZyb21EQigpOwotfQorICAgIEFTU0VSVCghbV9oYXZlUmVh
ZEZyb21EYXRhYmFzZSk7CisgICAgQVNTRVJUKCFtX2NhY2hlZFBvc2l0aW9uKTsKKworICAgIG1f
aGF2ZVJlYWRGcm9tRGF0YWJhc2UgPSB0cnVlOwogCi1QYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tREIoKQotewogICAgIFNRTGl0ZURhdGFi
YXNlIGRhdGFiYXNlOwotICAgIGlmICghc19kYXRhYmFzZUZpbGUgfHwgIWRhdGFiYXNlLm9wZW4o
KnNfZGF0YWJhc2VGaWxlKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFkYXRhYmFzZS5v
cGVuKG1fZGF0YWJhc2VGaWxlKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIHRo
ZSB0YWJsZSBoZXJlLCBzdWNoIHRoYXQgZXZlbiBpZiB3ZSd2ZSBqdXN0IGNyZWF0ZWQgdGhlCiAg
ICAgLy8gREIsIHRoZSBjb21tYW5kcyBiZWxvdyBzaG91bGQgc3VjY2VlZC4KQEAgLTk4LDE0ICsx
MDksMTQgQEAgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gR2VvbG9jYXRpb25Qb3NpdAogICAgICAg
ICAgICAgImhlYWRpbmcgUkVBTCwgIgogICAgICAgICAgICAgInNwZWVkIFJFQUwsICIKICAgICAg
ICAgICAgICJ0aW1lc3RhbXAgSU5URUdFUiBOT1QgTlVMTCkiKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKIAogICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJh
c2UsICJTRUxFQ1QgKiBGUk9NIENhY2hlZFBvc2l0aW9uIik7CiAgICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKICAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoMikudHlwZSgpICE9IFNRTFZhbHVlOjpOdWxsVmFs
dWU7CiAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVmFsdWUoNCkudHlwZSgpICE9IFNRTFZhbHVlOjpOdWxsVmFsdWU7CkBAIC0xMTgsMTUgKzEy
OSwxNSBAQCBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBHZW9sb2NhdGlvblBvc2l0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDQpLCAvLyBhbHRp
dHVkZUFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91Ymxl
KDUpLCAvLyBoZWFkaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZXNTcGVlZCwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJs
ZSg2KSk7IC8vIHNwZWVkCi0gICAgcmV0dXJuIEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0
ZXMucmVsZWFzZSgpLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoNykpOyAvLyB0aW1lc3RhbXAK
KyAgICBtX2NhY2hlZFBvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5y
ZWxlYXNlKCksIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg3KSk7IC8vIHRpbWVzdGFtcAogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RCKGNvbnN0IEdlb3Bvc2l0
aW9uKiBwb3NpdGlvbikKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvRGF0
YWJhc2UoKQogewotICAgIEFTU0VSVChwb3NpdGlvbik7CisgICAgQVNTRVJUKG1fY2FjaGVkUG9z
aXRpb24pOwogCiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2U7Ci0gICAgaWYgKCFzX2RhdGFi
YXNlRmlsZSB8fCAhZGF0YWJhc2Uub3Blbigqc19kYXRhYmFzZUZpbGUpKQorICAgIGlmICghZGF0
YWJhc2Uub3BlbihtX2RhdGFiYXNlRmlsZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRhdGFiYXNlKTsKQEAgLTE0NywyNiArMTU4LDI2IEBA
IHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvREIKICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3Rh
dGVtZW50LmJpbmREb3VibGUoMSwgcG9zaXRpb24tPmNvb3JkcygpLT5sYXRpdHVkZSgpKTsKLSAg
ICBzdGF0ZW1lbnQuYmluZERvdWJsZSgyLCBwb3NpdGlvbi0+Y29vcmRzKCktPmxvbmdpdHVkZSgp
KTsKLSAgICBpZiAocG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGUoKSkKLSAg
ICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMywgcG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVk
ZSgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBtX2NhY2hlZFBvc2l0aW9uLT5jb29y
ZHMoKS0+bGF0aXR1ZGUoKSk7CisgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMiwgbV9jYWNoZWRQ
b3NpdGlvbi0+Y29vcmRzKCktPmxvbmdpdHVkZSgpKTsKKyAgICBpZiAobV9jYWNoZWRQb3NpdGlv
bi0+Y29vcmRzKCktPmNhblByb3ZpZGVBbHRpdHVkZSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmlu
ZERvdWJsZSgzLCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGUoKSk7CiAgICAg
ZWxzZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoMyk7Ci0gICAgc3RhdGVtZW50LmJpbmRE
b3VibGUoNCwgcG9zaXRpb24tPmNvb3JkcygpLT5hY2N1cmFjeSgpKTsKLSAgICBpZiAocG9zaXRp
b24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpKQotICAgICAgICBzdGF0
ZW1lbnQuYmluZERvdWJsZSg1LCBwb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlQWNjdXJhY3ko
KSk7CisgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNCwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRz
KCktPmFjY3VyYWN5KCkpOworICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+Y2Fu
UHJvdmlkZUFsdGl0dWRlQWNjdXJhY3koKSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUo
NSwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlQWNjdXJhY3koKSk7CiAgICAg
ZWxzZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoNSk7Ci0gICAgaWYgKHBvc2l0aW9uLT5j
b29yZHMoKS0+Y2FuUHJvdmlkZUhlYWRpbmcoKSkKLSAgICAgICAgc3RhdGVtZW50LmJpbmREb3Vi
bGUoNiwgcG9zaXRpb24tPmNvb3JkcygpLT5oZWFkaW5nKCkpOworICAgIGlmIChtX2NhY2hlZFBv
c2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUhlYWRpbmcoKSkKKyAgICAgICAgc3RhdGVtZW50
LmJpbmREb3VibGUoNiwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmhlYWRpbmcoKSk7CiAg
ICAgZWxzZQogICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoNik7Ci0gICAgaWYgKHBvc2l0aW9u
LT5jb29yZHMoKS0+Y2FuUHJvdmlkZVNwZWVkKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91
YmxlKDcsIHBvc2l0aW9uLT5jb29yZHMoKS0+c3BlZWQoKSk7CisgICAgaWYgKG1fY2FjaGVkUG9z
aXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlU3BlZWQoKSkKKyAgICAgICAgc3RhdGVtZW50LmJp
bmREb3VibGUoNywgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOwogICAgIGVs
c2UKICAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDcpOwotICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoOCwgcG9zaXRpb24tPnRpbWVzdGFtcCgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDgs
IG1fY2FjaGVkUG9zaXRpb24tPnRpbWVzdGFtcCgpKTsKICAgICBpZiAoIXN0YXRlbWVudC5leGVj
dXRlQ29tbWFuZCgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlLmgJKHJldmlzaW9uIDczNzQyKQorKysgV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwzMSArMjYsNTYg
QEAKICNpZm5kZWYgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlX2gKICNkZWZpbmUgR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlX2gKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdlb3Bvc2l0
aW9uOwogCisvLyBNYWludGFpbnMgYSBjYWNoZWQgcG9zaXRpb24gZm9yIEdlb2xvY2F0aW9uLgog
Y2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHsKLSAgcHVibGljOgotICAgIEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZSgpOwotICAgIH5HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBpbnN0YW5jZSgpOwor
CisgICAgdm9pZCBhZGRVc2VyKCk7CisgICAgdm9pZCByZW1vdmVVc2VyKCk7CiAKKyAgICB2b2lk
IHNldERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldENhY2hlZFBvc2l0
aW9uKEdlb3Bvc2l0aW9uKik7CiAgICAgR2VvcG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKCk7Ci0g
ICAgc3RhdGljIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOwogCi0gIHByaXZh
dGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHJlYWRGcm9tREIoKTsKLSAg
ICBzdGF0aWMgdm9pZCB3cml0ZVRvREIoY29uc3QgR2VvcG9zaXRpb24qKTsKLQotICAgIHN0YXRp
YyBpbnQgc19pbnN0YW5jZXM7Ci0gICAgc3RhdGljIFJlZlB0cjxHZW9wb3NpdGlvbj4qIHNfY2Fj
aGVkUG9zaXRpb247Ci0gICAgc3RhdGljIFN0cmluZyogc19kYXRhYmFzZUZpbGU7Citwcml2YXRl
OgorICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOworCisgICAgdm9pZCByZWFkRnJvbURh
dGFiYXNlKCk7CisgICAgdm9pZCB3cml0ZVRvRGF0YWJhc2UoKTsKKworICAgIFJlZlB0cjxHZW9w
b3NpdGlvbj4gbV9jYWNoZWRQb3NpdGlvbjsKKyAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGU7Cisg
ICAgYm9vbCBtX2hhdmVSZWFkRnJvbURhdGFiYXNlOworfTsKKworY2xhc3MgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlV3JhcHBlciB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlV3JhcHBlcigpCisgICAgICAgIDogbV9jYWNoZShHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
Omluc3RhbmNlKCkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jYWNoZSk7CisgICAgICAgIG1f
Y2FjaGUtPmFkZFVzZXIoKTsKKyAgICB9CisgICAgfkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdy
YXBwZXIoKQorICAgIHsKKyAgICAgICAgbV9jYWNoZS0+cmVtb3ZlVXNlcigpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0Q2FjaGVkUG9zaXRpb24oR2VvcG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKSB7
IG1fY2FjaGUtPnNldENhY2hlZFBvc2l0aW9uKGNhY2hlZFBvc2l0aW9uKTsgfQorICAgIEdlb3Bv
c2l0aW9uKiBjYWNoZWRQb3NpdGlvbigpIHsgcmV0dXJuIG1fY2FjaGUtPmNhY2hlZFBvc2l0aW9u
KCk7IH0KKworcHJpdmF0ZToKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIG1fY2FjaGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76773</attachid>
            <date>2010-12-16 08:47:38 -0800</date>
            <delta_ts>2010-12-16 13:01:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50826-20101216164736.patch</filename>
            <type>text/plain</type>
            <size>13058</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDE5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMTItMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBuZWVkcyByZWZhY3RvcmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4MjYKKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkSW50ZXJu
YWwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6YWRkVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRl
VG9EYXRhYmFzZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXI6Okdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6fkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6c2V0
Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlV3JhcHBlcjo6Y2FjaGVkUG9zaXRpb24pOgorCiAyMDEwLTEyLTE2ICBQYXZlbCBQb2Rpdmls
b3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkg
U2VtaWtoYXRza3kuCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDc0MTkyKQorKysg
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIx
OSw2IEBAIEdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3Nl
cnZpY2UoR2VvbG9jYXRpb25TZXJ2aWNlOjpjcmVhdGUodGhpcykpCiAjZW5kaWYKICAgICAsIG1f
YWxsb3dHZW9sb2NhdGlvbihVbmtub3duKQotICAgICwgbV9wb3NpdGlvbkNhY2hlKG5ldyBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1
cm47CkBAIC0zNTgsNyArMzU3LDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0
aW9uQ2FsbAogICAgIEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVl
c3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5lbmQoKTsKICAgICBmb3IgKEdlb05vdGlmaWVyU2V0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24u
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBHZW9Ob3RpZmllciogbm90
aWZpZXIgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgbm90aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFj
ayhtX3Bvc2l0aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9uKCkpOworICAgICAgICBub3RpZmllci0+
cnVuU3VjY2Vzc0NhbGxiYWNrKG1fcG9zaXRpb25DYWNoZS5jYWNoZWRQb3NpdGlvbigpKTsKIAog
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4gT3RoZXJ3
aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKICAgICAgICAgLy8gZXhpc3RzLCBzdGFydCB0aGUgc2Vy
dmljZSB0byBnZXQgdXBkYXRlcy4KQEAgLTM4OSwxNCArMzg4LDE0IEBAIHZvaWQgR2VvbG9jYXRp
b246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3QKIAogYm9vbCBHZW9sb2NhdGlvbjo6aGF2ZVN1aXRh
YmxlQ2FjaGVkUG9zaXRpb24oUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQogewotICAgIGlmICgh
bV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigpKQorICAgIGlmICghbV9wb3NpdGlvbkNh
Y2hlLmNhY2hlZFBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW9w
dGlvbnMtPmhhc01heGltdW1BZ2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFv
cHRpb25zLT5tYXhpbXVtQWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBET01UaW1l
U3RhbXAgY3VycmVudFRpbWVNaWxsaXMgPSBjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1
cnJlbnRUaW1lKCkpOwotICAgIHJldHVybiBtX3Bvc2l0aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9u
KCktPnRpbWVzdGFtcCgpID4gY3VycmVudFRpbWVNaWxsaXMgLSBvcHRpb25zLT5tYXhpbXVtQWdl
KCk7CisgICAgcmV0dXJuIG1fcG9zaXRpb25DYWNoZS5jYWNoZWRQb3NpdGlvbigpLT50aW1lc3Rh
bXAoKSA+IGN1cnJlbnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOwogfQogCiB2
b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQpAQCAtNjExLDcgKzYxMCw3
IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RQZXJtaXNzaW9uKCkKIAogdm9pZCBHZW9sb2Nh
dGlvbjo6cG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKQogewotICAgIG1fcG9zaXRpb25DYWNoZS0+
c2V0Q2FjaGVkUG9zaXRpb24obGFzdFBvc2l0aW9uKCkpOworICAgIG1fcG9zaXRpb25DYWNoZS5z
ZXRDYWNoZWRQb3NpdGlvbihsYXN0UG9zaXRpb24oKSk7CiAKICAgICAvLyBTdG9wIGFsbCBjdXJy
ZW50bHkgcnVubmluZyB0aW1lcnMuCiAgICAgc3RvcFRpbWVycygpOwpJbmRleDogV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9u
LmgJKHJldmlzaW9uIDc0MTkyKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyOCw2ICsxMjgsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgTm90aWZpZXJU
b0lkTWFwIG1fbm90aWZpZXJUb0lkTWFwOwogICAgIH07CiAKKyAgICBjbGFzcyBQb3NpdGlvbkNh
Y2hlV3JhcHBlciB7CisgICAgcHVibGljOgorICAgICAgICBQb3NpdGlvbkNhY2hlV3JhcHBlcigp
CisgICAgICAgICAgICA6IG1fY2FjaGUoR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjppbnN0YW5j
ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NhY2hlLT5hZGRVc2VyKCk7CisgICAgICAg
IH0KKyAgICAgICAgflBvc2l0aW9uQ2FjaGVXcmFwcGVyKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9jYWNoZS0+cmVtb3ZlVXNlcigpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0Q2Fj
aGVkUG9zaXRpb24oR2VvcG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKSB7IG1fY2FjaGUtPnNldENh
Y2hlZFBvc2l0aW9uKGNhY2hlZFBvc2l0aW9uKTsgfQorICAgICAgICBHZW9wb3NpdGlvbiogY2Fj
aGVkUG9zaXRpb24oKSB7IHJldHVybiBtX2NhY2hlLT5jYWNoZWRQb3NpdGlvbigpOyB9CisgICAg
cHJpdmF0ZToKKyAgICAgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBtX2NhY2hlOworICAg
IH07CisKICAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX29uZVNob3Rz
LmlzRW1wdHkoKSB8fCAhbV93YXRjaGVycy5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgc2VuZEVy
cm9yKEdlb05vdGlmaWVyVmVjdG9yJiwgUG9zaXRpb25FcnJvciopOwpAQCAtMTg5LDkgKzIwNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIE5vCiAgICAgfSBtX2FsbG93R2VvbG9jYXRpb247CiAKLSNp
ZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgT3duUHRyPEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZT4gbV9wb3NpdGlvbkNhY2hlOwotI2VuZGlmCisgICAgUG9zaXRpb25DYWNoZVdyYXBwZXIgbV9w
b3NpdGlvbkNhY2hlOwogICAgIEdlb05vdGlmaWVyU2V0IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hl
ZFBvc2l0aW9uOwogfTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA3NDE5MikKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw1NSArMzcsNjYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lID0g
IkNhY2hlZEdlb3Bvc2l0aW9uLmRiIjsKK3N0YXRpYyBpbnQgbnVtVXNlcnMgPSAwOwogCi1pbnQg
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzX2luc3RhbmNlcyA9IDA7Ci1SZWZQdHI8R2VvcG9z
aXRpb24+KiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNfY2FjaGVkUG9zaXRpb247Ci1TdHJp
bmcqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c19kYXRhYmFzZUZpbGUgPSAwOworR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Omluc3RhbmNlKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSosIGlu
c3RhbmNlLCAoMCkpOworICAgIGlmICghaW5zdGFuY2UpCisgICAgICAgIGluc3RhbmNlID0gbmV3
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KIAog
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKQorICAg
IDogbV9oYXZlUmVhZEZyb21EYXRhYmFzZShmYWxzZSkKIHsKLSAgICBpZiAoIShzX2luc3RhbmNl
cysrKSkgewotICAgICAgICBzX2NhY2hlZFBvc2l0aW9uID0gbmV3IFJlZlB0cjxHZW9wb3NpdGlv
bj47Ci0gICAgICAgICpzX2NhY2hlZFBvc2l0aW9uID0gcmVhZEZyb21EQigpOwotICAgIH0KIH0K
IAotR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp+R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkK
K3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjphZGRVc2VyKCkKK3sKKyAgICBBU1NFUlQo
bnVtVXNlcnMgPj0gMCk7CisgICAgKytudW1Vc2VyczsKK30KKwordm9pZCBHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIoKQoreworICAgIGlmICghKC0tbnVtVXNlcnMpICYmIG1f
Y2FjaGVkUG9zaXRpb24pCisgICAgICAgIHdyaXRlVG9EYXRhYmFzZSgpOworICAgIEFTU0VSVChu
dW1Vc2VycyA+PSAwKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldERh
dGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgaWYgKCEoLS1zX2luc3RhbmNl
cykpIHsKLSAgICAgICAgaWYgKCpzX2NhY2hlZFBvc2l0aW9uKQotICAgICAgICAgICAgd3JpdGVU
b0RCKHNfY2FjaGVkUG9zaXRpb24tPmdldCgpKTsKLSAgICAgICAgZGVsZXRlIHNfY2FjaGVkUG9z
aXRpb247CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFtZSA9ICJDYWNoZWRHZW9w
b3NpdGlvbi5kYiI7CisgICAgU3RyaW5nIG5ld0ZpbGUgPSBTUUxpdGVGaWxlU3lzdGVtOjphcHBl
bmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKHBhdGgsIGRhdGFiYXNlTmFtZSk7CisgICAgaWYgKG1f
ZGF0YWJhc2VGaWxlICE9IG5ld0ZpbGUpIHsKKyAgICAgICAgbV9kYXRhYmFzZUZpbGUgPSBuZXdG
aWxlOworICAgICAgICBtX2hhdmVSZWFkRnJvbURhdGFiYXNlID0gZmFsc2U7CiAgICAgfQogfQog
CiB2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c2V0Q2FjaGVkUG9zaXRpb24oR2VvcG9z
aXRpb24qIGNhY2hlZFBvc2l0aW9uKQogewotICAgICpzX2NhY2hlZFBvc2l0aW9uID0gY2FjaGVk
UG9zaXRpb247CisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IGNhY2hlZFBvc2l0aW9uOwogfQogCiBH
ZW9wb3NpdGlvbiogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpjYWNoZWRQb3NpdGlvbigpCiB7
Ci0gICAgcmV0dXJuIHNfY2FjaGVkUG9zaXRpb24tPmdldCgpOworICAgIGlmICghbV9oYXZlUmVh
ZEZyb21EYXRhYmFzZSAmJiAhbV9jYWNoZWRQb3NpdGlvbikKKyAgICAgICAgcmVhZEZyb21EYXRh
YmFzZSgpOworICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLmdldCgpOwogfQogCi12b2lkIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VQYXRoKQordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJh
c2UoKQogewotICAgIGlmICghc19kYXRhYmFzZUZpbGUpCi0gICAgICAgIHNfZGF0YWJhc2VGaWxl
ID0gbmV3IFN0cmluZzsKLSAgICAqc19kYXRhYmFzZUZpbGUgPSBTUUxpdGVGaWxlU3lzdGVtOjph
cHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKGRhdGFiYXNlUGF0aCwgZGF0YWJhc2VOYW1lKTsK
LSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGhhdmUgYSBjYWNoZWQgcG9zaXRpb24sIGF0dGVtcHQg
dG8gcmVhZCBvbmUgZnJvbSB0aGUKLSAgICAvLyBEQiBhdCB0aGUgbmV3IHBhdGguCi0gICAgaWYg
KHNfaW5zdGFuY2VzICYmICEoKnNfY2FjaGVkUG9zaXRpb24pKQotICAgICAgICAqc19jYWNoZWRQ
b3NpdGlvbiA9IHJlYWRGcm9tREIoKTsKLX0KKyAgICBBU1NFUlQoIW1faGF2ZVJlYWRGcm9tRGF0
YWJhc2UpOworICAgIEFTU0VSVCghbV9jYWNoZWRQb3NpdGlvbik7CisKKyAgICBtX2hhdmVSZWFk
RnJvbURhdGFiYXNlID0gdHJ1ZTsKIAotUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURCKCkKLXsKICAgICBTUUxpdGVEYXRhYmFzZSBkYXRh
YmFzZTsKLSAgICBpZiAoIXNfZGF0YWJhc2VGaWxlIHx8ICFkYXRhYmFzZS5vcGVuKCpzX2RhdGFi
YXNlRmlsZSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghZGF0YWJhc2Uub3BlbihtX2Rh
dGFiYXNlRmlsZSkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSB0aGUgdGFibGUg
aGVyZSwgc3VjaCB0aGF0IGV2ZW4gaWYgd2UndmUganVzdCBjcmVhdGVkIHRoZQogICAgIC8vIERC
LCB0aGUgY29tbWFuZHMgYmVsb3cgc2hvdWxkIHN1Y2NlZWQuCkBAIC05OCwxNCArMTA5LDE0IEBA
IFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IEdlb2xvY2F0aW9uUG9zaXQKICAgICAgICAgICAgICJo
ZWFkaW5nIFJFQUwsICIKICAgICAgICAgICAgICJzcGVlZCBSRUFMLCAiCiAgICAgICAgICAgICAi
dGltZXN0YW1wIElOVEVHRVIgTk9UIE5VTEwpIikpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm47CiAKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiU0VM
RUNUICogRlJPTSBDYWNoZWRQb3NpdGlvbiIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gc3RhdGVt
ZW50LmdldENvbHVtblZhbHVlKDIpLnR5cGUoKSAhPSBTUUxWYWx1ZTo6TnVsbFZhbHVlOwogICAg
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gc3RhdGVtZW50LmdldENvbHVtblZhbHVl
KDQpLnR5cGUoKSAhPSBTUUxWYWx1ZTo6TnVsbFZhbHVlOwpAQCAtMTE4LDE1ICsxMjksMTUgQEAg
UGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gR2VvbG9jYXRpb25Qb3NpdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeSwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg0KSwgLy8gYWx0aXR1ZGVBY2N1
cmFjeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3ZpZGVzSGVhZGluZywgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg1KSwgLy8g
aGVhZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3ZpZGVzU3BlZWQsIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNikpOyAv
LyBzcGVlZAotICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVh
c2UoKSwgc3RhdGVtZW50LmdldENvbHVtbkludDY0KDcpKTsgLy8gdGltZXN0YW1wCisgICAgbV9j
YWNoZWRQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFzZSgp
LCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoNykpOyAvLyB0aW1lc3RhbXAKIH0KIAotdm9pZCBH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EQihjb25zdCBHZW9wb3NpdGlvbiogcG9z
aXRpb24pCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKCkK
IHsKLSAgICBBU1NFUlQocG9zaXRpb24pOworICAgIEFTU0VSVChtX2NhY2hlZFBvc2l0aW9uKTsK
IAogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwotICAgIGlmICghc19kYXRhYmFzZUZpbGUg
fHwgIWRhdGFiYXNlLm9wZW4oKnNfZGF0YWJhc2VGaWxlKSkKKyAgICBpZiAoIWRhdGFiYXNlLm9w
ZW4obV9kYXRhYmFzZUZpbGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7CkBAIC0xNDcsMjYgKzE1OCwyNiBAQCB2b2lkIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RCCiAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRlbWVudC5i
aW5kRG91YmxlKDEsIHBvc2l0aW9uLT5jb29yZHMoKS0+bGF0aXR1ZGUoKSk7Ci0gICAgc3RhdGVt
ZW50LmJpbmREb3VibGUoMiwgcG9zaXRpb24tPmNvb3JkcygpLT5sb25naXR1ZGUoKSk7Ci0gICAg
aWYgKHBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUFsdGl0dWRlKCkpCi0gICAgICAgIHN0
YXRlbWVudC5iaW5kRG91YmxlKDMsIHBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGUoKSk7Cisg
ICAgc3RhdGVtZW50LmJpbmREb3VibGUoMSwgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmxh
dGl0dWRlKCkpOworICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDIsIG1fY2FjaGVkUG9zaXRpb24t
PmNvb3JkcygpLT5sb25naXR1ZGUoKSk7CisgICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNvb3Jk
cygpLT5jYW5Qcm92aWRlQWx0aXR1ZGUoKSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUo
MywgbV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlKCkpOwogICAgIGVsc2UKICAg
ICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDMpOwotICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDQs
IHBvc2l0aW9uLT5jb29yZHMoKS0+YWNjdXJhY3koKSk7Ci0gICAgaWYgKHBvc2l0aW9uLT5jb29y
ZHMoKS0+Y2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3koKSkKLSAgICAgICAgc3RhdGVtZW50LmJp
bmREb3VibGUoNSwgcG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZUFjY3VyYWN5KCkpOworICAg
IHN0YXRlbWVudC5iaW5kRG91YmxlKDQsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5hY2N1
cmFjeSgpKTsKKyAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVB
bHRpdHVkZUFjY3VyYWN5KCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDUsIG1fY2Fj
aGVkUG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZUFjY3VyYWN5KCkpOwogICAgIGVsc2UKICAg
ICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDUpOwotICAgIGlmIChwb3NpdGlvbi0+Y29vcmRzKCkt
PmNhblByb3ZpZGVIZWFkaW5nKCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIHBv
c2l0aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKKyAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+
Y29vcmRzKCktPmNhblByb3ZpZGVIZWFkaW5nKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91
YmxlKDYsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5oZWFkaW5nKCkpOwogICAgIGVsc2UK
ICAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDYpOwotICAgIGlmIChwb3NpdGlvbi0+Y29vcmRz
KCktPmNhblByb3ZpZGVTcGVlZCgpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg3LCBw
b3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOworICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5j
b29yZHMoKS0+Y2FuUHJvdmlkZVNwZWVkKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91Ymxl
KDcsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5zcGVlZCgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHN0YXRlbWVudC5iaW5kTnVsbCg3KTsKLSAgICBzdGF0ZW1lbnQuYmluZEludDY0KDgsIHBv
c2l0aW9uLT50aW1lc3RhbXAoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCg4LCBtX2NhY2hl
ZFBvc2l0aW9uLT50aW1lc3RhbXAoKSk7CiAgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZS5oCShyZXZpc2lvbiA3NDE5MikKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzEgKzI2LDM1IEBACiAjaWZu
ZGVmIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZV9oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHZW9wb3NpdGlvbjsKIAog
Y2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHsKLSAgcHVibGljOgotICAgIEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZSgpOwotICAgIH5HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBpbnN0YW5jZSgpOwor
CisgICAgdm9pZCBhZGRVc2VyKCk7CisgICAgdm9pZCByZW1vdmVVc2VyKCk7CiAKKyAgICB2b2lk
IHNldERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldENhY2hlZFBvc2l0
aW9uKEdlb3Bvc2l0aW9uKik7CiAgICAgR2VvcG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKCk7Ci0g
ICAgc3RhdGljIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOwogCi0gIHByaXZh
dGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHJlYWRGcm9tREIoKTsKLSAg
ICBzdGF0aWMgdm9pZCB3cml0ZVRvREIoY29uc3QgR2VvcG9zaXRpb24qKTsKLQotICAgIHN0YXRp
YyBpbnQgc19pbnN0YW5jZXM7Ci0gICAgc3RhdGljIFJlZlB0cjxHZW9wb3NpdGlvbj4qIHNfY2Fj
aGVkUG9zaXRpb247Ci0gICAgc3RhdGljIFN0cmluZyogc19kYXRhYmFzZUZpbGU7Citwcml2YXRl
OgorICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOworCisgICAgdm9pZCByZWFkRnJvbURh
dGFiYXNlKCk7CisgICAgdm9pZCB3cml0ZVRvRGF0YWJhc2UoKTsKKworICAgIFJlZlB0cjxHZW9w
b3NpdGlvbj4gbV9jYWNoZWRQb3NpdGlvbjsKKyAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGU7Cisg
ICAgYm9vbCBtX2hhdmVSZWFkRnJvbURhdGFiYXNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76805</attachid>
            <date>2010-12-16 13:01:36 -0800</date>
            <delta_ts>2010-12-16 18:47:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50826-20101216210134.patch</filename>
            <type>text/plain</type>
            <size>13056</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDIwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMTItMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSBuZWVkcyByZWZhY3RvcmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA4MjYKKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkSW50ZXJu
YWwpOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDoKKyAgICAgICAgKiBwYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6YWRkVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRl
VG9EYXRhYmFzZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXI6Okdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6fkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZVdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlV3JhcHBlcjo6c2V0
Q2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlV3JhcHBlcjo6Y2FjaGVkUG9zaXRpb24pOgorCiAyMDEwLTEyLTE2ICBMZWFuZHJvIFBlcmVp
cmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtFRkxdIFVucmV2aWV3ZWQg
YnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCShyZXZpc2lvbiA3NDIwNykKKysrIFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTks
NiBAQCBHZW9sb2NhdGlvbjo6R2VvbG9jYXRpb24oRnJhbWUqIGZyYW1lKQogICAgICwgbV9zZXJ2
aWNlKEdlb2xvY2F0aW9uU2VydmljZTo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiAgICAgLCBtX2Fs
bG93R2VvbG9jYXRpb24oVW5rbm93bikKLSAgICAsIG1fcG9zaXRpb25DYWNoZShuZXcgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzU4LDcgKzM1Nyw3IEBAIHZvaWQgR2VvbG9jYXRpb246Om1ha2VDYWNoZWRQb3NpdGlv
bkNhbGwKICAgICBHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0
c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uZW5kKCk7CiAgICAgZm9yIChHZW9Ob3RpZmllclNldDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgR2VvTm90aWZpZXIqIG5vdGlm
aWVyID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgIG5vdGlmaWVyLT5ydW5TdWNjZXNzQ2FsbGJhY2so
bV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigpKTsKKyAgICAgICAgbm90aWZpZXItPnJ1
blN1Y2Nlc3NDYWxsYmFjayhtX3Bvc2l0aW9uQ2FjaGUuY2FjaGVkUG9zaXRpb24oKSk7CiAKICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQuIE90aGVyd2lz
ZSwgaWYgdGhlIHdhdGNoIHN0aWxsCiAgICAgICAgIC8vIGV4aXN0cywgc3RhcnQgdGhlIHNlcnZp
Y2UgdG8gZ2V0IHVwZGF0ZXMuCkBAIC0zODksMTQgKzM4OCwxNCBAQCB2b2lkIEdlb2xvY2F0aW9u
OjpyZXF1ZXN0VGltZWRPdXQoR2VvTm90CiAKIGJvb2wgR2VvbG9jYXRpb246OmhhdmVTdWl0YWJs
ZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKIHsKLSAgICBpZiAoIW1f
cG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRpb24oKSkKKyAgICBpZiAoIW1fcG9zaXRpb25DYWNo
ZS5jYWNoZWRQb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFvcHRp
b25zLT5oYXNNYXhpbXVtQWdlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghb3B0
aW9ucy0+bWF4aW11bUFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRE9NVGltZVN0
YW1wIGN1cnJlbnRUaW1lTWlsbGlzID0gY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJy
ZW50VGltZSgpKTsKLSAgICByZXR1cm4gbV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigp
LT50aW1lc3RhbXAoKSA+IGN1cnJlbnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgp
OworICAgIHJldHVybiBtX3Bvc2l0aW9uQ2FjaGUuY2FjaGVkUG9zaXRpb24oKS0+dGltZXN0YW1w
KCkgPiBjdXJyZW50VGltZU1pbGxpcyAtIG9wdGlvbnMtPm1heGltdW1BZ2UoKTsKIH0KIAogdm9p
ZCBHZW9sb2NhdGlvbjo6Y2xlYXJXYXRjaChpbnQgd2F0Y2hJZCkKQEAgLTYxMSw3ICs2MTAsNyBA
QCB2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbigpCiAKIHZvaWQgR2VvbG9jYXRp
b246OnBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCkKIHsKLSAgICBtX3Bvc2l0aW9uQ2FjaGUtPnNl
dENhY2hlZFBvc2l0aW9uKGxhc3RQb3NpdGlvbigpKTsKKyAgICBtX3Bvc2l0aW9uQ2FjaGUuc2V0
Q2FjaGVkUG9zaXRpb24obGFzdFBvc2l0aW9uKCkpOwogCiAgICAgLy8gU3RvcCBhbGwgY3VycmVu
dGx5IHJ1bm5pbmcgdGltZXJzLgogICAgIHN0b3BUaW1lcnMoKTsKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5o
CShyZXZpc2lvbiA3NDIwNykKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjgsNiArMTI4LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vdGlmaWVyVG9J
ZE1hcCBtX25vdGlmaWVyVG9JZE1hcDsKICAgICB9OwogCisgICAgY2xhc3MgUG9zaXRpb25DYWNo
ZVdyYXBwZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgUG9zaXRpb25DYWNoZVdyYXBwZXIoKQor
ICAgICAgICAgICAgOiBtX2NhY2hlKEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6aW5zdGFuY2Uo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jYWNoZS0+YWRkVXNlcigpOworICAgICAgICB9
CisgICAgICAgIH5Qb3NpdGlvbkNhY2hlV3JhcHBlcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fY2FjaGUtPnJlbW92ZVVzZXIoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldENhY2hl
ZFBvc2l0aW9uKEdlb3Bvc2l0aW9uKiBjYWNoZWRQb3NpdGlvbikgeyBtX2NhY2hlLT5zZXRDYWNo
ZWRQb3NpdGlvbihjYWNoZWRQb3NpdGlvbik7IH0KKyAgICAgICAgR2VvcG9zaXRpb24qIGNhY2hl
ZFBvc2l0aW9uKCkgeyByZXR1cm4gbV9jYWNoZS0+Y2FjaGVkUG9zaXRpb24oKTsgfQorICAgIHBy
aXZhdGU6CisgICAgICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogbV9jYWNoZTsKKyAgICB9
OworCiAgICAgYm9vbCBoYXNMaXN0ZW5lcnMoKSBjb25zdCB7IHJldHVybiAhbV9vbmVTaG90cy5p
c0VtcHR5KCkgfHwgIW1fd2F0Y2hlcnMuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIHNlbmRFcnJv
cihHZW9Ob3RpZmllclZlY3RvciYsIFBvc2l0aW9uRXJyb3IqKTsKQEAgLTE4OSw5ICsyMDYsNyBA
QCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwogCi0jaWYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIE93blB0cjxHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU+
IG1fcG9zaXRpb25DYWNoZTsKLSNlbmRpZgorICAgIFBvc2l0aW9uQ2FjaGVXcmFwcGVyIG1fcG9z
aXRpb25DYWNoZTsKICAgICBHZW9Ob3RpZmllclNldCBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQ
b3NpdGlvbjsKIH07CiAgICAgCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlLmNwcAkocmV2aXNpb24gNzQyMDcpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNTUgKzM3LDY2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFtZSA9ICJD
YWNoZWRHZW9wb3NpdGlvbi5kYiI7CitzdGF0aWMgaW50IG51bVVzZXJzID0gMDsKIAotaW50IEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c19pbnN0YW5jZXMgPSAwOwotUmVmUHRyPEdlb3Bvc2l0
aW9uPiogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzX2NhY2hlZFBvc2l0aW9uOwotU3RyaW5n
KiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNfZGF0YWJhc2VGaWxlID0gMDsKK0dlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZSogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjppbnN0YW5jZSgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqLCBpbnN0
YW5jZSwgKDApKTsKKyAgICBpZiAoIWluc3RhbmNlKQorICAgICAgICBpbnN0YW5jZSA9IG5ldyBH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CiAKIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkKKyAgICA6
IG1faGF2ZVJlYWRGcm9tRGF0YWJhc2UoZmFsc2UpCiB7Ci0gICAgaWYgKCEoc19pbnN0YW5jZXMr
KykpIHsKLSAgICAgICAgc19jYWNoZWRQb3NpdGlvbiA9IG5ldyBSZWZQdHI8R2VvcG9zaXRpb24+
OwotICAgICAgICAqc19jYWNoZWRQb3NpdGlvbiA9IHJlYWRGcm9tREIoKTsKLSAgICB9CiB9CiAK
LUdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6fkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpCit2
b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6YWRkVXNlcigpCit7CisgICAgQVNTRVJUKG51
bVVzZXJzID49IDApOworICAgICsrbnVtVXNlcnM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlOjpyZW1vdmVVc2VyKCkKK3sKKyAgICBpZiAoISgtLW51bVVzZXJzKSAmJiBtX2Nh
Y2hlZFBvc2l0aW9uKQorICAgICAgICB3cml0ZVRvRGF0YWJhc2UoKTsKKyAgICBBU1NFUlQobnVt
VXNlcnMgPj0gMCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXREYXRh
YmFzZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIGlmICghKC0tc19pbnN0YW5jZXMp
KSB7Ci0gICAgICAgIGlmICgqc19jYWNoZWRQb3NpdGlvbikKLSAgICAgICAgICAgIHdyaXRlVG9E
QihzX2NhY2hlZFBvc2l0aW9uLT5nZXQoKSk7Ci0gICAgICAgIGRlbGV0ZSBzX2NhY2hlZFBvc2l0
aW9uOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUgPSAiQ2FjaGVkR2VvcG9z
aXRpb24uZGIiOworICAgIFN0cmluZyBuZXdGaWxlID0gU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5k
RGF0YWJhc2VGaWxlTmFtZVRvUGF0aChwYXRoLCBkYXRhYmFzZU5hbWUpOworICAgIGlmIChtX2Rh
dGFiYXNlRmlsZSAhPSBuZXdGaWxlKSB7CisgICAgICAgIG1fZGF0YWJhc2VGaWxlID0gbmV3Rmls
ZTsKKyAgICAgICAgbV9oYXZlUmVhZEZyb21EYXRhYmFzZSA9IGZhbHNlOwogICAgIH0KIH0KIAog
dm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldENhY2hlZFBvc2l0aW9uKEdlb3Bvc2l0
aW9uKiBjYWNoZWRQb3NpdGlvbikKIHsKLSAgICAqc19jYWNoZWRQb3NpdGlvbiA9IGNhY2hlZFBv
c2l0aW9uOworICAgIG1fY2FjaGVkUG9zaXRpb24gPSBjYWNoZWRQb3NpdGlvbjsKIH0KIAogR2Vv
cG9zaXRpb24qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6Y2FjaGVkUG9zaXRpb24oKQogewot
ICAgIHJldHVybiBzX2NhY2hlZFBvc2l0aW9uLT5nZXQoKTsKKyAgICBpZiAoIW1faGF2ZVJlYWRG
cm9tRGF0YWJhc2UgJiYgIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgIHJlYWRGcm9tRGF0YWJh
c2UoKTsKKyAgICByZXR1cm4gbV9jYWNoZWRQb3NpdGlvbi5nZXQoKTsKIH0KIAotdm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGRhdGFi
YXNlUGF0aCkKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNl
KCkKIHsKLSAgICBpZiAoIXNfZGF0YWJhc2VGaWxlKQotICAgICAgICBzX2RhdGFiYXNlRmlsZSA9
IG5ldyBTdHJpbmc7Ci0gICAgKnNfZGF0YWJhc2VGaWxlID0gU1FMaXRlRmlsZVN5c3RlbTo6YXBw
ZW5kRGF0YWJhc2VGaWxlTmFtZVRvUGF0aChkYXRhYmFzZVBhdGgsIGRhdGFiYXNlTmFtZSk7Ci0g
ICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBoYXZlIGEgY2FjaGVkIHBvc2l0aW9uLCBhdHRlbXB0IHRv
IHJlYWQgb25lIGZyb20gdGhlCi0gICAgLy8gREIgYXQgdGhlIG5ldyBwYXRoLgotICAgIGlmIChz
X2luc3RhbmNlcyAmJiAhKCpzX2NhY2hlZFBvc2l0aW9uKSkKLSAgICAgICAgKnNfY2FjaGVkUG9z
aXRpb24gPSByZWFkRnJvbURCKCk7Ci19CisgICAgQVNTRVJUKCFtX2hhdmVSZWFkRnJvbURhdGFi
YXNlKTsKKyAgICBBU1NFUlQoIW1fY2FjaGVkUG9zaXRpb24pOworCisgICAgbV9oYXZlUmVhZEZy
b21EYXRhYmFzZSA9IHRydWU7CiAKLVBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6cmVhZEZyb21EQigpCi17CiAgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJh
c2U7Ci0gICAgaWYgKCFzX2RhdGFiYXNlRmlsZSB8fCAhZGF0YWJhc2Uub3Blbigqc19kYXRhYmFz
ZUZpbGUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWRhdGFiYXNlLm9wZW4obV9kYXRh
YmFzZUZpbGUpKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgdGhlIHRhYmxlIGhl
cmUsIHN1Y2ggdGhhdCBldmVuIGlmIHdlJ3ZlIGp1c3QgY3JlYXRlZCB0aGUKICAgICAvLyBEQiwg
dGhlIGNvbW1hbmRzIGJlbG93IHNob3VsZCBzdWNjZWVkLgpAQCAtOTgsMTQgKzEwOSwxNCBAQCBQ
YXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBHZW9sb2NhdGlvblBvc2l0CiAgICAgICAgICAgICAiaGVh
ZGluZyBSRUFMLCAiCiAgICAgICAgICAgICAic3BlZWQgUkVBTCwgIgogICAgICAgICAgICAgInRp
bWVzdGFtcCBJTlRFR0VSIE5PVCBOVUxMKSIpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYXRhYmFzZSwgIlNFTEVD
VCAqIEZST00gQ2FjaGVkUG9zaXRpb24iKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5WYWx1ZSgyKS50eXBlKCkgIT0gU1FMVmFsdWU6Ok51bGxWYWx1ZTsKICAgICBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IHN0YXRlbWVudC5nZXRDb2x1bW5WYWx1ZSg0
KS50eXBlKCkgIT0gU1FMVmFsdWU6Ok51bGxWYWx1ZTsKQEAgLTExOCwxNSArMTI5LDE1IEBAIFBh
c3NSZWZQdHI8R2VvcG9zaXRpb24+IEdlb2xvY2F0aW9uUG9zaXQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNCksIC8vIGFsdGl0dWRlQWNjdXJh
Y3kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm92aWRlc0hlYWRpbmcsIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNSksIC8vIGhl
YWRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm92aWRlc1NwZWVkLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDYpKTsgLy8g
c3BlZWQKLSAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNl
KCksIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg3KSk7IC8vIHRpbWVzdGFtcAorICAgIG1fY2Fj
aGVkUG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVhc2UoKSwg
c3RhdGVtZW50LmdldENvbHVtbkludDY0KDcpKTsgLy8gdGltZXN0YW1wCiB9CiAKLXZvaWQgR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvREIoY29uc3QgR2VvcG9zaXRpb24qIHBvc2l0
aW9uKQordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSgpCiB7
Ci0gICAgQVNTRVJUKHBvc2l0aW9uKTsKKyAgICBBU1NFUlQobV9jYWNoZWRQb3NpdGlvbik7CiAK
ICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKLSAgICBpZiAoIXNfZGF0YWJhc2VGaWxlIHx8
ICFkYXRhYmFzZS5vcGVuKCpzX2RhdGFiYXNlRmlsZSkpCisgICAgaWYgKCFkYXRhYmFzZS5vcGVu
KG1fZGF0YWJhc2VGaWxlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24oZGF0YWJhc2UpOwpAQCAtMTQ3LDI2ICsxNTgsMjYgQEAgdm9pZCBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EQgogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGF0ZW1lbnQuYmlu
ZERvdWJsZSgxLCBwb3NpdGlvbi0+Y29vcmRzKCktPmxhdGl0dWRlKCkpOwotICAgIHN0YXRlbWVu
dC5iaW5kRG91YmxlKDIsIHBvc2l0aW9uLT5jb29yZHMoKS0+bG9uZ2l0dWRlKCkpOwotICAgIGlm
IChwb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVBbHRpdHVkZSgpKQotICAgICAgICBzdGF0
ZW1lbnQuYmluZERvdWJsZSgzLCBwb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlKCkpOworICAg
IHN0YXRlbWVudC5iaW5kRG91YmxlKDEsIG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5sYXRp
dHVkZSgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgyLCBtX2NhY2hlZFBvc2l0aW9uLT5j
b29yZHMoKS0+bG9uZ2l0dWRlKCkpOworICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMo
KS0+Y2FuUHJvdmlkZUFsdGl0dWRlKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDMs
IG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHN0YXRlbWVudC5iaW5kTnVsbCgzKTsKLSAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBw
b3NpdGlvbi0+Y29vcmRzKCktPmFjY3VyYWN5KCkpOwotICAgIGlmIChwb3NpdGlvbi0+Y29vcmRz
KCktPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCkpCi0gICAgICAgIHN0YXRlbWVudC5iaW5k
RG91YmxlKDUsIHBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKKyAgICBz
dGF0ZW1lbnQuYmluZERvdWJsZSg0LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+YWNjdXJh
Y3koKSk7CisgICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0
aXR1ZGVBY2N1cmFjeSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg1LCBtX2NhY2hl
ZFBvc2l0aW9uLT5jb29yZHMoKS0+YWx0aXR1ZGVBY2N1cmFjeSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHN0YXRlbWVudC5iaW5kTnVsbCg1KTsKLSAgICBpZiAocG9zaXRpb24tPmNvb3JkcygpLT5j
YW5Qcm92aWRlSGVhZGluZygpKQotICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg2LCBwb3Np
dGlvbi0+Y29vcmRzKCktPmhlYWRpbmcoKSk7CisgICAgaWYgKG1fY2FjaGVkUG9zaXRpb24tPmNv
b3JkcygpLT5jYW5Qcm92aWRlSGVhZGluZygpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJs
ZSg2LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKICAgICBlbHNlCiAg
ICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCg2KTsKLSAgICBpZiAocG9zaXRpb24tPmNvb3Jkcygp
LT5jYW5Qcm92aWRlU3BlZWQoKSkKLSAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNywgcG9z
aXRpb24tPmNvb3JkcygpLT5zcGVlZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQb3NpdGlvbi0+Y29v
cmRzKCktPmNhblByb3ZpZGVTcGVlZCgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg3
LCBtX2NhY2hlZFBvc2l0aW9uLT5jb29yZHMoKS0+c3BlZWQoKSk7CiAgICAgZWxzZQogICAgICAg
ICBzdGF0ZW1lbnQuYmluZE51bGwoNyk7Ci0gICAgc3RhdGVtZW50LmJpbmRJbnQ2NCg4LCBwb3Np
dGlvbi0+dGltZXN0YW1wKCkpOworICAgIHN0YXRlbWVudC5iaW5kSW50NjQoOCwgbV9jYWNoZWRQ
b3NpdGlvbi0+dGltZXN0YW1wKCkpOwogICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5k
KCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUuaAkocmV2aXNpb24gNzQyMDcpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDMxICsyNiwzNSBAQAogI2lmbmRl
ZiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGVfaAogI2RlZmluZSBHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGVfaAogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2VvcG9zaXRpb247CiAKIGNs
YXNzIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSB7Ci0gIHB1YmxpYzoKLSAgICBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUoKTsKLSAgICB+R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCk7CitwdWJs
aWM6CisgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogaW5zdGFuY2UoKTsKKwor
ICAgIHZvaWQgYWRkVXNlcigpOworICAgIHZvaWQgcmVtb3ZlVXNlcigpOwogCisgICAgdm9pZCBz
ZXREYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRDYWNoZWRQb3NpdGlv
bihHZW9wb3NpdGlvbiopOwogICAgIEdlb3Bvc2l0aW9uKiBjYWNoZWRQb3NpdGlvbigpOwotICAg
IHN0YXRpYyB2b2lkIHNldERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKIAotICBwcml2YXRl
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiByZWFkRnJvbURCKCk7Ci0gICAg
c3RhdGljIHZvaWQgd3JpdGVUb0RCKGNvbnN0IEdlb3Bvc2l0aW9uKik7Ci0KLSAgICBzdGF0aWMg
aW50IHNfaW5zdGFuY2VzOwotICAgIHN0YXRpYyBSZWZQdHI8R2VvcG9zaXRpb24+KiBzX2NhY2hl
ZFBvc2l0aW9uOwotICAgIHN0YXRpYyBTdHJpbmcqIHNfZGF0YWJhc2VGaWxlOworcHJpdmF0ZToK
KyAgICBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKTsKKworICAgIHZvaWQgcmVhZEZyb21EYXRh
YmFzZSgpOworICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNlKCk7CisKKyAgICBSZWZQdHI8R2VvcG9z
aXRpb24+IG1fY2FjaGVkUG9zaXRpb247CisgICAgU3RyaW5nIG1fZGF0YWJhc2VGaWxlOworICAg
IGJvb2wgbV9oYXZlUmVhZEZyb21EYXRhYmFzZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>