<?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>45748</bug_id>
          
          <creation_ts>2010-09-14 07:24:50 -0700</creation_ts>
          <short_desc>Collect the beginning characters in a RegExp pattern for look-up optimization</short_desc>
          <delta_ts>2011-05-23 14:23:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>45751</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Varga">pvarga</reporter>
          <assigned_to name="Peter Varga">pvarga</assigned_to>
          <cc>abecsi</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>278877</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-09-14 07:24:50 -0700</bug_when>
    <thetext>The RegExp pattern matching can be faster if we try to match an array of
possible characters and increment the character index of the input in case of
mismatch instead of starting the whole pattern matching process at the beginning.
For this optimization the YARR&apos;s parser needs an algorithm which creates a
list of beginning characters from the parsed tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278880</commentid>
    <comment_count>1</comment_count>
      <attachid>67546</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-09-14 07:29:40 -0700</bug_when>
    <thetext>Created attachment 67546
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281486</commentid>
    <comment_count>2</comment_count>
      <attachid>68069</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-09-20 04:10:18 -0700</bug_when>
    <thetext>Created attachment 68069
proposed patch v2

updated patch for top of trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281595</commentid>
    <comment_count>3</comment_count>
      <attachid>68094</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-09-20 09:18:45 -0700</bug_when>
    <thetext>Created attachment 68094
proposed patch v3

I have attached a new patch for collecting the beginning characters in the parsing phase.
This modification doesn&apos;t collect the character classes therefore the overhead of the
collecting is even less but the look-up optimization is less efficient as well.

I separately show the new performance results at JIT (https://bugs.webkit.org/show_bug.cgi?id=45749) and 
Interpreter (https://bugs.webkit.org/show_bug.cgi?id=45751) bugreports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288191</commentid>
    <comment_count>4</comment_count>
      <attachid>69455</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-10-01 05:30:39 -0700</bug_when>
    <thetext>Created attachment 69455
proposed patch v4

Restrict the rules of the collecting of beginning characters, in this way some cases where the beginning character
look-up optimization is less effective the collecting can be avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288476</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-10-01 14:08:38 -0700</bug_when>
    <thetext>Note that there are a couple of changes needed to the 45748-4 patch to compile on Mac having to do with unsigned / signed comparisons.  There are three changes
 In JavaScriptCore/yarr/RegexCompiler.cpp near line 686, in setupAlternativeBeginTerms() change numTerms to unsigned.

 In JavaScriptCore/yarr/RegexCompiler.cpp near line 743, insetupBeginChars() change the local size to unsigned.

 JavaScriptCore/yarr/RegexPattern.h near line 359, in BeginCharHelper struct definition change  the return type of the size() method to unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288874</commentid>
    <comment_count>6</comment_count>
      <attachid>69616</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-10-04 04:40:00 -0700</bug_when>
    <thetext>Created attachment 69616
proposed patch v5

Mac build fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294979</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-10-15 15:54:08 -0700</bug_when>
    <thetext>Here are some comments/questions about patch V5 (https://bugs.webkit.org/attachment.cgi?id=69616).

I think the types for value and mask in BeginChar() should be signed 32 bit values (maybe uint32_t) to ensure that two UChars fit.

I have some questions about the BeginCharHelper methods sort(), uniq() and merge().

Is there a reason why you implemented your own sort() function?  It seems that qsort(3) would work.

Will uniq() handle three or more values in a row?  I don&apos;t think so, but think that changing the if() to a while() will fix this.  Why doesn&apos;t uniq() check the mask for equality as well? 

Do you sort in descending order to make the check in merge() work or is there another reason?

Won&apos;t merging create mask values which make the JIT code more complex?

The collection of begin characters seems to be unbounded (I didn&apos;t see any threshold in the code).  Is there a point where this optimization actually doesn&apos;t provide any benefit?  Or there is always a benefit since the optimization complexity is proportional to the original expression complexity. 

Given these questions and that the uniq() and merge() functions are both O(N^2) would a set type structure that uses hashing be more appropriate to collect a unique list of character pairs?  It seems to me that we might want to keep the begin char checks in expression order to honor programmer intent / knowledge that their first alternative is more likely then the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294984</commentid>
    <comment_count>8</comment_count>
      <attachid>69616</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-10-15 15:58:49 -0700</bug_when>
    <thetext>Comment on attachment 69616
proposed patch v5

I think Michael raised enough significant issues here for an r-.

&gt;I think the types for value and mask in BeginChar() should be signed 32 bit values (maybe uint32_t) to ensure that two UChars fit.

Typo: &quot;should be *unsigned*...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295831</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-18 16:31:48 -0700</bug_when>
    <thetext>One small issue, the bits of code calling isASCIIAlpha look unicode-unsafe, should be handling unicode case-insensitivity too.

My only concerns with this patch would overlap with Michael&apos;s - in the implementation of the uniqued set of characters.  Another major sticking point here would be the fact the sort algorithm is recursive – we strongly prefer to steer clear of recursion on the stack bounded by input, since this can lead to security vulnerabilities.

Fundamentally we already a class to gather a set of characters in YARR – in CharacterClass.  If at all possible I think the ideal solution here would be to try to share the implementation with this, since the requirements seem identical (both being a sorted, uniqued set of unicode characters).  If the current implementation of CharacterClass is not a perfect fit then you&apos;re free to look at generalizing it to make it more suitable.  I hope something along these lines will be workable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297413</commentid>
    <comment_count>10</comment_count>
      <attachid>71434</attachid>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-10-21 07:40:02 -0700</bug_when>
    <thetext>Created attachment 71434
proposed patch v6

I was refactoring the patch to solve the mentioned issues:

&gt; I think the types for value and mask in BeginChar() should be signed 32 bit values (maybe uint32_t) to ensure 
&gt; that two UChars fit.

Done.

&gt;Is there a reason why you implemented your own sort() function?  It seems that qsort(3) would work.

I removed the sort() function. Now I use binary chop in case of adding a BeginChar like in CharacterClassConstructor&apos;s
addSorted() function.

&gt; Will uniq() handle three or more values in a row?  I don&apos;t think so, but think that changing the if() to a while() 
&gt; will fix this.  Why doesn&apos;t uniq() check the mask for equality as well?

You were right I removed the uniq() function as well.
By the way the checking of mask equality is unnecessary because the characters only get different masks in case of 
case insensitivity before the merging.

&gt; Do you sort in descending order to make the check in merge() work or is there another reason?

The sort is important to be able to merge easily and only load a &quot;character pair&quot; from the input string once in an iteration
during matching. Else we need to load single characters too. Look at firstSingleCharFound boolean in JIT and Interpreter.

&gt; Won&apos;t merging create mask values which make the JIT code more complex?

The merging reduced the number of branches in the generated JIT code.

&gt; The collection of begin characters seems to be unbounded (I didn&apos;t see any threshold in the code).  
&gt; Is there a point where this optimization actually doesn&apos;t provide any benefit?  
&gt; Or there is always a benefit since the optimization complexity is proportional to the original expression complexity. 

The number of begin characters don&apos;t have a treshold. The overhead of the optimization complexity is less than 
the overhead of the potential backtracks.

&gt; Given these questions and that the uniq() and merge() functions are both O(N^2) would a set type structure 
&gt; that uses hashing be more appropriate to collect a unique list of character pairs?  
&gt; It seems to me that we might want to keep the begin char checks in expression order to honor programmer intent / knowledge 
&gt; that their first alternative is more likely then the others.

Using a set type structure seems to be too complex for this optimization. Keeping the expression order is unnecessary
because this optimization has no effect on the result of matching.

&gt; One small issue, the bits of code calling isASCIIAlpha look unicode-unsafe, should be handling unicode case-insensitivity too.

The unicode case-insensitivity check is fixed. The solution is based on the CharacterClassConstructor&apos;s
unicode case-insensitivity check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304583</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Varga">pvarga</who>
    <bug_when>2010-11-04 04:29:29 -0700</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309864</commentid>
    <comment_count>12</comment_count>
      <attachid>71434</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-16 12:14:00 -0800</bug_when>
    <thetext>Comment on attachment 71434
proposed patch v6

Looks fine, cheers Peter!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309986</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-16 15:47:42 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 71434:

http/tests/appcache/reload.html
java/lc3/JSObject/ToObject-001.html

Please file bugs against the tests.  These tests were authored by ap@webkit.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310173</commentid>
    <comment_count>14</comment_count>
      <attachid>71434</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-17 01:43:00 -0800</bug_when>
    <thetext>Comment on attachment 71434
proposed patch v6

Clearing flags on attachment: 71434

Committed r72180: &lt;http://trac.webkit.org/changeset/72180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310174</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-17 01:43:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67546</attachid>
            <date>2010-09-14 07:29:40 -0700</date>
            <delta_ts>2010-09-20 04:10:18 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-kilincs-prepare-final.patch</filename>
            <type>text/plain</type>
            <size>17157</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSAxOTcyZmQ4Yjk2OWY2NWFkYzNhNGYwZTczNTRmMTFlOTlmOTIzMjFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogVHVlLCAxNCBTZXAgMjAxMCAxNjoyNzo1NyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGtp
bGluY3MgcHJlcGFyZSBmaW5hbAoKLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgIHwgICAzMiArKysrKysKIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5j
cHAgfCAgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4UGF0dGVybi5oICAgIHwgIDE3NCArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzc2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IGMxOTU4ZGIuLmE3MzQ1MDYgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNSBAQAorMjAxMC0wOS0xNCAgUGV0ZXIgVmFyZ2EgIDxwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxl
Y3QgdGhlIGJlZ2lubmluZyBjaGFyYWN0ZXJzIGluIGEgUmVnRXhwIHBhdHRlcm4gZm9yIGxvb2st
dXAKKyAgICAgICAgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTc0OAorCisgICAgICAgIEV4dGVuZCB0aGUgWUFSUidzIHBhcnNl
ciB3aXRoIGFuIGFsZ29yaXRobSB3aGljaCBjb2xsZWN0cyB0aGUgcG90ZW50aWFsCisgICAgICAg
IGJlZ2lubmluZyBjaGFyYWN0ZXJzIGZyb20gYSBSZWdFeHAgcGF0dGVybiBmb3IgbGF0ZXIgbG9v
ay11cCBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKiB5YXJyL1JlZ2V4Q29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6YWRkQmVnaW5UZXJt
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwRGlz
anVuY3Rpb25CZWdpblRlcm1zKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29u
c3RydWN0b3I6OnNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwQmVnaW5DaGFycyk6CisgICAgICAgIChK
U0M6OllhcnI6OmNvbXBpbGVSZWdleCk6CisgICAgICAgICogeWFyci9SZWdleFBhdHRlcm4uaDoK
KyAgICAgICAgKEpTQzo6WWFycjo6VGVybUNoYWluOjpUZXJtQ2hhaW4pOgorICAgICAgICAoSlND
OjpZYXJyOjpCZWdpbkNoYXI6OkJlZ2luQ2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2lu
Q2hhckhlbHBlcjo6QmVnaW5DaGFySGVscGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5D
aGFySGVscGVyOjphZGRDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJI
ZWxwZXI6OmNyZWF0ZUJlZ2luQ2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhl
bHBlcjo6bGlua0JlZ2luQ2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBl
cjo6bGlua0hvdFRlcm1zKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVscGVyOjpz
aXplKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVscGVyOjpzb3J0KToKKyAgICAg
ICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVscGVyOjp1bmlxKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6QmVnaW5DaGFySGVscGVyOjptZXJnZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hh
ckhlbHBlcjo6b3B0aW1pemUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm46OlJl
Z2V4UGF0dGVybik6CisKIDIwMTAtMDktMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eENvbXBpbGVyLmNwcAppbmRleCBmYTg3MTg2Li41MjBiMWZkIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIv
UmVnZXhDb21waWxlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4OSw2ICs1OTAsMTc0IEBA
IHB1YmxpYzoKICAgICAgICAgc2V0dXBEaXNqdW5jdGlvbk9mZnNldHMobV9wYXR0ZXJuLm1fYm9k
eSwgMCwgMCk7CiAgICAgfQogCisgICAgYm9vbCBhZGRCZWdpblRlcm0oUGF0dGVyblRlcm0gdGVy
bSwgVmVjdG9yPFRlcm1DaGFpbj4qIGJlZ2luVGVybXMsIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0
ZXJuYXRpdmUsIHVuc2lnbmVkIG51bVRlcm1zLCB1bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2lnbmVk
IGRlcHRoKQorICAgIHsKKyAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZp
ZXJGaXhlZENvdW50KSB7CisgICAgICAgICAgICBiZWdpblRlcm1zLT5hcHBlbmQoVGVybUNoYWlu
KHRlcm0pKTsKKyAgICAgICAgICAgIGlmIChkZXB0aCA8IDIgJiYgdGVybUluZGV4IDwgbnVtVGVy
bXMgLSAxICYmIHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgIHNldHVw
QWx0ZXJuYXRpdmVCZWdpblRlcm1zKGFsdGVybmF0aXZlLCAmYmVnaW5UZXJtcy0+bGFzdCgpLmhv
dFRlcm1zLCB0ZXJtSW5kZXggKyAxLCBkZXB0aCArIDEpOworICAgICAgICB9IGVsc2UgaWYgKHRl
cm1JbmRleCAhPSBudW1UZXJtcyAtIDEpIHsKKyAgICAgICAgICAgIGJlZ2luVGVybXMtPmFwcGVu
ZChUZXJtQ2hhaW4odGVybSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBj
b2xsZWN0cyB0aGUgdGVybXMgd2hpY2ggYXJlIHBvdGVudGlhbGx5IG1hdGNoaW5nIHRoZSBmaXJz
dCBudW1iZXIgb2YgZGVwdGggY2hhcmFjdGVycyBpbiB0aGUgcmVzdWx0LgorICAgIC8vIElmIHRo
aXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB0aGVuIGl0IGZvdW5kIGF0IGxlYXN0IG9uZSB0ZXJt
IHdoaWNoIG1ha2VzIHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVyCisgICAgLy8gbG9vay11cCBvcHRp
bWl6YXRpb24gaW5lZmZpY2llbnQuCisgICAgYm9vbCBzZXR1cERpc2p1bmN0aW9uQmVnaW5UZXJt
cyhQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uLCBWZWN0b3I8VGVybUNoYWluPiogYmVn
aW5UZXJtcywgdW5zaWduZWQgZGVwdGgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGFs
dCA9IDA7IGFsdCA8IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7
CisgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rp
b24tPm1fYWx0ZXJuYXRpdmVzW2FsdF07CisKKyAgICAgICAgICAgIGlmICghc2V0dXBBbHRlcm5h
dGl2ZUJlZ2luVGVybXMoYWx0ZXJuYXRpdmUsIGJlZ2luVGVybXMsIDAsIGRlcHRoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKFBhdHRlcm5B
bHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUsIFZlY3RvcjxUZXJtQ2hhaW4+KiBiZWdpblRlcm1zLCB1
bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2lnbmVkIGRlcHRoKQorICAgIHsKKyAgICAgICAgYm9vbCBj
aGVja05leHQgPSB0cnVlOworICAgICAgICBpbnQgbnVtVGVybXMgPSBhbHRlcm5hdGl2ZS0+bV90
ZXJtcy5zaXplKCk7CisKKyAgICAgICAgd2hpbGUgKGNoZWNrTmV4dCAmJiB0ZXJtSW5kZXggPCBu
dW1UZXJtcykgeworICAgICAgICAgICAgUGF0dGVyblRlcm0gdGVybSA9IGFsdGVybmF0aXZlLT5t
X3Rlcm1zW3Rlcm1JbmRleF07CisgICAgICAgICAgICBjaGVja05leHQgPSBmYWxzZTsKKworICAg
ICAgICAgICAgc3dpdGNoICh0ZXJtLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVBc3NlcnRpb25CT0w6CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBl
QXNzZXJ0aW9uRU9MOgorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlv
bldvcmRCb3VuZGFyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgorICAgICAgICAgICAgY2Fz
ZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNo
YXJhY3RlcjoKKyAgICAgICAgICAgICAgICBpZiAoYWRkQmVnaW5UZXJtKHRlcm0sIGJlZ2luVGVy
bXMsIGFsdGVybmF0aXZlLCBudW1UZXJtcywgdGVybUluZGV4LCBkZXB0aCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGVybUluZGV4Kys7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTmV4dCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6CisgICAgICAgICAg
ICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAodGVybS5jaGFyYWN0ZXJDbGFzcy0+bV9y
YW5nZXMuc2l6ZSgpIHx8IHRlcm0uY2hhcmFjdGVyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAg
IGlmIChhZGRCZWdpblRlcm0odGVybSwgYmVnaW5UZXJtcywgYWx0ZXJuYXRpdmUsIG51bVRlcm1z
LCB0ZXJtSW5kZXgsIGRlcHRoKSkgeworICAgICAgICAgICAgICAgICAgICB0ZXJtSW5kZXgrKzsK
KyAgICAgICAgICAgICAgICAgICAgY2hlY2tOZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06
OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLmlu
dmVydE9yQ2FwdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuOgorICAg
ICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3Vu
dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodGVybUluZGV4ID09IG51bVRlcm1zIC0gMSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIHRl
cm1JbmRleCsrOworICAgICAgICAgICAgICAgICAgICBjaGVja05leHQgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFzZXR1cERpc2p1bmN0aW9uQmVn
aW5UZXJtcyh0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBiZWdpblRlcm1zLCBkZXB0aCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdm9pZCBzZXR1cEJlZ2luQ2hhcnMoKQorICAgIHsKKyAgICAgICAgVmVjdG9y
PFRlcm1DaGFpbj4gYmVnaW5UZXJtczsKKyAgICAgICAgYm9vbCBjb250YWluc0ZpeGVkQ2hhcmFj
dGVyID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHNldHVwRGlzanVuY3Rpb25CZWdpblRlcm1zKG1f
cGF0dGVybi5tX2JvZHksICZiZWdpblRlcm1zLCAwKSkgeworICAgICAgICAgICAgaW50IHNpemUg
PSBiZWdpblRlcm1zLnNpemUoKTsKKyAgICAgICAgICAgIEJlZ2luQ2hhckhlbHBlciogYmVnaW5D
aGFySGVscGVyID0gJm1fcGF0dGVybi5tX2JlZ2luQ2hhckhlbHBlcjsKKworICAgICAgICAgICAg
Ly8gSWYgd2UgaGF2ZW4ndCBjb2xsZWN0ZWQgYW55IHRlcm1zIHdlIHNob3VsZCBhYm9ydCB0aGUg
cHJlcGFyYXRpb24gb2YgYmVnaW5uaW5nIGNoYXJhY3RlciBsb29rLXVwIG9wdGltaXphdGlvbi4K
KyAgICAgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIG1fcGF0dGVybi5tX2NvbnRhaW5zQmVnaW5DaGFycyA9IHRydWU7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBQYXR0ZXJuVGVybSB0ZXJtID0gYmVnaW5UZXJtc1tpXS50ZXJtOworCisgICAgICAgICAgICAg
ICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KQorICAgICAg
ICAgICAgICAgICAgICBjb250YWluc0ZpeGVkQ2hhcmFjdGVyID0gdHJ1ZTsKKworICAgICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgY29sbGVjdGVkIFBhdHRlcm5DaGFyYWN0ZXIgb3IgQ2hhcmFjdGVy
Q2xhc3MgdGVybXMsIG90aGVyIHRlcm1zIGFyZSBub3QgYWxsb3dlZC4KKyAgICAgICAgICAgICAg
ICBpZiAodGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3Rlcikgewor
ICAgICAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0ZXJtLnBhdHRlcm5DaGFyYWN0
ZXI7CisgICAgICAgICAgICAgICAgICAgIEJlZ2luQ2hhciBiZWdpbkNoYXIgPSBiZWdpbkNoYXJI
ZWxwZXItPmNyZWF0ZUJlZ2luQ2hhcihjaGFyYWN0ZXIsIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNl
ICYmIGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50ICYmIHRlcm0ucXVhbnRp
dHlDb3VudCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGR1cGxpY2F0ZSB0
aGUgZmlyc3QgZm91bmQgY2hhcmFjdGVyIGlmIHRoZSBxdWFudGl0eSBvZiB0aGUgdGVybSBpcyBt
b3JlIHRoYW4gb25lLiBlZy46IC9hezN9LworICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5D
aGFyLnZhbHVlIHw9IGJlZ2luQ2hhci52YWx1ZSA8PCAxNjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJlZ2luQ2hhci5tYXNrIHw9IGJlZ2luQ2hhci5tYXNrIDw8IDE2OworICAgICAgICAgICAg
ICAgICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5hZGRDaGFyYWN0ZXIoYmVnaW5DaGFyKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlm
aWVyRml4ZWRDb3VudCAmJiB0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSAmJiBiZWdpblRlcm1zW2ld
LmhvdFRlcm1zLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2Yg
Y2hhcmFjdGVycyB3aXRoIGZpeGVkIHF1YW50aWZpZXIgd2Ugc2hvdWxkIGNoZWNrIHRoZSBuZXh0
IGNoYXJhY3RlciBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5DaGFySGVs
cGVyLT5saW5rSG90VGVybXMoYmVnaW5DaGFyLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgbV9w
YXR0ZXJuLm1faWdub3JlQ2FzZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZ3JlZWR5IG1hdGNoaW5nIHRoZSBuZXh0IGNo
YXJhY3RlciBjaGVja2luZyBpcyB1bm5lY2Vzc2FyeSB0aGVyZWZvcmUgd2UganVzdCBzdG9yZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGNoYXJhY3Rlci4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJlZ2luQ2hhckhlbHBlci0+YWRkQ2hhcmFjdGVyKGJlZ2luQ2hhcik7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRl
cm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzKTsKKyAgICAgICAgICAg
ICAgICAgICAgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcyA9IHRlcm0uY2hhcmFjdGVyQ2xhc3M7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoYXJDbGFz
cy0+bV9tYXRjaGVzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hh
ciBjaGFyYWN0ZXIgPSBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1tqXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEJlZ2luQ2hhciBiZWdpbkNoYXIgPSBiZWdpbkNoYXJIZWxwZXItPmNyZWF0ZUJlZ2lu
Q2hhcihjaGFyYWN0ZXIsIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShj
aGFyYWN0ZXIpKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCAmJiB0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSAm
JiBiZWdpblRlcm1zW2ldLmhvdFRlcm1zLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiZWdpbkNoYXJIZWxwZXItPmxpbmtIb3RUZXJtcyhiZWdpbkNoYXIsICZiZWdpblRlcm1z
W2ldLmhvdFRlcm1zLCBtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXIt
PmFkZENoYXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoYXJDbGFzcy0+bV9tYXRj
aGVzVW5pY29kZS5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIg
Y2hhcmFjdGVyID0gY2hhckNsYXNzLT5tX21hdGNoZXNVbmljb2RlW2pdOworICAgICAgICAgICAg
ICAgICAgICAgICAgQmVnaW5DaGFyIGJlZ2luQ2hhciA9IGJlZ2luQ2hhckhlbHBlci0+Y3JlYXRl
QmVnaW5DaGFyKGNoYXJhY3RlciwgZmFsc2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQgJiYgdGVybS5xdWFu
dGl0eUNvdW50ID09IDEgJiYgYmVnaW5UZXJtc1tpXS5ob3RUZXJtcy5zaXplKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5saW5rSG90VGVybXMoYmVnaW5D
aGFyLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmVnaW5DaGFySGVscGVyLT5hZGRDaGFyYWN0ZXIoYmVnaW5DaGFyKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSWYgdGhlIHBhdHRlcm4gZG9lc24ndCBjb250YWluIHRlcm1zIHdpdGggZml4ZWQgcXVhbnRp
ZmllcnMgdGhlbiB0aGUgYmVnaW5uaW5nIGNoYXJhY3RlciBsb29rLXVwIG9wdGltaXphdGlvbiBp
cyBpbmVmZmljaWVudC4KKyAgICAgICAgICAgIGlmICghY29udGFpbnNGaXhlZENoYXJhY3Rlcikg
eworICAgICAgICAgICAgICAgIG1fcGF0dGVybi5tX2NvbnRhaW5zQmVnaW5DaGFycyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSWYgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXJzIGFyZSBjb2xsZWN0ZWQgdGhlbiB3ZSBuZWVk
IHRvIG9wdGltaXplIHRoZSB2ZWN0b3IgKHNvcnQsIGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgYW5k
IG1lcmdlKS4KKyAgICAgICAgICAgIGlmIChiZWdpbkNoYXJIZWxwZXItPnNpemUoKSA+IDEpCisg
ICAgICAgICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5vcHRpbWl6ZSgpOworICAgICAgICB9Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIFJlZ2V4UGF0dGVybiYgbV9wYXR0ZXJuOwogICAgIFBhdHRl
cm5BbHRlcm5hdGl2ZSogbV9hbHRlcm5hdGl2ZTsKQEAgLTYyMiw2ICs3OTEsNyBAQCBjb25zdCBj
aGFyKiBjb21waWxlUmVnZXgoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnZXhQYXR0
ZXJuJiBwYXR0ZXJuKQogICAgIH0KIAogICAgIGNvbnN0cnVjdG9yLnNldHVwT2Zmc2V0cygpOwor
ICAgIGNvbnN0cnVjdG9yLnNldHVwQmVnaW5DaGFycygpOwogCiAgICAgcmV0dXJuIDA7CiB9Owpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaCBiL0phdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKaW5kZXggNjFkNmFkNi4uM2RiOWIzYiAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAorKysgYi9KYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJnYUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICszMCw3
IEBACiAKICNpZiBFTkFCTEUoWUFSUikKIAorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
IApAQCAtMjY1LDYgKzI2NywxNzUgQEAgQ2hhcmFjdGVyQ2xhc3MqIG5vbmRpZ2l0c0NyZWF0ZSgp
OwogQ2hhcmFjdGVyQ2xhc3MqIG5vbnNwYWNlc0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xhc3MqIG5v
bndvcmRjaGFyQ3JlYXRlKCk7CiAKK3N0cnVjdCBUZXJtQ2hhaW4geworICAgIFRlcm1DaGFpbihQ
YXR0ZXJuVGVybSB0ZXJtKQorICAgICAgICA6IHRlcm0odGVybSkKKyAgICB7fQorCisgICAgUGF0
dGVyblRlcm0gdGVybTsKKyAgICBWZWN0b3I8VGVybUNoYWluPiBob3RUZXJtczsKK307CisKK3N0
cnVjdCBCZWdpbkNoYXIgeworICAgIEJlZ2luQ2hhcigpCisgICAgICAgIDogdmFsdWUoMCkKKyAg
ICAgICAgLCBtYXNrKDApCisgICAge30KKworICAgIEJlZ2luQ2hhcihpbnQgdmFsdWUsIGludCBt
YXNrKQorICAgICAgICA6IHZhbHVlKHZhbHVlKQorICAgICAgICAsIG1hc2sobWFzaykKKyAgICB7
fQorCisgICAgaW50IHZhbHVlOworICAgIGludCBtYXNrOworfTsKKworc3RydWN0IEJlZ2luQ2hh
ckhlbHBlciB7CisgICAgQmVnaW5DaGFySGVscGVyKCkKKyAgICB7fQorCisgICAgdm9pZCBhZGRD
aGFyYWN0ZXIoQmVnaW5DaGFyIGJjKQorICAgIHsKKyAgICAgICAgbV9iZWdpbkNoYXJzLmFwcGVu
ZChiYyk7CisgICAgfQorCisgICAgQmVnaW5DaGFyIGNyZWF0ZUJlZ2luQ2hhcihVQ2hhciBjaGFy
YWN0ZXIsIGJvb2wgaWdub3JlQ2FzZSkKKyAgICB7CisgICAgICAgIGludCBtYXNrID0gMDsKKwor
ICAgICAgICBpZiAoaWdub3JlQ2FzZSkgeworICAgICAgICAgICAgY2hhcmFjdGVyID0gV1RGOjpV
bmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtYXNrID0gMzI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gQmVnaW5DaGFyKGNoYXJhY3RlciwgbWFzayk7CisgICAg
fQorCisgICAgLy8gQXBwZW5kIGEgY2hhcmFjdGVyIHRvIGFuIGV4aXN0aW5nIEJlZ2luQ2hhciBv
YmplY3QuCisgICAgQmVnaW5DaGFyIGxpbmtCZWdpbkNoYXIoQmVnaW5DaGFyIGJlZ2luQ2hhciwg
VUNoYXIgY2hhcmFjdGVyLCBib29sIGlnbm9yZUNhc2UpCisgICAgeworICAgICAgICBCZWdpbkNo
YXIgYmVnaW5DaGFyTmV4dCA9IGJlZ2luQ2hhcjsKKworICAgICAgICBpZiAoaWdub3JlQ2FzZSkg
eworICAgICAgICAgICAgY2hhcmFjdGVyID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rl
cik7CisgICAgICAgICAgICBiZWdpbkNoYXJOZXh0Lm1hc2sgfD0gMzIgPDwgMTY7CisgICAgICAg
IH0KKworICAgICAgICBiZWdpbkNoYXJOZXh0LnZhbHVlIHw9IGNoYXJhY3RlciA8PCAxNjsKKyAg
ICAgICAgcmV0dXJuIGJlZ2luQ2hhck5leHQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIEJlZ2lu
Q2hhciBvYmplY3RzIGJ5IGFwcGVuZGluZyBlYWNoIHRlcm1zIGZyb20gYSBob3RUZXJtcyB2ZWN0
b3IgdG8gYW4gZXhpc3RpbmcgQmVnaW5DaGFyIG9iamVjdC4KKyAgICB2b2lkIGxpbmtIb3RUZXJt
cyhCZWdpbkNoYXIgYmVnaW5DaGFyLCBWZWN0b3I8VGVybUNoYWluPiogaG90VGVybXMsIGJvb2wg
aWdub3JlQ2FzZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBob3RU
ZXJtcy0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFBhdHRlcm5UZXJtIGhvdFRlcm0gPSBo
b3RUZXJtcy0+YXQoaSkudGVybTsKKworICAgICAgICAgICAgaWYgKGhvdFRlcm0udHlwZSA9PSBQ
YXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBVQ2hh
ciBjaGFyYWN0ZXJOZXh0ID0gaG90VGVybS5wYXR0ZXJuQ2hhcmFjdGVyOworICAgICAgICAgICAg
ICAgIGFkZENoYXJhY3RlcihsaW5rQmVnaW5DaGFyKGJlZ2luQ2hhciwgY2hhcmFjdGVyTmV4dCwg
KGlnbm9yZUNhc2UgJiYgV1RGOjppc0FTQ0lJQWxwaGEoY2hhcmFjdGVyTmV4dCkpKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChob3RUZXJtLnR5cGUgPT0g
UGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzcyk7CisgICAgICAgICAgICAgICAgQ2hhcmFj
dGVyQ2xhc3MqIGNoYXJDbGFzcyA9IGhvdFRlcm0uY2hhcmFjdGVyQ2xhc3M7CisKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhc2NpaVNpemUgPSBjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCk7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdW5pY29kZVNpemUgPSBjaGFyQ2xhc3MtPm1fbWF0
Y2hlc1VuaWNvZGUuc2l6ZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IGFzY2lpU2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFVDaGFyIGNoYXJh
Y3Rlck5leHQgPSBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAg
YWRkQ2hhcmFjdGVyKGxpbmtCZWdpbkNoYXIoYmVnaW5DaGFyLCBjaGFyYWN0ZXJOZXh0LCAoaWdu
b3JlQ2FzZSAmJiBXVEY6OmlzQVNDSUlBbHBoYShjaGFyYWN0ZXJOZXh0KSkpKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5p
Y29kZVNpemU7ICsraikgeworICAgICAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXJOZXh0
ID0gY2hhckNsYXNzLT5tX21hdGNoZXNVbmljb2RlW2pdOworICAgICAgICAgICAgICAgICAgICBh
ZGRDaGFyYWN0ZXIobGlua0JlZ2luQ2hhcihiZWdpbkNoYXIsIGNoYXJhY3Rlck5leHQsIGZhbHNl
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmVnaW5DaGFycy5zaXpl
KCk7CisgICAgfQorCisgICAgLy8gQSBxdWljayBzaG9ydCBhbGdvcml0aG0gd2hpY2ggc29ydHMg
dGhlIGNvbGxlY3RlZCBjaGFyYWN0ZXJzIGluIGRlc2NlbmRhbnQgb3JkZXIuCisgICAgdm9pZCBz
b3J0KGludCBsZWZ0LCBpbnQgcmlnaHQpCisgICAgeworICAgICAgICBpbnQgaSA9IGxlZnQ7Cisg
ICAgICAgIGludCBqID0gcmlnaHQ7CisgICAgICAgIEJlZ2luQ2hhciB0bXA7CisgICAgICAgIGlu
dCBwaXZvdCA9IG1fYmVnaW5DaGFyc1sobGVmdCArIHJpZ2h0KSAvIDJdLnZhbHVlOworCisgICAg
ICAgIHdoaWxlIChpIDw9IGopIHsKKyAgICAgICAgICAgIHdoaWxlIChtX2JlZ2luQ2hhcnNbaV0u
dmFsdWUgPiBwaXZvdCkKKyAgICAgICAgICAgICAgICBpKys7CisKKyAgICAgICAgICAgIHdoaWxl
IChtX2JlZ2luQ2hhcnNbal0udmFsdWUgPCBwaXZvdCkKKyAgICAgICAgICAgICAgICBqLS07CisK
KyAgICAgICAgICAgIGlmIChpIDw9IGopIHsKKyAgICAgICAgICAgICAgICB0bXAgPSBtX2JlZ2lu
Q2hhcnNbaV07CisgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJzW2krK10gPSBtX2JlZ2luQ2hh
cnNbal07CisgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJzW2otLV0gPSB0bXA7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVmdCA8IGopCisgICAgICAgICAgICBz
b3J0KGxlZnQsIGopOworICAgICAgICBpZiAoaSA8IHJpZ2h0KQorICAgICAgICAgICAgc29ydChp
LCByaWdodCk7CisgICAgfQorCisgICAgLy8gRWxpbWluYXRlIHRoZSBkdXBsaWNhdGVkIGNoYXJh
Y3RlcnMuCisgICAgaW50IHVuaXEoaW50IHNpemUpCisgICAgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fYmVnaW5DaGFyc1tpXS52
YWx1ZSA9PSBtX2JlZ2luQ2hhcnNbaSArIDFdLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgbV9i
ZWdpbkNoYXJzLnJlbW92ZShpICsgMSk7CisgICAgICAgICAgICAgICAgc2l6ZS0tOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAg
Ly8gTWVyZ2UgdHdvIGZvbGxvd2luZyBCZWdpbkNoYXJzIGluIHRoZSB2ZWN0b3IgdG8gcmVkdWNl
IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIGNoZWNrcy4KKyAgICB2b2lkIG1lcmdlKGludCBzaXpl
KQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAg
ICAgICAgIEJlZ2luQ2hhciogY3VyciA9ICZtX2JlZ2luQ2hhcnNbaV07CisgICAgICAgICAgICBC
ZWdpbkNoYXIqIG5leHQgPSAmbV9iZWdpbkNoYXJzW2kgKyAxXTsKKworICAgICAgICAgICAgLy8g
SWYgdGhlIGN1cnJlbnQgYW5kIHRoZSBuZXh0IHNpemUgb2YgdmFsdWUgaXMgZGlmZmVyZW50IHdl
IHNob3VsZCBza2lwIHRoZSBtZXJnZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRo
ZSAxNmJpdCBhbmQgMzJiaXQgdmFsdWVzIGFyZSB1bm1lcmdhYmxlLgorICAgICAgICAgICAgaWYg
KGN1cnItPnZhbHVlID4gMHhGRkZGICYmIG5leHQtPnZhbHVlIDw9IDB4RkZGRikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaW50IGRpZmYgPSBjdXJyLT52YWx1ZSBe
IG5leHQtPnZhbHVlOworCisgICAgICAgICAgICBjdXJyLT5tYXNrIHw9IGRpZmY7CisgICAgICAg
ICAgICBjdXJyLT52YWx1ZSB8PSBjdXJyLT5tYXNrOworCisgICAgICAgICAgICBtX2JlZ2luQ2hh
cnMucmVtb3ZlKGkgKyAxKTsKKyAgICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgb3B0aW1pemUoKQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSBtX2JlZ2lu
Q2hhcnMuc2l6ZSgpIC0gMTsKKworICAgICAgICBzb3J0KDAsIHNpemUpOworICAgICAgICBzaXpl
ID0gdW5pcShzaXplKTsKKyAgICAgICAgaWYgKHNpemUgPiAyKQorICAgICAgICAgICAgbWVyZ2Uo
c2l6ZSk7CisgICAgfQorCisgICAgVmVjdG9yPEJlZ2luQ2hhcj4gbV9iZWdpbkNoYXJzOworfTsK
Kwogc3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAgUmVnZXhQYXR0ZXJuKGJvb2wgaWdub3JlQ2Fz
ZSwgYm9vbCBtdWx0aWxpbmUpCiAgICAgICAgIDogbV9pZ25vcmVDYXNlKGlnbm9yZUNhc2UpCkBA
IC0yNzIsNiArNDQzLDcgQEAgc3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAgICAgICwgbV9udW1T
dWJwYXR0ZXJucygwKQogICAgICAgICAsIG1fbWF4QmFja1JlZmVyZW5jZSgwKQogICAgICAgICAs
IG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxzZSkKKyAgICAgICAgLCBtX2NvbnRhaW5zQmVn
aW5DaGFycyhmYWxzZSkKICAgICAgICAgLCBuZXdsaW5lQ2FjaGVkKDApCiAgICAgICAgICwgZGln
aXRzQ2FjaGVkKDApCiAgICAgICAgICwgc3BhY2VzQ2FjaGVkKDApCkBAIC0zNjIsOSArNTM0LDEx
IEBAIHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAgIHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7
CiAgICAgdW5zaWduZWQgbV9tYXhCYWNrUmVmZXJlbmNlOwogICAgIGJvb2wgbV9jb250YWluc0Jh
Y2tyZWZlcmVuY2VzOworICAgIGJvb2wgbV9jb250YWluc0JlZ2luQ2hhcnM7CiAgICAgUGF0dGVy
bkRpc2p1bmN0aW9uKiBtX2JvZHk7CiAgICAgVmVjdG9yPFBhdHRlcm5EaXNqdW5jdGlvbiosIDQ+
IG1fZGlzanVuY3Rpb25zOwogICAgIFZlY3RvcjxDaGFyYWN0ZXJDbGFzcyo+IG1fdXNlckNoYXJh
Y3RlckNsYXNzZXM7CisgICAgQmVnaW5DaGFySGVscGVyIG1fYmVnaW5DaGFySGVscGVyOwogCiBw
cml2YXRlOgogICAgIENoYXJhY3RlckNsYXNzKiBuZXdsaW5lQ2FjaGVkOwotLSAKMS43LjIuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68069</attachid>
            <date>2010-09-20 04:10:18 -0700</date>
            <delta_ts>2010-10-01 05:30:39 -0700</delta_ts>
            <desc>proposed patch v2</desc>
            <filename>0001-kilincs-prepare-final-v2.patch</filename>
            <type>text/plain</type>
            <size>17261</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSAzMmM2NTIyZGExYTRhYWJjMzU2ZGJjODcwYjI5NGNlODM2NDJlN2UyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogTW9uLCAyMCBTZXAgMjAxMCAxMjo1MDo1MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGtp
bGluY3MgcHJlcGFyZSBmaW5hbCB2MgoKLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgIHwgICAzMiArKysrKysKIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxl
ci5jcHAgfCAgMTczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogSmF2YVNjcmlw
dENvcmUveWFyci9SZWdleFBhdHRlcm4uaCAgICB8ICAxNzQgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM3NyBpbnNlcnRpb25zKCspLCAyIGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCAzNDkwNzQ4Li42MDMxZTRiIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzUgQEAKKzIwMTAtMDktMjAgIFBldGVyIFZhcmdhICA8cHZhcmdhQGluZi51LXN6ZWdl
ZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b2xsZWN0IHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVycyBpbiBhIFJlZ0V4cCBwYXR0ZXJuIGZvciBs
b29rLXVwCisgICAgICAgIG9wdGltaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3NDgKKworICAgICAgICBFeHRlbmQgdGhlIFlBUlIncyBw
YXJzZXIgd2l0aCBhbiBhbGdvcml0aG0gd2hpY2ggY29sbGVjdHMgdGhlIHBvdGVudGlhbAorICAg
ICAgICBiZWdpbm5pbmcgY2hhcmFjdGVycyBmcm9tIGEgUmVnRXhwIHBhdHRlcm4gZm9yIGxhdGVy
IGxvb2stdXAgb3B0aW1pemF0aW9uLgorCisgICAgICAgICogeWFyci9SZWdleENvbXBpbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmFkZEJlZ2lu
VGVybSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1
cERpc2p1bmN0aW9uQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVy
bkNvbnN0cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6
OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cEJlZ2luQ2hhcnMpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpjb21waWxlUmVnZXgpOgorICAgICAgICAqIHlhcnIvUmVnZXhQYXR0ZXJu
Lmg6CisgICAgICAgIChKU0M6OllhcnI6OlRlcm1DaGFpbjo6VGVybUNoYWluKToKKyAgICAgICAg
KEpTQzo6WWFycjo6QmVnaW5DaGFyOjpCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpC
ZWdpbkNoYXJIZWxwZXI6OkJlZ2luQ2hhckhlbHBlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJl
Z2luQ2hhckhlbHBlcjo6YWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5D
aGFySGVscGVyOjpjcmVhdGVCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNo
YXJIZWxwZXI6OmxpbmtCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJI
ZWxwZXI6OmxpbmtIb3RUZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBl
cjo6c2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6c29ydCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6dW5pcSk6CisgICAgICAgIChKU0M6
OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdp
bkNoYXJIZWxwZXI6Om9wdGltaXplKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJu
OjpSZWdleFBhdHRlcm4pOgorCiAyMDEwLTA5LTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeCBwdCAyLgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKaW5kZXggMzM0Mzc5Mi4uMjlhNWE4ZCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJnYUBpbmYudS1zemVnZWQuaHUpLCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
NDksOCArNjUwLDE3NSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsb29wRGlzanVuY3Rpb24tPm1f
YWx0ZXJuYXRpdmVzLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKyAg
ICBib29sIGFkZEJlZ2luVGVybShQYXR0ZXJuVGVybSB0ZXJtLCBWZWN0b3I8VGVybUNoYWluPiog
YmVnaW5UZXJtcywgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSwgdW5zaWduZWQgbnVt
VGVybXMsIHVuc2lnbmVkIHRlcm1JbmRleCwgdW5zaWduZWQgZGVwdGgpCisgICAgeworICAgICAg
ICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKKyAgICAg
ICAgICAgIGJlZ2luVGVybXMtPmFwcGVuZChUZXJtQ2hhaW4odGVybSkpOworICAgICAgICAgICAg
aWYgKGRlcHRoIDwgMiAmJiB0ZXJtSW5kZXggPCBudW1UZXJtcyAtIDEgJiYgdGVybS5xdWFudGl0
eUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgc2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMo
YWx0ZXJuYXRpdmUsICZiZWdpblRlcm1zLT5sYXN0KCkuaG90VGVybXMsIHRlcm1JbmRleCArIDEs
IGRlcHRoICsgMSk7CisgICAgICAgIH0gZWxzZSBpZiAodGVybUluZGV4ICE9IG51bVRlcm1zIC0g
MSkgeworICAgICAgICAgICAgYmVnaW5UZXJtcy0+YXBwZW5kKFRlcm1DaGFpbih0ZXJtKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbGxlY3RzIHRoZSB0ZXJtcyB3aGlj
aCBhcmUgcG90ZW50aWFsbHkgbWF0Y2hpbmcgdGhlIGZpcnN0IG51bWJlciBvZiBkZXB0aCBjaGFy
YWN0ZXJzIGluIHRoZSByZXN1bHQuCisgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGZh
bHNlIHRoZW4gaXQgZm91bmQgYXQgbGVhc3Qgb25lIHRlcm0gd2hpY2ggbWFrZXMgdGhlIGJlZ2lu
bmluZyBjaGFyYWN0ZXIKKyAgICAvLyBsb29rLXVwIG9wdGltaXphdGlvbiBpbmVmZmljaWVudC4K
KyAgICBib29sIHNldHVwRGlzanVuY3Rpb25CZWdpblRlcm1zKFBhdHRlcm5EaXNqdW5jdGlvbiog
ZGlzanVuY3Rpb24sIFZlY3RvcjxUZXJtQ2hhaW4+KiBiZWdpblRlcm1zLCB1bnNpZ25lZCBkZXB0
aCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgZGlzanVuY3Rp
b24tPm1fYWx0ZXJuYXRpdmVzLnNpemUoKTsgKythbHQpIHsKKyAgICAgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0
XTsKKworICAgICAgICAgICAgaWYgKCFzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyhhbHRlcm5h
dGl2ZSwgYmVnaW5UZXJtcywgMCwgZGVwdGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
c2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMoUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2
ZSwgVmVjdG9yPFRlcm1DaGFpbj4qIGJlZ2luVGVybXMsIHVuc2lnbmVkIHRlcm1JbmRleCwgdW5z
aWduZWQgZGVwdGgpCisgICAgeworICAgICAgICBib29sIGNoZWNrTmV4dCA9IHRydWU7CisgICAg
ICAgIGludCBudW1UZXJtcyA9IGFsdGVybmF0aXZlLT5tX3Rlcm1zLnNpemUoKTsKKworICAgICAg
ICB3aGlsZSAoY2hlY2tOZXh0ICYmIHRlcm1JbmRleCA8IG51bVRlcm1zKSB7CisgICAgICAgICAg
ICBQYXR0ZXJuVGVybSB0ZXJtID0gYWx0ZXJuYXRpdmUtPm1fdGVybXNbdGVybUluZGV4XTsKKyAg
ICAgICAgICAgIGNoZWNrTmV4dCA9IGZhbHNlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRlcm0u
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkJPTDoK
KyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25FT0w6CisgICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6
VHlwZUJhY2tSZWZlcmVuY2U6CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRm9y
d2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyOgorICAgICAgICAgICAg
ICAgIGlmIChhZGRCZWdpblRlcm0odGVybSwgYmVnaW5UZXJtcywgYWx0ZXJuYXRpdmUsIG51bVRl
cm1zLCB0ZXJtSW5kZXgsIGRlcHRoKSkgeworICAgICAgICAgICAgICAgICAgICB0ZXJtSW5kZXgr
KzsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tOZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVDaGFyYWN0ZXJDbGFzczoKKyAgICAgICAgICAgICAgICBpZiAodGVybS5pbnZlcnRP
ckNhcHR1cmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLmNoYXJhY3RlckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkgfHwgdGVybS5j
aGFyYWN0ZXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYgKGFkZEJlZ2luVGVybSh0ZXJt
LCBiZWdpblRlcm1zLCBhbHRlcm5hdGl2ZSwgbnVtVGVybXMsIHRlcm1JbmRleCwgZGVwdGgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRlcm1JbmRleCsrOworICAgICAgICAgICAgICAgICAgICBj
aGVja05leHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3Nl
cnRpb246CisgICAgICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm46CisgICAgICAgICAgICAgICAgaWYgKHRlcm0u
cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXJtSW5kZXggPT0gbnVtVGVybXMgLSAxKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgdGVybUluZGV4Kys7CisgICAgICAgICAg
ICAgICAgICAgIGNoZWNrTmV4dCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoIXNldHVwRGlzanVuY3Rpb25CZWdpblRlcm1zKHRlcm0ucGFyZW50aGVz
ZXMuZGlzanVuY3Rpb24sIGJlZ2luVGVybXMsIGRlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldHVw
QmVnaW5DaGFycygpCisgICAgeworICAgICAgICBWZWN0b3I8VGVybUNoYWluPiBiZWdpblRlcm1z
OworICAgICAgICBib29sIGNvbnRhaW5zRml4ZWRDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAg
ICBpZiAoc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXMobV9wYXR0ZXJuLm1fYm9keSwgJmJlZ2lu
VGVybXMsIDApKSB7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGJlZ2luVGVybXMuc2l6ZSgpOwor
ICAgICAgICAgICAgQmVnaW5DaGFySGVscGVyKiBiZWdpbkNoYXJIZWxwZXIgPSAmbV9wYXR0ZXJu
Lm1fYmVnaW5DaGFySGVscGVyOworCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGNvbGxl
Y3RlZCBhbnkgdGVybXMgd2Ugc2hvdWxkIGFib3J0IHRoZSBwcmVwYXJhdGlvbiBvZiBiZWdpbm5p
bmcgY2hhcmFjdGVyIGxvb2stdXAgb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgaWYgKCFzaXpl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9wYXR0ZXJuLm1fY29u
dGFpbnNCZWdpbkNoYXJzID0gdHJ1ZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJtIHRlcm0gPSBi
ZWdpblRlcm1zW2ldLnRlcm07CisKKyAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5z
Rml4ZWRDaGFyYWN0ZXIgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBjb2xs
ZWN0ZWQgUGF0dGVybkNoYXJhY3RlciBvciBDaGFyYWN0ZXJDbGFzcyB0ZXJtcywgb3RoZXIgdGVy
bXMgYXJlIG5vdCBhbGxvd2VkLgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLnR5cGUgPT0gUGF0
dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIFVD
aGFyIGNoYXJhY3RlciA9IHRlcm0ucGF0dGVybkNoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAg
ICAgQmVnaW5DaGFyIGJlZ2luQ2hhciA9IGJlZ2luQ2hhckhlbHBlci0+Y3JlYXRlQmVnaW5DaGFy
KGNoYXJhY3RlciwgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoYXJh
Y3RlcikpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllckZpeGVkQ291bnQgJiYgdGVybS5xdWFudGl0eUNvdW50ID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgZHVwbGljYXRlIHRoZSBmaXJzdCBmb3VuZCBjaGFyYWN0
ZXIgaWYgdGhlIHF1YW50aXR5IG9mIHRoZSB0ZXJtIGlzIG1vcmUgdGhhbiBvbmUuIGVnLjogL2F7
M30vCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXIudmFsdWUgfD0gYmVnaW5DaGFy
LnZhbHVlIDw8IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5DaGFyLm1hc2sgfD0g
YmVnaW5DaGFyLm1hc2sgPDwgMTY7CisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJI
ZWxwZXItPmFkZENoYXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50ICYmIHRlcm0u
cXVhbnRpdHlDb3VudCA9PSAxICYmIGJlZ2luVGVybXNbaV0uaG90VGVybXMuc2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBjaGFyYWN0ZXJzIHdpdGggZml4ZWQg
cXVhbnRpZmllciB3ZSBzaG91bGQgY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyIGFzIHdlbGwuCisg
ICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmxpbmtIb3RUZXJtcyhiZWdp
bkNoYXIsICZiZWdpblRlcm1zW2ldLmhvdFRlcm1zLCBtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4g
Y2FzZSBvZiBncmVlZHkgbWF0Y2hpbmcgdGhlIG5leHQgY2hhcmFjdGVyIGNoZWNraW5nIGlzIHVu
bmVjZXNzYXJ5IHRoZXJlZm9yZSB3ZSBqdXN0IHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5D
aGFySGVscGVyLT5hZGRDaGFyYWN0ZXIoYmVnaW5DaGFyKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS50eXBlID09IFBhdHRlcm5UZXJt
OjpUeXBlQ2hhcmFjdGVyQ2xhc3MpOworICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJDbGFz
cyogY2hhckNsYXNzID0gdGVybS5jaGFyYWN0ZXJDbGFzczsKKworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpOyBq
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJDbGFz
cy0+bV9tYXRjaGVzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgQmVnaW5DaGFyIGJlZ2lu
Q2hhciA9IGJlZ2luQ2hhckhlbHBlci0+Y3JlYXRlQmVnaW5DaGFyKGNoYXJhY3RlciwgKG1fcGF0
dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhl
ZENvdW50ICYmIHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxICYmIGJlZ2luVGVybXNbaV0uaG90VGVy
bXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2hhckhlbHBlci0+
bGlua0hvdFRlcm1zKGJlZ2luQ2hhciwgJmJlZ2luVGVybXNbaV0uaG90VGVybXMsIG1fcGF0dGVy
bi5tX2lnbm9yZUNhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJlZ2luQ2hhckhlbHBlci0+YWRkQ2hhcmFjdGVyKGJlZ2luQ2hh
cik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgY2hhckNsYXNzLT5tX21hdGNoZXNVbmljb2RlLnNpemUoKTsgaisr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyQ2xhc3Mt
Pm1fbWF0Y2hlc1VuaWNvZGVbal07CisgICAgICAgICAgICAgICAgICAgICAgICBCZWdpbkNoYXIg
YmVnaW5DaGFyID0gYmVnaW5DaGFySGVscGVyLT5jcmVhdGVCZWdpbkNoYXIoY2hhcmFjdGVyLCBm
YWxzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyRml4ZWRDb3VudCAmJiB0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSAmJiBiZWdp
blRlcm1zW2ldLmhvdFRlcm1zLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
ZWdpbkNoYXJIZWxwZXItPmxpbmtIb3RUZXJtcyhiZWdpbkNoYXIsICZiZWdpblRlcm1zW2ldLmhv
dFRlcm1zLCBtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmFkZENo
YXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBkb2Vz
bid0IGNvbnRhaW4gdGVybXMgd2l0aCBmaXhlZCBxdWFudGlmaWVycyB0aGVuIHRoZSBiZWdpbm5p
bmcgY2hhcmFjdGVyIGxvb2stdXAgb3B0aW1pemF0aW9uIGlzIGluZWZmaWNpZW50LgorICAgICAg
ICAgICAgaWYgKCFjb250YWluc0ZpeGVkQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgbV9w
YXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGNo
YXJhY3RlcnMgYXJlIGNvbGxlY3RlZCB0aGVuIHdlIG5lZWQgdG8gb3B0aW1pemUgdGhlIHZlY3Rv
ciAoc29ydCwgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBhbmQgbWVyZ2UpLgorICAgICAgICAgICAg
aWYgKGJlZ2luQ2hhckhlbHBlci0+c2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICBiZWdpbkNo
YXJIZWxwZXItPm9wdGltaXplKCk7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAg
UmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX2FsdGVy
bmF0aXZlOwpAQCAtNjg3LDYgKzg1NSw3IEBAIGNvbnN0IGNoYXIqIGNvbXBpbGVSZWdleChjb25z
dCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdleFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgY29u
c3RydWN0b3Iub3B0aW1pemVCT0woKTsKICAgICAgICAgCiAgICAgY29uc3RydWN0b3Iuc2V0dXBP
ZmZzZXRzKCk7CisgICAgY29uc3RydWN0b3Iuc2V0dXBCZWdpbkNoYXJzKCk7CiAKICAgICByZXR1
cm4gMDsKIH07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5o
IGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAppbmRleCBlZWNiZDQzLi5iNjg1
ZjdhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSks
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShZQVJSKQogCisjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgogCkBAIC0yODMsMTEgKzI4NSwxODEgQEAgQ2hhcmFjdGVyQ2xhc3MqIG5vbmRp
Z2l0c0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xhc3MqIG5vbnNwYWNlc0NyZWF0ZSgpOwogQ2hhcmFj
dGVyQ2xhc3MqIG5vbndvcmRjaGFyQ3JlYXRlKCk7CiAKK3N0cnVjdCBUZXJtQ2hhaW4geworICAg
IFRlcm1DaGFpbihQYXR0ZXJuVGVybSB0ZXJtKQorICAgICAgICA6IHRlcm0odGVybSkKKyAgICB7
fQorCisgICAgUGF0dGVyblRlcm0gdGVybTsKKyAgICBWZWN0b3I8VGVybUNoYWluPiBob3RUZXJt
czsKK307CisKK3N0cnVjdCBCZWdpbkNoYXIgeworICAgIEJlZ2luQ2hhcigpCisgICAgICAgIDog
dmFsdWUoMCkKKyAgICAgICAgLCBtYXNrKDApCisgICAge30KKworICAgIEJlZ2luQ2hhcihpbnQg
dmFsdWUsIGludCBtYXNrKQorICAgICAgICA6IHZhbHVlKHZhbHVlKQorICAgICAgICAsIG1hc2so
bWFzaykKKyAgICB7fQorCisgICAgaW50IHZhbHVlOworICAgIGludCBtYXNrOworfTsKKworc3Ry
dWN0IEJlZ2luQ2hhckhlbHBlciB7CisgICAgQmVnaW5DaGFySGVscGVyKCkKKyAgICB7fQorCisg
ICAgdm9pZCBhZGRDaGFyYWN0ZXIoQmVnaW5DaGFyIGJjKQorICAgIHsKKyAgICAgICAgbV9iZWdp
bkNoYXJzLmFwcGVuZChiYyk7CisgICAgfQorCisgICAgQmVnaW5DaGFyIGNyZWF0ZUJlZ2luQ2hh
cihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgaWdub3JlQ2FzZSkKKyAgICB7CisgICAgICAgIGludCBt
YXNrID0gMDsKKworICAgICAgICBpZiAoaWdub3JlQ2FzZSkgeworICAgICAgICAgICAgY2hhcmFj
dGVyID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtYXNr
ID0gMzI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQmVnaW5DaGFyKGNoYXJhY3Rlciwg
bWFzayk7CisgICAgfQorCisgICAgLy8gQXBwZW5kIGEgY2hhcmFjdGVyIHRvIGFuIGV4aXN0aW5n
IEJlZ2luQ2hhciBvYmplY3QuCisgICAgQmVnaW5DaGFyIGxpbmtCZWdpbkNoYXIoQmVnaW5DaGFy
IGJlZ2luQ2hhciwgVUNoYXIgY2hhcmFjdGVyLCBib29sIGlnbm9yZUNhc2UpCisgICAgeworICAg
ICAgICBCZWdpbkNoYXIgYmVnaW5DaGFyTmV4dCA9IGJlZ2luQ2hhcjsKKworICAgICAgICBpZiAo
aWdub3JlQ2FzZSkgeworICAgICAgICAgICAgY2hhcmFjdGVyID0gV1RGOjpVbmljb2RlOjp0b0xv
d2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBiZWdpbkNoYXJOZXh0Lm1hc2sgfD0gMzIgPDwg
MTY7CisgICAgICAgIH0KKworICAgICAgICBiZWdpbkNoYXJOZXh0LnZhbHVlIHw9IGNoYXJhY3Rl
ciA8PCAxNjsKKyAgICAgICAgcmV0dXJuIGJlZ2luQ2hhck5leHQ7CisgICAgfQorCisgICAgLy8g
Q3JlYXRlIEJlZ2luQ2hhciBvYmplY3RzIGJ5IGFwcGVuZGluZyBlYWNoIHRlcm1zIGZyb20gYSBo
b3RUZXJtcyB2ZWN0b3IgdG8gYW4gZXhpc3RpbmcgQmVnaW5DaGFyIG9iamVjdC4KKyAgICB2b2lk
IGxpbmtIb3RUZXJtcyhCZWdpbkNoYXIgYmVnaW5DaGFyLCBWZWN0b3I8VGVybUNoYWluPiogaG90
VGVybXMsIGJvb2wgaWdub3JlQ2FzZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBob3RUZXJtcy0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFBhdHRlcm5UZXJt
IGhvdFRlcm0gPSBob3RUZXJtcy0+YXQoaSkudGVybTsKKworICAgICAgICAgICAgaWYgKGhvdFRl
cm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgICAgICBVQ2hhciBjaGFyYWN0ZXJOZXh0ID0gaG90VGVybS5wYXR0ZXJuQ2hhcmFjdGVyOwor
ICAgICAgICAgICAgICAgIGFkZENoYXJhY3RlcihsaW5rQmVnaW5DaGFyKGJlZ2luQ2hhciwgY2hh
cmFjdGVyTmV4dCwgKGlnbm9yZUNhc2UgJiYgV1RGOjppc0FTQ0lJQWxwaGEoY2hhcmFjdGVyTmV4
dCkpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChob3RU
ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzcyk7CisgICAgICAgICAg
ICAgICAgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcyA9IGhvdFRlcm0uY2hhcmFjdGVyQ2xhc3M7
CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhc2NpaVNpemUgPSBjaGFyQ2xhc3MtPm1fbWF0
Y2hlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdW5pY29kZVNpemUgPSBjaGFy
Q2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpOworCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGFzY2lpU2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAg
IFVDaGFyIGNoYXJhY3Rlck5leHQgPSBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1tqXTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKGxpbmtCZWdpbkNoYXIoYmVnaW5DaGFyLCBjaGFyYWN0
ZXJOZXh0LCAoaWdub3JlQ2FzZSAmJiBXVEY6OmlzQVNDSUlBbHBoYShjaGFyYWN0ZXJOZXh0KSkp
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgdW5pY29kZVNpemU7ICsraikgeworICAgICAgICAgICAgICAgICAgICBVQ2hhciBj
aGFyYWN0ZXJOZXh0ID0gY2hhckNsYXNzLT5tX21hdGNoZXNVbmljb2RlW2pdOworICAgICAgICAg
ICAgICAgICAgICBhZGRDaGFyYWN0ZXIobGlua0JlZ2luQ2hhcihiZWdpbkNoYXIsIGNoYXJhY3Rl
ck5leHQsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmVn
aW5DaGFycy5zaXplKCk7CisgICAgfQorCisgICAgLy8gQSBxdWljayBzaG9ydCBhbGdvcml0aG0g
d2hpY2ggc29ydHMgdGhlIGNvbGxlY3RlZCBjaGFyYWN0ZXJzIGluIGRlc2NlbmRhbnQgb3JkZXIu
CisgICAgdm9pZCBzb3J0KGludCBsZWZ0LCBpbnQgcmlnaHQpCisgICAgeworICAgICAgICBpbnQg
aSA9IGxlZnQ7CisgICAgICAgIGludCBqID0gcmlnaHQ7CisgICAgICAgIEJlZ2luQ2hhciB0bXA7
CisgICAgICAgIGludCBwaXZvdCA9IG1fYmVnaW5DaGFyc1sobGVmdCArIHJpZ2h0KSAvIDJdLnZh
bHVlOworCisgICAgICAgIHdoaWxlIChpIDw9IGopIHsKKyAgICAgICAgICAgIHdoaWxlIChtX2Jl
Z2luQ2hhcnNbaV0udmFsdWUgPiBwaXZvdCkKKyAgICAgICAgICAgICAgICBpKys7CisKKyAgICAg
ICAgICAgIHdoaWxlIChtX2JlZ2luQ2hhcnNbal0udmFsdWUgPCBwaXZvdCkKKyAgICAgICAgICAg
ICAgICBqLS07CisKKyAgICAgICAgICAgIGlmIChpIDw9IGopIHsKKyAgICAgICAgICAgICAgICB0
bXAgPSBtX2JlZ2luQ2hhcnNbaV07CisgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJzW2krK10g
PSBtX2JlZ2luQ2hhcnNbal07CisgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJzW2otLV0gPSB0
bXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVmdCA8IGopCisg
ICAgICAgICAgICBzb3J0KGxlZnQsIGopOworICAgICAgICBpZiAoaSA8IHJpZ2h0KQorICAgICAg
ICAgICAgc29ydChpLCByaWdodCk7CisgICAgfQorCisgICAgLy8gRWxpbWluYXRlIHRoZSBkdXBs
aWNhdGVkIGNoYXJhY3RlcnMuCisgICAgaW50IHVuaXEoaW50IHNpemUpCisgICAgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fYmVn
aW5DaGFyc1tpXS52YWx1ZSA9PSBtX2JlZ2luQ2hhcnNbaSArIDFdLnZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgbV9iZWdpbkNoYXJzLnJlbW92ZShpICsgMSk7CisgICAgICAgICAgICAgICAgc2l6
ZS0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNpemU7Cisg
ICAgfQorCisgICAgLy8gTWVyZ2UgdHdvIGZvbGxvd2luZyBCZWdpbkNoYXJzIGluIHRoZSB2ZWN0
b3IgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIGNoZWNrcy4KKyAgICB2b2lkIG1l
cmdlKGludCBzaXplKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgICAgIEJlZ2luQ2hhciogY3VyciA9ICZtX2JlZ2luQ2hhcnNbaV07Cisg
ICAgICAgICAgICBCZWdpbkNoYXIqIG5leHQgPSAmbV9iZWdpbkNoYXJzW2kgKyAxXTsKKworICAg
ICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYW5kIHRoZSBuZXh0IHNpemUgb2YgdmFsdWUgaXMg
ZGlmZmVyZW50IHdlIHNob3VsZCBza2lwIHRoZSBtZXJnZSBwcm9jZXNzCisgICAgICAgICAgICAv
LyBiZWNhdXNlIHRoZSAxNmJpdCBhbmQgMzJiaXQgdmFsdWVzIGFyZSB1bm1lcmdhYmxlLgorICAg
ICAgICAgICAgaWYgKGN1cnItPnZhbHVlID4gMHhGRkZGICYmIG5leHQtPnZhbHVlIDw9IDB4RkZG
RikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaW50IGRpZmYgPSBj
dXJyLT52YWx1ZSBeIG5leHQtPnZhbHVlOworCisgICAgICAgICAgICBjdXJyLT5tYXNrIHw9IGRp
ZmY7CisgICAgICAgICAgICBjdXJyLT52YWx1ZSB8PSBjdXJyLT5tYXNrOworCisgICAgICAgICAg
ICBtX2JlZ2luQ2hhcnMucmVtb3ZlKGkgKyAxKTsKKyAgICAgICAgICAgIHNpemUtLTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgb3B0aW1pemUoKQorICAgIHsKKyAgICAgICAgaW50IHNp
emUgPSBtX2JlZ2luQ2hhcnMuc2l6ZSgpIC0gMTsKKworICAgICAgICBzb3J0KDAsIHNpemUpOwor
ICAgICAgICBzaXplID0gdW5pcShzaXplKTsKKyAgICAgICAgaWYgKHNpemUgPiAyKQorICAgICAg
ICAgICAgbWVyZ2Uoc2l6ZSk7CisgICAgfQorCisgICAgVmVjdG9yPEJlZ2luQ2hhcj4gbV9iZWdp
bkNoYXJzOworfTsKKwogc3RydWN0IFJlZ2V4UGF0dGVybiB7CiAgICAgUmVnZXhQYXR0ZXJuKGJv
b2wgaWdub3JlQ2FzZSwgYm9vbCBtdWx0aWxpbmUpCiAgICAgICAgIDogbV9pZ25vcmVDYXNlKGln
bm9yZUNhc2UpCiAgICAgICAgICwgbV9tdWx0aWxpbmUobXVsdGlsaW5lKQogICAgICAgICAsIG1f
Y29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxzZSkKKyAgICAgICAgLCBtX2NvbnRhaW5zQmVnaW5D
aGFycyhmYWxzZSkKICAgICAgICAgLCBtX2NvbnRhaW5zQk9MKGZhbHNlKQogICAgICAgICAsIG1f
bnVtU3VicGF0dGVybnMoMCkKICAgICAgICAgLCBtX21heEJhY2tSZWZlcmVuY2UoMCkKQEAgLTM4
MCwxMiArNTUyLDE0IEBAIHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAgIGJvb2wgbV9pZ25vcmVD
YXNlIDogMTsKICAgICBib29sIG1fbXVsdGlsaW5lIDogMTsKICAgICBib29sIG1fY29udGFpbnNC
YWNrcmVmZXJlbmNlcyA6IDE7CisgICAgYm9vbCBtX2NvbnRhaW5zQmVnaW5DaGFycyA6IDE7CiAg
ICAgYm9vbCBtX2NvbnRhaW5zQk9MIDogMTsKICAgICB1bnNpZ25lZCBtX251bVN1YnBhdHRlcm5z
OwogICAgIHVuc2lnbmVkIG1fbWF4QmFja1JlZmVyZW5jZTsKICAgICBQYXR0ZXJuRGlzanVuY3Rp
b24qIG1fYm9keTsKICAgICBWZWN0b3I8UGF0dGVybkRpc2p1bmN0aW9uKiwgND4gbV9kaXNqdW5j
dGlvbnM7CiAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNzKj4gbV91c2VyQ2hhcmFjdGVyQ2xhc3Nl
czsKKyAgICBCZWdpbkNoYXJIZWxwZXIgbV9iZWdpbkNoYXJIZWxwZXI7CiAKIHByaXZhdGU6CiAg
ICAgQ2hhcmFjdGVyQ2xhc3MqIG5ld2xpbmVDYWNoZWQ7Ci0tIAoxLjcuMi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68094</attachid>
            <date>2010-09-20 09:18:45 -0700</date>
            <delta_ts>2010-10-01 05:30:39 -0700</delta_ts>
            <desc>proposed patch v3</desc>
            <filename>0001-kilincs-prepare-final-v3.patch</filename>
            <type>text/plain</type>
            <size>14435</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBhM2M2NzY1MWQyNTIwZmZiN2NkMWFmNjRlY2IyMzAxNThkZDdmZGIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogTW9uLCAyMCBTZXAgMjAxMCAxODoxMDoyNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGtp
bGluY3MgcHJlcGFyZSBmaW5hbCB2MwoKLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgIHwgICAzMiArKysrKysrCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGls
ZXIuY3BwIHwgIDE0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIEphdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmggICAgfCAgMTU3ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzQ5MDc0OC4uNjAzMWU0YiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM1IEBACisyMDEwLTA5LTIwICBQZXRlciBWYXJnYSAgPHB2YXJnYUBpbmYudS1zemVnZWQu
aHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29s
bGVjdCB0aGUgYmVnaW5uaW5nIGNoYXJhY3RlcnMgaW4gYSBSZWdFeHAgcGF0dGVybiBmb3IgbG9v
ay11cAorICAgICAgICBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ1NzQ4CisKKyAgICAgICAgRXh0ZW5kIHRoZSBZQVJSJ3MgcGFy
c2VyIHdpdGggYW4gYWxnb3JpdGhtIHdoaWNoIGNvbGxlY3RzIHRoZSBwb3RlbnRpYWwKKyAgICAg
ICAgYmVnaW5uaW5nIGNoYXJhY3RlcnMgZnJvbSBhIFJlZ0V4cCBwYXR0ZXJuIGZvciBsYXRlciBs
b29rLXVwIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIHlhcnIvUmVnZXhDb21waWxlci5jcHA6
CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjphZGRCZWdpblRl
cm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6c2V0dXBE
aXNqdW5jdGlvbkJlZ2luVGVybXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5D
b25zdHJ1Y3Rvcjo6c2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6c2V0dXBCZWdpbkNoYXJzKToKKyAgICAgICAg
KEpTQzo6WWFycjo6Y29tcGlsZVJlZ2V4KToKKyAgICAgICAgKiB5YXJyL1JlZ2V4UGF0dGVybi5o
OgorICAgICAgICAoSlNDOjpZYXJyOjpUZXJtQ2hhaW46OlRlcm1DaGFpbik6CisgICAgICAgIChK
U0M6OllhcnI6OkJlZ2luQ2hhcjo6QmVnaW5DaGFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVn
aW5DaGFySGVscGVyOjpCZWdpbkNoYXJIZWxwZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdp
bkNoYXJIZWxwZXI6OmFkZENoYXJhY3Rlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hh
ckhlbHBlcjo6Y3JlYXRlQmVnaW5DaGFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFy
SGVscGVyOjpsaW5rQmVnaW5DaGFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVs
cGVyOjpsaW5rSG90VGVybXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJIZWxwZXI6
OnNpemUpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJIZWxwZXI6OnNvcnQpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJIZWxwZXI6OnVuaXEpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpCZWdpbkNoYXJIZWxwZXI6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5D
aGFySGVscGVyOjpvcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybjo6
UmVnZXhQYXR0ZXJuKToKKwogMjAxMC0wOS0xOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXggcHQgMi4KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAgYi9KYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCmluZGV4IDMzNDM3OTIuLjk3M2U0MzYgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFBldGVyIFZhcmdhIChwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1KSwgVW5p
dmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQ5
LDggKzY1MCwxNDIgQEAgcHVibGljOgogICAgICAgICAgICAgbG9vcERpc2p1bmN0aW9uLT5tX2Fs
dGVybmF0aXZlcy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisgICAg
Ym9vbCBhZGRCZWdpblRlcm0oUGF0dGVyblRlcm0gdGVybSwgVmVjdG9yPFRlcm1DaGFpbj4qIGJl
Z2luVGVybXMsIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUsIHVuc2lnbmVkIG51bVRl
cm1zLCB1bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2lnbmVkIGRlcHRoKQorICAgIHsKKyAgICAgICAg
aWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSB7CisgICAgICAg
ICAgICBiZWdpblRlcm1zLT5hcHBlbmQoVGVybUNoYWluKHRlcm0pKTsKKyAgICAgICAgICAgIGlm
IChkZXB0aCA8IDIgJiYgdGVybUluZGV4IDwgbnVtVGVybXMgLSAxICYmIHRlcm0ucXVhbnRpdHlD
b3VudCA9PSAxKQorICAgICAgICAgICAgICAgIHNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKGFs
dGVybmF0aXZlLCAmYmVnaW5UZXJtcy0+bGFzdCgpLmhvdFRlcm1zLCB0ZXJtSW5kZXggKyAxLCBk
ZXB0aCArIDEpOworICAgICAgICB9IGVsc2UgaWYgKHRlcm1JbmRleCAhPSBudW1UZXJtcyAtIDEp
IHsKKyAgICAgICAgICAgIGJlZ2luVGVybXMtPmFwcGVuZChUZXJtQ2hhaW4odGVybSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBjb2xsZWN0cyB0aGUgdGVybXMgd2hpY2gg
YXJlIHBvdGVudGlhbGx5IG1hdGNoaW5nIHRoZSBmaXJzdCBudW1iZXIgb2YgZGVwdGggY2hhcmFj
dGVycyBpbiB0aGUgcmVzdWx0LgorICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxz
ZSB0aGVuIGl0IGZvdW5kIGF0IGxlYXN0IG9uZSB0ZXJtIHdoaWNoIG1ha2VzIHRoZSBiZWdpbm5p
bmcgY2hhcmFjdGVyCisgICAgLy8gbG9vay11cCBvcHRpbWl6YXRpb24gaW5lZmZpY2llbnQuCisg
ICAgYm9vbCBzZXR1cERpc2p1bmN0aW9uQmVnaW5UZXJtcyhQYXR0ZXJuRGlzanVuY3Rpb24qIGRp
c2p1bmN0aW9uLCBWZWN0b3I8VGVybUNoYWluPiogYmVnaW5UZXJtcywgdW5zaWduZWQgZGVwdGgp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGRpc2p1bmN0aW9u
LT5tX2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7CisgICAgICAgICAgICBQYXR0ZXJuQWx0
ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF07
CisKKyAgICAgICAgICAgIGlmICghc2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMoYWx0ZXJuYXRp
dmUsIGJlZ2luVGVybXMsIDAsIGRlcHRoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHNl
dHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUs
IFZlY3RvcjxUZXJtQ2hhaW4+KiBiZWdpblRlcm1zLCB1bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2ln
bmVkIGRlcHRoKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGVja05leHQgPSB0cnVlOworICAgICAg
ICBpbnQgbnVtVGVybXMgPSBhbHRlcm5hdGl2ZS0+bV90ZXJtcy5zaXplKCk7CisKKyAgICAgICAg
d2hpbGUgKGNoZWNrTmV4dCAmJiB0ZXJtSW5kZXggPCBudW1UZXJtcykgeworICAgICAgICAgICAg
UGF0dGVyblRlcm0gdGVybSA9IGFsdGVybmF0aXZlLT5tX3Rlcm1zW3Rlcm1JbmRleF07CisgICAg
ICAgICAgICBjaGVja05leHQgPSBmYWxzZTsKKworICAgICAgICAgICAgc3dpdGNoICh0ZXJtLnR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25CT0w6Cisg
ICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uRU9MOgorICAgICAgICAg
ICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbldvcmRCb3VuZGFyeToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVCYWNrUmVmZXJlbmNlOgorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndh
cmRSZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcjoKKyAgICAgICAgICAgICAg
ICBpZiAoYWRkQmVnaW5UZXJtKHRlcm0sIGJlZ2luVGVybXMsIGFsdGVybmF0aXZlLCBudW1UZXJt
cywgdGVybUluZGV4LCBkZXB0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVybUluZGV4Kys7
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTmV4dCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJt
OjpUeXBlQ2hhcmFjdGVyQ2xhc3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbjoK
KyAgICAgICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlw
ZVBhcmVudGhlc2VzU3VicGF0dGVybjoKKyAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0
eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRlcm1JbmRleCA9PSBudW1UZXJtcyAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICB0ZXJtSW5kZXgrKzsKKyAgICAgICAgICAgICAgICAg
ICAgY2hlY2tOZXh0ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICghc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXModGVybS5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbiwgYmVnaW5UZXJtcywgZGVwdGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0dXBCZWdpbkNo
YXJzKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxUZXJtQ2hhaW4+IGJlZ2luVGVybXM7CisgICAg
ICAgIGJvb2wgY29udGFpbnNGaXhlZENoYXJhY3RlciA9IGZhbHNlOworCisgICAgICAgIGlmIChz
ZXR1cERpc2p1bmN0aW9uQmVnaW5UZXJtcyhtX3BhdHRlcm4ubV9ib2R5LCAmYmVnaW5UZXJtcywg
MCkpIHsKKyAgICAgICAgICAgIGludCBzaXplID0gYmVnaW5UZXJtcy5zaXplKCk7CisgICAgICAg
ICAgICBCZWdpbkNoYXJIZWxwZXIqIGJlZ2luQ2hhckhlbHBlciA9ICZtX3BhdHRlcm4ubV9iZWdp
bkNoYXJIZWxwZXI7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgY29sbGVjdGVkIGFu
eSB0ZXJtcyB3ZSBzaG91bGQgYWJvcnQgdGhlIHByZXBhcmF0aW9uIG9mIGJlZ2lubmluZyBjaGFy
YWN0ZXIgbG9vay11cCBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtX3BhdHRlcm4ubV9jb250YWluc0Jl
Z2luQ2hhcnMgPSB0cnVlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0gdGVybSA9IGJlZ2luVGVy
bXNbaV0udGVybTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUganVzdCBjb2xsZWN0ZWQg
UGF0dGVybkNoYXJhY3RlciB0ZXJtcywgb3RoZXIgdGVybXMgYXJlIG5vdCBhbGxvd2VkLgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJu
Q2hhcmFjdGVyKTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyRml4ZWRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnNGaXhlZENo
YXJhY3RlciA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0ZXJt
LnBhdHRlcm5DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgQmVnaW5DaGFyIGJlZ2luQ2hhciA9
IGJlZ2luQ2hhckhlbHBlci0+Y3JlYXRlQmVnaW5DaGFyKGNoYXJhY3RlciwgKG1fcGF0dGVybi5t
X2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpKTsKKworICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCAmJiB0ZXJt
LnF1YW50aXR5Q291bnQgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGR1cGxpY2F0
ZSB0aGUgZmlyc3QgZm91bmQgY2hhcmFjdGVyIGlmIHRoZSBxdWFudGl0eSBvZiB0aGUgdGVybSBp
cyBtb3JlIHRoYW4gb25lLiBlZy46IC9hezN9LworICAgICAgICAgICAgICAgICAgICBiZWdpbkNo
YXIudmFsdWUgfD0gYmVnaW5DaGFyLnZhbHVlIDw8IDE2OworICAgICAgICAgICAgICAgICAgICBi
ZWdpbkNoYXIubWFzayB8PSBiZWdpbkNoYXIubWFzayA8PCAxNjsKKyAgICAgICAgICAgICAgICAg
ICAgYmVnaW5DaGFySGVscGVyLT5hZGRDaGFyYWN0ZXIoYmVnaW5DaGFyKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50
ICYmIHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxICYmIGJlZ2luVGVybXNbaV0uaG90VGVybXMuc2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGNoYXJhY3RlcnMgd2l0aCBm
aXhlZCBxdWFudGlmaWVyIHdlIHNob3VsZCBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIgYXMgd2Vs
bC4KKyAgICAgICAgICAgICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5saW5rSG90VGVybXMoYmVn
aW5DaGFyLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9m
IGdyZWVkeSBtYXRjaGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIgY2hlY2tpbmcgaXMgdW5uZWNlc3Nh
cnkgdGhlcmVmb3JlIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZp
cnN0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5hZGRD
aGFyYWN0ZXIoYmVnaW5DaGFyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
dGhlIHBhdHRlcm4gZG9lc24ndCBjb250YWluIHRlcm1zIHdpdGggZml4ZWQgcXVhbnRpZmllcnMg
dGhlbiB0aGUgYmVnaW5uaW5nIGNoYXJhY3RlciBsb29rLXVwIG9wdGltaXphdGlvbiBpcyBpbmVm
ZmljaWVudC4KKyAgICAgICAgICAgIGlmICghY29udGFpbnNGaXhlZENoYXJhY3RlcikgeworICAg
ICAgICAgICAgICAgIG1fcGF0dGVybi5tX2NvbnRhaW5zQmVnaW5DaGFycyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
bW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXJzIGFyZSBjb2xsZWN0ZWQgdGhlbiB3ZSBuZWVkIHRvIG9w
dGltaXplIHRoZSB2ZWN0b3IgKHNvcnQsIGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgYW5kIG1lcmdl
KS4KKyAgICAgICAgICAgIGlmIChiZWdpbkNoYXJIZWxwZXItPnNpemUoKSA+IDEpCisgICAgICAg
ICAgICAgICAgYmVnaW5DaGFySGVscGVyLT5vcHRpbWl6ZSgpOworICAgICAgICB9CisgICAgfQor
CiBwcml2YXRlOgogICAgIFJlZ2V4UGF0dGVybiYgbV9wYXR0ZXJuOwogICAgIFBhdHRlcm5BbHRl
cm5hdGl2ZSogbV9hbHRlcm5hdGl2ZTsKQEAgLTY4Nyw2ICs4MjIsNyBAQCBjb25zdCBjaGFyKiBj
b21waWxlUmVnZXgoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnZXhQYXR0ZXJuJiBw
YXR0ZXJuKQogICAgIGNvbnN0cnVjdG9yLm9wdGltaXplQk9MKCk7CiAgICAgICAgIAogICAgIGNv
bnN0cnVjdG9yLnNldHVwT2Zmc2V0cygpOworICAgIGNvbnN0cnVjdG9yLnNldHVwQmVnaW5DaGFy
cygpOwogCiAgICAgcmV0dXJuIDA7CiB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUveWFy
ci9SZWdleFBhdHRlcm4uaCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKaW5k
ZXggZWVjYmQ0My4uYTEyZmY3YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eFBhdHRlcm4uaAorKysgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJnYUBp
bmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoWUFSUikKIAorI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIApAQCAtMjgzLDExICsyODUsMTY0IEBAIENoYXJh
Y3RlckNsYXNzKiBub25kaWdpdHNDcmVhdGUoKTsKIENoYXJhY3RlckNsYXNzKiBub25zcGFjZXND
cmVhdGUoKTsKIENoYXJhY3RlckNsYXNzKiBub253b3JkY2hhckNyZWF0ZSgpOwogCitzdHJ1Y3Qg
VGVybUNoYWluIHsKKyAgICBUZXJtQ2hhaW4oUGF0dGVyblRlcm0gdGVybSkKKyAgICAgICAgOiB0
ZXJtKHRlcm0pCisgICAge30KKworICAgIFBhdHRlcm5UZXJtIHRlcm07CisgICAgVmVjdG9yPFRl
cm1DaGFpbj4gaG90VGVybXM7Cit9OworCitzdHJ1Y3QgQmVnaW5DaGFyIHsKKyAgICBCZWdpbkNo
YXIoKQorICAgICAgICA6IHZhbHVlKDApCisgICAgICAgICwgbWFzaygwKQorICAgIHt9CisKKyAg
ICBCZWdpbkNoYXIoaW50IHZhbHVlLCBpbnQgbWFzaykKKyAgICAgICAgOiB2YWx1ZSh2YWx1ZSkK
KyAgICAgICAgLCBtYXNrKG1hc2spCisgICAge30KKworICAgIGludCB2YWx1ZTsKKyAgICBpbnQg
bWFzazsKK307CisKK3N0cnVjdCBCZWdpbkNoYXJIZWxwZXIgeworICAgIEJlZ2luQ2hhckhlbHBl
cigpCisgICAge30KKworICAgIHZvaWQgYWRkQ2hhcmFjdGVyKEJlZ2luQ2hhciBiYykKKyAgICB7
CisgICAgICAgIG1fYmVnaW5DaGFycy5hcHBlbmQoYmMpOworICAgIH0KKworICAgIEJlZ2luQ2hh
ciBjcmVhdGVCZWdpbkNoYXIoVUNoYXIgY2hhcmFjdGVyLCBib29sIGlnbm9yZUNhc2UpCisgICAg
eworICAgICAgICBpbnQgbWFzayA9IDA7CisKKyAgICAgICAgaWYgKGlnbm9yZUNhc2UpIHsKKyAg
ICAgICAgICAgIGNoYXJhY3RlciA9IFdURjo6VW5pY29kZTo6dG9Mb3dlcihjaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgbWFzayA9IDMyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEJlZ2lu
Q2hhcihjaGFyYWN0ZXIsIG1hc2spOworICAgIH0KKworICAgIC8vIEFwcGVuZCBhIGNoYXJhY3Rl
ciB0byBhbiBleGlzdGluZyBCZWdpbkNoYXIgb2JqZWN0LgorICAgIEJlZ2luQ2hhciBsaW5rQmVn
aW5DaGFyKEJlZ2luQ2hhciBiZWdpbkNoYXIsIFVDaGFyIGNoYXJhY3RlciwgYm9vbCBpZ25vcmVD
YXNlKQorICAgIHsKKyAgICAgICAgQmVnaW5DaGFyIGJlZ2luQ2hhck5leHQgPSBiZWdpbkNoYXI7
CisKKyAgICAgICAgaWYgKGlnbm9yZUNhc2UpIHsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFdU
Rjo6VW5pY29kZTo6dG9Mb3dlcihjaGFyYWN0ZXIpOworICAgICAgICAgICAgYmVnaW5DaGFyTmV4
dC5tYXNrIHw9IDMyIDw8IDE2OworICAgICAgICB9CisKKyAgICAgICAgYmVnaW5DaGFyTmV4dC52
YWx1ZSB8PSBjaGFyYWN0ZXIgPDwgMTY7CisgICAgICAgIHJldHVybiBiZWdpbkNoYXJOZXh0Owor
ICAgIH0KKworICAgIC8vIENyZWF0ZSBCZWdpbkNoYXIgb2JqZWN0cyBieSBhcHBlbmRpbmcgZWFj
aCB0ZXJtcyBmcm9tIGEgaG90VGVybXMgdmVjdG9yIHRvIGFuIGV4aXN0aW5nIEJlZ2luQ2hhciBv
YmplY3QuCisgICAgdm9pZCBsaW5rSG90VGVybXMoQmVnaW5DaGFyIGJlZ2luQ2hhciwgVmVjdG9y
PFRlcm1DaGFpbj4qIGhvdFRlcm1zLCBib29sIGlnbm9yZUNhc2UpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaG90VGVybXMtPnNpemUoKTsgaSsrKSB7CisgICAgICAg
ICAgICBQYXR0ZXJuVGVybSBob3RUZXJtID0gaG90VGVybXMtPmF0KGkpLnRlcm07CisgICAgICAg
ICAgICBBU1NFUlQoaG90VGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJh
Y3Rlcik7CisKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3Rlck5leHQgPSBob3RUZXJtLnBhdHRl
cm5DaGFyYWN0ZXI7CisgICAgICAgICAgICBhZGRDaGFyYWN0ZXIobGlua0JlZ2luQ2hhcihiZWdp
bkNoYXIsIGNoYXJhY3Rlck5leHQsIChpZ25vcmVDYXNlICYmIFdURjo6aXNBU0NJSUFscGhhKGNo
YXJhY3Rlck5leHQpKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50IHNpemUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYmVnaW5DaGFycy5zaXplKCk7CisgICAgfQorCisgICAgLy8g
QSBxdWljayBzaG9ydCBhbGdvcml0aG0gd2hpY2ggc29ydHMgdGhlIGNvbGxlY3RlZCBjaGFyYWN0
ZXJzIGluIGRlc2NlbmRhbnQgb3JkZXIuCisgICAgdm9pZCBzb3J0KGludCBsZWZ0LCBpbnQgcmln
aHQpCisgICAgeworICAgICAgICBpbnQgaSA9IGxlZnQ7CisgICAgICAgIGludCBqID0gcmlnaHQ7
CisgICAgICAgIEJlZ2luQ2hhciB0bXA7CisgICAgICAgIGludCBwaXZvdCA9IG1fYmVnaW5DaGFy
c1sobGVmdCArIHJpZ2h0KSAvIDJdLnZhbHVlOworCisgICAgICAgIHdoaWxlIChpIDw9IGopIHsK
KyAgICAgICAgICAgIHdoaWxlIChtX2JlZ2luQ2hhcnNbaV0udmFsdWUgPiBwaXZvdCkKKyAgICAg
ICAgICAgICAgICBpKys7CisKKyAgICAgICAgICAgIHdoaWxlIChtX2JlZ2luQ2hhcnNbal0udmFs
dWUgPCBwaXZvdCkKKyAgICAgICAgICAgICAgICBqLS07CisKKyAgICAgICAgICAgIGlmIChpIDw9
IGopIHsKKyAgICAgICAgICAgICAgICB0bXAgPSBtX2JlZ2luQ2hhcnNbaV07CisgICAgICAgICAg
ICAgICAgbV9iZWdpbkNoYXJzW2krK10gPSBtX2JlZ2luQ2hhcnNbal07CisgICAgICAgICAgICAg
ICAgbV9iZWdpbkNoYXJzW2otLV0gPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobGVmdCA8IGopCisgICAgICAgICAgICBzb3J0KGxlZnQsIGopOworICAgICAg
ICBpZiAoaSA8IHJpZ2h0KQorICAgICAgICAgICAgc29ydChpLCByaWdodCk7CisgICAgfQorCisg
ICAgLy8gRWxpbWluYXRlIHRoZSBkdXBsaWNhdGVkIGNoYXJhY3RlcnMuCisgICAgaW50IHVuaXEo
aW50IHNpemUpCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICAgICAgaWYgKG1fYmVnaW5DaGFyc1tpXS52YWx1ZSA9PSBtX2JlZ2luQ2hhcnNb
aSArIDFdLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJzLnJlbW92ZShpICsg
MSk7CisgICAgICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgLy8gTWVyZ2UgdHdvIGZvbGxvd2lu
ZyBCZWdpbkNoYXJzIGluIHRoZSB2ZWN0b3IgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2hhcmFj
dGVyIGNoZWNrcy4KKyAgICB2b2lkIG1lcmdlKGludCBzaXplKQorICAgIHsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIEJlZ2luQ2hhciogY3Vy
ciA9ICZtX2JlZ2luQ2hhcnNbaV07CisgICAgICAgICAgICBCZWdpbkNoYXIqIG5leHQgPSAmbV9i
ZWdpbkNoYXJzW2kgKyAxXTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgYW5kIHRo
ZSBuZXh0IHNpemUgb2YgdmFsdWUgaXMgZGlmZmVyZW50IHdlIHNob3VsZCBza2lwIHRoZSBtZXJn
ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSAxNmJpdCBhbmQgMzJiaXQgdmFs
dWVzIGFyZSB1bm1lcmdhYmxlLgorICAgICAgICAgICAgaWYgKGN1cnItPnZhbHVlID4gMHhGRkZG
ICYmIG5leHQtPnZhbHVlIDw9IDB4RkZGRikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgaW50IGRpZmYgPSBjdXJyLT52YWx1ZSBeIG5leHQtPnZhbHVlOworCisgICAg
ICAgICAgICBjdXJyLT5tYXNrIHw9IGRpZmY7CisgICAgICAgICAgICBjdXJyLT52YWx1ZSB8PSBj
dXJyLT5tYXNrOworCisgICAgICAgICAgICBtX2JlZ2luQ2hhcnMucmVtb3ZlKGkgKyAxKTsKKyAg
ICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3B0aW1pemUo
KQorICAgIHsKKyAgICAgICAgaW50IHNpemUgPSBtX2JlZ2luQ2hhcnMuc2l6ZSgpIC0gMTsKKwor
ICAgICAgICBzb3J0KDAsIHNpemUpOworICAgICAgICBzaXplID0gdW5pcShzaXplKTsKKyAgICAg
ICAgaWYgKHNpemUgPiAyKQorICAgICAgICAgICAgbWVyZ2Uoc2l6ZSk7CisgICAgfQorCisgICAg
VmVjdG9yPEJlZ2luQ2hhcj4gbV9iZWdpbkNoYXJzOworfTsKKwogc3RydWN0IFJlZ2V4UGF0dGVy
biB7CiAgICAgUmVnZXhQYXR0ZXJuKGJvb2wgaWdub3JlQ2FzZSwgYm9vbCBtdWx0aWxpbmUpCiAg
ICAgICAgIDogbV9pZ25vcmVDYXNlKGlnbm9yZUNhc2UpCiAgICAgICAgICwgbV9tdWx0aWxpbmUo
bXVsdGlsaW5lKQogICAgICAgICAsIG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxzZSkKKyAg
ICAgICAgLCBtX2NvbnRhaW5zQmVnaW5DaGFycyhmYWxzZSkKICAgICAgICAgLCBtX2NvbnRhaW5z
Qk9MKGZhbHNlKQogICAgICAgICAsIG1fbnVtU3VicGF0dGVybnMoMCkKICAgICAgICAgLCBtX21h
eEJhY2tSZWZlcmVuY2UoMCkKQEAgLTM4MCwxMiArNTM1LDE0IEBAIHN0cnVjdCBSZWdleFBhdHRl
cm4gewogICAgIGJvb2wgbV9pZ25vcmVDYXNlIDogMTsKICAgICBib29sIG1fbXVsdGlsaW5lIDog
MTsKICAgICBib29sIG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyA6IDE7CisgICAgYm9vbCBtX2Nv
bnRhaW5zQmVnaW5DaGFycyA6IDE7CiAgICAgYm9vbCBtX2NvbnRhaW5zQk9MIDogMTsKICAgICB1
bnNpZ25lZCBtX251bVN1YnBhdHRlcm5zOwogICAgIHVuc2lnbmVkIG1fbWF4QmFja1JlZmVyZW5j
ZTsKICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIG1fYm9keTsKICAgICBWZWN0b3I8UGF0dGVybkRp
c2p1bmN0aW9uKiwgND4gbV9kaXNqdW5jdGlvbnM7CiAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNz
Kj4gbV91c2VyQ2hhcmFjdGVyQ2xhc3NlczsKKyAgICBCZWdpbkNoYXJIZWxwZXIgbV9iZWdpbkNo
YXJIZWxwZXI7CiAKIHByaXZhdGU6CiAgICAgQ2hhcmFjdGVyQ2xhc3MqIG5ld2xpbmVDYWNoZWQ7
Ci0tIAoxLjcuMi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69455</attachid>
            <date>2010-10-01 05:30:39 -0700</date>
            <delta_ts>2010-10-04 04:40:00 -0700</delta_ts>
            <desc>proposed patch v4</desc>
            <filename>0001-kilincs-prepare-final-v4.patch</filename>
            <type>text/plain</type>
            <size>14608</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBmNzJkMzk5YWZiN2RjZmJhZjExNjFmNzQxYTE2MjQ1ZjViY2Y1MTRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogRnJpLCAxIE9jdCAyMDEwIDA1OjI4OjQ2IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0ga2ls
aW5jcy1wcmVwYXJlLWZpbmFsLXY0CgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgfCAgIDMyICsrKysrKysKIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxl
ci5jcHAgfCAgMTQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogSmF2YVNjcmlwdENv
cmUveWFyci9SZWdleFBhdHRlcm4uaCAgICB8ICAxNTcgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCBiMTJjYzllLi4xNTExMGJjIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzUgQEAKKzIwMTAtMTAtMDEgIFBldGVyIFZhcmdhICA8cHZhcmdhQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb2xs
ZWN0IHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVycyBpbiBhIFJlZ0V4cCBwYXR0ZXJuIGZvciBsb29r
LXVwCisgICAgICAgIG9wdGltaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDU3NDgKKworICAgICAgICBFeHRlbmQgdGhlIFlBUlIncyBwYXJz
ZXIgd2l0aCBhbiBhbGdvcml0aG0gd2hpY2ggY29sbGVjdHMgdGhlIHBvdGVudGlhbAorICAgICAg
ICBiZWdpbm5pbmcgY2hhcmFjdGVycyBmcm9tIGEgUmVnRXhwIHBhdHRlcm4gZm9yIGxhdGVyIGxv
b2stdXAgb3B0aW1pemF0aW9uLgorCisgICAgICAgICogeWFyci9SZWdleENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmFkZEJlZ2luVGVy
bSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cERp
c2p1bmN0aW9uQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNv
bnN0cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6Ollh
cnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cEJlZ2luQ2hhcnMpOgorICAgICAgICAo
SlNDOjpZYXJyOjpjb21waWxlUmVnZXgpOgorICAgICAgICAqIHlhcnIvUmVnZXhQYXR0ZXJuLmg6
CisgICAgICAgIChKU0M6OllhcnI6OlRlcm1DaGFpbjo6VGVybUNoYWluKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6QmVnaW5DaGFyOjpCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdp
bkNoYXJIZWxwZXI6OkJlZ2luQ2hhckhlbHBlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2lu
Q2hhckhlbHBlcjo6YWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFy
SGVscGVyOjpjcmVhdGVCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJI
ZWxwZXI6OmxpbmtCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJIZWxw
ZXI6OmxpbmtIb3RUZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6
c2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6c29ydCk6CisgICAg
ICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6dW5pcSk6CisgICAgICAgIChKU0M6Ollh
cnI6OkJlZ2luQ2hhckhlbHBlcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNo
YXJIZWxwZXI6Om9wdGltaXplKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuOjpS
ZWdleFBhdHRlcm4pOgorCiAyMDEwLTA5LTMwICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFu
eTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUv
eWFyci9SZWdleENvbXBpbGVyLmNwcAppbmRleCA5ZjllMDI4Li5lYTZjYTczIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0OSw4ICs2
NTAsMTQ1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxvb3BEaXNqdW5jdGlvbi0+bV9hbHRlcm5h
dGl2ZXMuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworICAgIGJvb2wg
YWRkQmVnaW5UZXJtKFBhdHRlcm5UZXJtIHRlcm0sIFZlY3RvcjxUZXJtQ2hhaW4+KiBiZWdpblRl
cm1zLCBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlLCB1bnNpZ25lZCBudW1UZXJtcywg
dW5zaWduZWQgdGVybUluZGV4LCB1bnNpZ25lZCBkZXB0aCkKKyAgICB7CisgICAgICAgIGlmICh0
ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgeworICAgICAgICAgICAg
YmVnaW5UZXJtcy0+YXBwZW5kKFRlcm1DaGFpbih0ZXJtKSk7CisgICAgICAgICAgICBpZiAoZGVw
dGggPCAyICYmIHRlcm1JbmRleCA8IG51bVRlcm1zIC0gMSAmJiB0ZXJtLnF1YW50aXR5Q291bnQg
PT0gMSkKKyAgICAgICAgICAgICAgICBzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyhhbHRlcm5h
dGl2ZSwgJmJlZ2luVGVybXMtPmxhc3QoKS5ob3RUZXJtcywgdGVybUluZGV4ICsgMSwgZGVwdGgg
KyAxKTsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXJtSW5kZXggIT0gbnVtVGVybXMgLSAxKSB7Cisg
ICAgICAgICAgICBiZWdpblRlcm1zLT5hcHBlbmQoVGVybUNoYWluKHRlcm0pKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gY29sbGVjdHMgdGhlIHRlcm1zIHdoaWNoIGFyZSBw
b3RlbnRpYWxseSBtYXRjaGluZyB0aGUgZmlyc3QgbnVtYmVyIG9mIGRlcHRoIGNoYXJhY3RlcnMg
aW4gdGhlIHJlc3VsdC4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgdGhl
biBpdCBmb3VuZCBhdCBsZWFzdCBvbmUgdGVybSB3aGljaCBtYWtlcyB0aGUgYmVnaW5uaW5nIGNo
YXJhY3RlcgorICAgIC8vIGxvb2stdXAgb3B0aW1pemF0aW9uIGluZWZmaWNpZW50LgorICAgIGJv
b2wgc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXMoUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5j
dGlvbiwgVmVjdG9yPFRlcm1DaGFpbj4qIGJlZ2luVGVybXMsIHVuc2lnbmVkIGRlcHRoKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhbHQgPSAwOyBhbHQgPCBkaXNqdW5jdGlvbi0+bV9h
bHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2FsdCkgeworICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0
aXZlKiBhbHRlcm5hdGl2ZSA9IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdOworCisg
ICAgICAgICAgICBpZiAoIXNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKGFsdGVybmF0aXZlLCBi
ZWdpblRlcm1zLCAwLCBkZXB0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBzZXR1cEFs
dGVybmF0aXZlQmVnaW5UZXJtcyhQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlLCBWZWN0
b3I8VGVybUNoYWluPiogYmVnaW5UZXJtcywgdW5zaWduZWQgdGVybUluZGV4LCB1bnNpZ25lZCBk
ZXB0aCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hlY2tOZXh0ID0gdHJ1ZTsKKyAgICAgICAgaW50
IG51bVRlcm1zID0gYWx0ZXJuYXRpdmUtPm1fdGVybXMuc2l6ZSgpOworCisgICAgICAgIHdoaWxl
IChjaGVja05leHQgJiYgdGVybUluZGV4IDwgbnVtVGVybXMpIHsKKyAgICAgICAgICAgIFBhdHRl
cm5UZXJtIHRlcm0gPSBhbHRlcm5hdGl2ZS0+bV90ZXJtc1t0ZXJtSW5kZXhdOworICAgICAgICAg
ICAgY2hlY2tOZXh0ID0gZmFsc2U7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGVybS50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgorICAgICAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkVPTDoKKyAgICAgICAgICAgIGNh
c2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQmFj
a1JlZmVyZW5jZToKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVGb3J3YXJkUmVm
ZXJlbmNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2Fz
ZSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXI6CisgICAgICAgICAgICAgICAgaWYg
KGFkZEJlZ2luVGVybSh0ZXJtLCBiZWdpblRlcm1zLCBhbHRlcm5hdGl2ZSwgbnVtVGVybXMsIHRl
cm1JbmRleCwgZGVwdGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRlcm1JbmRleCsrOworICAg
ICAgICAgICAgICAgICAgICBjaGVja05leHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlw
ZUNoYXJhY3RlckNsYXNzOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246CisgICAg
ICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJl
bnRoZXNlc1N1YnBhdHRlcm46CisgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBl
ICE9IFF1YW50aWZpZXJGaXhlZENvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJt
SW5kZXggPT0gbnVtVGVybXMgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgICAgdGVybUluZGV4Kys7CisgICAgICAgICAgICAgICAgICAgIGNo
ZWNrTmV4dCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIXNldHVwRGlzanVuY3Rpb25CZWdpblRlcm1zKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rp
b24sIGJlZ2luVGVybXMsIGRlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldHVwQmVnaW5DaGFycygp
CisgICAgeworICAgICAgICBWZWN0b3I8VGVybUNoYWluPiBiZWdpblRlcm1zOworICAgICAgICBi
b29sIGNvbnRhaW5zRml4ZWRDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICBpZiAoKCFtX3Bh
dHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSB8fCBtX3BhdHRlcm4ubV9ib2R5LT5tX2FsdGVy
bmF0aXZlcy5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgICYmIHNldHVwRGlzanVuY3Rpb25C
ZWdpblRlcm1zKG1fcGF0dGVybi5tX2JvZHksICZiZWdpblRlcm1zLCAwKSkgeworICAgICAgICAg
ICAgaW50IHNpemUgPSBiZWdpblRlcm1zLnNpemUoKTsKKyAgICAgICAgICAgIEJlZ2luQ2hhckhl
bHBlciogYmVnaW5DaGFySGVscGVyID0gJm1fcGF0dGVybi5tX2JlZ2luQ2hhckhlbHBlcjsKKwor
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBjb2xsZWN0ZWQgYW55IHRlcm1zIHdlIHNob3Vs
ZCBhYm9ydCB0aGUgcHJlcGFyYXRpb24gb2YgYmVnaW5uaW5nIGNoYXJhY3RlciBsb29rLXVwIG9w
dGltaXphdGlvbi4KKyAgICAgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIG1fcGF0dGVybi5tX2NvbnRhaW5zQmVnaW5DaGFycyA9IHRydWU7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBQYXR0ZXJuVGVybSB0ZXJtID0gYmVnaW5UZXJtc1tpXS50ZXJtOworCisg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBqdXN0IGNvbGxlY3RlZCBQYXR0ZXJuQ2hhcmFjdGVy
IHRlcm1zLCBvdGhlciB0ZXJtcyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAgICAgICAgICAgQVNT
RVJUKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXIpOworCisg
ICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENv
dW50KQorICAgICAgICAgICAgICAgICAgICBjb250YWluc0ZpeGVkQ2hhcmFjdGVyID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHRlcm0ucGF0dGVybkNoYXJhY3Rl
cjsKKyAgICAgICAgICAgICAgICBCZWdpbkNoYXIgYmVnaW5DaGFyID0gYmVnaW5DaGFySGVscGVy
LT5jcmVhdGVCZWdpbkNoYXIoY2hhcmFjdGVyLCAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBp
c0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkpOworCisgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50ICYmIHRlcm0ucXVhbnRpdHlDb3VudCA+
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZHVwbGljYXRlIHRoZSBmaXJzdCBmb3Vu
ZCBjaGFyYWN0ZXIgaWYgdGhlIHF1YW50aXR5IG9mIHRoZSB0ZXJtIGlzIG1vcmUgdGhhbiBvbmUu
IGVnLjogL2F7M30vCisgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2hhci52YWx1ZSB8PSBiZWdp
bkNoYXIudmFsdWUgPDwgMTY7CisgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2hhci5tYXNrIHw9
IGJlZ2luQ2hhci5tYXNrIDw8IDE2OworICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxw
ZXItPmFkZENoYXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQgJiYgdGVybS5xdWFudGl0
eUNvdW50ID09IDEgJiYgYmVnaW5UZXJtc1tpXS5ob3RUZXJtcy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgICAgIC8vIEluIGNhc2Ugb2YgY2hhcmFjdGVycyB3aXRoIGZpeGVkIHF1YW50aWZpZXIg
d2Ugc2hvdWxkIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciBhcyB3ZWxsLgorICAgICAgICAgICAg
ICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmxpbmtIb3RUZXJtcyhiZWdpbkNoYXIsICZiZWdpblRl
cm1zW2ldLmhvdFRlcm1zLCBtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZ3JlZWR5IG1hdGNoaW5n
IHRoZSBuZXh0IGNoYXJhY3RlciBjaGVja2luZyBpcyB1bm5lY2Vzc2FyeSB0aGVyZWZvcmUgd2Ug
anVzdCBzdG9yZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgY2hhcmFjdGVyLgor
ICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmFkZENoYXJhY3RlcihiZWdpbkNo
YXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBkb2Vz
bid0IGNvbnRhaW4gdGVybXMgd2l0aCBmaXhlZCBxdWFudGlmaWVycyB0aGVuIHRoZSBiZWdpbm5p
bmcgY2hhcmFjdGVyIGxvb2stdXAgb3B0aW1pemF0aW9uIGlzIGluZWZmaWNpZW50LgorICAgICAg
ICAgICAgaWYgKCFjb250YWluc0ZpeGVkQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgbV9w
YXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIGNo
YXJhY3RlcnMgYXJlIGNvbGxlY3RlZCB0aGVuIHdlIG5lZWQgdG8gb3B0aW1pemUgdGhlIHZlY3Rv
ciAoc29ydCwgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBhbmQgbWVyZ2UpLgorICAgICAgICAgICAg
aWYgKGJlZ2luQ2hhckhlbHBlci0+c2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICBiZWdpbkNo
YXJIZWxwZXItPm9wdGltaXplKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9wYXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKIHByaXZhdGU6CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47CiAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwpAQCAtNjg3LDYgKzgyNSw3IEBAIGNvbnN0IGNoYXIq
IGNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdleFBhdHRlcm4m
IHBhdHRlcm4pCiAgICAgY29uc3RydWN0b3Iub3B0aW1pemVCT0woKTsKICAgICAgICAgCiAgICAg
Y29uc3RydWN0b3Iuc2V0dXBPZmZzZXRzKCk7CisgICAgY29uc3RydWN0b3Iuc2V0dXBCZWdpbkNo
YXJzKCk7CiAKICAgICByZXR1cm4gMDsKIH07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4UGF0dGVybi5oIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaApp
bmRleCBlZWNiZDQzLi5hMTJmZjdhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1Jl
Z2V4UGF0dGVybi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBWYXJnYSAocHZhcmdh
QGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShZQVJSKQogCisj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC0yODMsMTEgKzI4NSwxNjQgQEAgQ2hh
cmFjdGVyQ2xhc3MqIG5vbmRpZ2l0c0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xhc3MqIG5vbnNwYWNl
c0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xhc3MqIG5vbndvcmRjaGFyQ3JlYXRlKCk7CiAKK3N0cnVj
dCBUZXJtQ2hhaW4geworICAgIFRlcm1DaGFpbihQYXR0ZXJuVGVybSB0ZXJtKQorICAgICAgICA6
IHRlcm0odGVybSkKKyAgICB7fQorCisgICAgUGF0dGVyblRlcm0gdGVybTsKKyAgICBWZWN0b3I8
VGVybUNoYWluPiBob3RUZXJtczsKK307CisKK3N0cnVjdCBCZWdpbkNoYXIgeworICAgIEJlZ2lu
Q2hhcigpCisgICAgICAgIDogdmFsdWUoMCkKKyAgICAgICAgLCBtYXNrKDApCisgICAge30KKwor
ICAgIEJlZ2luQ2hhcihpbnQgdmFsdWUsIGludCBtYXNrKQorICAgICAgICA6IHZhbHVlKHZhbHVl
KQorICAgICAgICAsIG1hc2sobWFzaykKKyAgICB7fQorCisgICAgaW50IHZhbHVlOworICAgIGlu
dCBtYXNrOworfTsKKworc3RydWN0IEJlZ2luQ2hhckhlbHBlciB7CisgICAgQmVnaW5DaGFySGVs
cGVyKCkKKyAgICB7fQorCisgICAgdm9pZCBhZGRDaGFyYWN0ZXIoQmVnaW5DaGFyIGJjKQorICAg
IHsKKyAgICAgICAgbV9iZWdpbkNoYXJzLmFwcGVuZChiYyk7CisgICAgfQorCisgICAgQmVnaW5D
aGFyIGNyZWF0ZUJlZ2luQ2hhcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgaWdub3JlQ2FzZSkKKyAg
ICB7CisgICAgICAgIGludCBtYXNrID0gMDsKKworICAgICAgICBpZiAoaWdub3JlQ2FzZSkgewor
ICAgICAgICAgICAgY2hhcmFjdGVyID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBtYXNrID0gMzI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQmVn
aW5DaGFyKGNoYXJhY3RlciwgbWFzayk7CisgICAgfQorCisgICAgLy8gQXBwZW5kIGEgY2hhcmFj
dGVyIHRvIGFuIGV4aXN0aW5nIEJlZ2luQ2hhciBvYmplY3QuCisgICAgQmVnaW5DaGFyIGxpbmtC
ZWdpbkNoYXIoQmVnaW5DaGFyIGJlZ2luQ2hhciwgVUNoYXIgY2hhcmFjdGVyLCBib29sIGlnbm9y
ZUNhc2UpCisgICAgeworICAgICAgICBCZWdpbkNoYXIgYmVnaW5DaGFyTmV4dCA9IGJlZ2luQ2hh
cjsKKworICAgICAgICBpZiAoaWdub3JlQ2FzZSkgeworICAgICAgICAgICAgY2hhcmFjdGVyID0g
V1RGOjpVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBiZWdpbkNoYXJO
ZXh0Lm1hc2sgfD0gMzIgPDwgMTY7CisgICAgICAgIH0KKworICAgICAgICBiZWdpbkNoYXJOZXh0
LnZhbHVlIHw9IGNoYXJhY3RlciA8PCAxNjsKKyAgICAgICAgcmV0dXJuIGJlZ2luQ2hhck5leHQ7
CisgICAgfQorCisgICAgLy8gQ3JlYXRlIEJlZ2luQ2hhciBvYmplY3RzIGJ5IGFwcGVuZGluZyBl
YWNoIHRlcm1zIGZyb20gYSBob3RUZXJtcyB2ZWN0b3IgdG8gYW4gZXhpc3RpbmcgQmVnaW5DaGFy
IG9iamVjdC4KKyAgICB2b2lkIGxpbmtIb3RUZXJtcyhCZWdpbkNoYXIgYmVnaW5DaGFyLCBWZWN0
b3I8VGVybUNoYWluPiogaG90VGVybXMsIGJvb2wgaWdub3JlQ2FzZSkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBob3RUZXJtcy0+c2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgIFBhdHRlcm5UZXJtIGhvdFRlcm0gPSBob3RUZXJtcy0+YXQoaSkudGVybTsKKyAgICAg
ICAgICAgIEFTU0VSVChob3RUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hh
cmFjdGVyKTsKKworICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyTmV4dCA9IGhvdFRlcm0ucGF0
dGVybkNoYXJhY3RlcjsKKyAgICAgICAgICAgIGFkZENoYXJhY3RlcihsaW5rQmVnaW5DaGFyKGJl
Z2luQ2hhciwgY2hhcmFjdGVyTmV4dCwgKGlnbm9yZUNhc2UgJiYgV1RGOjppc0FTQ0lJQWxwaGEo
Y2hhcmFjdGVyTmV4dCkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgc2l6ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9iZWdpbkNoYXJzLnNpemUoKTsKKyAgICB9CisKKyAgICAv
LyBBIHF1aWNrIHNob3J0IGFsZ29yaXRobSB3aGljaCBzb3J0cyB0aGUgY29sbGVjdGVkIGNoYXJh
Y3RlcnMgaW4gZGVzY2VuZGFudCBvcmRlci4KKyAgICB2b2lkIHNvcnQoaW50IGxlZnQsIGludCBy
aWdodCkKKyAgICB7CisgICAgICAgIGludCBpID0gbGVmdDsKKyAgICAgICAgaW50IGogPSByaWdo
dDsKKyAgICAgICAgQmVnaW5DaGFyIHRtcDsKKyAgICAgICAgaW50IHBpdm90ID0gbV9iZWdpbkNo
YXJzWyhsZWZ0ICsgcmlnaHQpIC8gMl0udmFsdWU7CisKKyAgICAgICAgd2hpbGUgKGkgPD0gaikg
eworICAgICAgICAgICAgd2hpbGUgKG1fYmVnaW5DaGFyc1tpXS52YWx1ZSA+IHBpdm90KQorICAg
ICAgICAgICAgICAgIGkrKzsKKworICAgICAgICAgICAgd2hpbGUgKG1fYmVnaW5DaGFyc1tqXS52
YWx1ZSA8IHBpdm90KQorICAgICAgICAgICAgICAgIGotLTsKKworICAgICAgICAgICAgaWYgKGkg
PD0gaikgeworICAgICAgICAgICAgICAgIHRtcCA9IG1fYmVnaW5DaGFyc1tpXTsKKyAgICAgICAg
ICAgICAgICBtX2JlZ2luQ2hhcnNbaSsrXSA9IG1fYmVnaW5DaGFyc1tqXTsKKyAgICAgICAgICAg
ICAgICBtX2JlZ2luQ2hhcnNbai0tXSA9IHRtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsZWZ0IDwgaikKKyAgICAgICAgICAgIHNvcnQobGVmdCwgaik7CisgICAg
ICAgIGlmIChpIDwgcmlnaHQpCisgICAgICAgICAgICBzb3J0KGksIHJpZ2h0KTsKKyAgICB9CisK
KyAgICAvLyBFbGltaW5hdGUgdGhlIGR1cGxpY2F0ZWQgY2hhcmFjdGVycy4KKyAgICBpbnQgdW5p
cShpbnQgc2l6ZSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICBpZiAobV9iZWdpbkNoYXJzW2ldLnZhbHVlID09IG1fYmVnaW5DaGFy
c1tpICsgMV0udmFsdWUpIHsKKyAgICAgICAgICAgICAgICBtX2JlZ2luQ2hhcnMucmVtb3ZlKGkg
KyAxKTsKKyAgICAgICAgICAgICAgICBzaXplLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICAvLyBNZXJnZSB0d28gZm9sbG93
aW5nIEJlZ2luQ2hhcnMgaW4gdGhlIHZlY3RvciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXIgY2hlY2tzLgorICAgIHZvaWQgbWVyZ2UoaW50IHNpemUpCisgICAgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgQmVnaW5DaGFyKiBj
dXJyID0gJm1fYmVnaW5DaGFyc1tpXTsKKyAgICAgICAgICAgIEJlZ2luQ2hhciogbmV4dCA9ICZt
X2JlZ2luQ2hhcnNbaSArIDFdOworCisgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBhbmQg
dGhlIG5leHQgc2l6ZSBvZiB2YWx1ZSBpcyBkaWZmZXJlbnQgd2Ugc2hvdWxkIHNraXAgdGhlIG1l
cmdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIDE2Yml0IGFuZCAzMmJpdCB2
YWx1ZXMgYXJlIHVubWVyZ2FibGUuCisgICAgICAgICAgICBpZiAoY3Vyci0+dmFsdWUgPiAweEZG
RkYgJiYgbmV4dC0+dmFsdWUgPD0gMHhGRkZGKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpbnQgZGlmZiA9IGN1cnItPnZhbHVlIF4gbmV4dC0+dmFsdWU7CisKKyAg
ICAgICAgICAgIGN1cnItPm1hc2sgfD0gZGlmZjsKKyAgICAgICAgICAgIGN1cnItPnZhbHVlIHw9
IGN1cnItPm1hc2s7CisKKyAgICAgICAgICAgIG1fYmVnaW5DaGFycy5yZW1vdmUoaSArIDEpOwor
ICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBvcHRpbWl6
ZSgpCisgICAgeworICAgICAgICBpbnQgc2l6ZSA9IG1fYmVnaW5DaGFycy5zaXplKCkgLSAxOwor
CisgICAgICAgIHNvcnQoMCwgc2l6ZSk7CisgICAgICAgIHNpemUgPSB1bmlxKHNpemUpOworICAg
ICAgICBpZiAoc2l6ZSA+IDIpCisgICAgICAgICAgICBtZXJnZShzaXplKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8QmVnaW5DaGFyPiBtX2JlZ2luQ2hhcnM7Cit9OworCiBzdHJ1Y3QgUmVnZXhQYXR0
ZXJuIHsKICAgICBSZWdleFBhdHRlcm4oYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSkK
ICAgICAgICAgOiBtX2lnbm9yZUNhc2UoaWdub3JlQ2FzZSkKICAgICAgICAgLCBtX211bHRpbGlu
ZShtdWx0aWxpbmUpCiAgICAgICAgICwgbV9jb250YWluc0JhY2tyZWZlcmVuY2VzKGZhbHNlKQor
ICAgICAgICAsIG1fY29udGFpbnNCZWdpbkNoYXJzKGZhbHNlKQogICAgICAgICAsIG1fY29udGFp
bnNCT0woZmFsc2UpCiAgICAgICAgICwgbV9udW1TdWJwYXR0ZXJucygwKQogICAgICAgICAsIG1f
bWF4QmFja1JlZmVyZW5jZSgwKQpAQCAtMzgwLDEyICs1MzUsMTQgQEAgc3RydWN0IFJlZ2V4UGF0
dGVybiB7CiAgICAgYm9vbCBtX2lnbm9yZUNhc2UgOiAxOwogICAgIGJvb2wgbV9tdWx0aWxpbmUg
OiAxOwogICAgIGJvb2wgbV9jb250YWluc0JhY2tyZWZlcmVuY2VzIDogMTsKKyAgICBib29sIG1f
Y29udGFpbnNCZWdpbkNoYXJzIDogMTsKICAgICBib29sIG1fY29udGFpbnNCT0wgOiAxOwogICAg
IHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CiAgICAgdW5zaWduZWQgbV9tYXhCYWNrUmVmZXJl
bmNlOwogICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbV9ib2R5OwogICAgIFZlY3RvcjxQYXR0ZXJu
RGlzanVuY3Rpb24qLCA0PiBtX2Rpc2p1bmN0aW9uczsKICAgICBWZWN0b3I8Q2hhcmFjdGVyQ2xh
c3MqPiBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzOworICAgIEJlZ2luQ2hhckhlbHBlciBtX2JlZ2lu
Q2hhckhlbHBlcjsKIAogcHJpdmF0ZToKICAgICBDaGFyYWN0ZXJDbGFzcyogbmV3bGluZUNhY2hl
ZDsKLS0gCjEuNy4yLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69616</attachid>
            <date>2010-10-04 04:40:00 -0700</date>
            <delta_ts>2010-10-21 07:40:02 -0700</delta_ts>
            <desc>proposed patch v5</desc>
            <filename>0001-kilincs-prepare-final-v5.patch</filename>
            <type>text/plain</type>
            <size>14625</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSBjNjkzYmRhNjRlZWRmNTdmM2U0Y2VkMzJiMWQyYWU3YWRjZjkwNjExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogTW9uLCA0IE9jdCAyMDEwIDA0OjM0OjQxIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0ga2ls
aW5jcyBwcmVwYXJlIGZpbmFsIHY1CgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgfCAgIDMyICsrKysrKysKIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxl
ci5jcHAgfCAgMTQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogSmF2YVNjcmlwdENv
cmUveWFyci9SZWdleFBhdHRlcm4uaCAgICB8ICAxNTcgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCAzNjgyMjZiLi4xNWEzN2M2IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzUgQEAKKzIwMTAtMTAtMDQgIFBldGVyIFZhcmdhICA8cHZhcmdhQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb2xs
ZWN0IHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVycyBpbiBhIFJlZ0V4cCBwYXR0ZXJuIGZvciBsb29r
LXVwCisgICAgICAgIG9wdGltaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDU3NDgKKworICAgICAgICBFeHRlbmQgdGhlIFlBUlIncyBwYXJz
ZXIgd2l0aCBhbiBhbGdvcml0aG0gd2hpY2ggY29sbGVjdHMgdGhlIHBvdGVudGlhbAorICAgICAg
ICBiZWdpbm5pbmcgY2hhcmFjdGVycyBmcm9tIGEgUmVnRXhwIHBhdHRlcm4gZm9yIGxhdGVyIGxv
b2stdXAgb3B0aW1pemF0aW9uLgorCisgICAgICAgICogeWFyci9SZWdleENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmFkZEJlZ2luVGVy
bSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cERp
c2p1bmN0aW9uQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNv
bnN0cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyk6CisgICAgICAgIChKU0M6Ollh
cnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cEJlZ2luQ2hhcnMpOgorICAgICAgICAo
SlNDOjpZYXJyOjpjb21waWxlUmVnZXgpOgorICAgICAgICAqIHlhcnIvUmVnZXhQYXR0ZXJuLmg6
CisgICAgICAgIChKU0M6OllhcnI6OlRlcm1DaGFpbjo6VGVybUNoYWluKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6QmVnaW5DaGFyOjpCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdp
bkNoYXJIZWxwZXI6OkJlZ2luQ2hhckhlbHBlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2lu
Q2hhckhlbHBlcjo6YWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFy
SGVscGVyOjpjcmVhdGVCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJI
ZWxwZXI6OmxpbmtCZWdpbkNoYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXJIZWxw
ZXI6OmxpbmtIb3RUZXJtcyk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6
c2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6c29ydCk6CisgICAg
ICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6dW5pcSk6CisgICAgICAgIChKU0M6Ollh
cnI6OkJlZ2luQ2hhckhlbHBlcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNo
YXJIZWxwZXI6Om9wdGltaXplKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuOjpS
ZWdleFBhdHRlcm4pOgorCiAyMDEwLTEwLTAxICBQcmF0aWsgU29sYW5raSAgPHBzb2xhbmtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCmluZGV4IDlmOWUwMjguLjE2NTkxNDMgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFBldGVyIFZhcmdhIChwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVy
c2l0eSBvZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQ5LDgg
KzY1MCwxNDUgQEAgcHVibGljOgogICAgICAgICAgICAgbG9vcERpc2p1bmN0aW9uLT5tX2FsdGVy
bmF0aXZlcy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisgICAgYm9v
bCBhZGRCZWdpblRlcm0oUGF0dGVyblRlcm0gdGVybSwgVmVjdG9yPFRlcm1DaGFpbj4qIGJlZ2lu
VGVybXMsIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUsIHVuc2lnbmVkIG51bVRlcm1z
LCB1bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2lnbmVkIGRlcHRoKQorICAgIHsKKyAgICAgICAgaWYg
KHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSB7CisgICAgICAgICAg
ICBiZWdpblRlcm1zLT5hcHBlbmQoVGVybUNoYWluKHRlcm0pKTsKKyAgICAgICAgICAgIGlmIChk
ZXB0aCA8IDIgJiYgdGVybUluZGV4IDwgbnVtVGVybXMgLSAxICYmIHRlcm0ucXVhbnRpdHlDb3Vu
dCA9PSAxKQorICAgICAgICAgICAgICAgIHNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKGFsdGVy
bmF0aXZlLCAmYmVnaW5UZXJtcy0+bGFzdCgpLmhvdFRlcm1zLCB0ZXJtSW5kZXggKyAxLCBkZXB0
aCArIDEpOworICAgICAgICB9IGVsc2UgaWYgKHRlcm1JbmRleCAhPSBudW1UZXJtcyAtIDEpIHsK
KyAgICAgICAgICAgIGJlZ2luVGVybXMtPmFwcGVuZChUZXJtQ2hhaW4odGVybSkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBjb2xsZWN0cyB0aGUgdGVybXMgd2hpY2ggYXJl
IHBvdGVudGlhbGx5IG1hdGNoaW5nIHRoZSBmaXJzdCBudW1iZXIgb2YgZGVwdGggY2hhcmFjdGVy
cyBpbiB0aGUgcmVzdWx0LgorICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB0
aGVuIGl0IGZvdW5kIGF0IGxlYXN0IG9uZSB0ZXJtIHdoaWNoIG1ha2VzIHRoZSBiZWdpbm5pbmcg
Y2hhcmFjdGVyCisgICAgLy8gbG9vay11cCBvcHRpbWl6YXRpb24gaW5lZmZpY2llbnQuCisgICAg
Ym9vbCBzZXR1cERpc2p1bmN0aW9uQmVnaW5UZXJtcyhQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1
bmN0aW9uLCBWZWN0b3I8VGVybUNoYWluPiogYmVnaW5UZXJtcywgdW5zaWduZWQgZGVwdGgpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGRpc2p1bmN0aW9uLT5t
X2FsdGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7CisgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJu
YXRpdmUqIGFsdGVybmF0aXZlID0gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF07CisK
KyAgICAgICAgICAgIGlmICghc2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMoYWx0ZXJuYXRpdmUs
IGJlZ2luVGVybXMsIDAsIGRlcHRoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHNldHVw
QWx0ZXJuYXRpdmVCZWdpblRlcm1zKFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUsIFZl
Y3RvcjxUZXJtQ2hhaW4+KiBiZWdpblRlcm1zLCB1bnNpZ25lZCB0ZXJtSW5kZXgsIHVuc2lnbmVk
IGRlcHRoKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGVja05leHQgPSB0cnVlOworICAgICAgICB1
bnNpZ25lZCBudW1UZXJtcyA9IGFsdGVybmF0aXZlLT5tX3Rlcm1zLnNpemUoKTsKKworICAgICAg
ICB3aGlsZSAoY2hlY2tOZXh0ICYmIHRlcm1JbmRleCA8IG51bVRlcm1zKSB7CisgICAgICAgICAg
ICBQYXR0ZXJuVGVybSB0ZXJtID0gYWx0ZXJuYXRpdmUtPm1fdGVybXNbdGVybUluZGV4XTsKKyAg
ICAgICAgICAgIGNoZWNrTmV4dCA9IGZhbHNlOworCisgICAgICAgICAgICBzd2l0Y2ggKHRlcm0u
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkJPTDoK
KyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25FT0w6CisgICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6
VHlwZUJhY2tSZWZlcmVuY2U6CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRm9y
d2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyOgorICAgICAgICAgICAg
ICAgIGlmIChhZGRCZWdpblRlcm0odGVybSwgYmVnaW5UZXJtcywgYWx0ZXJuYXRpdmUsIG51bVRl
cm1zLCB0ZXJtSW5kZXgsIGRlcHRoKSkgeworICAgICAgICAgICAgICAgICAgICB0ZXJtSW5kZXgr
KzsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tOZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVDaGFyYWN0ZXJDbGFzczoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
OgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLmludmVydE9yQ2FwdHVyZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpU
eXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuOgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50
aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodGVybUluZGV4ID09IG51bVRlcm1zIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICAgIHRlcm1JbmRleCsrOworICAgICAgICAgICAgICAg
ICAgICBjaGVja05leHQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCFzZXR1cERpc2p1bmN0aW9uQmVnaW5UZXJtcyh0ZXJtLnBhcmVudGhlc2VzLmRp
c2p1bmN0aW9uLCBiZWdpblRlcm1zLCBkZXB0aCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBzZXR1cEJlZ2lu
Q2hhcnMoKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFRlcm1DaGFpbj4gYmVnaW5UZXJtczsKKyAg
ICAgICAgYm9vbCBjb250YWluc0ZpeGVkQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgaWYg
KCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUgfHwgbV9wYXR0ZXJuLm1fYm9keS0+
bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAmJiBzZXR1cERpc2p1
bmN0aW9uQmVnaW5UZXJtcyhtX3BhdHRlcm4ubV9ib2R5LCAmYmVnaW5UZXJtcywgMCkpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpblRlcm1zLnNpemUoKTsKKyAgICAgICAgICAg
IEJlZ2luQ2hhckhlbHBlciogYmVnaW5DaGFySGVscGVyID0gJm1fcGF0dGVybi5tX2JlZ2luQ2hh
ckhlbHBlcjsKKworICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBjb2xsZWN0ZWQgYW55IHRl
cm1zIHdlIHNob3VsZCBhYm9ydCB0aGUgcHJlcGFyYXRpb24gb2YgYmVnaW5uaW5nIGNoYXJhY3Rl
ciBsb29rLXVwIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG1fcGF0dGVybi5tX2NvbnRhaW5zQmVnaW5D
aGFycyA9IHRydWU7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSB0ZXJtID0gYmVnaW5UZXJtc1tp
XS50ZXJtOworCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBqdXN0IGNvbGxlY3RlZCBQYXR0
ZXJuQ2hhcmFjdGVyIHRlcm1zLCBvdGhlciB0ZXJtcyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFy
YWN0ZXIpOworCisgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50
aWZpZXJGaXhlZENvdW50KQorICAgICAgICAgICAgICAgICAgICBjb250YWluc0ZpeGVkQ2hhcmFj
dGVyID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHRlcm0ucGF0
dGVybkNoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBCZWdpbkNoYXIgYmVnaW5DaGFyID0gYmVn
aW5DaGFySGVscGVyLT5jcmVhdGVCZWdpbkNoYXIoY2hhcmFjdGVyLCAobV9wYXR0ZXJuLm1faWdu
b3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKSkpOworCisgICAgICAgICAgICAgICAg
aWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50ICYmIHRlcm0ucXVh
bnRpdHlDb3VudCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZHVwbGljYXRlIHRo
ZSBmaXJzdCBmb3VuZCBjaGFyYWN0ZXIgaWYgdGhlIHF1YW50aXR5IG9mIHRoZSB0ZXJtIGlzIG1v
cmUgdGhhbiBvbmUuIGVnLjogL2F7M30vCisgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2hhci52
YWx1ZSB8PSBiZWdpbkNoYXIudmFsdWUgPDwgMTY7CisgICAgICAgICAgICAgICAgICAgIGJlZ2lu
Q2hhci5tYXNrIHw9IGJlZ2luQ2hhci5tYXNrIDw8IDE2OworICAgICAgICAgICAgICAgICAgICBi
ZWdpbkNoYXJIZWxwZXItPmFkZENoYXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQgJiYg
dGVybS5xdWFudGl0eUNvdW50ID09IDEgJiYgYmVnaW5UZXJtc1tpXS5ob3RUZXJtcy5zaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgY2hhcmFjdGVycyB3aXRoIGZpeGVk
IHF1YW50aWZpZXIgd2Ugc2hvdWxkIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciBhcyB3ZWxsLgor
ICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmxpbmtIb3RUZXJtcyhiZWdpbkNo
YXIsICZiZWdpblRlcm1zW2ldLmhvdFRlcm1zLCBtX3BhdHRlcm4ubV9pZ25vcmVDYXNlKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZ3Jl
ZWR5IG1hdGNoaW5nIHRoZSBuZXh0IGNoYXJhY3RlciBjaGVja2luZyBpcyB1bm5lY2Vzc2FyeSB0
aGVyZWZvcmUgd2UganVzdCBzdG9yZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qg
Y2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICBiZWdpbkNoYXJIZWxwZXItPmFkZENoYXJh
Y3RlcihiZWdpbkNoYXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUg
cGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gdGVybXMgd2l0aCBmaXhlZCBxdWFudGlmaWVycyB0aGVu
IHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVyIGxvb2stdXAgb3B0aW1pemF0aW9uIGlzIGluZWZmaWNp
ZW50LgorICAgICAgICAgICAgaWYgKCFjb250YWluc0ZpeGVkQ2hhcmFjdGVyKSB7CisgICAgICAg
ICAgICAgICAgbV9wYXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBtb3Jl
IHRoYW4gb25lIGNoYXJhY3RlcnMgYXJlIGNvbGxlY3RlZCB0aGVuIHdlIG5lZWQgdG8gb3B0aW1p
emUgdGhlIHZlY3RvciAoc29ydCwgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBhbmQgbWVyZ2UpLgor
ICAgICAgICAgICAgaWYgKGJlZ2luQ2hhckhlbHBlci0+c2l6ZSgpID4gMSkKKyAgICAgICAgICAg
ICAgICBiZWdpbkNoYXJIZWxwZXItPm9wdGltaXplKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9wYXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47CiAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwpAQCAtNjg3LDYgKzgyNSw3IEBA
IGNvbnN0IGNoYXIqIGNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBS
ZWdleFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgY29uc3RydWN0b3Iub3B0aW1pemVCT0woKTsKICAg
ICAgICAgCiAgICAgY29uc3RydWN0b3Iuc2V0dXBPZmZzZXRzKCk7CisgICAgY29uc3RydWN0b3Iu
c2V0dXBCZWdpbkNoYXJzKCk7CiAKICAgICByZXR1cm4gMDsKIH07CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eFBhdHRlcm4uaAppbmRleCBlZWNiZDQzLi5iY2U5NzQ4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQ
YXR0ZXJuLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBW
YXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzMwLDcgQEAKIAogI2lmIEVOQUJM
RShZQVJSKQogCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC0yODMsMTEgKzI4
NSwxNjQgQEAgQ2hhcmFjdGVyQ2xhc3MqIG5vbmRpZ2l0c0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xh
c3MqIG5vbnNwYWNlc0NyZWF0ZSgpOwogQ2hhcmFjdGVyQ2xhc3MqIG5vbndvcmRjaGFyQ3JlYXRl
KCk7CiAKK3N0cnVjdCBUZXJtQ2hhaW4geworICAgIFRlcm1DaGFpbihQYXR0ZXJuVGVybSB0ZXJt
KQorICAgICAgICA6IHRlcm0odGVybSkKKyAgICB7fQorCisgICAgUGF0dGVyblRlcm0gdGVybTsK
KyAgICBWZWN0b3I8VGVybUNoYWluPiBob3RUZXJtczsKK307CisKK3N0cnVjdCBCZWdpbkNoYXIg
eworICAgIEJlZ2luQ2hhcigpCisgICAgICAgIDogdmFsdWUoMCkKKyAgICAgICAgLCBtYXNrKDAp
CisgICAge30KKworICAgIEJlZ2luQ2hhcihpbnQgdmFsdWUsIGludCBtYXNrKQorICAgICAgICA6
IHZhbHVlKHZhbHVlKQorICAgICAgICAsIG1hc2sobWFzaykKKyAgICB7fQorCisgICAgaW50IHZh
bHVlOworICAgIGludCBtYXNrOworfTsKKworc3RydWN0IEJlZ2luQ2hhckhlbHBlciB7CisgICAg
QmVnaW5DaGFySGVscGVyKCkKKyAgICB7fQorCisgICAgdm9pZCBhZGRDaGFyYWN0ZXIoQmVnaW5D
aGFyIGJjKQorICAgIHsKKyAgICAgICAgbV9iZWdpbkNoYXJzLmFwcGVuZChiYyk7CisgICAgfQor
CisgICAgQmVnaW5DaGFyIGNyZWF0ZUJlZ2luQ2hhcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgaWdu
b3JlQ2FzZSkKKyAgICB7CisgICAgICAgIGludCBtYXNrID0gMDsKKworICAgICAgICBpZiAoaWdu
b3JlQ2FzZSkgeworICAgICAgICAgICAgY2hhcmFjdGVyID0gV1RGOjpVbmljb2RlOjp0b0xvd2Vy
KGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtYXNrID0gMzI7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gQmVnaW5DaGFyKGNoYXJhY3RlciwgbWFzayk7CisgICAgfQorCisgICAgLy8gQXBw
ZW5kIGEgY2hhcmFjdGVyIHRvIGFuIGV4aXN0aW5nIEJlZ2luQ2hhciBvYmplY3QuCisgICAgQmVn
aW5DaGFyIGxpbmtCZWdpbkNoYXIoQmVnaW5DaGFyIGJlZ2luQ2hhciwgVUNoYXIgY2hhcmFjdGVy
LCBib29sIGlnbm9yZUNhc2UpCisgICAgeworICAgICAgICBCZWdpbkNoYXIgYmVnaW5DaGFyTmV4
dCA9IGJlZ2luQ2hhcjsKKworICAgICAgICBpZiAoaWdub3JlQ2FzZSkgeworICAgICAgICAgICAg
Y2hhcmFjdGVyID0gV1RGOjpVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAg
ICBiZWdpbkNoYXJOZXh0Lm1hc2sgfD0gMzIgPDwgMTY7CisgICAgICAgIH0KKworICAgICAgICBi
ZWdpbkNoYXJOZXh0LnZhbHVlIHw9IGNoYXJhY3RlciA8PCAxNjsKKyAgICAgICAgcmV0dXJuIGJl
Z2luQ2hhck5leHQ7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIEJlZ2luQ2hhciBvYmplY3RzIGJ5
IGFwcGVuZGluZyBlYWNoIHRlcm1zIGZyb20gYSBob3RUZXJtcyB2ZWN0b3IgdG8gYW4gZXhpc3Rp
bmcgQmVnaW5DaGFyIG9iamVjdC4KKyAgICB2b2lkIGxpbmtIb3RUZXJtcyhCZWdpbkNoYXIgYmVn
aW5DaGFyLCBWZWN0b3I8VGVybUNoYWluPiogaG90VGVybXMsIGJvb2wgaWdub3JlQ2FzZSkKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBob3RUZXJtcy0+c2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgIFBhdHRlcm5UZXJtIGhvdFRlcm0gPSBob3RUZXJtcy0+YXQoaSku
dGVybTsKKyAgICAgICAgICAgIEFTU0VSVChob3RUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5
cGVQYXR0ZXJuQ2hhcmFjdGVyKTsKKworICAgICAgICAgICAgVUNoYXIgY2hhcmFjdGVyTmV4dCA9
IGhvdFRlcm0ucGF0dGVybkNoYXJhY3RlcjsKKyAgICAgICAgICAgIGFkZENoYXJhY3RlcihsaW5r
QmVnaW5DaGFyKGJlZ2luQ2hhciwgY2hhcmFjdGVyTmV4dCwgKGlnbm9yZUNhc2UgJiYgV1RGOjpp
c0FTQ0lJQWxwaGEoY2hhcmFjdGVyTmV4dCkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JlZ2luQ2hhcnMuc2l6ZSgp
OworICAgIH0KKworICAgIC8vIEEgcXVpY2sgc2hvcnQgYWxnb3JpdGhtIHdoaWNoIHNvcnRzIHRo
ZSBjb2xsZWN0ZWQgY2hhcmFjdGVycyBpbiBkZXNjZW5kYW50IG9yZGVyLgorICAgIHZvaWQgc29y
dChpbnQgbGVmdCwgaW50IHJpZ2h0KQorICAgIHsKKyAgICAgICAgaW50IGkgPSBsZWZ0OworICAg
ICAgICBpbnQgaiA9IHJpZ2h0OworICAgICAgICBCZWdpbkNoYXIgdG1wOworICAgICAgICBpbnQg
cGl2b3QgPSBtX2JlZ2luQ2hhcnNbKGxlZnQgKyByaWdodCkgLyAyXS52YWx1ZTsKKworICAgICAg
ICB3aGlsZSAoaSA8PSBqKSB7CisgICAgICAgICAgICB3aGlsZSAobV9iZWdpbkNoYXJzW2ldLnZh
bHVlID4gcGl2b3QpCisgICAgICAgICAgICAgICAgaSsrOworCisgICAgICAgICAgICB3aGlsZSAo
bV9iZWdpbkNoYXJzW2pdLnZhbHVlIDwgcGl2b3QpCisgICAgICAgICAgICAgICAgai0tOworCisg
ICAgICAgICAgICBpZiAoaSA8PSBqKSB7CisgICAgICAgICAgICAgICAgdG1wID0gbV9iZWdpbkNo
YXJzW2ldOworICAgICAgICAgICAgICAgIG1fYmVnaW5DaGFyc1tpKytdID0gbV9iZWdpbkNoYXJz
W2pdOworICAgICAgICAgICAgICAgIG1fYmVnaW5DaGFyc1tqLS1dID0gdG1wOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxlZnQgPCBqKQorICAgICAgICAgICAgc29y
dChsZWZ0LCBqKTsKKyAgICAgICAgaWYgKGkgPCByaWdodCkKKyAgICAgICAgICAgIHNvcnQoaSwg
cmlnaHQpOworICAgIH0KKworICAgIC8vIEVsaW1pbmF0ZSB0aGUgZHVwbGljYXRlZCBjaGFyYWN0
ZXJzLgorICAgIGludCB1bmlxKGludCBzaXplKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtX2JlZ2luQ2hhcnNbaV0udmFs
dWUgPT0gbV9iZWdpbkNoYXJzW2kgKyAxXS52YWx1ZSkgeworICAgICAgICAgICAgICAgIG1fYmVn
aW5DaGFycy5yZW1vdmUoaSArIDEpOworICAgICAgICAgICAgICAgIHNpemUtLTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIC8v
IE1lcmdlIHR3byBmb2xsb3dpbmcgQmVnaW5DaGFycyBpbiB0aGUgdmVjdG9yIHRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlciBjaGVja3MuCisgICAgdm9pZCBtZXJnZShpbnQgc2l6ZSkK
KyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICBCZWdpbkNoYXIqIGN1cnIgPSAmbV9iZWdpbkNoYXJzW2ldOworICAgICAgICAgICAgQmVn
aW5DaGFyKiBuZXh0ID0gJm1fYmVnaW5DaGFyc1tpICsgMV07CisKKyAgICAgICAgICAgIC8vIElm
IHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dCBzaXplIG9mIHZhbHVlIGlzIGRpZmZlcmVudCB3ZSBz
aG91bGQgc2tpcCB0aGUgbWVyZ2UgcHJvY2VzcworICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUg
MTZiaXQgYW5kIDMyYml0IHZhbHVlcyBhcmUgdW5tZXJnYWJsZS4KKyAgICAgICAgICAgIGlmIChj
dXJyLT52YWx1ZSA+IDB4RkZGRiAmJiBuZXh0LT52YWx1ZSA8PSAweEZGRkYpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGludCBkaWZmID0gY3Vyci0+dmFsdWUgXiBu
ZXh0LT52YWx1ZTsKKworICAgICAgICAgICAgY3Vyci0+bWFzayB8PSBkaWZmOworICAgICAgICAg
ICAgY3Vyci0+dmFsdWUgfD0gY3Vyci0+bWFzazsKKworICAgICAgICAgICAgbV9iZWdpbkNoYXJz
LnJlbW92ZShpICsgMSk7CisgICAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIG9wdGltaXplKCkKKyAgICB7CisgICAgICAgIGludCBzaXplID0gbV9iZWdpbkNo
YXJzLnNpemUoKSAtIDE7CisKKyAgICAgICAgc29ydCgwLCBzaXplKTsKKyAgICAgICAgc2l6ZSA9
IHVuaXEoc2l6ZSk7CisgICAgICAgIGlmIChzaXplID4gMikKKyAgICAgICAgICAgIG1lcmdlKHNp
emUpOworICAgIH0KKworICAgIFZlY3RvcjxCZWdpbkNoYXI+IG1fYmVnaW5DaGFyczsKK307CisK
IHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAgIFJlZ2V4UGF0dGVybihib29sIGlnbm9yZUNhc2Us
IGJvb2wgbXVsdGlsaW5lKQogICAgICAgICA6IG1faWdub3JlQ2FzZShpZ25vcmVDYXNlKQogICAg
ICAgICAsIG1fbXVsdGlsaW5lKG11bHRpbGluZSkKICAgICAgICAgLCBtX2NvbnRhaW5zQmFja3Jl
ZmVyZW5jZXMoZmFsc2UpCisgICAgICAgICwgbV9jb250YWluc0JlZ2luQ2hhcnMoZmFsc2UpCiAg
ICAgICAgICwgbV9jb250YWluc0JPTChmYWxzZSkKICAgICAgICAgLCBtX251bVN1YnBhdHRlcm5z
KDApCiAgICAgICAgICwgbV9tYXhCYWNrUmVmZXJlbmNlKDApCkBAIC0zODAsMTIgKzUzNSwxNCBA
QCBzdHJ1Y3QgUmVnZXhQYXR0ZXJuIHsKICAgICBib29sIG1faWdub3JlQ2FzZSA6IDE7CiAgICAg
Ym9vbCBtX211bHRpbGluZSA6IDE7CiAgICAgYm9vbCBtX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMg
OiAxOworICAgIGJvb2wgbV9jb250YWluc0JlZ2luQ2hhcnMgOiAxOwogICAgIGJvb2wgbV9jb250
YWluc0JPTCA6IDE7CiAgICAgdW5zaWduZWQgbV9udW1TdWJwYXR0ZXJuczsKICAgICB1bnNpZ25l
ZCBtX21heEJhY2tSZWZlcmVuY2U7CiAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBtX2JvZHk7CiAg
ICAgVmVjdG9yPFBhdHRlcm5EaXNqdW5jdGlvbiosIDQ+IG1fZGlzanVuY3Rpb25zOwogICAgIFZl
Y3RvcjxDaGFyYWN0ZXJDbGFzcyo+IG1fdXNlckNoYXJhY3RlckNsYXNzZXM7CisgICAgQmVnaW5D
aGFySGVscGVyIG1fYmVnaW5DaGFySGVscGVyOwogCiBwcml2YXRlOgogICAgIENoYXJhY3RlckNs
YXNzKiBuZXdsaW5lQ2FjaGVkOwotLSAKMS43LjIuMgoK
</data>
<flag name="review"
          id="59328"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71434</attachid>
            <date>2010-10-21 07:40:02 -0700</date>
            <delta_ts>2010-11-17 01:43:00 -0800</delta_ts>
            <desc>proposed patch v6</desc>
            <filename>0001-kilincs-prepare-final-v6.patch</filename>
            <type>text/plain</type>
            <size>15812</size>
            <attacher name="Peter Varga">pvarga</attacher>
            
              <data encoding="base64">RnJvbSAzY2EwZTQ4NDU4MTRjMjk4NjYzY2MwYmViZDdjOGZiODljZjA0MTMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBWYXJnYSA8cHZhcmdhQGluZi51LXN6ZWdlZC5odT4K
RGF0ZTogVGh1LCAyMSBPY3QgMjAxMCAwNzoxODowNiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGtp
bGluY3MgcHJlcGFyZSBmaW5hbCB2NgoKLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgIHwgICAyOSArKysrCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIu
Y3BwIHwgIDI1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIEphdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmggICAgfCAgIDMwICsrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MzEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMzMjc2MWQu
LjJlNjllZWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0xMC0yMSAgUGV0ZXIg
VmFyZ2EgIDxwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbGxlY3QgdGhlIGJlZ2lubmluZyBjaGFyYWN0ZXJz
IGluIGEgUmVnRXhwIHBhdHRlcm4gZm9yIGxvb2stdXAKKyAgICAgICAgb3B0aW1pemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTc0OAorCisg
ICAgICAgIEV4dGVuZCB0aGUgWUFSUidzIHBhcnNlciB3aXRoIGFuIGFsZ29yaXRobSB3aGljaCBj
b2xsZWN0cyB0aGUgcG90ZW50aWFsCisgICAgICAgIGJlZ2lubmluZyBjaGFyYWN0ZXJzIGZyb20g
YSBSZWdFeHAgcGF0dGVybiBmb3IgbGF0ZXIgbG9vay11cCBvcHRpbWl6YXRpb24uCisKKyAgICAg
ICAgKiB5YXJyL1JlZ2V4Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNo
YXJIZWxwZXI6OkJlZ2luQ2hhckhlbHBlcik6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hh
ckhlbHBlcjo6YWRkQmVnaW5DaGFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVs
cGVyOjptZXJnZSk6CisgICAgICAgIChKU0M6OllhcnI6OkJlZ2luQ2hhckhlbHBlcjo6YWRkQ2hh
cmFjdGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6QmVnaW5DaGFySGVscGVyOjpsaW5rSG90VGVy
bXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6UmVnZXhQ
YXR0ZXJuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleFBhdHRlcm5Db25z
dHJ1Y3Rvcjo6YWRkQmVnaW5UZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJu
Q29uc3RydWN0b3I6OnNldHVwRGlzanVuY3Rpb25CZWdpblRlcm1zKToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1z
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwQmVn
aW5DaGFycyk6CisgICAgICAgIChKU0M6OllhcnI6OmNvbXBpbGVSZWdleCk6CisgICAgICAgICog
eWFyci9SZWdleFBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6VGVybUNoYWluOjpUZXJt
Q2hhaW4pOgorICAgICAgICAoSlNDOjpZYXJyOjpCZWdpbkNoYXI6OkJlZ2luQ2hhcik6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybjo6UmVnZXhQYXR0ZXJuKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6UmVnZXhQYXR0ZXJuOjpyZXNldCk6CisKIDIwMTAtMTAtMjEgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
NzAxNzQuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3Bw
IGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAppbmRleCA5ZjllMDI4Li44
ZmMyNDAxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6
ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzNSwxMSArMjM2LDExNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDaGFyYWN0
ZXJSYW5nZT4gbV9yYW5nZXNVbmljb2RlOwogfTsKIAorc3RydWN0IEJlZ2luQ2hhckhlbHBlciB7
CisgICAgQmVnaW5DaGFySGVscGVyKFZlY3RvcjxCZWdpbkNoYXI+KiBiZWdpbkNoYXJzLCBib29s
IGlzQ2FzZUluc2Vuc2l0aXZlID0gZmFsc2UpCisgICAgICAgIDogbV9iZWdpbkNoYXJzKGJlZ2lu
Q2hhcnMpCisgICAgICAgICwgbV9pc0Nhc2VJbnNlbnNpdGl2ZShpc0Nhc2VJbnNlbnNpdGl2ZSkK
KyAgICB7fQorCisgICAgdm9pZCBhZGRCZWdpbkNoYXIoQmVnaW5DaGFyIGJlZ2luQ2hhciwgVmVj
dG9yPFRlcm1DaGFpbj4qIGhvdFRlcm1zLCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUsIHVu
c2lnbmVkIHF1YW50aXR5Q291bnQpCisgICAgeworICAgICAgICBpZiAocXVhbnRpdHlUeXBlID09
IFF1YW50aWZpZXJGaXhlZENvdW50ICYmIHF1YW50aXR5Q291bnQgPiAxKSB7CisgICAgICAgICAg
ICAvLyBXZSBkdXBsaWNhdGUgdGhlIGZpcnN0IGZvdW5kIGNoYXJhY3RlciBpZiB0aGUgcXVhbnRp
dHkgb2YgdGhlIHRlcm0gaXMgbW9yZSB0aGFuIG9uZS4gZWcuOiAvYXszfS8KKyAgICAgICAgICAg
IGJlZ2luQ2hhci52YWx1ZSB8PSBiZWdpbkNoYXIudmFsdWUgPDwgMTY7CisgICAgICAgICAgICBi
ZWdpbkNoYXIubWFzayB8PSBiZWdpbkNoYXIubWFzayA8PCAxNjsKKyAgICAgICAgICAgIGFkZENo
YXJhY3RlcihiZWdpbkNoYXIpOworICAgICAgICB9IGVsc2UgaWYgKHF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyRml4ZWRDb3VudCAmJiBxdWFudGl0eUNvdW50ID09IDEgJiYgaG90VGVybXMtPnNp
emUoKSkKKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgY2hhcmFjdGVycyB3aXRoIGZpeGVkIHF1
YW50aWZpZXIgd2Ugc2hvdWxkIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciBhcyB3ZWxsLgorICAg
ICAgICAgICAgbGlua0hvdFRlcm1zKGJlZ2luQ2hhciwgaG90VGVybXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGdyZWVkeSBtYXRjaGluZyB0aGUgbmV4dCBjaGFy
YWN0ZXIgY2hlY2tpbmcgaXMgdW5uZWNlc3NhcnkgdGhlcmVmb3JlIHdlIGp1c3Qgc3RvcmUKKyAg
ICAgICAgICAgIC8vIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBhZGRDaGFyYWN0
ZXIoYmVnaW5DaGFyKTsKKyAgICB9CisKKyAgICAvLyBNZXJnZSB0d28gZm9sbG93aW5nIEJlZ2lu
Q2hhcnMgaW4gdGhlIHZlY3RvciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgY2hl
Y2tzLgorICAgIHZvaWQgbWVyZ2UodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIEJlZ2luQ2hhciog
Y3VyciA9ICZtX2JlZ2luQ2hhcnMtPmF0KGkpOworICAgICAgICAgICAgQmVnaW5DaGFyKiBuZXh0
ID0gJm1fYmVnaW5DaGFycy0+YXQoaSArIDEpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgY3Vy
cmVudCBhbmQgdGhlIG5leHQgc2l6ZSBvZiB2YWx1ZSBpcyBkaWZmZXJlbnQgd2Ugc2hvdWxkIHNr
aXAgdGhlIG1lcmdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIDE2Yml0IGFu
ZCAzMmJpdCB2YWx1ZXMgYXJlIHVubWVyZ2FibGUuCisgICAgICAgICAgICBpZiAoY3Vyci0+dmFs
dWUgPD0gMHhGRkZGICYmIG5leHQtPnZhbHVlID4gMHhGRkZGKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICB1bnNpZ25lZCBkaWZmID0gY3Vyci0+dmFsdWUgXiBuZXh0
LT52YWx1ZTsKKworICAgICAgICAgICAgY3Vyci0+bWFzayB8PSBkaWZmOworICAgICAgICAgICAg
Y3Vyci0+dmFsdWUgfD0gY3Vyci0+bWFzazsKKworICAgICAgICAgICAgbV9iZWdpbkNoYXJzLT5y
ZW1vdmUoaSArIDEpOworICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgYWRkQ2hhcmFjdGVyKEJlZ2luQ2hhciBiZWdpbkNoYXIpCisgICAg
eworICAgICAgICB1bnNpZ25lZCBwb3MgPSAwOworICAgICAgICB1bnNpZ25lZCByYW5nZSA9IG1f
YmVnaW5DaGFycy0+c2l6ZSgpOworCisgICAgICAgIC8vIGJpbmFyeSBjaG9wLCBmaW5kIHBvc2l0
aW9uIHRvIGluc2VydCBjaGFyLgorICAgICAgICB3aGlsZSAocmFuZ2UpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gcmFuZ2UgPj4gMTsKKworICAgICAgICAgICAgaW50IHZhbCA9IG1f
YmVnaW5DaGFycy0+YXQocG9zK2luZGV4KS52YWx1ZSAtIGJlZ2luQ2hhci52YWx1ZTsKKyAgICAg
ICAgICAgIGlmICghdmFsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
ICh2YWwgPCAwKQorICAgICAgICAgICAgICAgIHJhbmdlID0gaW5kZXg7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwb3MgKz0gKGluZGV4KzEpOworICAgICAgICAgICAgICAg
IHJhbmdlIC09IChpbmRleCsxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChwb3MgPT0gbV9iZWdpbkNoYXJzLT5zaXplKCkpCisgICAgICAgICAgICBtX2JlZ2luQ2hh
cnMtPmFwcGVuZChiZWdpbkNoYXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2JlZ2lu
Q2hhcnMtPmluc2VydChwb3MsIGJlZ2luQ2hhcik7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIEJl
Z2luQ2hhciBvYmplY3RzIGJ5IGFwcGVuZGluZyBlYWNoIHRlcm1zIGZyb20gYSBob3RUZXJtcyB2
ZWN0b3IgdG8gYW4gZXhpc3RpbmcgQmVnaW5DaGFyIG9iamVjdC4KKyAgICB2b2lkIGxpbmtIb3RU
ZXJtcyhCZWdpbkNoYXIgYmVnaW5DaGFyLCBWZWN0b3I8VGVybUNoYWluPiogaG90VGVybXMpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaG90VGVybXMtPnNpemUoKTsg
aSsrKSB7CisgICAgICAgICAgICBQYXR0ZXJuVGVybSBob3RUZXJtID0gaG90VGVybXMtPmF0KGkp
LnRlcm07CisgICAgICAgICAgICBBU1NFUlQoaG90VGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpU
eXBlUGF0dGVybkNoYXJhY3Rlcik7CisKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3Rlck5leHQg
PSBob3RUZXJtLnBhdHRlcm5DaGFyYWN0ZXI7CisKKyAgICAgICAgICAgIC8vIEFwcGVuZCBhIGNo
YXJhY3RlciB0byBhbiBleGlzdGluZyBCZWdpbkNoYXIgb2JqZWN0LgorICAgICAgICAgICAgaWYg
KGNoYXJhY3Rlck5leHQgPD0gMHg3ZikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1hc2sg
PSAwOworCisgICAgICAgICAgICAgICAgaWYgKG1faXNDYXNlSW5zZW5zaXRpdmUgJiYgaXNBU0NJ
SUFscGhhKGNoYXJhY3Rlck5leHQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAzMjsK
KyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyTmV4dCA9IHRvQVNDSUlMb3dlcihjaGFyYWN0
ZXJOZXh0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhZGRDaGFyYWN0
ZXIoQmVnaW5DaGFyKGJlZ2luQ2hhci52YWx1ZSB8IChjaGFyYWN0ZXJOZXh0IDw8IDE2KSwgYmVn
aW5DaGFyLm1hc2sgfCAobWFzayA8PCAxNikpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgVUNoYXIgdXBwZXIsIGxvd2VyOworICAgICAgICAgICAgICAgIGlmIChtX2lz
Q2FzZUluc2Vuc2l0aXZlICYmICgodXBwZXIgPSBVbmljb2RlOjp0b1VwcGVyKGNoYXJhY3Rlck5l
eHQpKSAhPSAobG93ZXIgPSBVbmljb2RlOjp0b0xvd2VyKGNoYXJhY3Rlck5leHQpKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkQ2hhcmFjdGVyKEJlZ2luQ2hhcihiZWdpbkNoYXIudmFsdWUg
fCAodXBwZXIgPDwgMTYpLCBiZWdpbkNoYXIubWFzaykpOworICAgICAgICAgICAgICAgICAgICBh
ZGRDaGFyYWN0ZXIoQmVnaW5DaGFyKGJlZ2luQ2hhci52YWx1ZSB8IChsb3dlciA8PCAxNiksIGJl
Z2luQ2hhci5tYXNrKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFkZENoYXJhY3RlcihCZWdpbkNoYXIoYmVnaW5DaGFyLnZhbHVlIHwgKGNoYXJhY3Rlck5l
eHQgPDwgMTYpLCBiZWdpbkNoYXIubWFzaykpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgVmVjdG9yPEJlZ2luQ2hhcj4qIG1fYmVnaW5DaGFyczsKKyAgICBib29sIG1f
aXNDYXNlSW5zZW5zaXRpdmU7Cit9OworCiBjbGFzcyBSZWdleFBhdHRlcm5Db25zdHJ1Y3RvciB7
CiBwdWJsaWM6CiAgICAgUmVnZXhQYXR0ZXJuQ29uc3RydWN0b3IoUmVnZXhQYXR0ZXJuJiBwYXR0
ZXJuKQogICAgICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAgICAsIG1fY2hhcmFjdGVy
Q2xhc3NDb25zdHJ1Y3RvcihwYXR0ZXJuLm1faWdub3JlQ2FzZSkKKyAgICAgICAgLCBtX2JlZ2lu
Q2hhckhlbHBlcigmcGF0dGVybi5tX2JlZ2luQ2hhcnMsIHBhdHRlcm4ubV9pZ25vcmVDYXNlKQog
ICAgICAgICAsIG1faW52ZXJ0UGFyZW50aGV0aWNhbEFzc2VydGlvbihmYWxzZSkKICAgICB7CiAg
ICAgfQpAQCAtNjQ5LDEyICs3NTYsMTUzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxvb3BEaXNq
dW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
LSAgICAKKworICAgIGJvb2wgYWRkQmVnaW5UZXJtKFBhdHRlcm5UZXJtIHRlcm0sIFZlY3RvcjxU
ZXJtQ2hhaW4+KiBiZWdpblRlcm1zLCBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlLCB1
bnNpZ25lZCBudW1UZXJtcywgdW5zaWduZWQgdGVybUluZGV4LCB1bnNpZ25lZCBkZXB0aCkKKyAg
ICB7CisgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3Vu
dCkgeworICAgICAgICAgICAgYmVnaW5UZXJtcy0+YXBwZW5kKFRlcm1DaGFpbih0ZXJtKSk7Cisg
ICAgICAgICAgICBpZiAoZGVwdGggPCAyICYmIHRlcm1JbmRleCA8IG51bVRlcm1zIC0gMSAmJiB0
ZXJtLnF1YW50aXR5Q291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICBzZXR1cEFsdGVybmF0aXZl
QmVnaW5UZXJtcyhhbHRlcm5hdGl2ZSwgJmJlZ2luVGVybXMtPmxhc3QoKS5ob3RUZXJtcywgdGVy
bUluZGV4ICsgMSwgZGVwdGggKyAxKTsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXJtSW5kZXggIT0g
bnVtVGVybXMgLSAxKSB7CisgICAgICAgICAgICBiZWdpblRlcm1zLT5hcHBlbmQoVGVybUNoYWlu
KHRlcm0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gY29sbGVjdHMgdGhl
IHRlcm1zIHdoaWNoIGFyZSBwb3RlbnRpYWxseSBtYXRjaGluZyB0aGUgZmlyc3QgbnVtYmVyIG9m
IGRlcHRoIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3VsdC4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9u
IHJldHVybnMgZmFsc2UgdGhlbiBpdCBmb3VuZCBhdCBsZWFzdCBvbmUgdGVybSB3aGljaCBtYWtl
cyB0aGUgYmVnaW5uaW5nIGNoYXJhY3RlcgorICAgIC8vIGxvb2stdXAgb3B0aW1pemF0aW9uIGlu
ZWZmaWNpZW50LgorICAgIGJvb2wgc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXMoUGF0dGVybkRp
c2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwgVmVjdG9yPFRlcm1DaGFpbj4qIGJlZ2luVGVybXMsIHVu
c2lnbmVkIGRlcHRoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhbHQgPSAwOyBhbHQg
PCBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2FsdCkgeworICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGRpc2p1bmN0aW9uLT5tX2FsdGVy
bmF0aXZlc1thbHRdOworCisgICAgICAgICAgICBpZiAoIXNldHVwQWx0ZXJuYXRpdmVCZWdpblRl
cm1zKGFsdGVybmF0aXZlLCBiZWdpblRlcm1zLCAwLCBkZXB0aCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgYm9vbCBzZXR1cEFsdGVybmF0aXZlQmVnaW5UZXJtcyhQYXR0ZXJuQWx0ZXJuYXRpdmUq
IGFsdGVybmF0aXZlLCBWZWN0b3I8VGVybUNoYWluPiogYmVnaW5UZXJtcywgdW5zaWduZWQgdGVy
bUluZGV4LCB1bnNpZ25lZCBkZXB0aCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hlY2tOZXh0ID0g
dHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgbnVtVGVybXMgPSBhbHRlcm5hdGl2ZS0+bV90ZXJtcy5z
aXplKCk7CisKKyAgICAgICAgd2hpbGUgKGNoZWNrTmV4dCAmJiB0ZXJtSW5kZXggPCBudW1UZXJt
cykgeworICAgICAgICAgICAgUGF0dGVyblRlcm0gdGVybSA9IGFsdGVybmF0aXZlLT5tX3Rlcm1z
W3Rlcm1JbmRleF07CisgICAgICAgICAgICBjaGVja05leHQgPSBmYWxzZTsKKworICAgICAgICAg
ICAgc3dpdGNoICh0ZXJtLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVBc3NlcnRpb25CT0w6CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0
aW9uRU9MOgorICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbldvcmRC
b3VuZGFyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNh
c2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgorICAgICAgICAgICAgY2FzZSBQYXR0
ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3Rl
cjoKKyAgICAgICAgICAgICAgICBpZiAoYWRkQmVnaW5UZXJtKHRlcm0sIGJlZ2luVGVybXMsIGFs
dGVybmF0aXZlLCBudW1UZXJtcywgdGVybUluZGV4LCBkZXB0aCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGVybUluZGV4Kys7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTmV4dCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbjoKKyAgICAgICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1
cmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2Fz
ZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKKyAgICAgICAgICAgICAg
ICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRlcm1JbmRleCA9PSBudW1UZXJtcyAtIDEpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICB0ZXJtSW5kZXgrKzsK
KyAgICAgICAgICAgICAgICAgICAgY2hlY2tOZXh0ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICghc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXModGVy
bS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgYmVnaW5UZXJtcywgZGVwdGgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZvaWQgc2V0dXBCZWdpbkNoYXJzKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxUZXJtQ2hhaW4+
IGJlZ2luVGVybXM7CisgICAgICAgIGJvb2wgY29udGFpbnNGaXhlZENoYXJhY3RlciA9IGZhbHNl
OworCisgICAgICAgIGlmICgoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplIHx8IG1f
cGF0dGVybi5tX2JvZHktPm1fYWx0ZXJuYXRpdmVzLnNpemUoKSA+IDEpCisgICAgICAgICAgICAg
ICAgJiYgc2V0dXBEaXNqdW5jdGlvbkJlZ2luVGVybXMobV9wYXR0ZXJuLm1fYm9keSwgJmJlZ2lu
VGVybXMsIDApKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gYmVnaW5UZXJtcy5zaXpl
KCk7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgY29sbGVjdGVkIGFueSB0ZXJtcyB3
ZSBzaG91bGQgYWJvcnQgdGhlIHByZXBhcmF0aW9uIG9mIGJlZ2lubmluZyBjaGFyYWN0ZXIgbG9v
ay11cCBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBtX3BhdHRlcm4ubV9jb250YWluc0JlZ2luQ2hhcnMg
PSB0cnVlOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0gdGVybSA9IGJlZ2luVGVybXNbaV0udGVy
bTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUganVzdCBjb2xsZWN0ZWQgUGF0dGVybkNo
YXJhY3RlciB0ZXJtcywgb3RoZXIgdGVybXMgYXJlIG5vdCBhbGxvd2VkLgorICAgICAgICAgICAg
ICAgIEFTU0VSVCh0ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVy
KTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
Rml4ZWRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnNGaXhlZENoYXJhY3RlciA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0ZXJtLnBhdHRlcm5D
aGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFzayA9IDA7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyIDw9IDB4N2YpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXJhY3RlciA9IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJIZWxwZXIuYWRkQmVnaW5DaGFy
KEJlZ2luQ2hhcihjaGFyYWN0ZXIsIG1hc2spLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgdGVy
bS5xdWFudGl0eVR5cGUsIHRlcm0ucXVhbnRpdHlDb3VudCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgdXBwZXIsIGxvd2VyOworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiAoKHVwcGVyID0gVW5pY29k
ZTo6dG9VcHBlcihjaGFyYWN0ZXIpKSAhPSAobG93ZXIgPSBVbmljb2RlOjp0b0xvd2VyKGNoYXJh
Y3RlcikpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9iZWdpbkNoYXJIZWxwZXIuYWRk
QmVnaW5DaGFyKEJlZ2luQ2hhcih1cHBlciwgbWFzayksICZiZWdpblRlcm1zW2ldLmhvdFRlcm1z
LCB0ZXJtLnF1YW50aXR5VHlwZSwgdGVybS5xdWFudGl0eUNvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYmVnaW5DaGFySGVscGVyLmFkZEJlZ2luQ2hhcihCZWdpbkNoYXIobG93ZXIs
IG1hc2spLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgdGVybS5xdWFudGl0eVR5cGUsIHRlcm0u
cXVhbnRpdHlDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9iZWdpbkNoYXJIZWxwZXIuYWRkQmVnaW5DaGFyKEJlZ2luQ2hhcihjaGFy
YWN0ZXIsIG1hc2spLCAmYmVnaW5UZXJtc1tpXS5ob3RUZXJtcywgdGVybS5xdWFudGl0eVR5cGUs
IHRlcm0ucXVhbnRpdHlDb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gdGVybXMgd2l0
aCBmaXhlZCBxdWFudGlmaWVycyB0aGVuIHRoZSBiZWdpbm5pbmcgY2hhcmFjdGVyIGxvb2stdXAg
b3B0aW1pemF0aW9uIGlzIGluZWZmaWNpZW50LgorICAgICAgICAgICAgaWYgKCFjb250YWluc0Zp
eGVkQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgbV9wYXR0ZXJuLm1fY29udGFpbnNCZWdp
bkNoYXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzaXplID0gbV9wYXR0ZXJuLm1fYmVnaW5DaGFycy5zaXplKCk7CisKKyAg
ICAgICAgICAgIGlmIChzaXplID4gMikKKyAgICAgICAgICAgICAgICBtX2JlZ2luQ2hhckhlbHBl
ci5tZXJnZShzaXplIC0gMSk7CisgICAgICAgICAgICBlbHNlIGlmIChzaXplIDw9IDEpCisgICAg
ICAgICAgICAgICAgbV9wYXR0ZXJuLm1fY29udGFpbnNCZWdpbkNoYXJzID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47CiAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwogICAgIENoYXJhY3RlckNsYXNz
Q29uc3RydWN0b3IgbV9jaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOworICAgIEJlZ2luQ2hhckhl
bHBlciBtX2JlZ2luQ2hhckhlbHBlcjsKICAgICBib29sIG1faW52ZXJ0Q2hhcmFjdGVyQ2xhc3M7
CiAgICAgYm9vbCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb247CiB9OwpAQCAtNjg3LDYg
KzkzNSw3IEBAIGNvbnN0IGNoYXIqIGNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5nJiBwYXR0ZXJu
U3RyaW5nLCBSZWdleFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgY29uc3RydWN0b3Iub3B0aW1pemVC
T0woKTsKICAgICAgICAgCiAgICAgY29uc3RydWN0b3Iuc2V0dXBPZmZzZXRzKCk7CisgICAgY29u
c3RydWN0b3Iuc2V0dXBCZWdpbkNoYXJzKCk7CiAKICAgICByZXR1cm4gMDsKIH07CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oIGIvSmF2YVNjcmlwdENvcmUv
eWFyci9SZWdleFBhdHRlcm4uaAppbmRleCBlZWNiZDQzLi5iZTMxZmNkIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3lh
cnIvUmVnZXhQYXR0ZXJuLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4MywxMSArMjg0LDM2IEBA
IENoYXJhY3RlckNsYXNzKiBub25kaWdpdHNDcmVhdGUoKTsKIENoYXJhY3RlckNsYXNzKiBub25z
cGFjZXNDcmVhdGUoKTsKIENoYXJhY3RlckNsYXNzKiBub253b3JkY2hhckNyZWF0ZSgpOwogCitz
dHJ1Y3QgVGVybUNoYWluIHsKKyAgICBUZXJtQ2hhaW4oUGF0dGVyblRlcm0gdGVybSkKKyAgICAg
ICAgOiB0ZXJtKHRlcm0pCisgICAge30KKworICAgIFBhdHRlcm5UZXJtIHRlcm07CisgICAgVmVj
dG9yPFRlcm1DaGFpbj4gaG90VGVybXM7Cit9OworCitzdHJ1Y3QgQmVnaW5DaGFyIHsKKyAgICBC
ZWdpbkNoYXIoKQorICAgICAgICA6IHZhbHVlKDApCisgICAgICAgICwgbWFzaygwKQorICAgIHt9
CisKKyAgICBCZWdpbkNoYXIodW5zaWduZWQgdmFsdWUsIHVuc2lnbmVkIG1hc2spCisgICAgICAg
IDogdmFsdWUodmFsdWUpCisgICAgICAgICwgbWFzayhtYXNrKQorICAgIHt9CisKKyAgICB1bnNp
Z25lZCB2YWx1ZTsKKyAgICB1bnNpZ25lZCBtYXNrOworfTsKKwogc3RydWN0IFJlZ2V4UGF0dGVy
biB7CiAgICAgUmVnZXhQYXR0ZXJuKGJvb2wgaWdub3JlQ2FzZSwgYm9vbCBtdWx0aWxpbmUpCiAg
ICAgICAgIDogbV9pZ25vcmVDYXNlKGlnbm9yZUNhc2UpCiAgICAgICAgICwgbV9tdWx0aWxpbmUo
bXVsdGlsaW5lKQogICAgICAgICAsIG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxzZSkKKyAg
ICAgICAgLCBtX2NvbnRhaW5zQmVnaW5DaGFycyhmYWxzZSkKICAgICAgICAgLCBtX2NvbnRhaW5z
Qk9MKGZhbHNlKQogICAgICAgICAsIG1fbnVtU3VicGF0dGVybnMoMCkKICAgICAgICAgLCBtX21h
eEJhY2tSZWZlcmVuY2UoMCkKQEAgLTMxMyw2ICszMzksNyBAQCBzdHJ1Y3QgUmVnZXhQYXR0ZXJu
IHsKICAgICAgICAgbV9tYXhCYWNrUmVmZXJlbmNlID0gMDsKIAogICAgICAgICBtX2NvbnRhaW5z
QmFja3JlZmVyZW5jZXMgPSBmYWxzZTsKKyAgICAgICAgbV9jb250YWluc0JlZ2luQ2hhcnMgPSBm
YWxzZTsKICAgICAgICAgbV9jb250YWluc0JPTCA9IGZhbHNlOwogCiAgICAgICAgIG5ld2xpbmVD
YWNoZWQgPSAwOwpAQCAtMzI3LDYgKzM1NCw3IEBAIHN0cnVjdCBSZWdleFBhdHRlcm4gewogICAg
ICAgICBtX2Rpc2p1bmN0aW9ucy5jbGVhcigpOwogICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV91
c2VyQ2hhcmFjdGVyQ2xhc3Nlcyk7CiAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuY2xl
YXIoKTsKKyAgICAgICAgbV9iZWdpbkNoYXJzLmNsZWFyKCk7CiAgICAgfQogCiAgICAgYm9vbCBj
b250YWluc0lsbGVnYWxCYWNrUmVmZXJlbmNlKCkKQEAgLTM4MCwxMiArNDA4LDE0IEBAIHN0cnVj
dCBSZWdleFBhdHRlcm4gewogICAgIGJvb2wgbV9pZ25vcmVDYXNlIDogMTsKICAgICBib29sIG1f
bXVsdGlsaW5lIDogMTsKICAgICBib29sIG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyA6IDE7Cisg
ICAgYm9vbCBtX2NvbnRhaW5zQmVnaW5DaGFycyA6IDE7CiAgICAgYm9vbCBtX2NvbnRhaW5zQk9M
IDogMTsKICAgICB1bnNpZ25lZCBtX251bVN1YnBhdHRlcm5zOwogICAgIHVuc2lnbmVkIG1fbWF4
QmFja1JlZmVyZW5jZTsKICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIG1fYm9keTsKICAgICBWZWN0
b3I8UGF0dGVybkRpc2p1bmN0aW9uKiwgND4gbV9kaXNqdW5jdGlvbnM7CiAgICAgVmVjdG9yPENo
YXJhY3RlckNsYXNzKj4gbV91c2VyQ2hhcmFjdGVyQ2xhc3NlczsKKyAgICBWZWN0b3I8QmVnaW5D
aGFyPiBtX2JlZ2luQ2hhcnM7CiAKIHByaXZhdGU6CiAgICAgQ2hhcmFjdGVyQ2xhc3MqIG5ld2xp
bmVDYWNoZWQ7Ci0tIAoxLjcuMi4yCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>