<?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>27944</bug_id>
          
          <creation_ts>2009-08-03 10:08:02 -0700</creation_ts>
          <short_desc>Geolocation error callback not called if permissions have already been denied</short_desc>
          <delta_ts>2009-10-27 18:07:38 -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>
          <dependson>28264</dependson>
    
    <dependson>29027</dependson>
    
    <dependson>29040</dependson>
    
    <dependson>29178</dependson>
    
    <dependson>29179</dependson>
          <blocked>28276</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>bolsinga</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136679</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-03 10:08:02 -0700</bug_when>
    <thetext>If geolocation.getCurrentPosition() or geolocation.watchPosition() is called after Geolocation permissions have previously been denied, and the implementation obtains a position fix, the error callback is not called to indicate that permissions have been denied. Instead, no callback is made.

In Geolocation::geolocationServicePositionChanged(), if Geolocation permissions have previously been denied, isAllowed() returns false and the method returns without any callbacks being called. The error callback should instead be called with code PERMISSION_DENIED to indicate that permissions have been denied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140005</commentid>
    <comment_count>1</comment_count>
      <attachid>34779</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-13 13:38:41 -0700</bug_when>
    <thetext>Created attachment 34779
Patch 1 for bug 27944

When a Geolocation method is called, immediately calls the error callback asynchronously if permissions have already been denied.

Note that the naming of the new &apos;setFatalError&apos; and &apos;fatalErrorOccurred&apos; methods is intentionally generic. This is because this framework will be used for other fatal error conditions. Currently, if the Geolocation service fails to start, the error callback is invoked synchronously. This is incorrect. See Bug 28276. This framework will be used to fix this behavior also.

LayoutTests for this behavior will be added once the mock Geolocation service framework is in place. See Bug 28264.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141885</commentid>
    <comment_count>2</comment_count>
      <attachid>38375</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-21 09:21:06 -0700</bug_when>
    <thetext>Created attachment 38375
Patch 2 for bug 27944

&gt; We don&apos;t have a find method for this type?
I&apos;m not aware of one that searches the value, rather than the key, of the map.

&gt; Style:
Fixed

&gt; No need to store it locally first:
Fixed

&gt; Aren&apos;t the two if (isDenied()) blocks your editing identical?  Cant&apos; we share
&gt; code there?
Fixed

&gt; Arguments are only named when the name adds clarity:
Fixed

&gt; Who would know about this code?  I certainly don&apos;t.
It was written by Greg Bolsinga, but he&apos;s not a WebKit reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141967</commentid>
    <comment_count>3</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-08-21 14:06:14 -0700</bug_when>
    <thetext>CC&apos;ing Sam. He was the original Geolocation reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144026</commentid>
    <comment_count>4</comment_count>
      <attachid>38375</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 16:03:04 -0700</bug_when>
    <thetext>Comment on attachment 38375
Patch 2 for bug 27944

I&apos;m sorry, but we need test coverage before we can move forward with these patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146338</commentid>
    <comment_count>5</comment_count>
      <attachid>39382</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-09-10 14:26:46 -0700</bug_when>
    <thetext>Created attachment 39382
Patch 3 for bug 27944

Updated patch to include LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146343</commentid>
    <comment_count>6</comment_count>
      <attachid>39382</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-10 14:35:31 -0700</bug_when>
    <thetext>Comment on attachment 39382
Patch 3 for bug 27944

&gt; +static const char* permissionDeniedErrorMessage = &quot;User denied Geolocation&quot;;

This creates a non-constant pointer to a constant string. You probably want either &quot;static const char* const&quot; or &quot;static const char[]&quot;. Or an inline function that returns a constant string instead.

&gt;      , m_timer(this, &amp;Geolocation::GeoNotifier::timerFired)
&gt; +    , m_fatalError(0)

Not needed. A RefPtr will start as 0 even if you don&apos;t list it.

&gt; +    m_fatalError = error;
&gt; +    m_timer.startOneShot(0);

Can this be called when m_fatalError is already non-null? If not, should we assert that it&apos;s null?

Can this be called when the timer has already started? Would it do any harm to call startOneShot again in that case?

&gt; +    if (notifier == 0)

WebKit coding style writes this as:

    if (!notifier)

&gt; +    static int sIdentifier = 0;

I know you&apos;re just moving code, but the variable name here is strange. Since this is an extremely-local variable with tiny scope, I think it&apos;s best not to use a prefix on the name at all. But if you do want to use a prefix, it should not be lowercase s followed by a capital letter. Note also that this is non-thread-safe, which may be fine, depending on whether workers are allowed to use geolocation or not.

&gt; +    for (GeoNotifierMap::iterator iter = m_watchers.begin(); iter != m_watchers.end(); ++iter) {
&gt; +        if (iter-&gt;second == notifier) {
&gt; +            m_watchers.remove(iter);
&gt; +            break;
&gt; +        }
&gt; +    }

Can a notifier have more than one watcher? It&apos;s unfortunate that we have to iterate the map like this. Normally that&apos;s an anti-pattern -- we&apos;d use a pair of maps to avoid it.

&gt; +        void setFatalError(PassRefPtr&lt;PositionError&gt; error);

We omit argument names like &quot;error&quot; in cases like this where the name simply repeats the type.

&gt; +&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
&gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;

It&apos;s really unfortunate to not just use the standard template for tests like this. Do you really need these elements in markup? You could just use a couple of lines of JavaScript to create them instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146364</commentid>
    <comment_count>7</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-09-10 15:19:14 -0700</bug_when>
    <thetext>&gt; This creates a non-constant pointer to a constant string.
Will fix.

&gt; Not needed. A RefPtr will start as 0 even if you don&apos;t list it.
Will fix.

&gt; Can this be called when m_fatalError is already non-null? If not, should we
&gt; assert that it&apos;s null?
Will add an assertion.

&gt; Can this be called when the timer has already started? Would it do any harm to
&gt; call startOneShot again in that case?
No, this method will be called at most once on a given GeoNotifier object. Will add a comment.

&gt; WebKit coding style writes this as:
&gt; 
&gt;     if (!notifier)
Will fix.

&gt; I know you&apos;re just moving code, but the variable name here is strange.
Will rename to identifier.

&gt; Can a notifier have more than one watcher?
GeoNotifier represents a single request, which may be either a one-shot or a watcher. This structure maps from watch ID (type int) to watcher (type GeoNotifier). There&apos;s a one-to-one mapping between watch ID and watcher.

&gt; It&apos;s unfortunate that we have to
&gt; iterate the map like this. Normally that&apos;s an anti-pattern -- we&apos;d use a pair
&gt; of maps to avoid it.
An alternative to having to maintain a pair of maps would be to pass the watch ID to the GeoNotifier constructor. The GeoNotifier would then pass this watch ID, rather than its &apos;this&apos; pointer, to this method. For one-shots, which don&apos;t have a watch ID, we could use either a single special value, or assign each a unique ID for internal use only. What do you think? This might be best done in a separate patch.

&gt; We omit argument names like &quot;error&quot; in cases like this where the name simply
&gt; repeats the type.
Will fix.

&gt; &gt; +&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
&gt; &gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt; 
&gt; It&apos;s really unfortunate to not just use the standard template for tests like
&gt; this. Do you really need these elements in markup? You could just use a couple
&gt; of lines of JavaScript to create them instead.
Can you point me to the standard template? I&apos;ve used the templates from fast/js (eg constructor.html) for the basis of all of the Geolocation tests. These templates include these elements in markup. (Note that since most of the Geolocation tests are asynchronous, I&apos;ve modified the templates to remove js-test-post.js.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146402</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-10 16:59:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; It&apos;s unfortunate that we have to
&gt; &gt; iterate the map like this. Normally that&apos;s an anti-pattern -- we&apos;d use a pair
&gt; &gt; of maps to avoid it.
&gt; An alternative to having to maintain a pair of maps would be to pass the watch
&gt; ID to the GeoNotifier constructor. The GeoNotifier would then pass this watch
&gt; ID, rather than its &apos;this&apos; pointer, to this method. For one-shots, which don&apos;t
&gt; have a watch ID, we could use either a single special value, or assign each a
&gt; unique ID for internal use only. What do you think? This might be best done in
&gt; a separate patch.

That sounds like a reasonable design. I don&apos;t feel that strongly but it&apos;s always a warning sign when someone is iterating a map. It typically means that either:

    1) The map is always small, so maybe it should just be a vector instead.

or

    2) There&apos;s a latent performance problem

&gt; &gt; It&apos;s really unfortunate to not just use the standard template for tests like
&gt; &gt; this. Do you really need these elements in markup? You could just use a couple
&gt; &gt; of lines of JavaScript to create them instead.
&gt; Can you point me to the standard template? I&apos;ve used the templates from fast/js
&gt; (eg constructor.html) for the basis of all of the Geolocation tests. These
&gt; templates include these elements in markup. (Note that since most of the
&gt; Geolocation tests are asynchronous, I&apos;ve modified the templates to remove
&gt; js-test-post.js.)

My mistake. It looks like this is the standard template! That is the file named TEMPLATE.html in each directory. The concept is that you don&apos;t write the HTML at all. The make-script-test-wrappers script does it.

The goal here is to be able to change the template later, though, so the need to remove js-test-post.js is unfortunate. Maybe there&apos;s a way to handle that without customizing the HTML driver for each test. Maybe a function call to indicate the test is async? Or a different TEMPLATE.html file in a particular directory, but still using the automatic generation rather than hand-modifying the HTML file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146523</commentid>
    <comment_count>9</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-09-11 05:00:48 -0700</bug_when>
    <thetext>&gt; That sounds like a reasonable design.
OK, I&apos;ll refactor to use an ID to identify all notifiers. This will also simplify some of the logic. I&apos;ve been wanting to do this for a while. I&apos;ve opened Bug 29178, which block this bug, to address this.

&gt; The goal here is to be able to change the template later, though, so the need
&gt; to remove js-test-post.js is unfortunate. Maybe there&apos;s a way to handle that
&gt; without customizing the HTML driver for each test. Maybe a function call to
&gt; indicate the test is async? Or a different TEMPLATE.html file in a particular
&gt; directory, but still using the automatic generation rather than hand-modifying
&gt; the HTML file.
A JS function call sounds like the best approach. I&apos;ve opened Bug 29179, which block this bug, to address this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158361</commentid>
    <comment_count>10</comment_count>
      <attachid>41986</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-10-27 14:23:41 -0700</bug_when>
    <thetext>Created attachment 41986
Patch 4 for Bug 27944

Updated patch now that blocking issues have been fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158444</commentid>
    <comment_count>11</comment_count>
      <attachid>41986</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-27 18:07:32 -0700</bug_when>
    <thetext>Comment on attachment 41986
Patch 4 for Bug 27944

Clearing flags on attachment: 41986

Committed r50190: &lt;http://trac.webkit.org/changeset/50190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158445</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-27 18:07:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34779</attachid>
            <date>2009-08-13 13:38:41 -0700</date>
            <delta_ts>2009-08-21 09:21:06 -0700</delta_ts>
            <desc>Patch 1 for bug 27944</desc>
            <filename>failFastIfPermissionsDenied.txt</filename>
            <type>text/plain</type>
            <size>12071</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzIyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdoZW4gYSBHZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0
aGUgZXJyb3IgY2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVh
ZHkgYmVlbiBkZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzk0NC4KKworICAgICAgICBObyBuZXcgdGVzdHMgcG9zc2libGUgYXQgdGhpcyB0
aW1lLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNb2Rp
ZmllZC4gTW9kaWZpZWQgc3RhdHVzIG9mIFBvc2l0aW9uRXJyb3IuaCB0byBmaXggbWFjIGJ1aWxk
LgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4g
R2VvTm90aWZpZXIgdGFrZXMgR2VvbG9jYXRpb24gb2JqZWN0IGFzIGNvbnN0cnVjdG9yIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRGYXRh
bEVycm9yKTogQWRkZWQuIFNldHMgYSBmYXRhbCBlcnJvciBmb3IgdGhpcyBub3RpZmllciwgY2F1
c2luZyBpdCB0byB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIGNhbGwgdGhlIGVycm9yIGNhbGxi
YWNrIGFzeW5jaHJvbm91c2x5LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05v
dGlmaWVyOjp0aW1lckZpcmVkKTogQWRkZWQuIFVzZWQgdG8gY2FsbCB0aGUgZXJyb3IgY2FsbGJh
Y2sgYXN5bmNocm9ub3VzbHkgb24gZmF0YWwgZXJyb3IuCisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKTogTW9kaWZpZWQuIFNldHMgYSBmYXRhbCBlcnJv
ciBvbiB0aGUgbm90aWZpZXIgaWYgcGVybWlzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVuaWVk
LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmZhdGFsRXJyb3JPY2N1cnJlZCk6IEFk
ZGVkLiBSZWdpc3RlcnMgdGhhdCBhIG5vdGlmaWVyIGhhcyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVy
cm9yIGFuZCBzaG91bGQgYmUgZGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b246OndhdGNoUG9zaXRpb24pOiBNb2RpZmllZC4gU2V0cyBhIGZhdGFsIGVycm9yIG9uIHRoZSBu
b3RpZmllciBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkZW5pZWQuCisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKTogTW9kaWZpZWQuIFVzZXMgYSBz
dGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciB0aGUgZXJyb3IgY2FsbGJhY2sgd2hlbiBwZXJtaXNz
aW9ucyBhcmUgZGVuaWVkLgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDogTW9kaWZpZWQu
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6aXNEZW5pZWQpOiBBZGRlZC4gRGV0ZXJt
aW5lcyB3aGV0aGVyIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBkZW5pZWQuCisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OmNyZWF0ZSk6IE1vZGlmaWVkLiBHZW9Ob3Rp
ZmllciB0YWtlcyBHZW9sb2NhdGlvbiBvYmplY3QgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC4K
KwogMjAwOS0wOC0xMyAgR2VvcmdlIFN0YWlrb3MgIDxnZW9yZ2Uuc3RhaWtvc0B0b3JjaG1vYmls
ZS5jb20+CiAKICAgICAgICAgUnViYmVyc3RhbXBlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzIyNikK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NTUzLDcgKzQ1NTMsNyBAQAogCQlGRTgwRDdDODBFOUMxRjI1MDAwRDZGNzUgLyog
R2VvcG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU4MEQ3QkEwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmNwcCAqLzsgfTsK
IAkJRkU4MEQ3QzkwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCQjBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvcG9zaXRpb24uaCAqLzsgfTsKIAkJRkU4MEQ3Q0IwRTlDMUYyNTAwMEQ2Rjc1IC8q
IFBvc2l0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFODBEN0JEMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU4MEQ3
Q0QwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JGMEU5QzFGMjUwMDBENkY3NSAvKiBQ
b3NpdGlvbkVycm9yLmggKi87IH07CisJCUZFODBEN0NEMEU5QzFGMjUwMDBENkY3NSAvKiBQb3Np
dGlvbkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTgwRDdCRjBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFODBEN0NGMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0MxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3Np
dGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRTgwRDdEMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdD
MzBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4MERBNjMwRTlDNDcwMzAwMEQ2Rjc1
IC8qIEpTR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU4MERBNUYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3Bw
ICovOyB9OwpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCShyZXZpc2lvbiA0NzIyNikKKysrIFdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwyNiBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIoUGFzc1JlZlB0cjxQb3Np
dGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9u
cykKLSAgICA6IG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKK3N0YXRpYyBjb25z
dCBjaGFyKiBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlID0gIlVzZXIgZGVuaWVkIEdlb2xv
Y2F0aW9uIjsKKworR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihHZW9sb2Nh
dGlvbiogZ2VvbG9jYXRpb24sIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCisgICAgOiBtX2dlb2xvY2F0aW9u
KGdlb2xvY2F0aW9uKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQog
ICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCiAgICAgLCBtX29wdGlvbnMob3B0
aW9ucykKICAgICAsIG1fdGltZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGlt
ZXJGaXJlZCkKKyAgICAsIG1fZmF0YWxFcnJvcigwKQoreworICAgIEFTU0VSVChtX2dlb2xvY2F0
aW9uKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldEZhdGFsRXJyb3Io
UGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvcikKIHsKKyAgICBtX2ZhdGFsRXJyb3IgPSBl
cnJvcjsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlv
bjo6R2VvTm90aWZpZXI6OnN0YXJ0VGltZXIoKQpAQCAtNTEsMTAgKzYxLDE3IEBAIHZvaWQgR2Vv
bG9jYXRpb246Okdlb05vdGlmaWVyOjpzdGFydFRpbWUKIAogdm9pZCBHZW9sb2NhdGlvbjo6R2Vv
Tm90aWZpZXI6OnRpbWVyRmlyZWQoVGltZXI8R2VvTm90aWZpZXI+KikKIHsKLSAgICBBU1NFUlQo
bV9lcnJvckNhbGxiYWNrKTsKLSAgICAKICAgICBtX3RpbWVyLnN0b3AoKTsKIAorICAgIGlmICht
X2ZhdGFsRXJyb3IpIHsKKyAgICAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgeworICAgICAgICAg
ICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX2ZhdGFsRXJyb3IuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGlzIG5vdGlmaWVyIHRvIGJlIGRl
bGV0ZWQuCisgICAgICAgIG1fZ2VvbG9jYXRpb24tPmZhdGFsRXJyb3JPY2N1cnJlZCh0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJv
ciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VULCAiVGltZWQg
b3V0Iik7CiAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7CiB9
CkBAIC04MSwyOSArOTgsNTkgQEAgdm9pZCBHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkK
IAogdm9pZCBHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKFBhc3NSZWZQdHI8UG9zaXRp
b25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMp
CiB7Ci0gICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IEdlb05vdGlmaWVyOjpjcmVh
dGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBSZWZQdHI8
R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gR2VvTm90aWZpZXI6OmNyZWF0ZSh0aGlzLCBzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOwogCi0gICAgaWYgKCFtX3NlcnZpY2Ut
PnN0YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpIHsKLSAgICAgICAgaWYg
KG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlv
bkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJN
SVNTSU9OX0RFTklFRCwgIlVuYWJsZSB0byBTdGFydCIpOwotICAgICAgICAgICAgbm90aWZpZXIt
Pm1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworICAgIC8vIENoZWNr
IHdoZXRoZXIgcGVybWlzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVuaWVkLiBOb3RlIHRoYXQg
aWYgdGhpcyBpcyB0aGUgY2FzZSwKKyAgICAvLyB0aGUgcGVybWlzc2lvbiBzdGF0ZSBjYW4gbm90
IGNoYW5nZSBhZ2FpbiBpbiB0aGUgbGlmZXRpbWUgb2YgdGhpcyBwYWdlLgorICAgIGlmIChpc0Rl
bmllZCgpKSB7CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9u
RXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lv
bkRlbmllZEVycm9yTWVzc2FnZSk7CisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKGVy
cm9yLnJlbGVhc2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3NlcnZpY2UtPnN0
YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlm
IChub3RpZmllci0+bV9lcnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBv
c2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6
OlBFUk1JU1NJT05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7CisgICAgICAgICAgICAgICAg
bm90aWZpZXItPm1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBtX29uZVNob3RzLmFkZChub3RpZmllcik7CisKK30KKwordm9pZCBH
ZW9sb2NhdGlvbjo6ZmF0YWxFcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllciog
bm90aWZpZXIpCit7CisgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBmYWlsZWQgZmF0YWxseS4gUmVt
b3ZlIGl0IGZyb20gb3VyIGxpc3RzLgorICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyKTsK
KyAgICBmb3IgKEdlb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gbV93YXRjaGVycy5iZWdp
bigpOyBpdGVyICE9IG1fd2F0Y2hlcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRl
ci0+c2Vjb25kID09IG5vdGlmaWVyKSB7CisgICAgICAgICAgICBtX3dhdGNoZXJzLnJlbW92ZShp
dGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFo
YXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKIH0KIAog
aW50IEdlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiB7Ci0gICAg
UmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IEdlb05vdGlmaWVyOjpjcmVhdGUoc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBSZWZQdHI8R2VvTm90aWZp
ZXI+IG5vdGlmaWVyID0gR2VvTm90aWZpZXI6OmNyZWF0ZSh0aGlzLCBzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOwogCi0gICAgaWYgKCFtX3NlcnZpY2UtPnN0YXJ0VXBk
YXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpIHsKLSAgICAgICAgaWYgKG5vdGlmaWVy
LT5tX2Vycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBl
cnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RF
TklFRCwgIlVuYWJsZSB0byBTdGFydCIpOwotICAgICAgICAgICAgbm90aWZpZXItPm1fZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworICAgIC8vIENoZWNrIHdoZXRoZXIg
cGVybWlzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVuaWVkLiBOb3RlIHRoYXQgaWYgdGhpcyBp
cyB0aGUgY2FzZSwKKyAgICAvLyB0aGUgcGVybWlzc2lvbiBzdGF0ZSBjYW4gbm90IGNoYW5nZSBh
Z2FpbiBpbiB0aGUgbGlmZXRpbWUgb2YgdGhpcyBwYWdlLgorICAgIGlmIChpc0RlbmllZCgpKSB7
CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSk7CisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKGVycm9yLnJlbGVh
c2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3NlcnZpY2UtPnN0YXJ0VXBkYXRp
bmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmIChub3RpZmll
ci0+bV9lcnJvckNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJy
b3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJ
T05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7CisgICAgICAgICAgICAgICAgbm90aWZpZXIt
Pm1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAogICAgIHN0YXRpYyBpbnQgc0lkZW50aWZpZXIgPSAwOwpAQCAtMTQxLDcgKzE4
OCw3IEBAIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG8KICAgICAgICAg
c3RhcnRUaW1lcnMoKTsKICAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKICAgICB9IGVs
c2UgewotICAgICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpQb3NpdGlvbkVycm9yPiBlcnJvciA9
IFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9O
X0RFTklFRCwgIlVzZXIgZGlzYWxsb3dlZCBHZW9Mb2NhdGlvbiIpOworICAgICAgICBXVEY6OlJl
ZlB0cjxXZWJDb3JlOjpQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0
ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9y
TWVzc2FnZSk7CiAgICAgICAgIGhhbmRsZUVycm9yKGVycm9yLmdldCgpKTsKICAgICB9CiB9Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gNDcyMjYpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR2Vv
bG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25DYWxsYmFjay5oIgorI2luY2x1
ZGUgIlBvc2l0aW9uRXJyb3IuaCIKICNpbmNsdWRlICJQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCIK
ICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNjQs
NiArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7CiAg
ICAgYm9vbCBpc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24gPT0g
WWVzOyB9CisgICAgYm9vbCBpc0RlbmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dHZW9sb2Nh
dGlvbiA9PSBObzsgfQogICAgIAogICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJDYWNoZShib29sIHNo
b3VsZENsZWFyQ2FjaGUpIHsgbV9zaG91bGRDbGVhckNhY2hlID0gc2hvdWxkQ2xlYXJDYWNoZTsg
fQogICAgIGJvb2wgc2hvdWxkQ2xlYXJDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xl
YXJDYWNoZTsgfQpAQCAtNzMsMTggKzc1LDIxIEBAIHByaXZhdGU6CiAKICAgICBjbGFzcyBHZW9O
b3RpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb05vdGlmaWVyPiB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKFBhc3NSZWZQdHI8
UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVy
cm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IG9wdGlvbnMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9Ob3RpZmllcihwb3NpdGlv
bkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpKTsgfQorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbiwgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrLCBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrLCBQYXNz
UmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdl
b05vdGlmaWVyKGdlb2xvY2F0aW9uLCBwb3NpdGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2Fs
bGJhY2ssIG9wdGlvbnMpKTsgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRGYXRhbEVycm9y
KFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IpOwogICAgICAgICB2b2lkIHN0YXJ0VGlt
ZXIoKTsKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiopOwogICAg
ICAgICAKKyAgICAgICAgR2VvbG9jYXRpb24qIG1fZ2VvbG9jYXRpb247CiAgICAgICAgIFJlZlB0
cjxQb3NpdGlvbkNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgUmVmUHRyPFBv
c2l0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwogICAgICAgICBSZWZQdHI8UG9z
aXRpb25PcHRpb25zPiBtX29wdGlvbnM7CiAgICAgICAgIFRpbWVyPEdlb05vdGlmaWVyPiBtX3Rp
bWVyOworICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9mYXRhbEVycm9yOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgR2VvTm90aWZpZXIoUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9u
T3B0aW9ucz4pOworICAgICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24s
IFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKICAgICB9OwogCiAgICAgYm9v
bCBoYXNMaXN0ZW5lcnMoKSBjb25zdCB7IHJldHVybiAhbV9vbmVTaG90cy5pc0VtcHR5KCkgfHwg
IW1fd2F0Y2hlcnMuaXNFbXB0eSgpOyB9CkBAIC0xMTEsNiArMTE2LDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0
aW9uU2VydmljZSopOwogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9j
Y3VycmVkKEdlb2xvY2F0aW9uU2VydmljZSopOwogCisgICAgdm9pZCBmYXRhbEVycm9yT2NjdXJy
ZWQoR2VvTm90aWZpZXIqIG5vdGlmaWVyKTsKKwogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
R2VvTm90aWZpZXI+ID4gR2VvTm90aWZpZXJTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
UmVmUHRyPEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyTWFwOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38375</attachid>
            <date>2009-08-21 09:21:06 -0700</date>
            <delta_ts>2009-09-10 14:26:46 -0700</delta_ts>
            <desc>Patch 2 for bug 27944</desc>
            <filename>failFastIfPermissionsDenied2.txt</filename>
            <type>text/plain</type>
            <size>12193</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzYzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDgtMjEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdoZW4gYSBHZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0
aGUgZXJyb3IgY2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVh
ZHkgYmVlbiBkZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzk0NC4KKworICAgICAgICBObyBuZXcgdGVzdHMgcG9zc2libGUgYXQgdGhpcyB0
aW1lLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNb2Rp
ZmllZC4gTW9kaWZpZWQgc3RhdHVzIG9mIFBvc2l0aW9uRXJyb3IuaCB0byBmaXggbWFjIGJ1aWxk
LgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4g
R2VvTm90aWZpZXIgdGFrZXMgR2VvbG9jYXRpb24gb2JqZWN0IGFzIGNvbnN0cnVjdG9yIGFyZ3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRGYXRh
bEVycm9yKTogQWRkZWQuIFNldHMgYSBmYXRhbCBlcnJvciBmb3IgdGhpcyBub3RpZmllciwgY2F1
c2luZyBpdCB0byB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIGNhbGwgdGhlIGVycm9yIGNhbGxi
YWNrIGFzeW5jaHJvbm91c2x5LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05v
dGlmaWVyOjp0aW1lckZpcmVkKTogQWRkZWQuIFVzZWQgdG8gY2FsbCB0aGUgZXJyb3IgY2FsbGJh
Y2sgYXN5bmNocm9ub3VzbHkgb24gZmF0YWwgZXJyb3IuCisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKTogTW9kaWZpZWQuIFNldHMgYSBmYXRhbCBlcnJv
ciBvbiB0aGUgbm90aWZpZXIgaWYgcGVybWlzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVuaWVk
LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmZhdGFsRXJyb3JPY2N1cnJlZCk6IEFk
ZGVkLiBSZWdpc3RlcnMgdGhhdCBhIG5vdGlmaWVyIGhhcyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVy
cm9yIGFuZCBzaG91bGQgYmUgZGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b246OndhdGNoUG9zaXRpb24pOiBNb2RpZmllZC4gU2V0cyBhIGZhdGFsIGVycm9yIG9uIHRoZSBu
b3RpZmllciBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkZW5pZWQuCisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3RhcnRSZXF1ZXN0KTogQWRkZWQuIENvbW1vbiBmdW5j
dGlvbmFsaXR5IGZvciBzdGFydGluZyBhIG9uZS1zaG90IG9yIHdhdGNoIHJlcXVlc3QuCisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKTogTW9kaWZpZWQuIFVzZXMg
YSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciB0aGUgZXJyb3IgY2FsbGJhY2sgd2hlbiBwZXJt
aXNzaW9ucyBhcmUgZGVuaWVkLgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDogTW9kaWZp
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6aXNEZW5pZWQpOiBBZGRlZC4gRGV0
ZXJtaW5lcyB3aGV0aGVyIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBkZW5pZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OmNyZWF0ZSk6IE1vZGlmaWVkLiBHZW9O
b3RpZmllciB0YWtlcyBHZW9sb2NhdGlvbiBvYmplY3QgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVu
dC4KKwogMjAwOS0wOC0yMSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzYzMCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTcxLDcgKzQ1
NzEsNyBAQAogCQlGRTgwRDdDODBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QkEwRTlD
MUYyNTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmNwcCAqLzsgfTsKIAkJRkU4MEQ3QzkwRTlDMUYy
NTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCQjBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24u
aCAqLzsgfTsKIAkJRkU4MEQ3Q0IwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JE
MEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU4MEQ3Q0QwRTlDMUYyNTAwMEQ2Rjc1
IC8qIFBvc2l0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFODBEN0JGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi87
IH07CisJCUZFODBEN0NEMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCRjBFOUMxRjI1
MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFODBEN0NGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlv
bkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFODBEN0MxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTgw
RDdEMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdDMzBFOUMxRjI1MDAwRDZGNzUg
LyogUG9zaXRpb25PcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU4MERBNjMwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MERB
NUYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3BwICovOyB9OwpJbmRleDogV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb24uY3BwCShyZXZpc2lvbiA0NzYzMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIyICszMSwzMiBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UG9zaXRpb25FcnJvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdlb2xvY2F0aW9uOjpH
ZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIoUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykKLSAgICA6IG1fc3VjY2Vz
c0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKK3N0YXRpYyBjb25zdCBjaGFyKiBwZXJtaXNzaW9u
RGVuaWVkRXJyb3JNZXNzYWdlID0gIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIjsKKworR2VvbG9j
YXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24s
IFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IG9wdGlvbnMpCisgICAgOiBtX2dlb2xvY2F0aW9uKGdlb2xvY2F0aW9uKQorICAg
ICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQogICAgICwgbV9lcnJvckNhbGxi
YWNrKGVycm9yQ2FsbGJhY2spCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICAsIG1fdGlt
ZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCkKKyAgICAsIG1f
ZmF0YWxFcnJvcigwKQogeworICAgIEFTU0VSVChtX2dlb2xvY2F0aW9uKTsKICAgICBBU1NFUlQo
bV9zdWNjZXNzQ2FsbGJhY2spOwogICAgIC8vIElmIG5vIG9wdGlvbnMgd2VyZSBzdXBwbGllZCBm
cm9tIEpTLCB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgZGVmYXVsdCBzZXQKICAgICAvLyBvZiBv
cHRpb25zIGluIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwLgogICAgIEFTU0VSVChtX29wdGlvbnMp
OwogfQogCit2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c2V0RmF0YWxFcnJvcihQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yKQoreworICAgIG1fZmF0YWxFcnJvciA9IGVycm9y
OworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpH
ZW9Ob3RpZmllcjo6c3RhcnRUaW1lcigpCiB7CiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjayAmJiBt
X29wdGlvbnMtPmhhc1RpbWVvdXQoKSkKQEAgLTU1LDEwICs2NSwxNiBAQCB2b2lkIEdlb2xvY2F0
aW9uOjpHZW9Ob3RpZmllcjo6c3RhcnRUaW1lCiAKIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlm
aWVyOjp0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiopCiB7Ci0gICAgQVNTRVJUKG1fZXJy
b3JDYWxsYmFjayk7Ci0gICAgCiAgICAgbV90aW1lci5zdG9wKCk7CiAKKyAgICBpZiAobV9mYXRh
bEVycm9yKSB7CisgICAgICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spCisgICAgICAgICAgICBtX2Vy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZmF0YWxFcnJvci5nZXQoKSk7CisgICAgICAgIC8v
IFRoaXMgd2lsbCBjYXVzZSB0aGlzIG5vdGlmaWVyIHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIG1f
Z2VvbG9jYXRpb24tPmZhdGFsRXJyb3JPY2N1cnJlZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6
OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VULCAiVGltZWQgb3V0Iik7CiAgICAgbV9lcnJv
ckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7CiB9CkBAIC04NSwzOCArMTAxLDU4
IEBAIHZvaWQgR2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSgpCiAKIHZvaWQgR2VvbG9jYXRp
b246OmdldEN1cnJlbnRQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQogewotICAgIFJlZlB0cjxH
ZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBHZW9Ob3RpZmllcjo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7Ci0KLSAgICBpZiAoIW1fc2VydmljZS0+c3RhcnRV
cGRhdGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKSkgewotICAgICAgICBpZiAobm90aWZp
ZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+
IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05f
REVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7Ci0gICAgICAgICAgICBub3RpZmllci0+bV9lcnJv
ckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICBSZWZQ
dHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gc3RhcnRSZXF1ZXN0KHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7CisgICAgaWYgKG5vdGlmaWVyID09IDApCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICBtX29uZVNob3RzLmFkZChub3RpZmllcik7CiB9CiAKIGlu
dCBHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQogewotICAgIFJl
ZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBHZW9Ob3RpZmllcjo6Y3JlYXRlKHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7Ci0KLSAgICBpZiAoIW1fc2VydmljZS0+
c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKSkgewotICAgICAgICBpZiAo
bm90aWZpZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9u
RXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1J
U1NJT05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7Ci0gICAgICAgICAgICBub3RpZmllci0+
bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7Ci0gICAgICAgIH0KKyAg
ICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gc3RhcnRSZXF1ZXN0KHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7CisgICAgaWYgKG5vdGlmaWVyID09IDApCiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBpbnQgc0lkZW50aWZp
ZXIgPSAwOwotICAgIAogICAgIG1fd2F0Y2hlcnMuc2V0KCsrc0lkZW50aWZpZXIsIG5vdGlmaWVy
KTsKLQogICAgIHJldHVybiBzSWRlbnRpZmllcjsKIH0KIAorUGFzc1JlZlB0cjxHZW9sb2NhdGlv
bjo6R2VvTm90aWZpZXI+IEdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QoUGFzc1JlZlB0cjxQb3Np
dGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9u
cykKK3sKKyAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gR2VvTm90aWZpZXI6OmNy
ZWF0ZSh0aGlzLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOworCisg
ICAgLy8gQ2hlY2sgd2hldGhlciBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkZW5pZWQu
IE5vdGUgdGhhdCBpZiB0aGlzIGlzIHRoZSBjYXNlLAorICAgIC8vIHRoZSBwZXJtaXNzaW9uIHN0
YXRlIGNhbiBub3QgY2hhbmdlIGFnYWluIGluIHRoZSBsaWZldGltZSBvZiB0aGlzIHBhZ2UuCisg
ICAgaWYgKGlzRGVuaWVkKCkpCisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0
aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlz
c2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fc2Vy
dmljZS0+c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgbm90
aWZpZXItPm1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoUG9zaXRpb25FcnJvcjo6Y3JlYXRl
KFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0IikuZ2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gbm90aWZpZXI7Cit9IAorCit2b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQo
R2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBUaGlzIHJlcXVl
c3QgaGFzIGZhaWxlZCBmYXRhbGx5LiBSZW1vdmUgaXQgZnJvbSBvdXIgbGlzdHMuCisgICAgbV9v
bmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworICAgIGZvciAoR2VvTm90aWZpZXJNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3dhdGNoZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV93YXRjaGVycy5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gbm90aWZpZXIpIHsKKyAgICAg
ICAgICAgIG1fd2F0Y2hlcnMucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhhc0xpc3RlbmVycygpKQorICAgICAgICBtX3NlcnZp
Y2UtPnN0b3BVcGRhdGluZygpOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGlu
dCB3YXRjaElkKQogewogICAgIG1fd2F0Y2hlcnMucmVtb3ZlKHdhdGNoSWQpOwpAQCAtMTQ1LDcg
KzE4MSw3IEBAIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG8KICAgICAg
ICAgc3RhcnRUaW1lcnMoKTsKICAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKICAgICB9
IGVsc2UgewotICAgICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpQb3NpdGlvbkVycm9yPiBlcnJv
ciA9IFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNT
SU9OX0RFTklFRCwgIlVzZXIgZGlzYWxsb3dlZCBHZW9Mb2NhdGlvbiIpOworICAgICAgICBXVEY6
OlJlZlB0cjxXZWJDb3JlOjpQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSk7CiAgICAgICAgIGhhbmRsZUVycm9yKGVycm9yLmdldCgpKTsKICAgICB9CiB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gNDc2MzApCisrKyBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
R2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25DYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKICNpbmNsdWRlICJQb3NpdGlvbkVycm9yQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAt
NjQsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCk7
CiAgICAgYm9vbCBpc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24g
PT0gWWVzOyB9CisgICAgYm9vbCBpc0RlbmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dHZW9s
b2NhdGlvbiA9PSBObzsgfQogICAgIAogICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJDYWNoZShib29s
IHNob3VsZENsZWFyQ2FjaGUpIHsgbV9zaG91bGRDbGVhckNhY2hlID0gc2hvdWxkQ2xlYXJDYWNo
ZTsgfQogICAgIGJvb2wgc2hvdWxkQ2xlYXJDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
Q2xlYXJDYWNoZTsgfQpAQCAtNzMsMTggKzc1LDIxIEBAIHByaXZhdGU6CiAKICAgICBjbGFzcyBH
ZW9Ob3RpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb05vdGlmaWVyPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlv
bkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IG9wdGlvbnMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9Ob3RpZmllcihwb3Np
dGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpKTsgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKEdlb2xvY2F0aW9uKiBnZW9s
b2NhdGlvbiwgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykgeyByZXR1cm4gYWRvcHRSZWYobmV3
IEdlb05vdGlmaWVyKGdlb2xvY2F0aW9uLCBwb3NpdGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9y
Q2FsbGJhY2ssIG9wdGlvbnMpKTsgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRGYXRhbEVy
cm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IpOwogICAgICAgICB2b2lkIHN0YXJ0
VGltZXIoKTsKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiopOwog
ICAgICAgICAKKyAgICAgICAgR2VvbG9jYXRpb24qIG1fZ2VvbG9jYXRpb247CiAgICAgICAgIFJl
ZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwogICAgICAgICBSZWZQdHI8
UG9zaXRpb25PcHRpb25zPiBtX29wdGlvbnM7CiAgICAgICAgIFRpbWVyPEdlb05vdGlmaWVyPiBt
X3RpbWVyOworICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9mYXRhbEVycm9yOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgR2VvTm90aWZpZXIoUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0
aW9uT3B0aW9ucz4pOworICAgICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiosIFBhc3NSZWZQ
dHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKICAgICB9OwogCiAgICAgYm9vbCBoYXNMaXN0
ZW5lcnMoKSBjb25zdCB7IHJldHVybiAhbV9vbmVTaG90cy5pc0VtcHR5KCkgfHwgIW1fd2F0Y2hl
cnMuaXNFbXB0eSgpOyB9CkBAIC0xMTEsNiArMTE2LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZVBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblNlcnZp
Y2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZChH
ZW9sb2NhdGlvblNlcnZpY2UqKTsKIAorICAgIFBhc3NSZWZQdHI8R2VvTm90aWZpZXI+IHN0YXJ0
UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9u
RXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CisKKyAgICB2b2lk
IGZhdGFsRXJyb3JPY2N1cnJlZChHZW9Ob3RpZmllciopOworCiAgICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKICAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBSZWZQdHI8R2VvTm90aWZpZXI+ID4gR2VvTm90aWZpZXJNYXA7CiAgICAgCg==
</data>
<flag name="review"
          id="19410"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39382</attachid>
            <date>2009-09-10 14:26:46 -0700</date>
            <delta_ts>2009-10-27 14:23:41 -0700</delta_ts>
            <desc>Patch 3 for bug 27944</desc>
            <filename>failFastIfPermissionsDenied3.txt</filename>
            <type>text/plain</type>
            <size>26264</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODI2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDktMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdoZW4gYSBHZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0
aGUgZXJyb3IgY2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVh
ZHkgYmVlbiBkZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzk0NC4KKworICAgICAgICBUZXN0czogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVy
bWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Rv
bS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MuaHRtbAorCisg
ICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcik6IE1vZGlmaWVkLiBHZW9O
b3RpZmllciB0YWtlcyBHZW9sb2NhdGlvbiBvYmplY3QgYXMgY29uc3RydWN0b3IgYXJndW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldEZhdGFsRXJy
b3IpOiBBZGRlZC4gU2V0cyBhIGZhdGFsIGVycm9yIGZvciB0aGlzIG5vdGlmaWVyLCBjYXVzaW5n
IGl0IHRvIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgY2FsbCB0aGUgZXJyb3IgY2FsbGJhY2sg
YXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZp
ZXI6OnRpbWVyRmlyZWQpOiBBZGRlZC4gVXNlZCB0byBjYWxsIHRoZSBlcnJvciBjYWxsYmFjayBh
c3luY2hyb25vdXNseSBvbiBmYXRhbCBlcnJvci4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gU2V0cyBhIGZhdGFsIGVycm9yIG9u
IHRoZSBub3RpZmllciBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkZW5pZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbik6IE1vZGlmaWVkLiBT
ZXRzIGEgZmF0YWwgZXJyb3Igb24gdGhlIG5vdGlmaWVyIGlmIHBlcm1pc3Npb25zIGhhdmUgYWxy
ZWFkeSBiZWVuIGRlbmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFJl
cXVlc3QpOiBBZGRlZC4gQ29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHN0YXJ0aW5nIGEgb25lLXNo
b3Qgb3Igd2F0Y2ggcmVxdWVzdC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpmYXRh
bEVycm9yT2NjdXJyZWQpOiBBZGRlZC4gUmVnaXN0ZXJzIHRoYXQgYSBub3RpZmllciBoYXMgZW5j
b3VudGVyZWQgYSBmYXRhbCBlcnJvciBhbmQgc2hvdWxkIGJlIGRlc3Ryb3llZC4KKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQpOiBNb2RpZmllZC4gVXNlcyBhIHN0
YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBlcnJvciBjYWxsYmFjayB3aGVuIHBlcm1pc3Np
b25zIGFyZSBkZW5pZWQuCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5oOiBNb2RpZmllZC4K
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjppc0RlbmllZCk6IEFkZGVkLiBEZXRlcm1p
bmVzIHdoZXRoZXIgcGVybWlzc2lvbnMgaGF2ZSBiZWVuIGRlbmllZC4KKwogMjAwOS0wOS0xMCAg
R3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4K
IAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXogYW5kIERhbiBXaW5zaGlwLgpJbmRleDog
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb24uY3BwCShyZXZpc2lvbiA0ODI2MSkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwzMiBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUG9zaXRpb25FcnJvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25z
dCBjaGFyKiBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlID0gIlVzZXIgZGVuaWVkIEdlb2xv
Y2F0aW9uIjsKKwogR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihHZW9sb2Nh
dGlvbiogZ2VvbG9jYXRpb24sIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiAgICAgOiBtX2dlb2xvY2F0aW9u
KGdlb2xvY2F0aW9uKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQog
ICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCiAgICAgLCBtX29wdGlvbnMob3B0
aW9ucykKICAgICAsIG1fdGltZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGlt
ZXJGaXJlZCkKKyAgICAsIG1fZmF0YWxFcnJvcigwKQogeworICAgIEFTU0VSVChtX2dlb2xvY2F0
aW9uKTsKICAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOwogICAgIC8vIElmIG5vIG9wdGlv
bnMgd2VyZSBzdXBwbGllZCBmcm9tIEpTLCB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgZGVmYXVs
dCBzZXQKICAgICAvLyBvZiBvcHRpb25zIGluIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwLgogICAg
IEFTU0VSVChtX29wdGlvbnMpOwogfQogCit2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6
c2V0RmF0YWxFcnJvcihQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yKQoreworICAgIG1f
ZmF0YWxFcnJvciA9IGVycm9yOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCiBi
b29sIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6aGFzWmVyb1RpbWVvdXQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX29wdGlvbnMtPmhhc1RpbWVvdXQoKSAmJiBtX29wdGlvbnMtPnRpbWVvdXQo
KSA9PSAwOwpAQCAtNjMsNiArNzIsMTQgQEAgdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6
OnRpbWVyRmlyZQogewogICAgIG1fdGltZXIuc3RvcCgpOwogCisgICAgaWYgKG1fZmF0YWxFcnJv
cikgeworICAgICAgICBpZiAobV9lcnJvckNhbGxiYWNrKQorICAgICAgICAgICAgbV9lcnJvckNh
bGxiYWNrLT5oYW5kbGVFdmVudChtX2ZhdGFsRXJyb3IuZ2V0KCkpOworICAgICAgICAvLyBUaGlz
IHdpbGwgY2F1c2UgdGhpcyBub3RpZmllciB0byBiZSBkZWxldGVkLgorICAgICAgICBtX2dlb2xv
Y2F0aW9uLT5mYXRhbEVycm9yT2NjdXJyZWQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7CiAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVy
cm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VU
LCAiVGltZW91dCBleHBpcmVkIik7CiAgICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZl
bnQoZXJyb3IuZ2V0KCkpOwpAQCAtOTIsNDAgKzEwOSw2MCBAQCB2b2lkIEdlb2xvY2F0aW9uOjpk
aXNjb25uZWN0RnJhbWUoKQogCiB2b2lkIEdlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24o
UGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
UG9zaXRpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9u
T3B0aW9ucz4gb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0g
R2VvTm90aWZpZXI6OmNyZWF0ZSh0aGlzLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpOwotCi0gICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IG1fc2Vy
dmljZS0+c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKSkKLSAgICAgICAg
bm90aWZpZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAo
bm90aWZpZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9u
RXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1J
U1NJT05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7Ci0gICAgICAgICAgICBub3RpZmllci0+
bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7Ci0gICAgICAgIH0KKyAg
ICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gc3RhcnRSZXF1ZXN0KHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7CisgICAgaWYgKG5vdGlmaWVyID09IDApCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBtX29uZVNob3RzLmFkZChub3RpZmllcik7CiB9
CiAKIGludCBHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQogewor
ICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBzdGFydFJlcXVlc3Qoc3VjY2Vzc0Nh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBpZiAobm90aWZpZXIgPT0gMCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzdGF0aWMgaW50IHNJZGVudGlmaWVyID0gMDsKKyAg
ICBtX3dhdGNoZXJzLnNldCgrK3NJZGVudGlmaWVyLCBub3RpZmllcik7CisgICAgcmV0dXJuIHNJ
ZGVudGlmaWVyOworfQorCitQYXNzUmVmUHRyPEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcj4gR2Vv
bG9jYXRpb246OnN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQorewogICAgIFJlZlB0cjxH
ZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBHZW9Ob3RpZmllcjo6Y3JlYXRlKHRoaXMsIHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7CiAKLSAgICBpZiAobm90aWZpZXItPmhh
c1plcm9UaW1lb3V0KCkgfHwgbV9zZXJ2aWNlLT5zdGFydFVwZGF0aW5nKG5vdGlmaWVyLT5tX29w
dGlvbnMuZ2V0KCkpKQotICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7Cisg
ICAgLy8gQ2hlY2sgd2hldGhlciBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBkZW5pZWQu
IE5vdGUgdGhhdCBpZiB0aGlzIGlzIHRoZSBjYXNlLAorICAgIC8vIHRoZSBwZXJtaXNzaW9uIHN0
YXRlIGNhbiBub3QgY2hhbmdlIGFnYWluIGluIHRoZSBsaWZldGltZSBvZiB0aGlzIHBhZ2UuCisg
ICAgaWYgKGlzRGVuaWVkKCkpCisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0
aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlz
c2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOwogICAgIGVsc2UgewotICAgICAgICBpZiAobm90aWZp
ZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+
IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05f
REVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7Ci0gICAgICAgICAgICBub3RpZmllci0+bV9lcnJv
ckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7CisgICAgICAgIGlmIChub3RpZmll
ci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBtX3NlcnZpY2UtPnN0YXJ0VXBkYXRpbmcobm90aWZpZXIt
Pm1fb3B0aW9ucy5nZXQoKSkpCisgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVl
ZGVkKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5tX2Vycm9y
Q2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3Ig
PSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQs
ICJVbmFibGUgdG8gU3RhcnQiKTsKKyAgICAgICAgICAgICAgICBub3RpZmllci0+bV9lcnJvckNh
bGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIGludCBzSWRlbnRpZmllciA9IDA7Ci0gICAgCi0gICAgbV93YXRjaGVycy5z
ZXQoKytzSWRlbnRpZmllciwgbm90aWZpZXIpOwogCi0gICAgcmV0dXJuIHNJZGVudGlmaWVyOwor
ICAgIHJldHVybiBub3RpZmllcjsKK30gCisKK3ZvaWQgR2VvbG9jYXRpb246OmZhdGFsRXJyb3JP
Y2N1cnJlZChHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIG5vdGlmaWVyKQoreworICAgIC8vIFRo
aXMgcmVxdWVzdCBoYXMgZmFpbGVkIGZhdGFsbHkuIFJlbW92ZSBpdCBmcm9tIG91ciBsaXN0cy4K
KyAgICBtX29uZVNob3RzLnJlbW92ZShub3RpZmllcik7CisgICAgZm9yIChHZW9Ob3RpZmllck1h
cDo6aXRlcmF0b3IgaXRlciA9IG1fd2F0Y2hlcnMuYmVnaW4oKTsgaXRlciAhPSBtX3dhdGNoZXJz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBub3RpZmllcikg
eworICAgICAgICAgICAgbV93YXRjaGVycy5yZW1vdmUoaXRlcik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAg
IG1fc2VydmljZS0+c3RvcFVwZGF0aW5nKCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVl
c3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90aWZpZXIpCkBAIC0xNjQsNyArMjAxLDcgQEAgdm9p
ZCBHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsbwogICAgIGlmIChpc0FsbG93ZWQo
KSkKICAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0
aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAiVXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9u
Iik7CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6
OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmll
ZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIGVycm9yLT5zZXRJc0ZhdGFsKHRydWUpOwogICAgICAg
ICBoYW5kbGVFcnJvcihlcnJvci5nZXQoKSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJl
dmlzaW9uIDQ4MjYxKQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgog
I2luY2x1ZGUgIlBvc2l0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgi
CiAjaW5jbHVkZSAiUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25P
cHRpb25zLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wpOwogICAgIGJvb2wgaXNBbGxvd2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9uID09IFllczsgfQorICAgIGJvb2wgaXNE
ZW5pZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24gPT0gTm87IH0KICAgICAK
ICAgICB2b2lkIHNldFNob3VsZENsZWFyQ2FjaGUoYm9vbCBzaG91bGRDbGVhckNhY2hlKSB7IG1f
c2hvdWxkQ2xlYXJDYWNoZSA9IHNob3VsZENsZWFyQ2FjaGU7IH0KICAgICBib29sIHNob3VsZENs
ZWFyQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsZWFyQ2FjaGU7IH0KQEAgLTc1LDYg
Kzc3LDcgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdlb05vdGlmaWVyPiBjcmVhdGUoR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uLCBQYXNzUmVmUHRy
PFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25F
cnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBvcHRpb25zKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvTm90aWZpZXIoZ2VvbG9j
YXRpb24sIHBvc2l0aW9uQ2FsbGJhY2ssIHBvc2l0aW9uRXJyb3JDYWxsYmFjaywgb3B0aW9ucykp
OyB9CiAgICAgICAgIAorICAgICAgICB2b2lkIHNldEZhdGFsRXJyb3IoUGFzc1JlZlB0cjxQb3Np
dGlvbkVycm9yPiBlcnJvcik7CiAgICAgICAgIGJvb2wgaGFzWmVyb1RpbWVvdXQoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBzdGFydFRpbWVySWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCB0aW1lckZp
cmVkKFRpbWVyPEdlb05vdGlmaWVyPiopOwpAQCAtODQsNiArODcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CiAgICAg
ICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG1fb3B0aW9uczsKICAgICAgICAgVGltZXI8R2Vv
Tm90aWZpZXI+IG1fdGltZXI7CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2ZhdGFs
RXJyb3I7CiAKICAgICBwcml2YXRlOgogICAgICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbios
IFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKQEAgLTEwOCw2ICsxMTIsOSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNo
YW5nZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9u
U2VydmljZUVycm9yT2NjdXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CiAKKyAgICBQYXNzUmVm
UHRyPEdlb05vdGlmaWVyPiBzdGFydFJlcXVlc3QoUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9u
T3B0aW9ucz4pOworCisgICAgdm9pZCBmYXRhbEVycm9yT2NjdXJyZWQoR2VvTm90aWZpZXIqKTsK
ICAgICB2b2lkIHJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciopOwogCiAgICAgdHlwZWRlZiBI
YXNoU2V0PFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKSW5kZXg6IFdlYktp
dFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ4MjYxKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMDktMDktMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdoZW4gYSBHZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0
aGUgZXJyb3IgY2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVh
ZHkgYmVlbiBkZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzk0NC4KKworICAgICAgICAqIFNjcmlwdHMvbWFrZS1zY3JpcHQtdGVzdC13cmFw
cGVyczogTW9kaWZpZWQuIEFkZHMgYWxsIGFzeW5jaHJvbm91cyBHZW9sb2NhdGlvbiB0ZXN0cyB0
byBleGNsdXNpb24gbGlzdC4KKwogMjAwOS0wOS0xMCAgTWFydGluIFJvYmluc29uICA8bWFydGlu
LmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXSBFdmVudFNlbmRlciBk
b2VzIG5vdCBwcm9wZXJseSBjb252ZXJ0IHNvbWUga2V5RG93biBzdHJpbmdzCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL21ha2Utc2NyaXB0LXRlc3Qtd3JhcHBlcnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy9tYWtlLXNjcmlwdC10ZXN0LXdyYXBwZXJzCShyZXZpc2lvbiA0
ODI2MSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbWFrZS1zY3JpcHQtdGVzdC13cmFwcGVycwko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw3IEBAIGZvciBteSAkdGZpbGUgKEB0ZW1wbGF0
ZXMpIHsKICAgICAgICAgbmV4dCBpZiAkZmlsZSA9fiBtOnJlc291cmNlcy9hdHRyLWNhc2Utc2Vu
c2l0aXZpdHlcLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMvYm94
LW9yaWVudC1idXR0b25cLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJj
ZXMvYm94LXNoYWRvdy1vdmVyZmxvdy1zY3JvbGxcLmpzJDo7CisgICAgICAgIG5leHQgaWYgJGZp
bGUgPX4gbTpyZXNvdXJjZXMvY2FsbGJhY2stZXhjZXB0aW9uXC5qcyQ6OwogICAgICAgICBuZXh0
IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL2NhbnZhcy0yZC1pbWFnZURhdGEtY3JlYXRlLW5vbmZp
bml0ZVwuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmlsZSA9fiBtOnJlc291cmNlcy9jb2RlZ2Vu
LXRlbXBvcmFyaWVzLW11bHRpcGxlLWdsb2JhbC1ibG9ja3MtMVwuanMkOjsKICAgICAgICAgbmV4
dCBpZiAkZmlsZSA9fiBtOnJlc291cmNlcy9jb2RlZ2VuLXRlbXBvcmFyaWVzLW11bHRpcGxlLWds
b2JhbC1ibG9ja3MtMlwuanMkOjsKQEAgLTEyMSw4ICsxMjIsMTIgQEAgZm9yIG15ICR0ZmlsZSAo
QHRlbXBsYXRlcykgewogICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL3AtaW4t
c2NvcGVcLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMvcGFzdGUt
YmxvY2txdW90ZS1iZWZvcmUtYmxvY2txdW90ZVwuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmls
ZSA9fiBtOnJlc291cmNlcy9wZXJtaXNzaW9uLWRlbmllZFwuanMkOjsKKyAgICAgICAgbmV4dCBp
ZiAkZmlsZSA9fiBtOnJlc291cmNlcy9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVycm9yXC5q
cyQ6OworICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL3Blcm1pc3Npb24tZGVu
aWVkLWFscmVhZHktc3VjY2Vzc1wuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmlsZSA9fiBtOnJl
c291cmNlcy9wZXJtaXNzaW9uLWRlbmllZC1zdG9wcy13YXRjaGVzXC5qcyQ6OwogICAgICAgICBu
ZXh0IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL3Bvc2l0aW9uLXN0cmluZ1wuanMkOjsKKyAgICAg
ICAgbmV4dCBpZiAkZmlsZSA9fiBtOnJlc291cmNlcy9yZWVudHJhbnQtZXJyb3JcLmpzJDo7Cisg
ICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMvcmVlbnRyYW50LXN1Y2Nlc3NcLmpz
JDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMvcmVmbGVjdGlvbi1vdmVy
Zmxvdy1zY3JvbGxcLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMv
c2NyaXB0LWVsZW1lbnQtZ2NcLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNv
dXJjZXMvc2NyaXB0LWVsZW1lbnQtZ2NcLmpzJDo7CkBAIC0xMzQsNiArMTM5LDggQEAgZm9yIG15
ICR0ZmlsZSAoQHRlbXBsYXRlcykgewogICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06cmVzb3Vy
Y2VzL3NoYWRvdy1vZmZzZXRcLmpzJDo7CiAgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNv
dXJjZXMvc3VjY2Vzc1wuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmlsZSA9fiBtOnJlc291cmNl
cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbFwuanMkOjsKKyAgICAgICAgbmV4dCBpZiAkZmlsZSA9
fiBtOnJlc291cmNlcy90aW1lb3V0XC5qcyQ6OworICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06
cmVzb3VyY2VzL3RpbWVvdXQtemVyb1wuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmlsZSA9fiBt
OnJlc291cmNlcy91c2UtaW5zdGFuY2VSb290LWV2ZW50LWJ1YmJsaW5nXC5qcyQ6OwogICAgICAg
ICBuZXh0IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL3VzZS1pbnN0YW5jZVJvb3QtZXZlbnQtbGlz
dGVuZXJzXC5qcyQ6OwogICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06cmVzb3VyY2VzL3dhdGNo
XC5qcyQ6OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDgyNjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwOS0wOS0xMCAgU3RldmUgQmxv
Y2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2hlbiBhIEdlb2xvY2F0aW9uIG1ldGhvZCBpcyBjYWxsZWQs
IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSBlcnJvciBjYWxiYWNrIGFzeW5jaHJvbm91c2x5IGlmIHBl
cm1pc3Npb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRlbmllZC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTQ0LgorCisgICAgICAgICogZmFzdC9kb20v
R2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuanM6
IEFkZGVkLiBUZXN0cyB0aGF0IHdoZW4gcGVybWlzc2lvbiBoYXMgYWxyZWFkeSBiZWVuIGRlbmll
ZCwgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aCBjb2RlIFBFUk1JU1NJT05fREVO
SUVELCB3aGVuIHRoZSBHZW9sb2NhdGlvbiBzZXJ2aWNlIHJlcG9ydHMgYW4gZXJyb3IuCisgICAg
ICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJv
ci5odG1sOiBBZGRlZC4gV3JhcHBlciBmb3IgYWJvdmUgdGVzdC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLWV4cGVjdGVkLnR4
dDogQWRkZWQuIEV4cGVjdGVkIHJlc3VsdCBmb3IgYWJvdmUgdGVzdC4KKyAgICAgICAgKiBmYXN0
L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNj
ZXNzLmpzOiBBZGRlZC4gVGVzdHMgdGhhdCB3aGVuIHBlcm1pc3Npb24gaGFzIGFscmVhZHkgYmVl
biBkZW5pZWQsIHRoZSBlcnJvciBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGggY29kZSBQRVJNSVNT
SU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9jYXRpb24gc2VydmljZSBoYXMgYSBnb29kIHBvc2l0
aW9uIGZpeC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmll
ZC1hbHJlYWR5LXN1Y2Nlc3MuaHRtbDogQWRkZWQuIFdyYXBwZXIgZm9yIGFib3ZlIHRlc3QuCisg
ICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1z
dWNjZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuIEV4cGVjdGVkIHJlc3VsdCBmb3IgYWJvdmUgdGVz
dC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1k
ZW5pZWQuanM6IE1vZGlmaWVkLiBVcGRhdGVzIGVycm9yIHN0cmluZy4KKyAgICAgICAgKiBmYXN0
L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQ6IE1vZGlmaWVk
LiBFeHBlY3RlZCByZXN1bHQgZm9yIGFib3ZlIHRlc3QuCisgICAgICAgICogZmFzdC9kb20vR2Vv
bG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLXN0b3BzLXdhdGNoZXMuanM6IE1v
ZGlmaWVkLiBVcGRhdGVzIGVycm9yIHN0cmluZy4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2Nh
dGlvbi9wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC1zdG9wcy13YXRjaGVzLnR4dDogTW9kaWZp
ZWQuIEV4cGVjdGVkIHJlc3VsdCBmb3IgYWJvdmUgdGVzdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvU2tpcHBlZDogTW9kaWZpZWQuIEFkZHMgYWJvdmUgdGVzdHMgdG8gc2tpcHBlZCBsaXN0Lgor
CiAyMDA5LTA5LTEwICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3ItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVu
aWVkLWFscmVhZHktZXJyb3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgd2hl
biBHZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGhhcyBiZWVuIGRlbmllZCBwcmlvciB0byBhIGNhbGwg
dG8gYSBHZW9sb2NhdGlvbiBtZXRob2QsIHRoZSBlcnJvciBjYWxsYmFjayBpcyBpbnZva2VkIHdp
dGggY29kZSBQRVJNSVNTSU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9jYXRpb24gc2VydmljZSBl
bmNvdW50ZXJzIGFuIGVycm9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBlcnJvci5jb2RlIGlzIGVycm9yLlBFUk1JU1NJT05fREVOSUVECitQQVNTIGVycm9yLm1lc3Nh
Z2UgaXMgIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIgorUEFTUyBlcnJvci5VTktOT1dOX0VSUk9S
IGlzIDAKK1BBU1MgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQgaXMgMQorUEFTUyBlcnJvci5QT1NJ
VElPTl9VTkFWQUlMQUJMRSBpcyAyCitQQVNTIGVycm9yLlRJTUVPVVQgaXMgMworCitQQVNTIGVy
cm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BBU1MgZXJyb3IubWVzc2FnZSBp
cyAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iCitQQVNTIGVycm9yLlVOS05PV05fRVJST1IgaXMg
MAorUEFTUyBlcnJvci5QRVJNSVNTSU9OX0RFTklFRCBpcyAxCitQQVNTIGVycm9yLlBPU0lUSU9O
X1VOQVZBSUxBQkxFIGlzIDIKK1BBU1MgZXJyb3IuVElNRU9VVCBpcyAzCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1k
ZW5pZWQtYWxyZWFkeS1lcnJvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24t
ZGVuaWVkLWFscmVhZHktZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9w
ZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24t
ZGVuaWVkLWFscmVhZHktc3VjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNj
ZXNzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgd2hlbiBHZW9sb2NhdGlv
biBwZXJtaXNzaW9uIGhhcyBiZWVuIGRlbmllZCBwcmlvciB0byBhIGNhbGwgdG8gYSBHZW9sb2Nh
dGlvbiBtZXRob2QsIHRoZSBlcnJvciBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGggY29kZSBQRVJN
SVNTSU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9jYXRpb24gc2VydmljZSBoYXMgYSBnb29kIHBv
c2l0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBlcnJvci5jb2Rl
IGlzIGVycm9yLlBFUk1JU1NJT05fREVOSUVECitQQVNTIGVycm9yLm1lc3NhZ2UgaXMgIlVzZXIg
ZGVuaWVkIEdlb2xvY2F0aW9uIgorUEFTUyBlcnJvci5VTktOT1dOX0VSUk9SIGlzIDAKK1BBU1Mg
ZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQgaXMgMQorUEFTUyBlcnJvci5QT1NJVElPTl9VTkFWQUlM
QUJMRSBpcyAyCitQQVNTIGVycm9yLlRJTUVPVVQgaXMgMworCitQQVNTIGVycm9yLmNvZGUgaXMg
ZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiVXNlciBkZW5p
ZWQgR2VvbG9jYXRpb24iCitQQVNTIGVycm9yLlVOS05PV05fRVJST1IgaXMgMAorUEFTUyBlcnJv
ci5QRVJNSVNTSU9OX0RFTklFRCBpcyAxCitQQVNTIGVycm9yLlBPU0lUSU9OX1VOQVZBSUxBQkxF
IGlzIDIKK1BBU1MgZXJyb3IuVElNRU9VVCBpcyAzCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFk
eS1zdWNjZXNzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNjZXNzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1h
bHJlYWR5LXN1Y2Nlc3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wZXJtaXNz
aW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5p
ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDgyNjEpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQQVNTIGVycm9yLmNvZGUgaXMgZXJyb3IuUEVS
TUlTU0lPTl9ERU5JRUQKLVBBU1MgZXJyb3IubWVzc2FnZSBpcyAiVXNlciBkaXNhbGxvd2VkIEdl
b2xvY2F0aW9uIgorUEFTUyBlcnJvci5tZXNzYWdlIGlzICJVc2VyIGRlbmllZCBHZW9sb2NhdGlv
biIKIFBBU1MgZXJyb3IuVU5LTk9XTl9FUlJPUiBpcyAwCiBQQVNTIGVycm9yLlBFUk1JU1NJT05f
REVOSUVEIGlzIDEKIFBBU1MgZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUgaXMgMgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMt
d2F0Y2hlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
R2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDQ4MjYxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVy
bWlzc2lvbi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQsNyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEK
IAogCiBQQVNTIGVycm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKLVBBU1MgZXJy
b3IubWVzc2FnZSBpcyAiVXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9uIgorUEFTUyBlcnJvci5t
ZXNzYWdlIGlzICJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiIKIFBBU1MgZXJyb3IuVU5LTk9XTl9F
UlJPUiBpcyAwCiBQQVNTIGVycm9yLlBFUk1JU1NJT05fREVOSUVEIGlzIDEKIFBBU1MgZXJyb3Iu
UE9TSVRJT05fVU5BVkFJTEFCTEUgaXMgMgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Bl
cm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtYWxy
ZWFkeS1lcnJvci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorZGVzY3JpcHRpb24o
IlRlc3RzIHRoYXQgd2hlbiBHZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGhhcyBiZWVuIGRlbmllZCBw
cmlvciB0byBhIGNhbGwgdG8gYSBHZW9sb2NhdGlvbiBtZXRob2QsIHRoZSBlcnJvciBjYWxsYmFj
ayBpcyBpbnZva2VkIHdpdGggY29kZSBQRVJNSVNTSU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9j
YXRpb24gc2VydmljZSBlbmNvdW50ZXJzIGFuIGVycm9yLiIpOworCisvLyBQcmltZSB0aGUgR2Vv
bG9jYXRpb24gaW5zdGFuY2UgYnkgZGVueWluZyBwZXJtaXNzaW9uLgord2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7Cit3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oNTEuNDc4LCAtMC4x
NjYsIDEwMCk7CisKK3ZhciBlcnJvcjsKK25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZnVuY3Rpb24ocCkgeworICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sg
aW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfSwgZnVuY3Rpb24oZSkgeworICAgIGVycm9yID0gZQorICAgIHNob3Vs
ZEJlKCdlcnJvci5jb2RlJywgJ2Vycm9yLlBFUk1JU1NJT05fREVOSUVEJyk7CisgICAgc2hvdWxk
QmUoJ2Vycm9yLm1lc3NhZ2UnLCAnIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIicpOworICAgIHNo
b3VsZEJlKCdlcnJvci5VTktOT1dOX0VSUk9SJywgJzAnKTsKKyAgICBzaG91bGRCZSgnZXJyb3Iu
UEVSTUlTU0lPTl9ERU5JRUQnLCAnMScpOworICAgIHNob3VsZEJlKCdlcnJvci5QT1NJVElPTl9V
TkFWQUlMQUJMRScsICcyJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlRJTUVPVVQnLCAnMycpOwor
ICAgIGRlYnVnKCcnKTsKKyAgICBjb250aW51ZVRlc3QoKTsKK30pOworCitmdW5jdGlvbiBjb250
aW51ZVRlc3QoKQoreworICAgIC8vIE1ha2UgYW5vdGhlciByZXF1ZXN0LCB3aXRoIHBlcm1pc3Np
b24gYWxyZWFkeSBkZW5pZWQuCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1v
Y2tHZW9sb2NhdGlvbkVycm9yKDAsICd0ZXN0Jyk7CisKKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgn
U3VjY2VzcyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgZXJyb3IgPSBlCisgICAgICAgIHNob3VsZEJlKCdlcnJvci5jb2RlJywgJ2Vycm9y
LlBFUk1JU1NJT05fREVOSUVEJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5tZXNzYWdlJywg
JyJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiInKTsKKyAgICAgICAgc2hvdWxkQmUoJ2Vycm9yLlVO
S05PV05fRVJST1InLCAnMCcpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuUEVSTUlTU0lPTl9E
RU5JRUQnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFC
TEUnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuVElNRU9VVCcsICczJyk7CisgICAg
ICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4n
KTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9KTsKK30KK3dpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lv
bi1kZW5pZWQtYWxyZWFkeS1zdWNjZXNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1
Y2Nlc3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNjZXNzLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQxIEBACitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB3aGVuIEdlb2xv
Y2F0aW9uIHBlcm1pc3Npb24gaGFzIGJlZW4gZGVuaWVkIHByaW9yIHRvIGEgY2FsbCB0byBhIEdl
b2xvY2F0aW9uIG1ldGhvZCwgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aCBjb2Rl
IFBFUk1JU1NJT05fREVOSUVELCB3aGVuIHRoZSBHZW9sb2NhdGlvbiBzZXJ2aWNlIGhhcyBhIGdv
b2QgcG9zaXRpb24uIik7CisKKy8vIFByaW1lIHRoZSBHZW9sb2NhdGlvbiBpbnN0YW5jZSBieSBk
ZW55aW5nIHBlcm1pc3Npb24uCit3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKGZhbHNlKTsKK3dpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKwordmFyIGVycm9y
OworbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbihwKSB7
CisgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScp
OworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9LCBmdW5j
dGlvbihlKSB7CisgICAgZXJyb3IgPSBlCisgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnZXJy
b3IuUEVSTUlTU0lPTl9ERU5JRUQnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IubWVzc2FnZScsICci
VXNlciBkZW5pZWQgR2VvbG9jYXRpb24iJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlVOS05PV05f
RVJST1InLCAnMCcpOworICAgIHNob3VsZEJlKCdlcnJvci5QRVJNSVNTSU9OX0RFTklFRCcsICcx
Jyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlBPU0lUSU9OX1VOQVZBSUxBQkxFJywgJzInKTsKKyAg
ICBzaG91bGRCZSgnZXJyb3IuVElNRU9VVCcsICczJyk7CisgICAgZGVidWcoJycpOworICAgIGNv
bnRpbnVlVGVzdCgpOworfSk7CisKK2Z1bmN0aW9uIGNvbnRpbnVlVGVzdCgpCit7CisgICAgLy8g
TWFrZSBhbm90aGVyIHJlcXVlc3QsIHdpdGggcGVybWlzc2lvbiBhbHJlYWR5IGRlbmllZC4KKyAg
ICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRs
eScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlCisgICAgICAgIHNob3VsZEJl
KCdlcnJvci5jb2RlJywgJ2Vycm9yLlBFUk1JU1NJT05fREVOSUVEJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdlcnJvci5tZXNzYWdlJywgJyJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiInKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ2Vycm9yLlVOS05PV05fRVJST1InLCAnMCcpOworICAgICAgICBzaG91bGRC
ZSgnZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnZXJy
b3IuUE9TSVRJT05fVU5BVkFJTEFCTEUnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnZXJyb3Iu
VElNRU9VVCcsICczJyk7CisgICAgICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+
VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30KK3dpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lv
bi1kZW5pZWQtc3RvcHMtd2F0Y2hlcy5qcwkocmV2aXNpb24gNDgyNjEpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMt
d2F0Y2hlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24ud2F0Y2hQb3NpdGlvbihmdW5jCiAKICAgICBlcnJvciA9IGUKICAgICBzaG91bGRC
ZSgnZXJyb3IuY29kZScsICdlcnJvci5QRVJNSVNTSU9OX0RFTklFRCcpOwotICAgIHNob3VsZEJl
KCdlcnJvci5tZXNzYWdlJywgJyJVc2VyIGRpc2FsbG93ZWQgR2VvbG9jYXRpb24iJyk7CisgICAg
c2hvdWxkQmUoJ2Vycm9yLm1lc3NhZ2UnLCAnIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIicpOwog
ICAgIHNob3VsZEJlKCdlcnJvci5VTktOT1dOX0VSUk9SJywgJzAnKTsKICAgICBzaG91bGRCZSgn
ZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQnLCAnMScpOwogICAgIHNob3VsZEJlKCdlcnJvci5QT1NJ
VElPTl9VTkFWQUlMQUJMRScsICcyJyk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9s
b2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVk
LmpzCShyZXZpc2lvbiA0ODI2MSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9u
L3Jlc291cmNlcy9wZXJtaXNzaW9uLWRlbmllZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAsNyAr
MTAsNyBAQCBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uCiB9LCBmdW5j
dGlvbihlKSB7CiAgICAgZXJyb3IgPSBlCiAgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnZXJy
b3IuUEVSTUlTU0lPTl9ERU5JRUQnKTsKLSAgICBzaG91bGRCZSgnZXJyb3IubWVzc2FnZScsICci
VXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9uIicpOworICAgIHNob3VsZEJlKCdlcnJvci5tZXNz
YWdlJywgJyJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiInKTsKICAgICBzaG91bGRCZSgnZXJyb3Iu
VU5LTk9XTl9FUlJPUicsICcwJyk7CiAgICAgc2hvdWxkQmUoJ2Vycm9yLlBFUk1JU1NJT05fREVO
SUVEJywgJzEnKTsKICAgICBzaG91bGRCZSgnZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUnLCAn
MicpOwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDQ4MjYxKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTE1NjAs
NiArMTU2MCw4IEBAIGZhc3QvZG9tL2ZyYW1lLWxvYWRpbmctdmlhLWRvY3VtZW50LXdyaXQKIGZh
c3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLWV4Y2VwdGlvbi5odG1sCiBmYXN0L2RvbS9HZW9s
b2NhdGlvbi9lcnJvci5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmll
ZC5odG1sCitmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVy
cm9yLmh0bWwKK2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHkt
c3VjY2Vzcy5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1zdG9w
cy13YXRjaGVzLmh0bWwKIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Bvc2l0aW9uLXN0cmluZy5odG1s
CiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZWVudHJhbnQtZXJyb3IuaHRtbAo=
</data>
<flag name="review"
          id="20474"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41986</attachid>
            <date>2009-10-27 14:23:41 -0700</date>
            <delta_ts>2009-10-27 18:07:32 -0700</delta_ts>
            <desc>Patch 4 for Bug 27944</desc>
            <filename>failFastIfPermissionsDenied4.txt</filename>
            <type>text/plain</type>
            <size>23583</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDE2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMTAtMjcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdoZW4gYSBHZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0
aGUgZXJyb3IgY2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucworICAgICAgICBo
YXZlIGFscmVhZHkgYmVlbiBkZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzk0NC4KKworICAgICAgICBUZXN0czogZmFzdC9kb20vR2VvbG9j
YXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3Mu
aHRtbAorCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6IE1vZGlmaWVkLgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcik6IE1vZGlm
aWVkLiBHZW9Ob3RpZmllciB0YWtlcyBHZW9sb2NhdGlvbiBvYmplY3QgYXMgY29uc3RydWN0b3Ig
YXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNl
dEZhdGFsRXJyb3IpOiBBZGRlZC4gU2V0cyBhIGZhdGFsIGVycm9yIGZvciB0aGlzIG5vdGlmaWVy
LCBjYXVzaW5nIGl0IHRvIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgY2FsbCB0aGUgZXJyb3Ig
Y2FsbGJhY2sgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6
R2VvTm90aWZpZXI6OnRpbWVyRmlyZWQpOiBBZGRlZC4gVXNlZCB0byBjYWxsIHRoZSBlcnJvciBj
YWxsYmFjayBhc3luY2hyb25vdXNseSBvbiBmYXRhbCBlcnJvci4KKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gQ2FsbHMgc3RhcnRS
ZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOiBN
b2RpZmllZC4gQ2FsbHMgc3RhcnRSZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b246OnN0YXJ0UmVxdWVzdCk6IEFkZGVkLiBDb21tb24gZnVuY3Rpb25hbGl0eSBmb3Igc3RhcnRp
bmcgYSBvbmUtc2hvdCBvciB3YXRjaCByZXF1ZXN0LiBTZXRzIGEgZmF0YWwgZXJyb3Igb24gdGhl
IG5vdGlmaWVyIGlmIHBlcm1pc3Npb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRlbmllZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQpOiBBZGRlZC4gUmVn
aXN0ZXJzIHRoYXQgYSBub3RpZmllciBoYXMgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvciBhbmQg
c2hvdWxkIGJlIGRlc3Ryb3llZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzZXRJ
c0FsbG93ZWQpOiBNb2RpZmllZC4gVXNlcyBhIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIHRo
ZSBlcnJvciBjYWxsYmFjayB3aGVuIHBlcm1pc3Npb25zIGFyZSBkZW5pZWQuCisgICAgICAgICog
cGFnZS9HZW9sb2NhdGlvbi5oOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjppc0RlbmllZCk6IEFkZGVkLiBEZXRlcm1pbmVzIHdoZXRoZXIgcGVybWlzc2lvbnMgaGF2
ZSBiZWVuIGRlbmllZC4KKwogMjAwOS0xMC0yNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgVGltIEhhdGNoZXIuCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDUwMTU5KQorKysgV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDExIEBACiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGlj
IGNvbnN0IGNoYXIgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZVtdID0gIlVzZXIgZGVuaWVk
IEdlb2xvY2F0aW9uIjsKKwogR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihH
ZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24sIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCiAgICAgOiBtX2dlb2xv
Y2F0aW9uKGdlb2xvY2F0aW9uKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxi
YWNrKQpAQCAtNDIsMTIgKzQzLDIxIEBAIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90
aWZpZXIoR2UKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV90aW1lcih0aGlzLCAm
R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKQogeworICAgIEFTU0VSVChtX2dl
b2xvY2F0aW9uKTsKICAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOwogICAgIC8vIElmIG5v
IG9wdGlvbnMgd2VyZSBzdXBwbGllZCBmcm9tIEpTLCB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEg
ZGVmYXVsdCBzZXQKICAgICAvLyBvZiBvcHRpb25zIGluIEpTR2VvbG9jYXRpb25DdXN0b20uY3Bw
LgogICAgIEFTU0VSVChtX29wdGlvbnMpOwogfQogCit2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6c2V0RmF0YWxFcnJvcihQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yKQorewor
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdCBtb3N0IG9uY2Ugb24gYSBnaXZlbiBHZW9O
b3RpZmllciBvYmplY3QuCisgICAgQVNTRVJUKCFtX2ZhdGFsRXJyb3IpOworICAgIG1fZmF0YWxF
cnJvciA9IGVycm9yOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCiBib29sIEdl
b2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6aGFzWmVyb1RpbWVvdXQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX29wdGlvbnMtPmhhc1RpbWVvdXQoKSAmJiBtX29wdGlvbnMtPnRpbWVvdXQoKSA9PSAw
OwpAQCAtNjMsNiArNzMsMTQgQEAgdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnRpbWVy
RmlyZQogewogICAgIG1fdGltZXIuc3RvcCgpOwogCisgICAgaWYgKG1fZmF0YWxFcnJvcikgewor
ICAgICAgICBpZiAobV9lcnJvckNhbGxiYWNrKQorICAgICAgICAgICAgbV9lcnJvckNhbGxiYWNr
LT5oYW5kbGVFdmVudChtX2ZhdGFsRXJyb3IuZ2V0KCkpOworICAgICAgICAvLyBUaGlzIHdpbGwg
Y2F1c2UgdGhpcyBub3RpZmllciB0byBiZSBkZWxldGVkLgorICAgICAgICBtX2dlb2xvY2F0aW9u
LT5mYXRhbEVycm9yT2NjdXJyZWQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBpZiAobV9lcnJvckNhbGxiYWNrKSB7CiAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBl
cnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VULCAiVGlt
ZW91dCBleHBpcmVkIik7CiAgICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJy
b3IuZ2V0KCkpOwpAQCAtMTMyLDM4ICsxNTAsNTUgQEAgdm9pZCBHZW9sb2NhdGlvbjo6ZGlzY29u
bmVjdEZyYW1lKCkKIAogdm9pZCBHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKFBhc3NS
ZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlv
bnM+IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IEdlb05v
dGlmaWVyOjpjcmVhdGUodGhpcywgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRp
b25zKTsKLQotICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBtX3NlcnZpY2Ut
PnN0YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCi0gICAgICAgIG5vdGlm
aWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG5vdGlm
aWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9y
PiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9O
X0RFTklFRCwgIlVuYWJsZSB0byBTdGFydCIpOwotICAgICAgICAgICAgbm90aWZpZXItPm1fZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOwotICAgICAgICB9CisgICAgUmVm
UHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOworICAgIGlmICghbm90aWZpZXIpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKICAgICBtX29uZVNob3RzLmFkZChub3RpZmllcik7CiB9CiAKIGludCBH
ZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQogeworICAgIFJlZlB0
cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBzdGFydFJlcXVlc3Qoc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBpZiAoIW5vdGlmaWVyKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHN0YXRpYyBpbnQgbmV4dEF2YWlsYWJsZVdhdGNoSWQgPSAxOworICAgIG1f
d2F0Y2hlcnMuc2V0KG5leHRBdmFpbGFibGVXYXRjaElkLCBub3RpZmllci5yZWxlYXNlKCkpOwor
ICAgIHJldHVybiBuZXh0QXZhaWxhYmxlV2F0Y2hJZCsrOworfQorCitQYXNzUmVmUHRyPEdlb2xv
Y2F0aW9uOjpHZW9Ob3RpZmllcj4gR2VvbG9jYXRpb246OnN0YXJ0UmVxdWVzdChQYXNzUmVmUHRy
PFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBv
cHRpb25zKQorewogICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBHZW9Ob3RpZmll
cjo6Y3JlYXRlKHRoaXMsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7
CiAKLSAgICBpZiAobm90aWZpZXItPmhhc1plcm9UaW1lb3V0KCkgfHwgbV9zZXJ2aWNlLT5zdGFy
dFVwZGF0aW5nKG5vdGlmaWVyLT5tX29wdGlvbnMuZ2V0KCkpKQotICAgICAgICBub3RpZmllci0+
c3RhcnRUaW1lcklmTmVlZGVkKCk7CisgICAgLy8gQ2hlY2sgd2hldGhlciBwZXJtaXNzaW9ucyBo
YXZlIGFscmVhZHkgYmVlbiBkZW5pZWQuIE5vdGUgdGhhdCBpZiB0aGlzIGlzIHRoZSBjYXNlLAor
ICAgIC8vIHRoZSBwZXJtaXNzaW9uIHN0YXRlIGNhbiBub3QgY2hhbmdlIGFnYWluIGluIHRoZSBs
aWZldGltZSBvZiB0aGlzIHBhZ2UuCisgICAgaWYgKGlzRGVuaWVkKCkpCisgICAgICAgIG5vdGlm
aWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQ
RVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOwogICAgIGVs
c2UgewotICAgICAgICBpZiAobm90aWZpZXItPm1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICAg
ICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBv
c2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAiVW5hYmxlIHRvIFN0YXJ0Iik7Ci0gICAg
ICAgICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQo
KSk7CisgICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBtX3NlcnZpY2Ut
PnN0YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisgICAgICAgICAgICBu
b3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25F
cnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsICJVbmFibGUgdG8gU3RhcnQiKTsKKyAgICAgICAgICAg
ICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvci5nZXQoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgc3RhdGljIGludCBuZXh0QXZhaWxhYmxlV2F0
Y2hJZCA9IDE7Ci0gICAgbV93YXRjaGVycy5zZXQobmV4dEF2YWlsYWJsZVdhdGNoSWQsIG5vdGlm
aWVyLnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIG5leHRBdmFpbGFibGVXYXRjaElkKys7CisKKyAg
ICByZXR1cm4gbm90aWZpZXIucmVsZWFzZSgpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpmYXRh
bEVycm9yT2NjdXJyZWQoR2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAg
ICAvLyBUaGlzIHJlcXVlc3QgaGFzIGZhaWxlZCBmYXRhbGx5LiBSZW1vdmUgaXQgZnJvbSBvdXIg
bGlzdHMuCisgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworICAgIG1fd2F0Y2hlcnMu
cmVtb3ZlKG5vdGlmaWVyKTsKKworICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAgIG1f
c2VydmljZS0+c3RvcFVwZGF0aW5nKCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RU
aW1lZE91dChHZW9Ob3RpZmllciogbm90aWZpZXIpCkBAIC0yMDIsNyArMjM3LDcgQEAgdm9pZCBH
ZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsbwogICAgIGlmIChpc0FsbG93ZWQoKSkK
ICAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKICAgICBlbHNlIHsKLSAgICAgICAgUmVm
UHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9u
RXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCAiVXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9uIik7
CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSk7CiAgICAgICAgIGVycm9yLT5zZXRJc0ZhdGFsKHRydWUpOwogICAgICAgICBo
YW5kbGVFcnJvcihlcnJvci5nZXQoKSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJldmlz
aW9uIDUwMTU5KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2lu
Y2x1ZGUgIlBvc2l0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCiAj
aW5jbHVkZSAiUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25PcHRp
b25zLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wpOwogICAgIGJvb2wgaXNBbGxvd2VkKCkgY29u
c3QgeyByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9uID09IFllczsgfQorICAgIGJvb2wgaXNEZW5p
ZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2VvbG9jYXRpb24gPT0gTm87IH0KICAgICAKICAg
ICB2b2lkIHNldFNob3VsZENsZWFyQ2FjaGUoYm9vbCBzaG91bGRDbGVhckNhY2hlKSB7IG1fc2hv
dWxkQ2xlYXJDYWNoZSA9IHNob3VsZENsZWFyQ2FjaGU7IH0KICAgICBib29sIHNob3VsZENsZWFy
Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsZWFyQ2FjaGU7IH0KQEAgLTc1LDYgKzc3
LDcgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdl
b05vdGlmaWVyPiBjcmVhdGUoR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uLCBQYXNzUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJv
ckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRp
b25zPiBvcHRpb25zKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvTm90aWZpZXIoZ2VvbG9jYXRp
b24sIHBvc2l0aW9uQ2FsbGJhY2ssIHBvc2l0aW9uRXJyb3JDYWxsYmFjaywgb3B0aW9ucykpOyB9
CiAgICAgICAgIAorICAgICAgICB2b2lkIHNldEZhdGFsRXJyb3IoUGFzc1JlZlB0cjxQb3NpdGlv
bkVycm9yPik7CiAgICAgICAgIGJvb2wgaGFzWmVyb1RpbWVvdXQoKSBjb25zdDsKICAgICAgICAg
dm9pZCBzdGFydFRpbWVySWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVy
PEdlb05vdGlmaWVyPiopOwpAQCAtODQsNiArODcsNyBAQCBwcml2YXRlOgogICAgICAgICBSZWZQ
dHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CiAgICAgICAgIFJlZlB0
cjxQb3NpdGlvbk9wdGlvbnM+IG1fb3B0aW9uczsKICAgICAgICAgVGltZXI8R2VvTm90aWZpZXI+
IG1fdGltZXI7CisgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2ZhdGFsRXJyb3I7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiosIFBhc3NSZWZQ
dHI8UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKQEAgLTEyMyw2ICsxMjcsOSBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2Vv
bG9jYXRpb25TZXJ2aWNlKik7CiAgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVy
cm9yT2NjdXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CiAKKyAgICBQYXNzUmVmUHRyPEdlb05v
dGlmaWVyPiBzdGFydFJlcXVlc3QoUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4p
OworCisgICAgdm9pZCBmYXRhbEVycm9yT2NjdXJyZWQoR2VvTm90aWZpZXIqKTsKICAgICB2b2lk
IHJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciopOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJl
ZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUw
MTYzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMDktMTAtMjcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gYSBH
ZW9sb2NhdGlvbiBtZXRob2QgaXMgY2FsbGVkLCBpbW1lZGlhdGVseSBjYWxscyB0aGUgZXJyb3Ig
Y2FsYmFjayBhc3luY2hyb25vdXNseSBpZiBwZXJtaXNzaW9ucyBoYXZlIGFscmVhZHkgYmVlbiBk
ZW5pZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzk0NC4KKworICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9wZXJtaXNz
aW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLmpzOiBBZGRlZC4gVGVzdHMgdGhhdCB3aGVuIHBlcm1p
c3Npb24gaGFzIGFscmVhZHkgYmVlbiBkZW5pZWQsIHRoZSBlcnJvciBjYWxsYmFjayBpcyBpbnZv
a2VkIHdpdGggY29kZSBQRVJNSVNTSU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9jYXRpb24gc2Vy
dmljZSByZXBvcnRzIGFuIGVycm9yLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Bl
cm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuaHRtbDogQWRkZWQuIFdyYXBwZXIgZm9yIGFi
b3ZlIHRlc3QuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5p
ZWQtYWxyZWFkeS1lcnJvci1leHBlY3RlZC50eHQ6IEFkZGVkLiBFeHBlY3RlZCByZXN1bHQgZm9y
IGFib3ZlIHRlc3QuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Bl
cm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy5qczogQWRkZWQuIFRlc3RzIHRoYXQgd2hl
biBwZXJtaXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gZGVuaWVkLCB0aGUgZXJyb3IgY2FsbGJhY2sg
aXMgaW52b2tlZCB3aXRoIGNvZGUgUEVSTUlTU0lPTl9ERU5JRUQsIHdoZW4gdGhlIEdlb2xvY2F0
aW9uIHNlcnZpY2UgaGFzIGEgZ29vZCBwb3NpdGlvbiBmaXguCisgICAgICAgICogZmFzdC9kb20v
R2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNjZXNzLmh0bWw6IEFkZGVk
LiBXcmFwcGVyIGZvciBhYm92ZSB0ZXN0LgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9u
L3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy1leHBlY3RlZC50eHQ6IEFkZGVkLiBF
eHBlY3RlZCByZXN1bHQgZm9yIGFib3ZlIHRlc3QuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9j
YXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLmpzOiBNb2RpZmllZC4gVXBkYXRlcyBl
cnJvciBzdHJpbmcuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1k
ZW5pZWQtZXhwZWN0ZWQudHh0OiBNb2RpZmllZC4gRXhwZWN0ZWQgcmVzdWx0IGZvciBhYm92ZSB0
ZXN0LgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9wZXJtaXNzaW9u
LWRlbmllZC1zdG9wcy13YXRjaGVzLmpzOiBNb2RpZmllZC4gVXBkYXRlcyBlcnJvciBzdHJpbmcu
CisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtZXhwZWN0
ZWQtc3RvcHMtd2F0Y2hlcy50eHQ6IE1vZGlmaWVkLiBFeHBlY3RlZCByZXN1bHQgZm9yIGFib3Zl
IHRlc3QuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IE1vZGlmaWVkLiBBZGRzIGFi
b3ZlIHRlc3RzIHRvIHNraXBwZWQgbGlzdC4KKwogMjAwOS0xMC0yNyAgS2Vpc2hpIEhhdHRvcmkg
IDxjYXNleS5oYXR0b3JpQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNz
aW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVy
cm9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3ItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACitUZXN0cyB0aGF0IHdoZW4gR2VvbG9jYXRpb24g
cGVybWlzc2lvbiBoYXMgYmVlbiBkZW5pZWQgcHJpb3IgdG8gYSBjYWxsIHRvIGEgR2VvbG9jYXRp
b24gbWV0aG9kLCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIGNvZGUgUEVSTUlT
U0lPTl9ERU5JRUQsIHdoZW4gdGhlIEdlb2xvY2F0aW9uIHNlcnZpY2UgZW5jb3VudGVycyBhbiBl
cnJvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKK1BBU1MgZXJyb3IuY29kZSBpcyBlcnJvci5QRVJNSVNTSU9OX0RFTklF
RAorUEFTUyBlcnJvci5tZXNzYWdlIGlzICJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiIKK1BBU1Mg
ZXJyb3IuVU5LTk9XTl9FUlJPUiBpcyAwCitQQVNTIGVycm9yLlBFUk1JU1NJT05fREVOSUVEIGlz
IDEKK1BBU1MgZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUgaXMgMgorUEFTUyBlcnJvci5USU1F
T1VUIGlzIDMKKworUEFTUyBlcnJvci5jb2RlIGlzIGVycm9yLlBFUk1JU1NJT05fREVOSUVECitQ
QVNTIGVycm9yLm1lc3NhZ2UgaXMgIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIgorUEFTUyBlcnJv
ci5VTktOT1dOX0VSUk9SIGlzIDAKK1BBU1MgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQgaXMgMQor
UEFTUyBlcnJvci5QT1NJVElPTl9VTkFWQUlMQUJMRSBpcyAyCitQQVNTIGVycm9yLlRJTUVPVVQg
aXMgMworCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJl
YWR5LWVycm9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9s
b2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWVycm9yLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVk
LWFscmVhZHktc3VjY2Vzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3Mt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACitUZXN0cyB0aGF0IHdo
ZW4gR2VvbG9jYXRpb24gcGVybWlzc2lvbiBoYXMgYmVlbiBkZW5pZWQgcHJpb3IgdG8gYSBjYWxs
IHRvIGEgR2VvbG9jYXRpb24gbWV0aG9kLCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgaW52b2tlZCB3
aXRoIGNvZGUgUEVSTUlTU0lPTl9ERU5JRUQsIHdoZW4gdGhlIEdlb2xvY2F0aW9uIHNlcnZpY2Ug
aGFzIGEgZ29vZCBwb3NpdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKK1BBU1MgZXJyb3IuY29kZSBpcyBlcnJvci5Q
RVJNSVNTSU9OX0RFTklFRAorUEFTUyBlcnJvci5tZXNzYWdlIGlzICJVc2VyIGRlbmllZCBHZW9s
b2NhdGlvbiIKK1BBU1MgZXJyb3IuVU5LTk9XTl9FUlJPUiBpcyAwCitQQVNTIGVycm9yLlBFUk1J
U1NJT05fREVOSUVEIGlzIDEKK1BBU1MgZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUgaXMgMgor
UEFTUyBlcnJvci5USU1FT1VUIGlzIDMKKworUEFTUyBlcnJvci5jb2RlIGlzIGVycm9yLlBFUk1J
U1NJT05fREVOSUVECitQQVNTIGVycm9yLm1lc3NhZ2UgaXMgIlVzZXIgZGVuaWVkIEdlb2xvY2F0
aW9uIgorUEFTUyBlcnJvci5VTktOT1dOX0VSUk9SIGlzIDAKK1BBU1MgZXJyb3IuUEVSTUlTU0lP
Tl9ERU5JRUQgaXMgMQorUEFTUyBlcnJvci5QT1NJVElPTl9VTkFWQUlMQUJMRSBpcyAyCitQQVNT
IGVycm9yLlRJTUVPVVQgaXMgMworCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1p
c3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1zdWNj
ZXNzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQt
YWxyZWFkeS1zdWNjZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Blcm1pc3Npb24tZGVuaWVkLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9u
LWRlbmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUwMTU4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC01LDcgKzUsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIFBBU1MgZXJyb3IuY29k
ZSBpcyBlcnJvci5QRVJNSVNTSU9OX0RFTklFRAotUEFTUyBlcnJvci5tZXNzYWdlIGlzICJVc2Vy
IGRpc2FsbG93ZWQgR2VvbG9jYXRpb24iCitQQVNTIGVycm9yLm1lc3NhZ2UgaXMgIlVzZXIgZGVu
aWVkIEdlb2xvY2F0aW9uIgogUEFTUyBlcnJvci5VTktOT1dOX0VSUk9SIGlzIDAKIFBBU1MgZXJy
b3IuUEVSTUlTU0lPTl9ERU5JRUQgaXMgMQogUEFTUyBlcnJvci5QT1NJVElPTl9VTkFWQUlMQUJM
RSBpcyAyCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9u
LWRlbmllZC1zdG9wcy13YXRjaGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1zdG9wcy13YXRjaGVz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTAxNTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1zdG9wcy13YXRjaGVzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNSw3ICs1LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQQogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiBQQVNTIGVy
cm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKLVBBU1MgZXJyb3IubWVzc2FnZSBp
cyAiVXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9uIgorUEFTUyBlcnJvci5tZXNzYWdlIGlzICJV
c2VyIGRlbmllZCBHZW9sb2NhdGlvbiIKIFBBU1MgZXJyb3IuVU5LTk9XTl9FUlJPUiBpcyAwCiBQ
QVNTIGVycm9yLlBFUk1JU1NJT05fREVOSUVEIGlzIDEKIFBBU1MgZXJyb3IuUE9TSVRJT05fVU5B
VkFJTEFCTEUgaXMgMgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVz
b3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktZXJyb3IuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVu
aWVkLWFscmVhZHktZXJyb3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJvci5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQg
d2hlbiBHZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGhhcyBiZWVuIGRlbmllZCBwcmlvciB0byBhIGNh
bGwgdG8gYSBHZW9sb2NhdGlvbiBtZXRob2QsIHRoZSBlcnJvciBjYWxsYmFjayBpcyBpbnZva2Vk
IHdpdGggY29kZSBQRVJNSVNTSU9OX0RFTklFRCwgd2hlbiB0aGUgR2VvbG9jYXRpb24gc2Vydmlj
ZSBlbmNvdW50ZXJzIGFuIGVycm9yLiIpOworCisvLyBQcmltZSB0aGUgR2VvbG9jYXRpb24gaW5z
dGFuY2UgYnkgZGVueWluZyBwZXJtaXNzaW9uLgord2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
LnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7Cit3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oNTEuNDc4LCAtMC4xNjYsIDEwMCk7CisK
K3ZhciBlcnJvcjsKK25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVu
Y3Rpb24ocCkgeworICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCB1bmV4
cGVjdGVkbHknKTsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfSwgZnVuY3Rpb24oZSkgeworICAgIGVycm9yID0gZQorICAgIHNob3VsZEJlKCdlcnJvci5j
b2RlJywgJ2Vycm9yLlBFUk1JU1NJT05fREVOSUVEJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLm1l
c3NhZ2UnLCAnIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIicpOworICAgIHNob3VsZEJlKCdlcnJv
ci5VTktOT1dOX0VSUk9SJywgJzAnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuUEVSTUlTU0lPTl9E
RU5JRUQnLCAnMScpOworICAgIHNob3VsZEJlKCdlcnJvci5QT1NJVElPTl9VTkFWQUlMQUJMRScs
ICcyJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlRJTUVPVVQnLCAnMycpOworICAgIGRlYnVnKCcn
KTsKKyAgICBjb250aW51ZVRlc3QoKTsKK30pOworCitmdW5jdGlvbiBjb250aW51ZVRlc3QoKQor
eworICAgIC8vIE1ha2UgYW5vdGhlciByZXF1ZXN0LCB3aXRoIHBlcm1pc3Npb24gYWxyZWFkeSBk
ZW5pZWQuCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlv
bkVycm9yKDAsICd0ZXN0Jyk7CisKKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBjYWxs
YmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZXJy
b3IgPSBlCisgICAgICAgIHNob3VsZEJlKCdlcnJvci5jb2RlJywgJ2Vycm9yLlBFUk1JU1NJT05f
REVOSUVEJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5tZXNzYWdlJywgJyJVc2VyIGRlbmll
ZCBHZW9sb2NhdGlvbiInKTsKKyAgICAgICAgc2hvdWxkQmUoJ2Vycm9yLlVOS05PV05fRVJST1In
LCAnMCcpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQnLCAnMScp
OworICAgICAgICBzaG91bGRCZSgnZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUnLCAnMicpOwor
ICAgICAgICBzaG91bGRCZSgnZXJyb3IuVElNRU9VVCcsICczJyk7CisgICAgICAgIGRlYnVnKCc8
YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKyAgICAgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30KK3dp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciBpc0FzeW5j
aHJvbm91cyA9IHRydWU7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9wZXJtaXNzaW9uLWRlbmll
ZC1hbHJlYWR5LXN1Y2Nlc3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
R2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLWFscmVhZHktc3VjY2Vzcy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291
cmNlcy9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1Y2Nlc3MuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDQgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHdoZW4gR2VvbG9jYXRpb24g
cGVybWlzc2lvbiBoYXMgYmVlbiBkZW5pZWQgcHJpb3IgdG8gYSBjYWxsIHRvIGEgR2VvbG9jYXRp
b24gbWV0aG9kLCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIGNvZGUgUEVSTUlT
U0lPTl9ERU5JRUQsIHdoZW4gdGhlIEdlb2xvY2F0aW9uIHNlcnZpY2UgaGFzIGEgZ29vZCBwb3Np
dGlvbi4iKTsKKworLy8gUHJpbWUgdGhlIEdlb2xvY2F0aW9uIGluc3RhbmNlIGJ5IGRlbnlpbmcg
cGVybWlzc2lvbi4KK3dpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24oZmFsc2UpOword2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOworCit2YXIgZXJyb3I7CituYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICB0
ZXN0RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30sIGZ1bmN0aW9uKGUp
IHsKKyAgICBlcnJvciA9IGUKKyAgICBzaG91bGRCZSgnZXJyb3IuY29kZScsICdlcnJvci5QRVJN
SVNTSU9OX0RFTklFRCcpOworICAgIHNob3VsZEJlKCdlcnJvci5tZXNzYWdlJywgJyJVc2VyIGRl
bmllZCBHZW9sb2NhdGlvbiInKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuVU5LTk9XTl9FUlJPUics
ICcwJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlBFUk1JU1NJT05fREVOSUVEJywgJzEnKTsKKyAg
ICBzaG91bGRCZSgnZXJyb3IuUE9TSVRJT05fVU5BVkFJTEFCTEUnLCAnMicpOworICAgIHNob3Vs
ZEJlKCdlcnJvci5USU1FT1VUJywgJzMnKTsKKyAgICBkZWJ1ZygnJyk7CisgICAgY29udGludWVU
ZXN0KCk7Cit9KTsKKworZnVuY3Rpb24gY29udGludWVUZXN0KCkKK3sKKyAgICAvLyBNYWtlIGFu
b3RoZXIgcmVxdWVzdCwgd2l0aCBwZXJtaXNzaW9uIGFscmVhZHkgZGVuaWVkLgorICAgIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7Cisg
ICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSwg
ZnVuY3Rpb24oZSkgeworICAgICAgICBlcnJvciA9IGUKKyAgICAgICAgc2hvdWxkQmUoJ2Vycm9y
LmNvZGUnLCAnZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2Vy
cm9yLm1lc3NhZ2UnLCAnIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIicpOworICAgICAgICBzaG91
bGRCZSgnZXJyb3IuVU5LTk9XTl9FUlJPUicsICcwJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJv
ci5QRVJNSVNTSU9OX0RFTklFRCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5QT1NJ
VElPTl9VTkFWQUlMQUJMRScsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5USU1FT1VU
JywgJzMnKTsKKyAgICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENP
TVBMRVRFPC9zcGFuPicpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgIH0pOworfQord2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKwordmFyIGlzQXN5bmNocm9ub3VzID0gdHJ1ZTsKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
cmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLXN0b3BzLXdhdGNoZXMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24t
ZGVuaWVkLXN0b3BzLXdhdGNoZXMuanMJKHJldmlzaW9uIDUwMTU4KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLXN0b3BzLXdh
dGNoZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLndhdGNoUG9zaXRpb24oZnVuYwogCiAgICAgZXJyb3IgPSBlCiAgICAgc2hvdWxkQmUo
J2Vycm9yLmNvZGUnLCAnZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQnKTsKLSAgICBzaG91bGRCZSgn
ZXJyb3IubWVzc2FnZScsICciVXNlciBkaXNhbGxvd2VkIEdlb2xvY2F0aW9uIicpOworICAgIHNo
b3VsZEJlKCdlcnJvci5tZXNzYWdlJywgJyJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiInKTsKICAg
ICBzaG91bGRCZSgnZXJyb3IuVU5LTk9XTl9FUlJPUicsICcwJyk7CiAgICAgc2hvdWxkQmUoJ2Vy
cm9yLlBFUk1JU1NJT05fREVOSUVEJywgJzEnKTsKICAgICBzaG91bGRCZSgnZXJyb3IuUE9TSVRJ
T05fVU5BVkFJTEFCTEUnLCAnMicpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vcmVzb3VyY2VzL3Blcm1pc3Npb24tZGVuaWVkLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9wZXJtaXNzaW9uLWRlbmllZC5q
cwkocmV2aXNpb24gNTAxNTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9y
ZXNvdXJjZXMvcGVybWlzc2lvbi1kZW5pZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEw
LDcgQEAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbgogfSwgZnVuY3Rp
b24oZSkgewogICAgIGVycm9yID0gZQogICAgIHNob3VsZEJlKCdlcnJvci5jb2RlJywgJ2Vycm9y
LlBFUk1JU1NJT05fREVOSUVEJyk7Ci0gICAgc2hvdWxkQmUoJ2Vycm9yLm1lc3NhZ2UnLCAnIlVz
ZXIgZGlzYWxsb3dlZCBHZW9sb2NhdGlvbiInKTsKKyAgICBzaG91bGRCZSgnZXJyb3IubWVzc2Fn
ZScsICciVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iJyk7CiAgICAgc2hvdWxkQmUoJ2Vycm9yLlVO
S05PV05fRVJST1InLCAnMCcpOwogICAgIHNob3VsZEJlKCdlcnJvci5QRVJNSVNTSU9OX0RFTklF
RCcsICcxJyk7CiAgICAgc2hvdWxkQmUoJ2Vycm9yLlBPU0lUSU9OX1VOQVZBSUxBQkxFJywgJzIn
KTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA1MDE1OCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xMjczLDYg
KzEyNzMsOCBAQCBmYXN0L2RvbS9mcmFtZS1sb2FkaW5nLXZpYS1kb2N1bWVudC13cml0CiBmYXN0
L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay1leGNlcHRpb24uaHRtbAogZmFzdC9kb20vR2VvbG9j
YXRpb24vZXJyb3IuaHRtbAogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQu
aHRtbAorZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1lcnJv
ci5odG1sCitmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LXN1
Y2Nlc3MuaHRtbAogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVybWlzc2lvbi1kZW5pZWQtc3RvcHMt
d2F0Y2hlcy5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wb3NpdGlvbi1zdHJpbmcuaHRtbAog
ZmFzdC9kb20vR2VvbG9jYXRpb24vcmVlbnRyYW50LWVycm9yLmh0bWwK
</data>

          </attachment>
      

    </bug>

</bugzilla>