<?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>49187</bug_id>
          
          <creation_ts>2010-11-08 10:20:42 -0800</creation_ts>
          <short_desc>[NRWT] Make http locking similar to perl implementation</short_desc>
          <delta_ts>2010-11-17 05:39:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>49276</dependson>
          <blocked>48053</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="Gabor Rapcsanyi">rgabor</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>galpeter</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>306188</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-08 10:20:42 -0800</bug_when>
    <thetext>I wrote why we need it:
https://bugs.webkit.org/show_bug.cgi?id=49164#c4

I think the best way to solve this problem if we use flock and locking depends on platform:
...
sequential_guard_lock = os.open(self._guard_lock_file, os.O_CREAT)
if windows:
    msvcrt.locking(sequential_guard_lock, msvcrt.LK_LOCK | msvcrt.LK_NBLCK, 32)
else:
    fcntl.flock(sequential_guard_lock, fcntl.LOCK_EX)
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306190</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 10:23:12 -0800</bug_when>
    <thetext>Does python provide a file locking API which hides these platform differences, or do we need to build our own?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306192</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 10:24:09 -0800</bug_when>
    <thetext>Maybe we should autoinstall lockfile.py?
http://packages.python.org/lockfile/lockfile.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306195</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 10:26:17 -0800</bug_when>
    <thetext>A more recent link: http://pypi.python.org/pypi/lockfile/0.9.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306196</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-08 10:30:10 -0800</bug_when>
    <thetext>Thanks for the link, this lockfile API would be better than my previous idea.
Gábor, could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306199</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 10:35:34 -0800</bug_when>
    <thetext>If you wish to autoinstall packages look at webkitpy.thirdparty.autoinstalled.__init__.py for examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306784</commentid>
    <comment_count>6</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-09 07:34:40 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Maybe we should autoinstall lockfile.py?
&gt; http://packages.python.org/lockfile/lockfile.html

This lock file is not good for us:

http://packages.python.org/lockfile/lockfile.html
&quot;&quot;&quot;Note The current implementation doesn’t provide for shared vs. exclusive locks. It should be possible for multiple reader processes to hold the lock at the same time.&quot;&quot;&quot;

And we need exclusive lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306788</commentid>
    <comment_count>7</comment_count>
      <attachid>73378</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-09 07:40:41 -0800</bug_when>
    <thetext>Created attachment 73378
proposed patch

I created a new FileLock class and I added unittests for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306892</commentid>
    <comment_count>8</comment_count>
      <attachid>73378</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-09 11:25:21 -0800</bug_when>
    <thetext>Comment on attachment 73378
proposed patch

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

Just some small nits in the unittest.  The approach seems fine overall.

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:27
&gt; +&quot;&quot;&quot;This class helps to lock files exclusively.&quot;&quot;&quot;

Nit: maybe mention that this is across processes.

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:38
&gt; +        self._lock_path = os.path.join(tempfile.gettempdir(), &quot;TestWebKit.lock&quot;)
&gt; +        self._file_lock = FileLock(self._lock_path)

Can you run this in setUp() instead?

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:48
&gt; +        # Create the lock.
&gt; +        self._file_lock.acquire_lock()
&gt; +        self.assertTrue(os.path.exists(self._lock_path))

What happens if two bots that run on the same machine try to run python-tests at the same time?  Maybe we can randomize the lock name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306914</commentid>
    <comment_count>9</comment_count>
      <attachid>73378</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-09 12:08:35 -0800</bug_when>
    <thetext>Comment on attachment 73378
proposed patch

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

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:38
&gt;&gt; +    def __init__(self, testFunc):
&gt;&gt; +        self._lock_path = os.path.join(tempfile.gettempdir(), &quot;TestWebKit.lock&quot;)
&gt;&gt; +        self._file_lock = FileLock(self._lock_path)
&gt; 
&gt; Can you run this in setUp() instead?

Yes, as tony says, thsi shoudl be in setUp() since its torn down in tearDown.

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:60
&gt; +    def test_stuck_lock(self):
&gt; +        open(self._lock_path, &apos;w&apos;)
&gt; +        self._file_lock.acquire_lock()
&gt; +        self._file_lock.release_lock()

What is this expected to do?  Do we always just blow away the lock?  in which case, how is it a lock?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py:100
&gt; -        except IOError, OSError:
&gt; +        except (IOError, OSError):

Are () the pep8 recommendation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306922</commentid>
    <comment_count>10</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2010-11-09 12:17:16 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py:100
&gt; &gt; -        except IOError, OSError:
&gt; &gt; +        except (IOError, OSError):
&gt; 
&gt; Are () the pep8 recommendation?

If the () is missing then it would only catch an IOError and inside the block you can access the exception with the &apos;OSError&apos; named variable.
example:
try:
 ....
except IOError, OSError:
    print OSError.message


If you use the () then you can catch the IOError and the OSError also, which is what we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306932</commentid>
    <comment_count>11</comment_count>
      <attachid>73402</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-09 12:39:29 -0800</bug_when>
    <thetext>Created attachment 73402
proposed_patch_02</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306935</commentid>
    <comment_count>12</comment_count>
      <attachid>73402</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-09 12:45:02 -0800</bug_when>
    <thetext>Comment on attachment 73402
proposed_patch_02

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

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:58
&gt; +        open(self._lock_path, &apos;w&apos;)

Nit: There should be a .close() here to explicitly release the file handle.

To answer Eric&apos;s question: This is testing a stale lock file (that no one has a flock on) and the call to open is just to create the file (i.e., unix touch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306937</commentid>
    <comment_count>13</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-09 12:48:14 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 73378 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73378&amp;action=review
&gt; 
&gt; Just some small nits in the unittest.  The approach seems fine overall.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:27
&gt; &gt; +&quot;&quot;&quot;This class helps to lock files exclusively.&quot;&quot;&quot;
&gt; 
&gt; Nit: maybe mention that this is across processes.
&gt; 

corrected

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:38
&gt; &gt; +        self._lock_path = os.path.join(tempfile.gettempdir(), &quot;TestWebKit.lock&quot;)
&gt; &gt; +        self._file_lock = FileLock(self._lock_path)
&gt; 
&gt; Can you run this in setUp() instead?
&gt; 

corrected

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:48
&gt; &gt; +        # Create the lock.
&gt; &gt; +        self._file_lock.acquire_lock()
&gt; &gt; +        self.assertTrue(os.path.exists(self._lock_path))
&gt; 
&gt; What happens if two bots that run on the same machine try to run python-tests at the same time?  Maybe we can randomize the lock name.

Yes it can cause troubles, but I think adding process pid is better than a random lock name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306938</commentid>
    <comment_count>14</comment_count>
      <attachid>73402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-09 12:48:36 -0800</bug_when>
    <thetext>Comment on attachment 73402
proposed_patch_02

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

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:38
&gt; +        self._lock_name = &quot;TestWebKit&quot; + str(os.getpid()) + &quot;.lock&quot;
&gt; +        self._lock_path = os.path.join(tempfile.gettempdir(), self._lock_name)

re-reading this, why does this name ned to be different if th path is?

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py:58
&gt;&gt; +        open(self._lock_path, &apos;w&apos;)
&gt; 
&gt; Nit: There should be a .close() here to explicitly release the file handle.
&gt; 
&gt; To answer Eric&apos;s question: This is testing a stale lock file (that no one has a flock on) and the call to open is just to create the file (i.e., unix touch).

YOu could also use with (from __future__ import with_statement) to have it auto-close the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306985</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-09 14:32:38 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/71672 
And rolled out: http://trac.webkit.org/changeset/71679

Gábor please add a comment about the problem tomorrow. 
It is too late for me to do it. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307458</commentid>
    <comment_count>16</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-10 11:38:59 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Landed in http://trac.webkit.org/changeset/71672 
&gt; And rolled out: http://trac.webkit.org/changeset/71679
&gt; 
&gt; Gábor please add a comment about the problem tomorrow. 
&gt; It is too late for me to do it. :(

As I saw when we try to unlink the exclusive lock it raises this exception:
WindowsError(32, &apos;The process cannot access the file because it is being used by another process&apos;)

The other problem is that it always create a new http lock when this happens, and this makes many files in the temp directory while it times out. Sorry for that mistake I&apos;m working on the solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309288</commentid>
    <comment_count>17</comment_count>
      <attachid>73901</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-15 08:10:40 -0800</bug_when>
    <thetext>Created attachment 73901
proposed_patch_v3

I fixed the Windows problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309693</commentid>
    <comment_count>18</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-11-16 05:47:28 -0800</bug_when>
    <thetext>I reorganized my previous patch.
I added a remove_lock() method to the FileLock class to unlock the locked file. On Mac and Linux it&apos;s worked without this unlock but on Windows we need this to prevent that the unlinking raises an exception.

I also put the while loop into the acquire_lock() method, and when it times out it will return false. I think it is easier to handle it. I set the default wait time to 20 seconds, it has to be enough for the file creation.
If something goes wrong it wont do any locking, just run the http tests without it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309832</commentid>
    <comment_count>19</comment_count>
      <attachid>73901</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-16 11:08:27 -0800</bug_when>
    <thetext>Comment on attachment 73901
proposed_patch_v3

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

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:36
&gt; +    def __init__(self, lock_file_path, max_wait_time=20):

Nit: I prefer to have the units included in time variables.  E.g., max_wait_time_sec

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:65
&gt; +            except IOError:
&gt; +                if time.time() - start_time &gt; self._max_wait_time:

Maybe we should log the error here for debugging purposes?

&gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:78
&gt; +        except (IOError, OSError):
&gt; +            pass

Should we log the error here too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310221</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-17 05:39:07 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 73901 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73901&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:36
&gt; &gt; +    def __init__(self, lock_file_path, max_wait_time=20):
&gt; 
&gt; Nit: I prefer to have the units included in time variables.  E.g., max_wait_time_sec
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:65
&gt; &gt; +            except IOError:
&gt; &gt; +                if time.time() - start_time &gt; self._max_wait_time:
&gt; 
&gt; Maybe we should log the error here for debugging purposes?
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/file_lock.py:78
&gt; &gt; +        except (IOError, OSError):
&gt; &gt; +            pass
&gt; 
&gt; Should we log the error here too?

Gábor fixed and I landed it: http://trac.webkit.org/changeset/72194</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73378</attachid>
            <date>2010-11-09 07:40:41 -0800</date>
            <delta_ts>2010-11-09 12:39:29 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>new_lock.patch</filename>
            <type>text/plain</type>
            <size>8499</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcxNjI4KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMDkgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW05SV1RdIE1ha2UgaHR0cCBsb2NraW5nIHNpbWlsYXIgdG8gcGVy
bCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDkxODcKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlX2xvY2sucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5OgorCiAyMDEwLTExLTA5ICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9yIEFybmUgVmVzdGLDuC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlX2xvY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9jay5weQkocmV2aXNpb24gMCkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2sucHkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1
KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisjIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBjbGFzcyBoZWxwcyB0byBs
b2NrIGZpbGVzIGV4Y2x1c2l2ZWx5LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCitj
bGFzcyBGaWxlTG9jayhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2tfZmls
ZV9wYXRoKToKKyAgICAgICAgc2VsZi5fbG9ja19maWxlX3BhdGggPSBsb2NrX2ZpbGVfcGF0aAor
ICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfZGVzY3JpcHRvciA9IE5vbmUKKworICAgIGRlZiBhY3F1
aXJlX2xvY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9kZXNjcmlwdG9yID0gb3Mu
b3BlbihzZWxmLl9sb2NrX2ZpbGVfcGF0aCwgb3MuT19DUkVBVCkKKyAgICAgICAgaWYgc3lzLnBs
YXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicsICdjeWd3aW4nKToKKyAgICAgICAgICAgIGlt
cG9ydCBmY250bAorICAgICAgICAgICAgbG9ja19mbGFncyA9IGZjbnRsLkxPQ0tfRVggfCBmY250
bC5MT0NLX05CCisgICAgICAgICAgICBmY250bC5mbG9jayhzZWxmLl9sb2NrX2ZpbGVfZGVzY3Jp
cHRvciwgbG9ja19mbGFncykKKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoK
KyAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgICAgIGxvY2tfZmxhZ3MgPSBtc3Zj
cnQuTEtfTkJMQ0sKKyAgICAgICAgICAgIG1zdmNydC5sb2NraW5nKHNlbGYuX2xvY2tfZmlsZV9k
ZXNjcmlwdG9yLCBsb2NrX2ZsYWdzLCAzMikKKworICAgIGRlZiByZWxlYXNlX2xvY2soc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX2xvY2tfZmlsZV9kZXNjcmlwdG9yOgorICAgICAgICAgICAgb3Mu
Y2xvc2Uoc2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0b3IpCisgICAgICAgICAgICBvcy51bmxpbmso
c2VsZi5fbG9ja19maWxlX3BhdGgpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNz
YW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisjCisj
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklW
RVJTSVRZIE9GIFNaRUdFRCBPUgorIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorIyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVfbG9jayBpbXBvcnQgRmlsZUxvY2sKKworCitjbGFz
cyBGaWxlTG9ja1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHRlc3RGdW5jKToKKyAgICAgICAgc2VsZi5fbG9ja19wYXRoID0gb3MucGF0aC5qb2luKHRl
bXBmaWxlLmdldHRlbXBkaXIoKSwgIlRlc3RXZWJLaXQubG9jayIpCisgICAgICAgIHNlbGYuX2Zp
bGVfbG9jayA9IEZpbGVMb2NrKHNlbGYuX2xvY2tfcGF0aCkKKyAgICAgICAgdW5pdHRlc3QuVGVz
dENhc2UuX19pbml0X18oc2VsZiwgdGVzdEZ1bmMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6
CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX2xvY2tfcGF0aCk6CisgICAgICAgICAg
ICBvcy51bmxpbmsoc2VsZi5fbG9ja19wYXRoKQorCisgICAgZGVmIHRlc3RfbG9ja19saWZlY3lj
bGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBsb2NrLgorICAgICAgICBzZWxmLl9maWxl
X2xvY2suYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhp
c3RzKHNlbGYuX2xvY2tfcGF0aCkpCisKKyAgICAgICAgIyBUcnkgdG8gbG9jayBhZ2Fpbi4KKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIElPRXJyb3IpLCBzZWxmLl9maWxlX2xv
Y2suYWNxdWlyZV9sb2NrKQorCisgICAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAg
c2VsZi5fZmlsZV9sb2NrLnJlbGVhc2VfbG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
b3MucGF0aC5leGlzdHMoc2VsZi5fbG9ja19wYXRoKSkKKworICAgIGRlZiB0ZXN0X3N0dWNrX2xv
Y2soc2VsZik6CisgICAgICAgIG9wZW4oc2VsZi5fbG9ja19wYXRoLCAndycpCisgICAgICAgIHNl
bGYuX2ZpbGVfbG9jay5hY3F1aXJlX2xvY2soKQorICAgICAgICBzZWxmLl9maWxlX2xvY2sucmVs
ZWFzZV9sb2NrKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9sb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5CShyZXZpc2lvbiA3MTYxMikK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9s
b2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIGltcG9ydCB0ZW1wZmlsZQog
aW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9y
dCBGaWxlTG9jawogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuaHR0cF9sb2NrIikKQEAgLTUyLDYgKzUzLDcgQEAgY2xhc3MgSHR0cExvY2so
b2JqZWN0KToKICAgICAgICAgc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4ID0gb3MucGF0aC5q
b2luKHNlbGYuX2xvY2tfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wcmVmaXgpCiAgICAgICAgIHNlbGYuX2d1
YXJkX2xvY2tfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsIGd1YXJkX2xvY2sp
CisgICAgICAgIHNlbGYuX2d1YXJkX2xvY2sgPSBGaWxlTG9jayhzZWxmLl9ndWFyZF9sb2NrX2Zp
bGUpCiAgICAgICAgIHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUgPSAiIgogICAgICAgICBz
ZWxmLl9leGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogICAgICAgICAjIG1heGltdW0gd2FpdCB0aW1l
IGZvciB0aGUgbG9jayBjcmVhdGlvbgpAQCAtOTUsNyArOTcsNyBAQCBjbGFzcyBIdHRwTG9jayhv
YmplY3QpOgogICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlJlbW92aW5nIHN0dWNrIGxvY2sg
ZmlsZTogJXMiICUgbG9ja19saXN0WzBdKQogICAgICAgICAgICAgICAgIG9zLnVubGluayhsb2Nr
X2xpc3RbMF0pCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9y
LCBPU0Vycm9yOgorICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAg
ICAgcmV0dXJuCiAgICAgICAgIHJldHVybiBpbnQoY3VycmVudF9waWQpCiAKQEAgLTExMCwxNyAr
MTEyLDE2IEBAIGNsYXNzIEh0dHBMb2NrKG9iamVjdCk6CiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0
aW1lLnRpbWUoKQogICAgICAgICB3aGlsZShUcnVlKToKICAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICBzZXF1ZW50aWFsX2d1YXJkX2xvY2sgPSBvcy5vcGVuKHNlbGYuX2d1YXJkX2xv
Y2tfZmlsZSwgb3MuT19DUkVBVCB8IG9zLk9fRVhDTCkKKyAgICAgICAgICAgICAgICBzZWxmLl9n
dWFyZF9sb2NrLmFjcXVpcmVfbG9jaygpCiAgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19s
b2NrX2ZpbGVfbmFtZSA9IChzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX25leHRfbG9j
a19udW1iZXIoKSkpCiAgICAgICAgICAgICAgICAgbG9ja19maWxlID0gb3BlbihzZWxmLl9wcm9j
ZXNzX2xvY2tfZmlsZV9uYW1lLCAndycpCiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQ3Jl
YXRpbmcgbG9jayBmaWxlOiAlcyIgJSBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKQogICAg
ICAgICAgICAgICAgIGxvY2tfZmlsZS53cml0ZShzdHIob3MuZ2V0cGlkKCkpKQogICAgICAgICAg
ICAgICAgIGxvY2tfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VxdWVu
dGlhbF9ndWFyZF9sb2NrKQotICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9ndWFyZF9s
b2NrX2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZ3VhcmRfbG9jay5yZWxlYXNlX2xvY2so
KQogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJv
cjoKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICAg
ICAgaWYgdGltZS50aW1lKCkgLSBzdGFydF90aW1lID4gc2VsZi5fZ3VhcmRfbG9ja19tYXhfd2Fp
dDoKICAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9jayBkb2VzIG5vdCBjcmVhdGVk
OiAlcyIgJSBzdHIoc3lzLmV4Y19pbmZvKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UK
</data>
<flag name="review"
          id="63806"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73402</attachid>
            <date>2010-11-09 12:39:29 -0800</date>
            <delta_ts>2010-11-15 08:11:08 -0800</delta_ts>
            <desc>proposed_patch_02</desc>
            <filename>new_lock2.patch</filename>
            <type>text/plain</type>
            <size>8518</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcxNjI4KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMDkgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW05SV1RdIE1ha2UgaHR0cCBsb2NraW5nIHNpbWlsYXIgdG8gcGVy
bCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDkxODcKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlX2xvY2sucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5OgorCiAyMDEwLTExLTA5ICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgVG9yIEFybmUgVmVzdGLDuC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlX2xvY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9jay5weQkocmV2aXNpb24gMCkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2sucHkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBD
b3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1
KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisjIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBjbGFzcyBoZWxwcyB0byBs
b2NrIGZpbGVzIGV4Y2x1c2l2ZWx5IGFjcm9zcyBwcm9jZXNzZXMuIiIiCisKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworCisKK2NsYXNzIEZpbGVMb2NrKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbG9ja19maWxlX3BhdGgpOgorICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcGF0aCA9
IGxvY2tfZmlsZV9wYXRoCisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9kZXNjcmlwdG9yID0gTm9u
ZQorCisgICAgZGVmIGFjcXVpcmVfbG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9ja19maWxl
X2Rlc2NyaXB0b3IgPSBvcy5vcGVuKHNlbGYuX2xvY2tfZmlsZV9wYXRoLCBvcy5PX0NSRUFUKQor
ICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkYXJ3aW4nLCAnbGludXgyJywgJ2N5Z3dpbicp
OgorICAgICAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgICAgICBsb2NrX2ZsYWdzID0gZmNu
dGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYu
X2xvY2tfZmlsZV9kZXNjcmlwdG9yLCBsb2NrX2ZsYWdzKQorICAgICAgICBlbGlmIHN5cy5wbGF0
Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICAgICAg
bG9ja19mbGFncyA9IG1zdmNydC5MS19OQkxDSworICAgICAgICAgICAgbXN2Y3J0LmxvY2tpbmco
c2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0b3IsIGxvY2tfZmxhZ3MsIDMyKQorCisgICAgZGVmIHJl
bGVhc2VfbG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0b3I6
CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9sb2NrX2ZpbGVfZGVzY3JpcHRvcikKKyAgICAg
ICAgICAgIG9zLnVubGluayhzZWxmLl9sb2NrX2ZpbGVfcGF0aCkKSW5kZXg6IFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Zp
bGVfbG9ja191bml0dGVzdC5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHkJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQor
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisjIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1
bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9ydCBG
aWxlTG9jaworCisKK2NsYXNzIEZpbGVMb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2xvY2tfbmFtZSA9ICJUZXN0V2ViS2l0
IiArIHN0cihvcy5nZXRwaWQoKSkgKyAiLmxvY2siCisgICAgICAgIHNlbGYuX2xvY2tfcGF0aCA9
IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIHNlbGYuX2xvY2tfbmFtZSkKKyAg
ICAgICAgc2VsZi5fZmlsZV9sb2NrID0gRmlsZUxvY2soc2VsZi5fbG9ja19wYXRoKQorCisgICAg
ZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9sb2Nr
X3BhdGgpOgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2xvY2tfcGF0aCkKKworICAgIGRl
ZiB0ZXN0X2xvY2tfbGlmZWN5Y2xlKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSB0aGUgbG9jay4K
KyAgICAgICAgc2VsZi5fZmlsZV9sb2NrLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9sb2NrX3BhdGgpKQorCisgICAgICAgICMgVHJ5
IHRvIGxvY2sgYWdhaW4uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPU0Vycm9yLCBJT0Vy
cm9yKSwgc2VsZi5fZmlsZV9sb2NrLmFjcXVpcmVfbG9jaykKKworICAgICAgICAjIFJlbGVhc2Ug
dGhlIGxvY2suCisgICAgICAgIHNlbGYuX2ZpbGVfbG9jay5yZWxlYXNlX2xvY2soKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuX2xvY2tfcGF0aCkpCisKKyAg
ICBkZWYgdGVzdF9zdHVja19sb2NrKHNlbGYpOgorICAgICAgICBvcGVuKHNlbGYuX2xvY2tfcGF0
aCwgJ3cnKQorICAgICAgICBzZWxmLl9maWxlX2xvY2suYWNxdWlyZV9sb2NrKCkKKyAgICAgICAg
c2VsZi5fZmlsZV9sb2NrLnJlbGVhc2VfbG9jaygpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfbG9jay5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfbG9jay5w
eQkocmV2aXNpb24gNzE2MTIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2h0dHBfbG9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QCBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVfbG9jayBpbXBvcnQgRmlsZUxvY2sKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lmh0dHBfbG9jayIpCkBAIC01Miw2ICs1Myw3
IEBAIGNsYXNzIEh0dHBMb2NrKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wYXRo
X3ByZWZpeCA9IG9zLnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4
KQogICAgICAgICBzZWxmLl9ndWFyZF9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbG9j
a19wYXRoLCBndWFyZF9sb2NrKQorICAgICAgICBzZWxmLl9ndWFyZF9sb2NrID0gRmlsZUxvY2so
c2VsZi5fZ3VhcmRfbG9ja19maWxlKQogICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9u
YW1lID0gIiIKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKICAgICAgICAg
IyBtYXhpbXVtIHdhaXQgdGltZSBmb3IgdGhlIGxvY2sgY3JlYXRpb24KQEAgLTk1LDcgKzk3LDcg
QEAgY2xhc3MgSHR0cExvY2sob2JqZWN0KToKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJS
ZW1vdmluZyBzdHVjayBsb2NrIGZpbGU6ICVzIiAlIGxvY2tfbGlzdFswXSkKICAgICAgICAgICAg
ICAgICBvcy51bmxpbmsobG9ja19saXN0WzBdKQogICAgICAgICAgICAgICAgIHJldHVybgotICAg
ICAgICBleGNlcHQgSU9FcnJvciwgT1NFcnJvcjoKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBP
U0Vycm9yKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICByZXR1cm4gaW50KGN1cnJlbnRf
cGlkKQogCkBAIC0xMTAsMTcgKzExMiwxNiBAQCBjbGFzcyBIdHRwTG9jayhvYmplY3QpOgogICAg
ICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgd2hpbGUoVHJ1ZSk6CiAgICAg
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VxdWVudGlhbF9ndWFyZF9sb2NrID0gb3Mu
b3BlbihzZWxmLl9ndWFyZF9sb2NrX2ZpbGUsIG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wpCisgICAg
ICAgICAgICAgICAgc2VsZi5fZ3VhcmRfbG9jay5hY3F1aXJlX2xvY2soKQogICAgICAgICAgICAg
ICAgIHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUgPSAoc2VsZi5fbG9ja19maWxlX3BhdGhf
cHJlZml4ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cihzZWxmLl9uZXh0X2xvY2tfbnVtYmVyKCkpKQogICAgICAgICAgICAgICAgIGxvY2tfZmls
ZSA9IG9wZW4oc2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFtZSwgJ3cnKQogICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIkNyZWF0aW5nIGxvY2sgZmlsZTogJXMiICUgc2VsZi5fcHJvY2Vzc19s
b2NrX2ZpbGVfbmFtZSkKICAgICAgICAgICAgICAgICBsb2NrX2ZpbGUud3JpdGUoc3RyKG9zLmdl
dHBpZCgpKSkKICAgICAgICAgICAgICAgICBsb2NrX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAg
ICAgIG9zLmNsb3NlKHNlcXVlbnRpYWxfZ3VhcmRfbG9jaykKLSAgICAgICAgICAgICAgICBvcy51
bmxpbmsoc2VsZi5fZ3VhcmRfbG9ja19maWxlKQorICAgICAgICAgICAgICAgIHNlbGYuX2d1YXJk
X2xvY2sucmVsZWFzZV9sb2NrKCkKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAg
ICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJy
b3IpOgogICAgICAgICAgICAgICAgIGlmIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA+IHNlbGYu
X2d1YXJkX2xvY2tfbWF4X3dhaXQ6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIkxv
Y2sgZG9lcyBub3QgY3JlYXRlZDogJXMiICUgc3RyKHN5cy5leGNfaW5mbygpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73901</attachid>
            <date>2010-11-15 08:10:40 -0800</date>
            <delta_ts>2010-11-17 05:39:26 -0800</delta_ts>
            <desc>proposed_patch_v3</desc>
            <filename>new_lock3.patch</filename>
            <type>text/plain</type>
            <size>10593</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcyMDA1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMTUgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW05SV1RdIE1ha2UgaHR0cCBsb2NraW5nIHNpbWlsYXIgdG8gcGVy
bCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDkxODcKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlX2xvY2sucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5OgorCiAyMDEwLTExLTE0ICBE
YXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YW5pZWwgQmF0ZXMuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZV9sb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2sucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrLnB5CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorIyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorIyBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlRoaXMgY2xhc3MgaGVscHMgdG8gbG9jayBmaWxl
cyBleGNsdXNpdmVseSBhY3Jvc3MgcHJvY2Vzc2VzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKK2ltcG9ydCB0aW1lCisKKworY2xhc3MgRmlsZUxvY2sob2JqZWN0KToKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBsb2NrX2ZpbGVfcGF0aCwgbWF4X3dhaXRfdGltZT0yMCk6CisgICAgICAg
IHNlbGYuX2xvY2tfZmlsZV9wYXRoID0gbG9ja19maWxlX3BhdGgKKyAgICAgICAgc2VsZi5fbG9j
a19maWxlX2Rlc2NyaXB0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX21heF93YWl0X3RpbWUgPSBt
YXhfd2FpdF90aW1lCisKKyAgICBkZWYgX2NyZWF0ZV9sb2NrKHNlbGYpOgorICAgICAgICBpZiBz
eXMucGxhdGZvcm0gaW4gKCdkYXJ3aW4nLCAnbGludXgyJywgJ2N5Z3dpbicpOgorICAgICAgICAg
ICAgaW1wb3J0IGZjbnRsCisgICAgICAgICAgICBmY250bC5mbG9jayhzZWxmLl9sb2NrX2ZpbGVf
ZGVzY3JpcHRvciwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIGVsaWYg
c3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAg
ICAgICAgICBtc3ZjcnQubG9ja2luZyhzZWxmLl9sb2NrX2ZpbGVfZGVzY3JpcHRvciwgbXN2Y3J0
LkxLX05CTENLLCAzMikKKworICAgIGRlZiBfcmVtb3ZlX2xvY2soc2VsZik6CisgICAgICAgIGlm
IHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInLCAnY3lnd2luJyk6CisgICAgICAg
ICAgICBpbXBvcnQgZmNudGwKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYuX2xvY2tfZmls
ZV9kZXNjcmlwdG9yLCBmY250bC5MT0NLX1VOKQorICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9
PSAnd2luMzInOgorICAgICAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICAgICAgbXN2Y3J0
LmxvY2tpbmcoc2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0b3IsIG1zdmNydC5MS19VTkxDSywgMzIp
CisKKyAgICBkZWYgYWNxdWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrX2ZpbGVf
ZGVzY3JpcHRvciA9IG9zLm9wZW4oc2VsZi5fbG9ja19maWxlX3BhdGgsIG9zLk9fVFJVTkMgfCBv
cy5PX0NSRUFUKQorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVf
bG9jaygpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA+IHNl
bGYuX21heF93YWl0X3RpbWU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYuX2xv
Y2tfZmlsZV9kZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGVf
ZGVzY3JpcHRvciA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICBkZWYgcmVsZWFzZV9sb2NrKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBz
ZWxmLl9sb2NrX2ZpbGVfZGVzY3JpcHRvcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVf
bG9jaygpCisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0
b3IpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9ja19maWxlX2Rlc2NyaXB0b3IgPSBOb25lCisg
ICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fbG9ja19maWxlX3BhdGgpCisgICAgICAgIGV4Y2Vw
dCAoSU9FcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9m
aWxlX2xvY2tfdW5pdHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChD
KSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorIyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyMg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorIyBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQg
dW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVfbG9jayBpbXBvcnQg
RmlsZUxvY2sKKworCitjbGFzcyBGaWxlTG9ja1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisg
ICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrX25hbWUgPSAiVGVzdFdlYktp
dCIgKyBzdHIob3MuZ2V0cGlkKCkpICsgIi5sb2NrIgorICAgICAgICBzZWxmLl9sb2NrX3BhdGgg
PSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCBzZWxmLl9sb2NrX25hbWUpCisg
ICAgICAgIHNlbGYuX2ZpbGVfbG9jazEgPSBGaWxlTG9jayhzZWxmLl9sb2NrX3BhdGgsIDEpCisg
ICAgICAgIHNlbGYuX2ZpbGVfbG9jazIgPSBGaWxlTG9jayhzZWxmLl9sb2NrX3BhdGgsIDEpCisK
KyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGVfbG9jazEucmVsZWFz
ZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMi5yZWxlYXNlX2xvY2soKQorCisgICAg
ZGVmIHRlc3RfbG9ja19saWZlY3ljbGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBsb2Nr
LgorICAgICAgICBzZWxmLl9maWxlX2xvY2sxLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9sb2NrX3BhdGgpKQorCisgICAgICAgICMg
VHJ5IHRvIGxvY2sgYWdhaW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fZmlsZV9s
b2NrMi5hY3F1aXJlX2xvY2soKSkKKworICAgICAgICAjIFJlbGVhc2UgdGhlIGxvY2suCisgICAg
ICAgIHNlbGYuX2ZpbGVfbG9jazEucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9sb2NrX3BhdGgpKQorCisgICAgZGVmIHRlc3Rfc3R1
Y2tfbG9jayhzZWxmKToKKyAgICAgICAgb3BlbihzZWxmLl9sb2NrX3BhdGgsICd3JykuY2xvc2Uo
KQorICAgICAgICBzZWxmLl9maWxlX2xvY2sxLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHNlbGYu
X2ZpbGVfbG9jazEucmVsZWFzZV9sb2NrKCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5CShy
ZXZpc2lvbiA3MjAwNSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9sb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIGlt
cG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZmlsZV9sb2NrIGltcG9ydCBGaWxlTG9jawogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigi
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuaHR0cF9sb2NrIikKQEAgLTUyLDEwICs1Myw5IEBA
IGNsYXNzIEh0dHBMb2NrKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wYXRoX3By
ZWZpeCA9IG9zLnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4KQog
ICAgICAgICBzZWxmLl9ndWFyZF9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbG9ja19w
YXRoLCBndWFyZF9sb2NrKQorICAgICAgICBzZWxmLl9ndWFyZF9sb2NrID0gRmlsZUxvY2soc2Vs
Zi5fZ3VhcmRfbG9ja19maWxlKQogICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1l
ID0gIiIKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKLSAgICAgICAgIyBt
YXhpbXVtIHdhaXQgdGltZSBmb3IgdGhlIGxvY2sgY3JlYXRpb24KLSAgICAgICAgc2VsZi5fZ3Vh
cmRfbG9ja19tYXhfd2FpdCA9IDEgKiA2MAogCiAgICAgZGVmIGNsZWFudXBfaHR0cF9sb2NrKHNl
bGYpOgogICAgICAgICAiIiJEZWxldGUgdGhlIGxvY2sgZmlsZSBpZiBleGlzdHMuIiIiCkBAIC05
NSwzNSArOTUsMzEgQEAgY2xhc3MgSHR0cExvY2sob2JqZWN0KToKICAgICAgICAgICAgICAgICBf
bG9nLmRlYnVnKCJSZW1vdmluZyBzdHVjayBsb2NrIGZpbGU6ICVzIiAlIGxvY2tfbGlzdFswXSkK
ICAgICAgICAgICAgICAgICBvcy51bmxpbmsobG9ja19saXN0WzBdKQogICAgICAgICAgICAgICAg
IHJldHVybgotICAgICAgICBleGNlcHQgSU9FcnJvciwgT1NFcnJvcjoKKyAgICAgICAgZXhjZXB0
IChJT0Vycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICByZXR1cm4g
aW50KGN1cnJlbnRfcGlkKQogCiAgICAgZGVmIF9jcmVhdGVfbG9ja19maWxlKHNlbGYpOgogICAg
ICAgICAiIiJUaGUgbG9jayBmaWxlcyBhcmUgdXNlZCB0byBzY2hlZHVsZSB0aGUgcnVubmluZyB0
ZXN0IHNlc3Npb25zIGluIGZpcnN0Ci0gICAgICAgIGNvbWUgZmlyc3Qgc2VydmVkIG9yZGVyLiBU
aGUgc2VxdWVudGlhbCBndWFyZCBsb2NrIGVuc3VyZXMgdGhhdCB0aGUgbG9jawotICAgICAgICBu
dW1iZXJzIGFyZSBzZXF1ZW50aWFsLiIiIgorICAgICAgICBjb21lIGZpcnN0IHNlcnZlZCBvcmRl
ci4gVGhlIGd1YXJkIGxvY2sgZW5zdXJlcyB0aGF0IHRoZSBsb2NrIG51bWJlcnMgYXJlCisgICAg
ICAgIHNlcXVlbnRpYWwuIiIiCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLl9s
b2NrX3BhdGgpOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9jayBkaXJlY3RvcnkgZG9lcyBu
b3QgZXhpc3Q6ICVzIiAlIHNlbGYuX2xvY2tfcGF0aCkKICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQogCi0gICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB3aGlsZShUcnVl
KToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZXF1ZW50aWFsX2d1YXJkX2xv
Y2sgPSBvcy5vcGVuKHNlbGYuX2d1YXJkX2xvY2tfZmlsZSwgb3MuT19DUkVBVCB8IG9zLk9fRVhD
TCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lID0gKHNlbGYu
X2xvY2tfZmlsZV9wYXRoX3ByZWZpeCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIoc2VsZi5fbmV4dF9sb2NrX251bWJlcigpKSkKLSAgICAgICAg
ICAgICAgICBsb2NrX2ZpbGUgPSBvcGVuKHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUsICd3
JykKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJDcmVhdGluZyBsb2NrIGZpbGU6ICVzIiAl
IHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUpCi0gICAgICAgICAgICAgICAgbG9ja19maWxl
LndyaXRlKHN0cihvcy5nZXRwaWQoKSkpCi0gICAgICAgICAgICAgICAgbG9ja19maWxlLmNsb3Nl
KCkKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShzZXF1ZW50aWFsX2d1YXJkX2xvY2spCi0gICAg
ICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2d1YXJkX2xvY2tfZmlsZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAg
ICAgICAgaWYgdGltZS50aW1lKCkgLSBzdGFydF90aW1lID4gc2VsZi5fZ3VhcmRfbG9ja19tYXhf
d2FpdDoKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTG9jayBkb2VzIG5vdCBjcmVh
dGVkOiAlcyIgJSBzdHIoc3lzLmV4Y19pbmZvKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgaWYgbm90IHNlbGYuX2d1YXJkX2xvY2suYWNxdWlyZV9sb2NrKCk6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJHdWFyZCBsb2NrIHRpbWVkIG91dCEiKQorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFt
ZSA9IChzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9uZXh0X2xvY2tfbnVtYmVyKCkpKQorICAgICAg
ICBfbG9nLmRlYnVnKCJDcmVhdGluZyBsb2NrIGZpbGU6ICVzIiAlIHNlbGYuX3Byb2Nlc3NfbG9j
a19maWxlX25hbWUpCisgICAgICAgIGxvY2tfZmlsZSA9IG9wZW4oc2VsZi5fcHJvY2Vzc19sb2Nr
X2ZpbGVfbmFtZSwgJ3cnKQorICAgICAgICBsb2NrX2ZpbGUud3JpdGUoc3RyKG9zLmdldHBpZCgp
KSkKKyAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fZ3VhcmRfbG9jay5y
ZWxlYXNlX2xvY2soKQorICAgICAgICByZXR1cm4gVHJ1ZQorCiAKICAgICBkZWYgd2FpdF9mb3Jf
aHR0cGRfbG9jayhzZWxmKToKICAgICAgICAgIiIiQ3JlYXRlIGEgbG9jayBmaWxlIGFuZCB3YWl0
IHVudGlsIGl0J3MgdHVybiBjb21lcy4gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcK
</data>

          </attachment>
      

    </bug>

</bugzilla>