<?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>60032</bug_id>
          
          <creation_ts>2011-05-03 09:13:08 -0700</creation_ts>
          <short_desc>IndexedDB: Transaction rollback prevented by open SQLite statement</short_desc>
          <delta_ts>2011-05-13 03:21:31 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dgrogan</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397112</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-03 09:13:08 -0700</bug_when>
    <thetext>IndexedDB: Test transaction rollback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397113</commentid>
    <comment_count>1</comment_count>
      <attachid>92083</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-03 09:14:08 -0700</bug_when>
    <thetext>Created attachment 92083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397123</commentid>
    <comment_count>2</comment_count>
      <attachid>92083</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-03 09:31:38 -0700</bug_when>
    <thetext>Comment on attachment 92083
Patch

Oops, the expectations are wrong. Hmm, looks like this works in Chrome, but not in DumpRenderTree? Hmm :S</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397167</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-03 10:26:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 92083 [details])
&gt; Oops, the expectations are wrong. Hmm, looks like this works in Chrome, but not in DumpRenderTree? Hmm :S

No, the test passes if I run it separately (or with run_webkit_tests.sh --run-singly), but not when it&apos;s run as part of the test suite with other tests running in parallel. There&apos;s something funky going on here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397594</commentid>
    <comment_count>4</comment_count>
      <attachid>92083</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-05-03 18:01:06 -0700</bug_when>
    <thetext>Comment on attachment 92083
Patch

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

&gt; LayoutTests/storage/indexeddb/transaction-rollback.html:48
&gt; +    commitAndContinue(startTransaction);

What&apos;s up with commitAndContinue?  To run something after setVersion completes, the tutorial layout test uses

currentTransaction = event.target.result;
currentTransaction.oncomplete = onSetVersionComplete; // startTransaction in your case I suppose
currentTransaction.onabort = unexpectedAbort;

I ask because I was running into the same phenomena (works in --run-singly, doesn&apos;t otherwise) when using setTimeout to get async behavior.  I don&apos;t have a narrative for your case that explains why you might be running into the same issue, but it seems too coincidental.

dimich explained the problems in https://bugs.webkit.org/show_bug.cgi?id=57789#c35</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397797</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-04 04:11:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 92083 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92083&amp;action=review
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/transaction-rollback.html:48
&gt; &gt; +    commitAndContinue(startTransaction);
&gt; 
&gt; What&apos;s up with commitAndContinue?  To run something after setVersion completes, the tutorial layout test uses
&gt; 
&gt; currentTransaction = event.target.result;
&gt; currentTransaction.oncomplete = onSetVersionComplete; // startTransaction in your case I suppose
&gt; currentTransaction.onabort = unexpectedAbort;
&gt; 
&gt; I ask because I was running into the same phenomena (works in --run-singly, doesn&apos;t otherwise) when using setTimeout to get async behavior.  I don&apos;t have a narrative for your case that explains why you might be running into the same issue, but it seems too coincidental.
&gt; 
&gt; dimich explained the problems in https://bugs.webkit.org/show_bug.cgi?id=57789#c35

Ah, thanks for the tip. Unfortunately, this doesn&apos;t fix our problem, but at least avoiding setTimeout seems good.

The problem with my layout test is that it fails when running back-to-back with other tests. It has nothing to do with concurrency, it fails even if I run the tests with --child-processes=1.

It seems that a transaction that&apos;s created in one test isn&apos;t necessarily destructed after that test finishes, and I suspect that can cause trouble for a subsequent test.

I think something is busted with our current transactions implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397825</commentid>
    <comment_count>6</comment_count>
      <attachid>92083</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-04 05:12:28 -0700</bug_when>
    <thetext>Comment on attachment 92083
Patch

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

&gt; LayoutTests/storage/indexeddb/transaction-rollback.html:49
&gt; +}

Yes, we should never use something like commitAndContinue(). Jeremy and I have been trying to eliminate this patter as it&apos;s just plain wrong (we&apos;re also to blame for it, though :)). If you want to commit a transaction, just set the oncomplete handler.

What exactly is the problem that you are seeing? Is the onabort handler called but the transaction&apos;s changes are persisted to disk? Or is abort handler not invoked at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397849</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-04 05:59:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 92083 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92083&amp;action=review
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/transaction-rollback.html:49
&gt; &gt; +}
&gt; 
&gt; Yes, we should never use something like commitAndContinue(). Jeremy and I have been trying to eliminate this patter as it&apos;s just plain wrong (we&apos;re also to blame for it, though :)). If you want to commit a transaction, just set the oncomplete handler.

I guess I chose a bad file to copy-paste from, then :) I see commitAndContinue() in transaction-basics.html, objectstore-basics.html, database-quota.html and database-basics.html.

&gt; 
&gt; What exactly is the problem that you are seeing? Is the onabort handler called but the transaction&apos;s changes are persisted to disk? Or is abort handler not invoked at all?

Yes, the onabort handler is called, but the transaction&apos;s changes can still be read by a subsequent transaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397851</commentid>
    <comment_count>8</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-04 06:01:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 92083 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92083&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/storage/indexeddb/transaction-rollback.html:49
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Yes, we should never use something like commitAndContinue(). Jeremy and I have been trying to eliminate this patter as it&apos;s just plain wrong (we&apos;re also to blame for it, though :)). If you want to commit a transaction, just set the oncomplete handler.
&gt; 
&gt; I guess I chose a bad file to copy-paste from, then :) I see commitAndContinue() in transaction-basics.html, objectstore-basics.html, database-quota.html and database-basics.html.
&gt; 

Damn, we need to clean those up then :)

&gt; &gt; 
&gt; &gt; What exactly is the problem that you are seeing? Is the onabort handler called but the transaction&apos;s changes are persisted to disk? Or is abort handler not invoked at all?
&gt; 
&gt; Yes, the onabort handler is called, but the transaction&apos;s changes can still be read by a subsequent transaction.

Hmm, if we get that far, we must have called SQLite&apos;s abort()...not sure why this happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398691</commentid>
    <comment_count>9</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-05 06:34:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Hmm, if we get that far, we must have called SQLite&apos;s abort()...not sure why this happens.

Turns out the SQLite rollback operation failed (silently!) because we had an outstanding SQL statement that belonged to a cursor which was opened in a previous layout test.

We should make sure we close (as in finalizing the underlying SQLStatement) any open cursors before committing or rolling back a transaction.

Patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398695</commentid>
    <comment_count>10</comment_count>
      <attachid>92410</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-05 06:46:32 -0700</bug_when>
    <thetext>Created attachment 92410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398709</commentid>
    <comment_count>11</comment_count>
      <attachid>92410</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-05 07:24:01 -0700</bug_when>
    <thetext>Comment on attachment 92410
Patch

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

&gt; Source/WebCore/storage/IDBBackingStore.h:95
&gt;          virtual ~Cursor() {};

Nit: missing space between { and } ?

&gt; Source/WebCore/storage/IDBTransactionBackendInterface.h:58
&gt; +    virtual void unregisterOpenCursor(IDBCursorBackendImpl*) { };

Hmm, we have tried very hard to keep these interfaces as pure as possible....The interface is to allow two implementations: a proxy for Chromium that sends everything over IPC and a real implementation for everyone else. I don&apos;t think we should be adding methods that only need to be implemented by the Impl class but not the Proxy. At the very least, if no other solution exists, you should declare these methods as pure virtual and implement them in the proxy with an assert to guarantee that nobody will ever call them on the proxy objects without noticing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398746</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-05 08:57:14 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 92410 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92410&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.h:95
&gt; &gt;          virtual ~Cursor() {};
&gt; 
&gt; Nit: missing space between { and } ?
Oops. Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBTransactionBackendInterface.h:58
&gt; &gt; +    virtual void unregisterOpenCursor(IDBCursorBackendImpl*) { };
&gt; 
&gt; Hmm, we have tried very hard to keep these interfaces as pure as possible....The interface is to allow two implementations: a proxy for Chromium that sends everything over IPC and a real implementation for everyone else. I don&apos;t think we should be adding methods that only need to be implemented by the Impl class but not the Proxy. At the very least, if no other solution exists, you should declare these methods as pure virtual and implement them in the proxy with an assert to guarantee that nobody will ever call them on the proxy objects without noticing.

We discussed the possibility of using an abort task with the transaction for closing the cursor when a transaction is aborted. However, I keep running into the same problem (an object having a pointer to an IDB*BackendInterface when I really want the *BackendImpl).

I&apos;ll look into this some more, but upload the patch with asserts in the proxy for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398748</commentid>
    <comment_count>13</comment_count>
      <attachid>92423</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-05 08:57:39 -0700</bug_when>
    <thetext>Created attachment 92423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400496</commentid>
    <comment_count>14</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-09 07:58:06 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 92410 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92410&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBBackingStore.h:95
&gt; &gt; &gt;          virtual ~Cursor() {};
&gt; &gt; 
&gt; &gt; Nit: missing space between { and } ?
&gt; Oops. Done.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBTransactionBackendInterface.h:58
&gt; &gt; &gt; +    virtual void unregisterOpenCursor(IDBCursorBackendImpl*) { };
&gt; &gt; 
&gt; &gt; Hmm, we have tried very hard to keep these interfaces as pure as possible....The interface is to allow two implementations: a proxy for Chromium that sends everything over IPC and a real implementation for everyone else. I don&apos;t think we should be adding methods that only need to be implemented by the Impl class but not the Proxy. At the very least, if no other solution exists, you should declare these methods as pure virtual and implement them in the proxy with an assert to guarantee that nobody will ever call them on the proxy objects without noticing.
&gt; 
&gt; We discussed the possibility of using an abort task with the transaction for closing the cursor when a transaction is aborted. However, I keep running into the same problem (an object having a pointer to an IDB*BackendInterface when I really want the *BackendImpl).
&gt; 
&gt; I&apos;ll look into this some more, but upload the patch with asserts in the proxy for now.

These are the different ways to solve this that I&apos;ve come up with:

1. Let IDBObjectStoreBackendImpl keep track of open cursors. When we open a cursor, we include an abort task which calls IDBObjectStoreBackendImpl::closeOpenCursor(). Problem: a cursor needs to be able to unregister itself when it destructs, but it only has a pointer to the IDBObjectStoreBackend*Interface*. So we get the same problem again.

2. Create a special class to pass into the abort task. When the cursor is created, we can call on that class to register the opened pointer. We also need to pass a pointer to that class into the cursor so it can unregister itself. I don&apos;t like this because it feels very complex.

3. Use the current patch. I think this is the cleanest.

I see why we keep the *Interface classes abstract, but I think maybe we&apos;re being a bit too strict in that we make it very hard for two *Impl classes to talk to each other -- they&apos;re always going to be on the same side of a process boundary anyway, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401948</commentid>
    <comment_count>15</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-05-11 07:13:02 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (From update of attachment 92410 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92410&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/storage/IDBBackingStore.h:95
&gt; &gt; &gt; &gt;          virtual ~Cursor() {};
&gt; &gt; &gt; 
&gt; &gt; &gt; Nit: missing space between { and } ?
&gt; &gt; Oops. Done.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/storage/IDBTransactionBackendInterface.h:58
&gt; &gt; &gt; &gt; +    virtual void unregisterOpenCursor(IDBCursorBackendImpl*) { };
&gt; &gt; &gt; 
&gt; &gt; &gt; Hmm, we have tried very hard to keep these interfaces as pure as possible....The interface is to allow two implementations: a proxy for Chromium that sends everything over IPC and a real implementation for everyone else. I don&apos;t think we should be adding methods that only need to be implemented by the Impl class but not the Proxy. At the very least, if no other solution exists, you should declare these methods as pure virtual and implement them in the proxy with an assert to guarantee that nobody will ever call them on the proxy objects without noticing.
&gt; &gt; 
&gt; &gt; We discussed the possibility of using an abort task with the transaction for closing the cursor when a transaction is aborted. However, I keep running into the same problem (an object having a pointer to an IDB*BackendInterface when I really want the *BackendImpl).
&gt; &gt; 
&gt; &gt; I&apos;ll look into this some more, but upload the patch with asserts in the proxy for now.
&gt; 
&gt; These are the different ways to solve this that I&apos;ve come up with:
&gt; 
&gt; 1. Let IDBObjectStoreBackendImpl keep track of open cursors. When we open a cursor, we include an abort task which calls IDBObjectStoreBackendImpl::closeOpenCursor(). Problem: a cursor needs to be able to unregister itself when it destructs, but it only has a pointer to the IDBObjectStoreBackend*Interface*. So we get the same problem again.
&gt; 
&gt; 2. Create a special class to pass into the abort task. When the cursor is created, we can call on that class to register the opened pointer. We also need to pass a pointer to that class into the cursor so it can unregister itself. I don&apos;t like this because it feels very complex.
&gt; 
&gt; 3. Use the current patch. I think this is the cleanest.
&gt; 
&gt; I see why we keep the *Interface classes abstract, but I think maybe we&apos;re being a bit too strict in that we make it very hard for two *Impl classes to talk to each other -- they&apos;re always going to be on the same side of a process boundary anyway, right?

Yeah, I guess....ok, thanks for investigating the options. LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401956</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-11 07:27:07 -0700</bug_when>
    <thetext>Steve, would you like to take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403452</commentid>
    <comment_count>17</comment_count>
      <attachid>92423</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-05-13 02:58:27 -0700</bug_when>
    <thetext>Comment on attachment 92423
Patch

LGTM based on Andrei&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403463</commentid>
    <comment_count>18</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-05-13 03:21:31 -0700</bug_when>
    <thetext>Committed r86422: &lt;http://trac.webkit.org/changeset/86422&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92083</attachid>
            <date>2011-05-03 09:14:08 -0700</date>
            <delta_ts>2011-05-05 06:46:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60032-20110503171406.patch</filename>
            <type>text/plain</type>
            <size>5222</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU1OTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MWZiNTVkMTdmMjA4ZjUyNWUzNGEx
YzI2ZDk0ODdkNzA3ZjFiYTRjLi41MDUyMDY0MDQxYWEwODY1ODVkYWZhZjc2N2RmMzMwMjFlYmM5
NmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDUtMDMgIEhhbnMgV2VubmJvcmcgIDxo
YW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbmRleGVkREI6IFRlc3QgdHJhbnNhY3Rpb24gcm9sbGJhY2sKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDMyCisKKyAgICAgICAg
QWRkIGxheW91dCB0ZXN0IHRoYXQgcm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZmll
cyB0aGF0IHRoZQorICAgICAgICBkYXRhIHJlYWxseSBnZXRzIGRlbGV0ZWQuCisKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yb2xsYmFjay1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0
bWw6IEFkZGVkLgorCiAyMDExLTA1LTAzICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBuZWVkZWQgcmViYXNlbGluZSBhZnRl
ciByZXZpc2lvbiByODU0OTkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi90cmFuc2FjdGlvbi1yb2xsYmFjay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yb2xsYmFjay1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTM2Yjg5N2YyYWRlZmJiMTEwYzJhMWUyZmU0MWY1ZjllNmMwMjg2OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNr
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMyIEBACitUZXN0IEluZGV4ZWREQiB0cmFuc2FjdGlv
biByb2xsYmFjay4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgJ3dlYmtp
dEluZGV4ZWREQicgaW4gd2luZG93IGlzIHRydWUKK1BBU1Mgd2Via2l0SW5kZXhlZERCID09IG51
bGwgaXMgZmFsc2UKK3dlYmtpdEluZGV4ZWREQi5vcGVuKCd0cmFuc2FjdGlvbi1yb2xsYmFjaycp
CitvcGVuU3VjY2VzcygpOgorZGIgPSBldmVudC50YXJnZXQucmVzdWx0CityZXF1ZXN0ID0gZGIu
c2V0VmVyc2lvbigndmVyc2lvbiAxJykKK2NsZWFuRGF0YWJhc2UoKToKK0RlbGV0ZWQgYWxsIG9i
amVjdCBzdG9yZXMuCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnbXlPYmplY3RTdG9yZScpCitQQVNT
IGRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIGlzIDEKK3N0YXJ0VHJhbnNhY3Rpb24oKToKK3Ry
YW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydteU9iamVjdFN0b3JlJ10sIHdlYmtpdElEQlRy
YW5zYWN0aW9uLlJFQURfV1JJVEUpCitzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdt
eU9iamVjdFN0b3JlJykKK3N0b3JlLmFkZCgnZm9vJywgJ2JhcicpCithZGRTdWNjZXNzKCk6CitQ
QVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgJ2JhcicKK2Fib3J0Q2FsbGJhY2soKToKK1RyYW5z
YWN0aW9uIHdhcyBhYm9ydGVkLgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ215T2Jq
ZWN0U3RvcmUnXSwgd2Via2l0SURCVHJhbnNhY3Rpb24uUkVBRCkKK3N0b3JlID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ215T2JqZWN0U3RvcmUnKQorc3RvcmUuZ2V0KCdiYXInKQorZ2V0U3Vj
Y2VzcygpOgorRkFJTCBldmVudC50YXJnZXQucmVzdWx0IHNob3VsZCBiZSB1bmRlZmluZWQgKG9m
IHR5cGUgdW5kZWZpbmVkKS4gV2FzIGZvbyAob2YgdHlwZSBzdHJpbmcpLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yb2xsYmFjay5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjczM2QxN2Y3ZjZkMDFkYjBiNGRiOTZjZDk3YjI0NWVhYjgxYTMzNjQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yb2xs
YmFjay5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVk
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0
IEluZGV4ZWREQiB0cmFuc2FjdGlvbiByb2xsYmFjay4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUoIid3ZWJraXRJbmRleGVkREIn
IGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtpdEluZGV4ZWREQiA9PSBudWxs
Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ3Ry
YW5zYWN0aW9uLXJvbGxiYWNrJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNj
ZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
CitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzKCk6Iik7
CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCd2ZXJz
aW9uIDEnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY2xlYW5EYXRhYmFzZTsKKyAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24g
Y29tbWl0QW5kQ29udGludWUoY29udGludWVGdW5jdGlvbikKK3sKKyAgICB3aW5kb3cuc2V0VGlt
ZW91dChjb250aW51ZUZ1bmN0aW9uLCAwKTsKK30KKworZnVuY3Rpb24gY2xlYW5EYXRhYmFzZSgp
Cit7CisgICAgZGVidWcoImNsZWFuRGF0YWJhc2UoKToiKTsKKworICAgIGRlbGV0ZUFsbE9iamVj
dFN0b3JlcyhkYik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ215T2Jq
ZWN0U3RvcmUnKSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIs
ICIxIik7CisgICAgY29tbWl0QW5kQ29udGludWUoc3RhcnRUcmFuc2FjdGlvbik7Cit9CisKK2Z1
bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oKQoreworICAgIGRlYnVnKCJzdGFydFRyYW5zYWN0aW9u
KCk6Iik7CisKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlv
biA9IGRiLnRyYW5zYWN0aW9uKFsnbXlPYmplY3RTdG9yZSddLCB3ZWJraXRJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKSIpOworICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSBhYm9ydENhbGxiYWNr
OworICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSB1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFj
azsKKworICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnNhY3Rpb24u
b2JqZWN0U3RvcmUoJ215T2JqZWN0U3RvcmUnKSIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5hZGQoJ2ZvbycsICdiYXInKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gYWRk
U3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
K30KKworZnVuY3Rpb24gYWRkU3VjY2VzcygpCit7CisgICAgZGVidWcoImFkZFN1Y2Nlc3MoKToi
KTsKKyAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICInYmFyJyIpOworICAgIHRy
YW5zYWN0aW9uLmFib3J0KCk7Cit9CisKK2Z1bmN0aW9uIGFib3J0Q2FsbGJhY2soKQoreworICAg
IGRlYnVnKCJhYm9ydENhbGxiYWNrKCk6Iik7CisgICAgZGVidWcoJ1RyYW5zYWN0aW9uIHdhcyBh
Ym9ydGVkLicpOworCisgICAgd2luZG93LnRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygidHJhbnNh
Y3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ215T2JqZWN0U3RvcmUnXSwgd2Via2l0SURCVHJhbnNh
Y3Rpb24uUkVBRCkiKTsKKyAgICB3aW5kb3cuc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHRy
YW5zYWN0aW9uLm9iamVjdFN0b3JlKCdteU9iamVjdFN0b3JlJykiKTsKKyAgICByZXF1ZXN0ID0g
ZXZhbEFuZExvZygic3RvcmUuZ2V0KCdiYXInKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0U3VjY2Vz
czsKK30KKworZnVuY3Rpb24gZ2V0U3VjY2VzcygpCit7CisgICAgZGVidWcoImdldFN1Y2Nlc3Mo
KToiKTsKKyAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJ1bmRlZmluZWQiKTsK
KyAgICBkb25lKCk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0
KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92410</attachid>
            <date>2011-05-05 06:46:32 -0700</date>
            <delta_ts>2011-05-05 08:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60032-20110505144629.patch</filename>
            <type>text/plain</type>
            <size>15551</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2M2Y5MTM1ZjIyYWE1ZjlhNGM3YzkwNTE2ZGYxZTFjYmFkZGU2NmU1Li4yOTk5NjNl
ZGViZmJkY2JiZDMwMTI2YmVkOWFlZjEwM2ZiMjg5YjBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMDUtMDUgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IFRyYW5z
YWN0aW9uIHJvbGxiYWNrIHByZXZlbnRlZCBieSBvcGVuIFNRTGl0ZSBzdGF0ZW1lbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDMyCisKKyAgICAg
ICAgQWRkIHRlc3QgZm9yIHZlcnlmaW5nIHRoYXQgdHJhbnNhY3Rpb24gcm9sbC1iYWNrIHdvcmtz
LCBldmVuIHdpdGggYQorICAgICAgICBwcmV2aW91c2x5IG9wZW5lZCBjdXJzb3Igc3RpbGwgYXJv
dW5kLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2st
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1yb2xsYmFjay5odG1sOiBBZGRlZC4KKwogMjAxMS0wNS0wNSAgTU9SSVRBIEhhamltZSA8
bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeGVkIGEgc3ludGF4
IGVycm9yIG9uIGV4cGVjdGF0aW9ucyBmaWxlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM5OTBhYWNiMjdlZGNkM2VkOGQwM2UyZjgzMjdkYWUwZThmOTA5MTEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlv
bi1yb2xsYmFjay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNyBAQAorVGVzdCBJbmRleGVkREIg
dHJhbnNhY3Rpb24gcm9sbGJhY2suCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTICd3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyBpcyB0cnVlCitQQVNTIHdlYmtpdEluZGV4
ZWREQiA9PSBudWxsIGlzIGZhbHNlCit3ZWJraXRJbmRleGVkREIub3BlbigndHJhbnNhY3Rpb24t
cm9sbGJhY2snKQorb3BlblN1Y2Nlc3MoKToKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorcmVx
dWVzdCA9IGRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpCitjbGVhbkRhdGFiYXNlKCk6Cit0cmFu
c2FjdGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMu
CitkYi5jcmVhdGVPYmplY3RTdG9yZSgnbXlPYmplY3RTdG9yZScpCitQQVNTIGRiLm9iamVjdFN0
b3JlTmFtZXMubGVuZ3RoIGlzIDEKK3NldFZlcnNpb25Db21wbGV0ZSgpOgordHJhbnNhY3Rpb24g
PSBkYi50cmFuc2FjdGlvbihbJ215T2JqZWN0U3RvcmUnXSwgd2Via2l0SURCVHJhbnNhY3Rpb24u
UkVBRF9XUklURSkKK3N0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ215T2JqZWN0U3Rv
cmUnKQorc3RvcmUuYWRkKCdyb2xsYmFja1ZhbHVlJywgJ3JvbGxiYWNrS2V5MTIzJykKK2FkZFN1
Y2Nlc3MoKToKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAncm9sbGJhY2tLZXkxMjMnCitz
dG9yZS5vcGVuQ3Vyc29yKCkKK29wZW5DdXJzb3JTdWNjZXNzKCk6CitjdXJzb3IgPSBldmVudC50
YXJnZXQucmVzdWx0CithYm9ydENhbGxiYWNrKCk6CitUcmFuc2FjdGlvbiB3YXMgYWJvcnRlZC4K
K3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydteU9iamVjdFN0b3JlJ10sIHdlYmtpdElE
QlRyYW5zYWN0aW9uLlJFQUQpCitzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdteU9i
amVjdFN0b3JlJykKK3N0b3JlLmdldCgncm9sbGJhY2tLZXkxMjMnKQorZ2V0U3VjY2VzcygpOgor
UEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIHVuZGVmaW5lZAorUEFTUyBjdXJzb3IudmFsdWUg
aXMgJ3JvbGxiYWNrVmFsdWUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dHJhbnNhY3Rpb24tcm9sbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA0NjQ2NWIyMThjYjZiN2I0
NGMxOTQ4ODFlYTFmMWYzNjA4YmNhZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMDcg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQiB0cmFuc2FjdGlvbiBy
b2xsYmFjay4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBzaG91bGRCZVRydWUoIid3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3Vs
ZEJlRmFsc2UoIndlYmtpdEluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICByZXF1ZXN0ID0gZXZh
bEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ3RyYW5zYWN0aW9uLXJvbGxiYWNrJykiKTsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2Vzcygp
Cit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzKCk6Iik7CisgICAgd2luZG93LmRiID0gZXZhbEFu
ZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coInJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOworICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gY2xlYW5EYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2xlYW5EYXRhYmFzZSgpCit7CisgICAg
ZGVidWcoImNsZWFuRGF0YWJhc2UoKToiKTsKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICB0cmFuc2Fj
dGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdHJhbnNhY3Rpb24u
b25jb21wbGV0ZSA9IHNldFZlcnNpb25Db21wbGV0ZTsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0
b3JlcyhkYik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ215T2JqZWN0
U3RvcmUnKSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIsICIx
Iik7Cit9CisKK2Z1bmN0aW9uIHNldFZlcnNpb25Db21wbGV0ZSgpCit7CisgICAgZGVidWcoInNl
dFZlcnNpb25Db21wbGV0ZSgpOiIpOworCisgICAgd2luZG93LnRyYW5zYWN0aW9uID0gZXZhbEFu
ZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ215T2JqZWN0U3RvcmUnXSwgd2Vi
a2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkiKTsKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0
ID0gYWJvcnRDYWxsYmFjazsKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gdW5leHBlY3Rl
ZENvbXBsZXRlQ2FsbGJhY2s7CisKKyAgICB3aW5kb3cuc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9y
ZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdteU9iamVjdFN0b3JlJykiKTsKKyAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCdyb2xsYmFja1ZhbHVlJywgJ3JvbGxiYWNrS2V5
MTIzJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZFN1Y2Nlc3M7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGFkZFN1
Y2Nlc3MoKQoreworICAgIGRlYnVnKCJhZGRTdWNjZXNzKCk6Iik7CisgICAgc2hvdWxkQmUoImV2
ZW50LnRhcmdldC5yZXN1bHQiLCAiJ3JvbGxiYWNrS2V5MTIzJyIpOworCisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coInN0b3JlLm9wZW5DdXJzb3IoKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gb3BlbkN1cnNvclN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5DdXJzb3JTdWNjZXNzKCkKK3sKKyAgICBk
ZWJ1Zygib3BlbkN1cnNvclN1Y2Nlc3MoKToiKTsKKyAgICB3aW5kb3cuY3Vyc29yID0gZXZhbEFu
ZExvZygiY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgdHJhbnNhY3Rpb24u
YWJvcnQoKTsKK30KKworZnVuY3Rpb24gYWJvcnRDYWxsYmFjaygpCit7CisgICAgZGVidWcoImFi
b3J0Q2FsbGJhY2soKToiKTsKKyAgICBkZWJ1ZygnVHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQuJyk7
CisKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRi
LnRyYW5zYWN0aW9uKFsnbXlPYmplY3RTdG9yZSddLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFE
KSIpOworICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnNhY3Rpb24u
b2JqZWN0U3RvcmUoJ215T2JqZWN0U3RvcmUnKSIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5nZXQoJ3JvbGxiYWNrS2V5MTIzJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldFN1Y2Nl
c3M7Cit9CisKK2Z1bmN0aW9uIGdldFN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJnZXRTdWNjZXNz
KCk6Iik7CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAidW5kZWZpbmVkIik7
CisKKyAgICBzaG91bGRCZSgiY3Vyc29yLnZhbHVlIiwgIidyb2xsYmFja1ZhbHVlJyIpOworICAg
IGRvbmUoKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3QoKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzMwNDNjNWY1ZTFl
MjE0NGQ3MDI0ZTI3YTZhZTc1OGI2YzY4NzQ4ZS4uNmE5NjljNTc2MWU1MTUxNDE1YWM0MThhNzI2
OWU4NjZlY2MxODljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTA1LTA1ICBI
YW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCOiBUcmFuc2FjdGlvbiByb2xsYmFj
ayBwcmV2ZW50ZWQgYnkgb3BlbiBTUUxpdGUgc3RhdGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDAzMgorCisgICAgICAgIExldCB0aGUgSURC
VHJhbnNhY3Rpb25iYWNrZW5kSW1wbCBrZWVwIHRyYWNrIG9mIGFsbCBvcGVuIGN1cnNvcnMsIGFu
ZAorICAgICAgICAiY2xvc2UiIHRoZW0gKGkuZS4gZmluYWxpemluZyB0aGUgdW5kZXJseWluZyBT
UUxpdGVTdGF0ZW1lbnQpIGJlZm9yZQorICAgICAgICBjb21taXR0aW5nIG9yIHJvbGxpbmcgYmFj
ayB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgZml4ZXMgdGhlIHByb2JsZW0KKyAgICAgICAgd2l0aCBv
cGVuZWQgY3Vyc29ycyBwcmV2ZW50aW5nIHRyYW5zYWN0aW9uIHJvbGxiYWNrLgorCisgICAgICAg
IFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKKworICAg
ICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
SW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnVucmVnaXN0ZXJPcGVuQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9w
ZW5DdXJzb3JzKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpyZWdpc3Rl
ck9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcik6CisKIDIwMTEtMDUtMDUgIFlvdW5nIEhhbiBM
ZWUgIDxqb3licm9AY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEg
T3N6dHJvZ29uw6FjLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKaW5k
ZXggNGI5NjQ0MjJhZTA1NzQxOTU1Y2YyNzIxZDJiOTYwNTE4MzcxMGYwMC4uYmRiNTRmNzAyNTk5
ZjZmMjRlZDYzMjk3M2QwMzczODliNTlkODY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsK
ICAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHt9OwogICAg
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAKaW5kZXggNmFlMzYxNjQ0NDUwMWExNTBiYzc0ZTYyNjRlN2FmMGUyMGMzMDRjNC4uYjhiYzFl
MzI1MzkzNzlkYWE3ZDczYTJkMmEzOTAzMjkxOGM3NTUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTQ4LDEwICs0OCwxMiBAQCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYwogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
ICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCiB7CisgICAgbV90cmFuc2FjdGlvbi0+
cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwogfQogCiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklE
QkN1cnNvckJhY2tlbmRJbXBsKCkKIHsKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3Bl
bkN1cnNvcih0aGlzKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgSURCQ3Vyc29yQmFja2VuZEltcGw6
OmRpcmVjdGlvbigpIGNvbnN0CkBAIC0xMjAsNiArMTIyLDEyIEBAIHZvaWQgSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsCiAgICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlRnVuY3Rpb24obV9jdXJzb3ItPnByaW1h
cnlLZXkoKSwgcHJwQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiB9CiAKK3Zv
aWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9jdXJzb3IpCisg
ICAgICAgIG1fY3Vyc29yLT5jbG9zZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAyY2UzODgxY2ZjZmZkOWQ4ZWZkZDBl
NjM5MTMxYTI1YmI1ZGYxYWM3Li5lYzU4NTIwNzgyN2EyZDIyYTNkZTJjYTdhODZlM2RlYmIzYzc2
MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
CkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgogICAgIElE
QkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiwgQ3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5MWE2ZDc4
M2YxYTIxMTdjMmQ0NjdiOTkxODAyYzMwNDRhZTNjOTNmLi4zYjBkZDMzMjJiZTM1YmMxZWFhMjEz
NzZmM2JjYWFlMjkwNThkOTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTgxMiw2ICs4MTIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIoKSA9IDA7IC8vIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgaXMgYWN0dWFs
bHkgdXNlZCwgc28gZHJvcCBpdC4KICAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbG9h
ZEN1cnJlbnRSb3coKSA9IDA7CiAgICAgYm9vbCBmaXJzdFNlZWsoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAppbmRleCBmNDJhMWUxZjkz
YWQyNGRiZjgyODM2MjJmYmY3ZDc4YzkwZmZmNTE2Li4xYTIxYzU4ZDM3ODhmNDYxYTBhOGQyZmYw
ODBmM2UzZjUzODQyZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNR
TGl0ZUJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxp
dGVCYWNraW5nU3RvcmUuY3BwCkBAIC03MDgsNiArNzA4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKCkgPSAwOwogICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IG1fcXVlcnkuZmluYWxpemUoKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50
Um93RXhpc3RzKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXggYjViODgzZjBmMjU1ZjIzMTg3MjY3NGNlM2Y0
NjM4ZDc3ZDZmODFiNS4uZDczNjc1ODA4NzAxYzA2ZGVlZjZiMzlkOWM1NGZiYjFiOTg1YjQzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCIKQEAgLTExMyw2ICsxMTQsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmFib3J0KCkKICAgICBtX3N0YXRlID0gRmluaXNoZWQ7CiAgICAgbV90YXNrVGltZXIuc3Rv
cCgpOwogICAgIG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOworCisgICAgY2xvc2VPcGVuQ3Vyc29y
cygpOwogICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiAKICAgICAvLyBSdW4gdGhlIGFi
b3J0IHRhc2tzLCBpZiBhbnkuCkBAIC0xMjgsNiArMTMxLDE2IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6YWJvcnQoKQogICAgIG1fZGF0YWJhc2UgPSAwOwogfQogCit2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNr
ZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1cnNvcik7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dW5yZWdpc3Rlck9wZW5DdXJzb3IoSURC
Q3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKK3sKKyAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShj
dXJzb3IpOworfQorCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRpZENvbXBsZXRl
VGFza0V2ZW50cygpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCkBAIC0xNjYsNiAr
MTc5LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAgIEFT
U0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwogCiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVkOworICAg
IGNsb3NlT3BlbkN1cnNvcnMoKTsKICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKICAgICBt
X2NhbGxiYWNrcy0+b25Db21wbGV0ZSgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CkBAIC0yMTAsNiArMjI0LDEz
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZChU
aW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJCiAgICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKIH0KIAordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9wZW5D
dXJzb3JzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPjo6aXRl
cmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5DdXJzb3JzLmVuZCgp
OyArK2kpCisgICAgICAgICgqaSktPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigp
OworfQorCiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4
IDkxMmEyMzk4MzA1NmE3NWNlZjY3ZTc5M2I2NTkxMWQxZTA3ZWRjMzcuLjMyMGQyYmM2YjQxNTYx
NDVhYjg1ZTk2ZWJiYWJjNmM1OTIxMzMwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw2ICs1Miw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiAgICAgdmly
dHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IG1fY2FsbGJhY2tzID0gY2FsbGJhY2tzOyB9
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1w
bCopOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNr
ZW5kSW1wbCopOwogCiAgICAgdm9pZCBydW4oKTsKIApAQCAtNjksNiArNzIsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCB0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiopOwogICAgIHZvaWQgdGFza0V2ZW50VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiopOworICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwogCiAgICAgUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsKICAgICB1bnNpZ25lZCBzaG9y
dCBtX21vZGU7CkBAIC04Nyw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gbV90YXNrVGltZXI7CiAgICAgVGltZXI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gbV90YXNrRXZlbnRUaW1lcjsKICAgICBpbnQgbV9wZW5kaW5nRXZlbnRzOwor
CisgICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3BlbkN1cnNvcnM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjNjJmNjFlNTc5YmY3
ZWQ5MGIyYjlkOTRjZDRiMzBmMjg5NDA4MDZiLi45ODYyNGNlYTEzZTVlZDZmYTNjOWRiN2MwMjMy
YWE3NWVhYThiODk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDsKIGNsYXNzIElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tz
OwogCkBAIC01Myw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxl
dGVUYXNrRXZlbnRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwq
KSB7IH07CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJh
Y2tlbmRJbXBsKikgeyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92423</attachid>
            <date>2011-05-05 08:57:39 -0700</date>
            <delta_ts>2011-05-13 02:58:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60032-20110505165737.patch</filename>
            <type>text/plain</type>
            <size>18397</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2M2Y5MTM1ZjIyYWE1ZjlhNGM3YzkwNTE2ZGYxZTFjYmFkZGU2NmU1Li4yOTk5NjNl
ZGViZmJkY2JiZDMwMTI2YmVkOWFlZjEwM2ZiMjg5YjBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMDUtMDUgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IFRyYW5z
YWN0aW9uIHJvbGxiYWNrIHByZXZlbnRlZCBieSBvcGVuIFNRTGl0ZSBzdGF0ZW1lbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDMyCisKKyAgICAg
ICAgQWRkIHRlc3QgZm9yIHZlcnlmaW5nIHRoYXQgdHJhbnNhY3Rpb24gcm9sbC1iYWNrIHdvcmtz
LCBldmVuIHdpdGggYQorICAgICAgICBwcmV2aW91c2x5IG9wZW5lZCBjdXJzb3Igc3RpbGwgYXJv
dW5kLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2st
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1yb2xsYmFjay5odG1sOiBBZGRlZC4KKwogMjAxMS0wNS0wNSAgTU9SSVRBIEhhamltZSA8
bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeGVkIGEgc3ludGF4
IGVycm9yIG9uIGV4cGVjdGF0aW9ucyBmaWxlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM5OTBhYWNiMjdlZGNkM2VkOGQwM2UyZjgzMjdkYWUwZThmOTA5MTEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlv
bi1yb2xsYmFjay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNyBAQAorVGVzdCBJbmRleGVkREIg
dHJhbnNhY3Rpb24gcm9sbGJhY2suCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTICd3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyBpcyB0cnVlCitQQVNTIHdlYmtpdEluZGV4
ZWREQiA9PSBudWxsIGlzIGZhbHNlCit3ZWJraXRJbmRleGVkREIub3BlbigndHJhbnNhY3Rpb24t
cm9sbGJhY2snKQorb3BlblN1Y2Nlc3MoKToKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorcmVx
dWVzdCA9IGRiLnNldFZlcnNpb24oJ3ZlcnNpb24gMScpCitjbGVhbkRhdGFiYXNlKCk6Cit0cmFu
c2FjdGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMu
CitkYi5jcmVhdGVPYmplY3RTdG9yZSgnbXlPYmplY3RTdG9yZScpCitQQVNTIGRiLm9iamVjdFN0
b3JlTmFtZXMubGVuZ3RoIGlzIDEKK3NldFZlcnNpb25Db21wbGV0ZSgpOgordHJhbnNhY3Rpb24g
PSBkYi50cmFuc2FjdGlvbihbJ215T2JqZWN0U3RvcmUnXSwgd2Via2l0SURCVHJhbnNhY3Rpb24u
UkVBRF9XUklURSkKK3N0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ215T2JqZWN0U3Rv
cmUnKQorc3RvcmUuYWRkKCdyb2xsYmFja1ZhbHVlJywgJ3JvbGxiYWNrS2V5MTIzJykKK2FkZFN1
Y2Nlc3MoKToKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAncm9sbGJhY2tLZXkxMjMnCitz
dG9yZS5vcGVuQ3Vyc29yKCkKK29wZW5DdXJzb3JTdWNjZXNzKCk6CitjdXJzb3IgPSBldmVudC50
YXJnZXQucmVzdWx0CithYm9ydENhbGxiYWNrKCk6CitUcmFuc2FjdGlvbiB3YXMgYWJvcnRlZC4K
K3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydteU9iamVjdFN0b3JlJ10sIHdlYmtpdElE
QlRyYW5zYWN0aW9uLlJFQUQpCitzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdteU9i
amVjdFN0b3JlJykKK3N0b3JlLmdldCgncm9sbGJhY2tLZXkxMjMnKQorZ2V0U3VjY2VzcygpOgor
UEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIHVuZGVmaW5lZAorUEFTUyBjdXJzb3IudmFsdWUg
aXMgJ3JvbGxiYWNrVmFsdWUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dHJhbnNhY3Rpb24tcm9sbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA0NjQ2NWIyMThjYjZiN2I0
NGMxOTQ4ODFlYTFmMWYzNjA4YmNhZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMDcg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQiB0cmFuc2FjdGlvbiBy
b2xsYmFjay4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBzaG91bGRCZVRydWUoIid3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3Vs
ZEJlRmFsc2UoIndlYmtpdEluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICByZXF1ZXN0ID0gZXZh
bEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ3RyYW5zYWN0aW9uLXJvbGxiYWNrJykiKTsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVuU3VjY2Vzcygp
Cit7CisgICAgZGVidWcoIm9wZW5TdWNjZXNzKCk6Iik7CisgICAgd2luZG93LmRiID0gZXZhbEFu
ZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coInJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOworICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gY2xlYW5EYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2xlYW5EYXRhYmFzZSgpCit7CisgICAg
ZGVidWcoImNsZWFuRGF0YWJhc2UoKToiKTsKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICB0cmFuc2Fj
dGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdHJhbnNhY3Rpb24u
b25jb21wbGV0ZSA9IHNldFZlcnNpb25Db21wbGV0ZTsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0
b3JlcyhkYik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ215T2JqZWN0
U3RvcmUnKSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIsICIx
Iik7Cit9CisKK2Z1bmN0aW9uIHNldFZlcnNpb25Db21wbGV0ZSgpCit7CisgICAgZGVidWcoInNl
dFZlcnNpb25Db21wbGV0ZSgpOiIpOworCisgICAgd2luZG93LnRyYW5zYWN0aW9uID0gZXZhbEFu
ZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ215T2JqZWN0U3RvcmUnXSwgd2Vi
a2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkiKTsKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0
ID0gYWJvcnRDYWxsYmFjazsKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gdW5leHBlY3Rl
ZENvbXBsZXRlQ2FsbGJhY2s7CisKKyAgICB3aW5kb3cuc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9y
ZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdteU9iamVjdFN0b3JlJykiKTsKKyAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCdyb2xsYmFja1ZhbHVlJywgJ3JvbGxiYWNrS2V5
MTIzJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZFN1Y2Nlc3M7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGFkZFN1
Y2Nlc3MoKQoreworICAgIGRlYnVnKCJhZGRTdWNjZXNzKCk6Iik7CisgICAgc2hvdWxkQmUoImV2
ZW50LnRhcmdldC5yZXN1bHQiLCAiJ3JvbGxiYWNrS2V5MTIzJyIpOworCisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coInN0b3JlLm9wZW5DdXJzb3IoKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gb3BlbkN1cnNvclN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5DdXJzb3JTdWNjZXNzKCkKK3sKKyAgICBk
ZWJ1Zygib3BlbkN1cnNvclN1Y2Nlc3MoKToiKTsKKyAgICB3aW5kb3cuY3Vyc29yID0gZXZhbEFu
ZExvZygiY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgdHJhbnNhY3Rpb24u
YWJvcnQoKTsKK30KKworZnVuY3Rpb24gYWJvcnRDYWxsYmFjaygpCit7CisgICAgZGVidWcoImFi
b3J0Q2FsbGJhY2soKToiKTsKKyAgICBkZWJ1ZygnVHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQuJyk7
CisKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRi
LnRyYW5zYWN0aW9uKFsnbXlPYmplY3RTdG9yZSddLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFE
KSIpOworICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnNhY3Rpb24u
b2JqZWN0U3RvcmUoJ215T2JqZWN0U3RvcmUnKSIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5nZXQoJ3JvbGxiYWNrS2V5MTIzJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldFN1Y2Nl
c3M7Cit9CisKK2Z1bmN0aW9uIGdldFN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJnZXRTdWNjZXNz
KCk6Iik7CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAidW5kZWZpbmVkIik7
CisKKyAgICBzaG91bGRCZSgiY3Vyc29yLnZhbHVlIiwgIidyb2xsYmFja1ZhbHVlJyIpOworICAg
IGRvbmUoKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3QoKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzMwNDNjNWY1ZTFl
MjE0NGQ3MDI0ZTI3YTZhZTc1OGI2YzY4NzQ4ZS4uNmE5NjljNTc2MWU1MTUxNDE1YWM0MThhNzI2
OWU4NjZlY2MxODljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTA1LTA1ICBI
YW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCOiBUcmFuc2FjdGlvbiByb2xsYmFj
ayBwcmV2ZW50ZWQgYnkgb3BlbiBTUUxpdGUgc3RhdGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDAzMgorCisgICAgICAgIExldCB0aGUgSURC
VHJhbnNhY3Rpb25iYWNrZW5kSW1wbCBrZWVwIHRyYWNrIG9mIGFsbCBvcGVuIGN1cnNvcnMsIGFu
ZAorICAgICAgICAiY2xvc2UiIHRoZW0gKGkuZS4gZmluYWxpemluZyB0aGUgdW5kZXJseWluZyBT
UUxpdGVTdGF0ZW1lbnQpIGJlZm9yZQorICAgICAgICBjb21taXR0aW5nIG9yIHJvbGxpbmcgYmFj
ayB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgZml4ZXMgdGhlIHByb2JsZW0KKyAgICAgICAgd2l0aCBv
cGVuZWQgY3Vyc29ycyBwcmV2ZW50aW5nIHRyYW5zYWN0aW9uIHJvbGxiYWNrLgorCisgICAgICAg
IFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLmh0bWwKKworICAg
ICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
SW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnVucmVnaXN0ZXJPcGVuQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9w
ZW5DdXJzb3JzKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpyZWdpc3Rl
ck9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcik6CisKIDIwMTEtMDUtMDUgIFlvdW5nIEhhbiBM
ZWUgIDxqb3licm9AY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEg
T3N6dHJvZ29uw6FjLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKaW5k
ZXggNGI5NjQ0MjJhZTA1NzQxOTU1Y2YyNzIxZDJiOTYwNTE4MzcxMGYwMC4uMTAyZGVhNjMzN2Uy
NzU5M2VkNTVmZWNiOWQ3N2M2MzE2YWMzOTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oCkBAIC05MSw3ICs5MSw4IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsK
ICAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOwotICAgICAgICB2aXJ0
dWFsIH5DdXJzb3IoKSB7fTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOworICAg
ICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH07CiAgICAgfTsKIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcAppbmRleCA2YWUzNjE2NDQ0NTAxYTE1MGJjNzRlNjI2NGU3YWYwZTIwYzMwNGM0Li5i
OGJjMWUzMjUzOTM3OWRhYTdkNzNhMmQyYTM5MDMyOTE4Yzc1NTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtNDgsMTAgKzQ4LDEy
IEBAIElEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQogICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKIHsKKyAgICBtX3RyYW5zYWN0
aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7CiB9CiAKIElEQkN1cnNvckJhY2tlbmRJbXBs
Ojp+SURCQ3Vyc29yQmFja2VuZEltcGwoKQogeworICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0
ZXJPcGVuQ3Vyc29yKHRoaXMpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6ZGlyZWN0aW9uKCkgY29uc3QKQEAgLTEyMCw2ICsxMjIsMTIgQEAgdm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywKICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5jdGlvbihtX2N1cnNvci0+
cHJpbWFyeUtleSgpLCBwcnBDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKIH0K
IAordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UoKQoreworICAgIGlmIChtX2N1cnNv
cikKKyAgICAgICAgbV9jdXJzb3ItPmNsb3NlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDJjZTM4ODFjZmNmZmQ5ZDhl
ZmRkMGU2MzkxMzFhMjViYjVkZjFhYzcuLmVjNTg1MjA3ODI3YTJkMjJhM2RlMmNhN2E4NmUzZGVi
YjNjNzYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGNsb3NlKCk7CiAKIHByaXZhdGU6CiAg
ICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDkx
YTZkNzgzZjFhMjExN2MyZDQ2N2I5OTE4MDJjMzA0NGFlM2M5M2YuLjNiMGRkMzMyMmJlMzViYzFl
YWEyMTM3NmYzYmNhYWUyOTA1OGQ5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtODEyLDYgKzgxMiw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllcigpID0gMDsgLy8gRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBh
Y3R1YWxseSB1c2VkLCBzbyBkcm9wIGl0LgogICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJ
ZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBsb2FkQ3VycmVudFJvdygpID0gMDsKICAgICBib29sIGZpcnN0U2VlaygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCmluZGV4IGY0MmEx
ZTFmOTNhZDI0ZGJmODI4MzYyMmZiZjdkNzhjOTBmZmY1MTYuLjFhMjFjNThkMzc4OGY0NjFhMGE4
ZDJmZjA4MGYzZTNmNTM4NDJmMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKQEAgLTcwOCw2ICs3MDgsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIoKSA9IDA7CiAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgbV9xdWVyeS5maW5hbGl6ZSgpOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGN1
cnJlbnRSb3dFeGlzdHMoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBiNWI4ODNmMGYyNTVmMjMxODcyNjc0
Y2UzZjQ2MzhkNzdkNmY4MWI1Li5kNzM2NzU4MDg3MDFjMDZkZWVmNmIzOWQ5YzU0ZmJiMWI5ODVi
NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgpAQCAtMTEzLDYgKzExNCw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6YWJvcnQoKQogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKICAgICBtX3Rhc2tUaW1l
ci5zdG9wKCk7CiAgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZU9wZW5D
dXJzb3JzKCk7CiAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKIAogICAgIC8vIFJ1biB0
aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KQEAgLTEyOCw2ICsxMzEsMTYgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAgICAgbV9kYXRhYmFzZSA9IDA7CiB9CiAKK3Zv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ckJhY2tlbmRJbXBsKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp1bnJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVt
b3ZlKGN1cnNvcik7Cit9CisKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZGlkQ29t
cGxldGVUYXNrRXZlbnRzKCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKQEAgLTE2
Niw2ICsxNzksNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CiAKICAgICBtX3N0YXRlID0gRmluaXNoZWQ7
CisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwogICAgIG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwog
ICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKCk7CiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKQEAgLTIxMCw2ICsy
MjQsMTMgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZp
cmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEkKICAgICAgICAgbV90YXNrVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3Nl
T3BlbkN1cnNvcnMoKQoreworICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+
OjppdGVyYXRvciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMu
ZW5kKCk7ICsraSkKKyAgICAgICAgKCppKS0+Y2xvc2UoKTsKKyAgICBtX29wZW5DdXJzb3JzLmNs
ZWFyKCk7Cit9CisKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgK
aW5kZXggOTEyYTIzOTgzMDU2YTc1Y2VmNjdlNzkzYjY1OTExZDFlMDdlZGMzNy4uMzIwZDJiYzZi
NDE1NjE0NWFiODVlOTZlYmJhYmM2YzU5MjEzMzBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDYgKzUyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElE
QlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpIHsgbV9jYWxsYmFja3MgPSBjYWxsYmFj
a3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tl
bmRJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNv
ckJhY2tlbmRJbXBsKik7CiAKICAgICB2b2lkIHJ1bigpOwogCkBAIC02OSw2ICs3Miw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+Kik7CiAgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKICAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbV9vYmplY3RTdG9yZU5hbWVzOwogICAgIHVuc2lnbmVk
IHNob3J0IG1fbW9kZTsKQEAgLTg3LDYgKzkxLDggQEAgcHJpdmF0ZToKICAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKICAgICBUaW1lcjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tFdmVudFRpbWVyOwogICAgIGludCBtX3BlbmRpbmdFdmVu
dHM7CisKKyAgICBIYXNoU2V0PElEQkN1cnNvckJhY2tlbmRJbXBsKj4gbV9vcGVuQ3Vyc29yczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM2MmY2MWU1
NzliZjdlZDkwYjJiOWQ5NGNkNGIzMGYyODk0MDgwNmIuLjg1NmI0MzljYzkwYmYyYjVmOTVlYjli
YzdiMjU4NmVhNTM5ODQ0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzYsNiArMzYsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOwogY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxs
YmFja3M7CiAKQEAgLTUzLDYgKzU0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5k
SW1wbCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vy
c29yQmFja2VuZEltcGwqKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0ODE3MjViMzMzOWVhY2Q4NjhlNWJmYzNmODFlMzA5
MjNkOGVjNzQuLjg1YjEwYTRmZGUyNzljZGI2ODg0NjM4Yzk0YmFjZTUyZTQ3MWYzOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMDUgIEhhbnMg
V2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IFRyYW5zYWN0aW9uIHJvbGxiYWNrIHBy
ZXZlbnRlZCBieSBvcGVuIFNRTGl0ZSBzdGF0ZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMDMyCisKKyAgICAgICAgSW1wbGVtZW50IHR3byBu
ZXcgbWV0aG9kcyBpbiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuCisKKyAgICAgICAg
KiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6cmVnaXN0ZXJPcGVuQ3Vyc29yKToKKyAgICAgICAg
KFdlYktpdDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6OnVucmVnaXN0ZXJPcGVuQ3Vyc29y
KToKKyAgICAgICAgKiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaDoKKwogMjAxMS0w
NS0wNCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIHVuaXQgdGVzdCBza2lwIChzdGFydFBvc3RBbmRXYWl0T25Db25kaXRpb24pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eS5jcHAKaW5kZXggNmQ5MWY0ODdlMjk2ODFhODI5NThkNWFhOWQ4NWE3NmI2MzYzOWYy
OC4uZWU1OGEzMTk1YWFmM2IxZWY2OGFkMGI0NmY4ZmFiZDBjMDEyZTNkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmNwcApAQCAtNzIsNiArNzIsMTYgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eTo6YWJvcnQoKQogICAgIG1fd2ViSURCVHJhbnNhY3Rpb24tPmFib3J0KCk7CiB9CiAKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6OnJlZ2lzdGVyT3BlbkN1cnNvcihXZWJDb3JlOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbCopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHk6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKFdl
YkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwogYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6c2NoZWR1bGVUYXNrKFBh
c3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUg
cmVhY2hlZCBhcyBpdCdzIHRoZSBpbXBsIG9iamVjdHMgd2hvIGdldCB0bwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmgK
aW5kZXggMTAzZjU1MjNjNTQ2NjYzYmU4MmRhNzEwZWRiMDA2OWY2OTM2NWNkNy4uZWMyZGY5ZDI1
Y2IyN2VhZTk5YTNmMzYzN2NkN2ZjNjU2YmRiNTUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCkBAIC00Nyw2
ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25Q
dHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8V2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyT3BlbkN1cnNvcihXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbCopOworICAgIHZpcnR1
YWwgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1w
bCopOwogCiAgICAgV2ViSURCVHJhbnNhY3Rpb24qIGdldFdlYklEQlRyYW5zYWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJJREJUcmFuc2FjdGlvbi5nZXQoKTsgfQogCg==
</data>
<flag name="review"
          id="85396"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>