<?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>18749</bug_id>
          
          <creation_ts>2008-04-25 18:51:23 -0700</creation_ts>
          <short_desc>SQUIRRELFISH: const support is broken</short_desc>
          <delta_ts>2008-05-05 01:05:23 -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>18631</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>78949</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-25 18:51:23 -0700</bug_when>
    <thetext>We currently emit code for const, but we don&apos;t check whether something is const before assigning to it. While there are ways around this in trunk JavaScriptCore as well, we should at least try to match the same level of support. This affects the layout tests fast/js/const and fast/js/kde/const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79076</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-27 21:00:39 -0700</bug_when>
    <thetext>To pass the layout tests, we only need to do the case of locals and this:

var object = { inWith1: &quot;RIGHT&quot;, inWith2: &quot;&quot;}
with (object) {
    const inWith1 = &quot;WRONG&quot;;
    const inWith2 = &quot;RIGHT&quot;;
    inWith2 = &quot;WRONG&quot;;
}
shouldBe(&quot;object.inWith1&quot;, &quot;&apos;RIGHT&apos;&quot;);
shouldBe(&quot;inWith2&quot;, &quot;&apos;RIGHT&apos;&quot;);

We also don&apos;t need to worry about something like this, because it&apos;s broken in trunk:

const x = 1;
var x = 2;

const y = 1;
const y = 2;

I&apos;m assigning this to myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79185</commentid>
    <comment_count>2</comment_count>
      <attachid>20881</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-28 18:11:49 -0700</bug_when>
    <thetext>Created attachment 20881
Patch in progress

Here is a patch that implements all of the necessary codegen for const. It passes almost all of the const tests, the only exception being things of the form:

const x = 1;

function f() { x = 2; }

This is because the attributes are not respected at runtime in JSVariableObject. I&apos;m not quite sure of the best way to store them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79188</commentid>
    <comment_count>3</comment_count>
      <attachid>20881</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-28 18:40:55 -0700</bug_when>
    <thetext>Comment on attachment 20881
Patch in progress

Removing review flag. I am going to make it store the ReadOnly bit in the index in the SymbolTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79198</commentid>
    <comment_count>4</comment_count>
      <attachid>20884</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-29 00:39:12 -0700</bug_when>
    <thetext>Created attachment 20884
Proposed patch

Here&apos;s a patch that fixes the 2 const tests and doesn&apos;t regress on any other tests. It works, but I think it would be served with some better abstraction of the indices in the SymbolTable from the actual entries.

I am going to do some performance testing now. If stealing a bit is too expensive then we may need to have two separate hash tables for non-const and const entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79200</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-29 00:53:21 -0700</bug_when>
    <thetext>Strangely enough, run-sunspider --runs 40 says this patch is an approximately 0.5% progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79202</commentid>
    <comment_count>6</comment_count>
      <attachid>20885</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-29 01:22:47 -0700</bug_when>
    <thetext>Created attachment 20885
Revised proposed patch

I needed to make a small change in order to get the patch to compile in release mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79263</commentid>
    <comment_count>7</comment_count>
      <attachid>20885</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-29 22:40:43 -0700</bug_when>
    <thetext>Comment on attachment 20885
Revised proposed patch

Okay this looks basically fine, but id really like geoff to look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79297</commentid>
    <comment_count>8</comment_count>
      <attachid>20905</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-30 13:25:52 -0700</bug_when>
    <thetext>Created attachment 20905
Revised proposed patch

Here is a new version that patches cleanly against ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79300</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-30 13:37:46 -0700</bug_when>
    <thetext>This patch looks good to me, with one caveat: I&apos;d really like to see SymbolTable become a true class that has a HashMap data member, and does the bit masking for you automatically. Right now, SymbolTable is kind of error-prone, since all clients of get, set, and add need to properly apply the secret bit masking magic.

So, I&apos;d suggest writing a follow-on patch to turn SymbolTable into a true class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79302</commentid>
    <comment_count>10</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-30 13:45:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; This patch looks good to me, with one caveat: I&apos;d really like to see
&gt; SymbolTable become a true class that has a HashMap data member, and does the
&gt; bit masking for you automatically. Right now, SymbolTable is kind of
&gt; error-prone, since all clients of get, set, and add need to properly apply the
&gt; secret bit masking magic.

Yeah, I asked in my original request for review for the best way to remove that problem. I thought about it a bit last night, and came to the same solution you proposed, so that&apos;s probably best.

&gt; So, I&apos;d suggest writing a follow-on patch to turn SymbolTable into a true
&gt; class.

I might as well do it before I ask anyone to land it for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79305</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-30 13:56:51 -0700</bug_when>
    <thetext>&gt; &gt; So, I&apos;d suggest writing a follow-on patch to turn SymbolTable into a true
&gt; &gt; class.
&gt; 
&gt; I might as well do it before I ask anyone to land it for me.

OK, I&apos;ll clear the review bit and hold off on landing for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79306</commentid>
    <comment_count>12</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-30 14:01:29 -0700</bug_when>
    <thetext>On cue, this patch is now a 0.3% regression. I don&apos;t think it&apos;s real because of the progression before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79648</commentid>
    <comment_count>13</comment_count>
      <attachid>20964</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-05-04 21:16:10 -0700</bug_when>
    <thetext>Created attachment 20964
Revised proposed patch

Here is a revised version of my patch, using the attributes support added in r32859. I didn&apos;t think that approach would have good enough performance, but thankfully it seems to be fine. This doesn&apos;t change any JavaScriptCore test results, and I couldn&apos;t actual run the layout tests, because r32859 broke JS in an actual browser window, but the const tests work fine when I run them on the command line. After the tests are fixed, I&apos;ll run them and ask for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79650</commentid>
    <comment_count>14</comment_count>
      <attachid>20964</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-05-04 21:54:38 -0700</bug_when>
    <thetext>Comment on attachment 20964
Revised proposed patch

The layout tests are now fixed, and this patch indeed fixes the const tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79663</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-05-05 01:05:23 -0700</bug_when>
    <thetext>Committed r32866</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20881</attachid>
            <date>2008-04-28 18:11:49 -0700</date>
            <delta_ts>2008-04-29 00:39:12 -0700</delta_ts>
            <desc>Patch in progress</desc>
            <filename>const.diff</filename>
            <type>text/plain</type>
            <size>11768</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNjYz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMDgtMDQt
MjggIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbCBmaXggZm9yOgor
ICAgICAgICAKKyAgICAgICAgQnVnIDE4NzQ5OiBTUVVJUlJFTEZJU0g6IGNvbnN0IHN1cHBvcnQg
aXMgYnJva2VuCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg3NDk+CisKKyAgICAgICAgRml4ZXMgYSByZWdyZXNzaW9uIHRlc3QuCisKKyAgICAgICAg
KiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6YWRk
VmFyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6CisgICAg
ICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcik6CisgICAgICAgIChLSlM6OkNv
ZGVHZW5lcmF0b3I6OnJlZ2lzdGVySXNGb3JDb25zdGFudCk6CisgICAgICAgICogVk0vQ29kZUdl
bmVyYXRvci5oOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAg
ICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OlBvc3RJbmNSZXNvbHZlTm9kZTo6ZW1p
dENvZGUpOgorICAgICAgICAoS0pTOjpQb3N0RGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAg
ICAgICAgKEtKUzo6UHJlSW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6
UHJlRGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6UmVhZE1vZGlmeVJl
c29sdmVOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OkFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Q29kZSk6CisKIDIwMDgtMDQtMjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAzMjY2MykKKysrIFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzcsNyArMTM3LDcgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAjZW5kaWYKIH0K
IAotYm9vbCBDb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFJl
Z2lzdGVySUQqJiByMCkKK2Jvb2wgQ29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBSZWdpc3RlcklEKiYgcjAsIGJvb2wgaXNDb25zdGFudCkKIHsKICAgICBpbnQg
aW5kZXggPSBtX25leHRWYXI7CiAgICAgcGFpcjxTeW1ib2xUYWJsZTo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVzdHJpbmcoKS5yZXAoKSwgaW5kZXgp
OwpAQCAtMTQ5LDYgKzE0OSw3IEBAIGJvb2wgQ29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElk
ZW50aWYKICAgICAgICAgKyttX2NvZGVCbG9jay0+bnVtVmFyczsKIAogICAgICAgICBtX2xvY2Fs
cy5hcHBlbmQoaW5kZXgpOworICAgICAgICBtX2xvY2Fsc0NvbnN0SW5mby5hcHBlbmQoaXNDb25z
dGFudCk7CiAgICAgfQogCiAgICAgcjAgPSAmbV9sb2NhbHNbbG9jYWxzSW5kZXgoaW5kZXgpXTsK
QEAgLTE3NCwxOCArMTc1LDIyIEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCBwcmV2aW91c2x5IGRlZmluZWQgc3ltYm9s
cyB0byBib29ra2VlcGluZy4KICAgICAgICAgbV9sb2NhbHMucmVzaXplKHNpemUpOworICAgICAg
ICBtX2xvY2Fsc0NvbnN0SW5mby5yZXNpemUoc2l6ZSk7CisKICAgICAgICAgU3ltYm9sVGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChTeW1ib2xU
YWJsZTo6aXRlcmF0b3IgaXQgPSBzeW1ib2xUYWJsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdCA9IHN5bWJvbFRhYmxlLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIG1fbG9jYWxzW2xvY2Fsc0lu
ZGV4KGl0LT5zZWNvbmQpXS5zZXRJbmRleChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIG1fbG9j
YWxzQ29uc3RJbmZvW2xvY2Fsc0luZGV4KGl0LT5zZWNvbmQpXSA9IGZhbHNlOworICAgICAgICB9
CiAKICAgICAgICAgLy8gU2hpZnQgbmV3IHN5bWJvbHMgc28gdGhleSBnZXQgc3RvcmVkIHByaW9y
IHRvIHByZXZpb3VzbHkgZGVmaW5lZCBzeW1ib2xzLgogICAgICAgICBtX25leHRWYXIgLT0gc2l6
ZTsKICAgICB9IGVsc2UKLSAgICAgICAgYWRkVmFyKG1fcHJvcGVydHlOYW1lcy0+dGhpc0lkZW50
aWZpZXIpOyAvLyBObyBuZWVkIHRvIG1ha2UgInRoaXMiIGEgdHJ1ZSBwYXJhbWV0ZXIsIHNpbmNl
IGl0J3Mgbm90IHBhc3NlZCBieSBvdXIgY2FsbGVyLgorICAgICAgICBhZGRWYXIobV9wcm9wZXJ0
eU5hbWVzLT50aGlzSWRlbnRpZmllciwgZmFsc2UpOyAvLyBObyBuZWVkIHRvIG1ha2UgInRoaXMi
IGEgdHJ1ZSBwYXJhbWV0ZXIsIHNpbmNlIGl0J3Mgbm90IHBhc3NlZCBieSBvdXIgY2FsbGVyLgog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEZ1bmNEZWNsTm9kZSogZnVuY0RlY2wgPSBmdW5jdGlvblN0YWNrW2ldOwotICAg
ICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGZ1bmNEZWNsLT5tX2lkZW50KSwgZnVuY0RlY2wp
OworICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGZ1bmNEZWNsLT5tX2lkZW50LCBmYWxz
ZSksIGZ1bmNEZWNsKTsKICAgICB9CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPihzY29wZUNoYWluLmJvdHRvbSgpKTsKQEAg
LTE5Niw3ICsyMDEsNyBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2Rl
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQogICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aGFzUHJvcGVydHkoJnRtcEV4ZWMsIHZhclN0YWNrW2ld
LmZpcnN0KSkKLSAgICAgICAgICAgICBlbWl0TG9hZChhZGRWYXIodmFyU3RhY2tbaV0uZmlyc3Qp
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICBlbWl0TG9hZChhZGRWYXIodmFyU3RhY2tb
aV0uZmlyc3QsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0
YW50KSwganNVbmRlZmluZWQoKSk7CiB9CiAKIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3Io
RnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNo
YWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBWYXJT
dGFjayYgdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2ssIFZlY3RvcjxJZGVu
dGlmaWVyPiYgcGFyYW1ldGVycykKQEAgLTIxNiw3ICsyMjEsNyBAQCBDb2RlR2VuZXJhdG9yOjpD
b2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gZnVuY0RlY2wtPm1faWRlbnQ7CiAgICAgICAgIAogICAgICAgICBtX2Z1bmN0aW9ucy5hZGQo
aWRlbnQudXN0cmluZygpLnJlcCgpKTsKLSAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihp
ZGVudCksIGZ1bmNEZWNsKTsKKyAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwg
ZmFsc2UpLCBmdW5jRGVjbCk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YXJTdGFjay5zaXplKCk7ICsraSkgewpAQCAtMjI1LDEyICsyMzAsMTMgQEAgQ29kZUdlbmVyYXRv
cjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAogICAgICAgICBSZWdpc3RlcklEKiByMDsKLSAgICAgICAgaWYgKGFkZFZhcihpZGVudCwg
cjApKQorICAgICAgICBpZiAoYWRkVmFyKGlkZW50LCByMCwgdmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpKQogICAgICAgICAgICAgZW1pdExvYWQocjAs
IGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIG1fbmV4dFBhcmFtZXRlciA9IG1fbmV4dFZh
ciAtIHBhcmFtZXRlcnMuc2l6ZSgpOwogICAgIG1fbG9jYWxzLnJlc2l6ZShsb2NhbHNJbmRleCht
X25leHRQYXJhbWV0ZXIpICsgMSk7CisgICAgbV9sb2NhbHNDb25zdEluZm8ucmVzaXplKGxvY2Fs
c0luZGV4KG1fbmV4dFBhcmFtZXRlcikgKyAxKTsKIAogICAgIGFkZFBhcmFtZXRlcihtX3Byb3Bl
cnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKQEAgLTI1MCw3ICsyNTYsNyBAQCBDb2RlR2VuZXJhdG9y
OjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBlCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBt
X3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewotICAgIGFkZFZh
cihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKKyAgICBhZGRWYXIobV9wcm9wZXJ0
eU5hbWVzLT50aGlzSWRlbnRpZmllciwgZmFsc2UpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvZGVCbG9jay0+ZGVjbGFy
ZWRWYXJpYWJsZU5hbWVzLmFwcGVuZCh2YXJTdGFja1tpXS5maXJzdCk7CkBAIC0yNzMsNiArMjc5
LDcgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIoY29uc3QgSQogICAgIGlmICgh
bV9mdW5jdGlvbnMuY29udGFpbnMocmVwKSkgewogICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChy
ZXAsIG1fbmV4dFBhcmFtZXRlcik7CiAgICAgICAgIG1fbG9jYWxzW2xvY2Fsc0luZGV4KG1fbmV4
dFBhcmFtZXRlcildLnNldEluZGV4KG1fbmV4dFBhcmFtZXRlcik7CisgICAgICAgIG1fbG9jYWxz
Q29uc3RJbmZvW2xvY2Fsc0luZGV4KG1fbmV4dFBhcmFtZXRlcildID0gZmFsc2U7CiAgICAgfQog
ICAgIAogICAgIC8vIFRvIG1haW50YWluIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24sIHdlIGhhdmUg
dG8gYWxsb2NhdGUgdW5pcXVlIHNwYWNlIGZvcgpAQCAtMzA3LDYgKzMxNCwxMSBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvckxvCiAgICAgcmV0dXJuICZtX2xvY2Fsc1ts
b2NhbHNJbmRleChpbmRleCldOwogfQogCitib29sIENvZGVHZW5lcmF0b3I6OnJlZ2lzdGVySXNG
b3JDb25zdGFudChSZWdpc3RlcklEKiByKQoreworICAgIHJldHVybiBtX2xvY2Fsc0NvbnN0SW5m
b1tsb2NhbHNJbmRleChyLT5pbmRleCgpKV07Cit9CisKIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6Om5ld1RlbXBvcmFyeSgpCiB7CiAgICAgLy8gUmVjbGFpbSBmcmVlIHJlZ2lzdGVyIElEcy4K
SW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDMyNjYzKQorKysgVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw2ICs4OCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAvLyBCZWhhdmVzIGFz
IHJlZ2lzdGVyRm9yTG9jYWwgZG9lcywgYnV0IGlnbm9yZXMgZHluYW1pYyBzY29wZSBhcwogICAg
ICAgICAvLyBkeW5hbWljIHNjb3BlIHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggY29uc3QgaW5p
dGlhbGlzYXRpb24KICAgICAgICAgUmVnaXN0ZXJJRCogcmVnaXN0ZXJGb3JMb2NhbENvbnN0SW5p
dChjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIAorICAgICAgICBib29sIHJlZ2lzdGVySXNG
b3JDb25zdGFudChSZWdpc3RlcklEKik7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgbmV4dCBh
dmFpbGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVyLiBSZWdpc3RlcnMgcmV0dXJuZWQgYnkKICAgICAg
ICAgLy8gbmV3VGVtcG9yYXJ5IHJlcXVpcmUgYSBtb2RpZmllZCBmb3JtIG9mIHJlZmVyZW5jZSBj
b3VudGluZzogYW55CkBAIC0yNTksMTUgKzI2MSwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgaW50IGxvY2Fsc0luZGV4KGludCByZWdpc3RlckluZGV4KSB7IHJldHVybiAtcmVnaXN0ZXJJ
bmRleCAtIDE7IH0KICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIFJlZ2lzdGVySUQg
Y29ycmVzcG9uZGluZyB0byBpZGVudC4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCkKICAgICAgICAgewogICAgICAgICAgICAg
UmVnaXN0ZXJJRCogcjA7Ci0gICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHIwKTsKKyAgICAgICAg
ICAgIGFkZFZhcihpZGVudCwgcjAsIGlzQ29uc3RhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHIw
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJlZ2lzdGVy
SUQgd2FzIGFkZGVkLCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdhcyByZS11
c2VkLgotICAgICAgICBib29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCom
KTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqJiwg
Ym9vbCBpc0NvbnN0YW50KTsKIAogICAgICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVu
dGlmaWVyJik7CiAKQEAgLTI5MSw2ICsyOTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
SGFzaFNldDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgSWRlbnRpZmllclJlcEhhc2gsIElkZW50aWZp
ZXJSZXBIYXNoVHJhaXRzPiBtX2Z1bmN0aW9uczsKIAogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8
UmVnaXN0ZXJJRCwgNTEyPiBtX2xvY2FsczsKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yPGJvb2ws
IDUxMj4gbV9sb2NhbHNDb25zdEluZm87CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3Rl
cklELCA1MTI+IG1fdGVtcG9yYXJpZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbElE
LCA1MTI+IG1fbGFiZWxzOwogICAgICAgICBpbnQgbV9maW5hbGx5RGVwdGg7CkluZGV4OiBranMv
bm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDMyNjYzKQor
Kysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyOCw4ICsxNzI4LDEyIEBAIFJl
Z2lzdGVySUQqIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUKICAgICAvLyBGSVhNRTogSSB0
aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVudCBleHByZXNzaW9ucyBo
ZXJlLCAKICAgICAvLyBhbmQgZW1pdCBhIFByZUluYyBpbnN0ZWFkIG9mIGEgUG9zdEluYy4gQSBw
b3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKICAgICAvLyBjb2RlIHdvdWxkIHdvcmssIHRvby4K
LSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbCht
X2lkZW50KSkKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJG
b3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9yLnJlZ2lzdGVySXNGb3JD
b25zdGFudChsb2NhbCkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUb0pTTnVt
YmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICAgICAgCiAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKQEAgLTE4MDgsOCArMTgxMiwxMiBAQCBS
ZWdpc3RlcklEKiBQb3N0RGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlCiAgICAgLy8gRklYTUU6IEkg
dGhpbmsgd2UgY2FuIGRldGVjdCB0aGUgYWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhwcmVzc2lvbnMg
aGVyZSwgCiAgICAgLy8gYW5kIGVtaXQgYSBQcmVEZWMgaW5zdGVhZCBvZiBhIFBvc3REZWMuIEEg
cG9zdC1wYXNzIHRvIGVsaW1pbmF0ZSBkZWFkCiAgICAgLy8gY29kZSB3b3VsZCB3b3JrLCB0b28u
Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwo
bV9pZGVudCkpCisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVy
Rm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5yZWdpc3RlcklzRm9y
Q29uc3RhbnQobG9jYWwpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VG9KU051
bWJlcihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgICAgIAog
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFs
dWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlQW5kUHJvcGVydHkoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgbV9pZGVudCk7CkBAIC0yMzI2LDYgKzIzMzQsMTEgQEAg
SlNWYWx1ZSogVHlwZU9mVmFsdWVOb2RlOjpldmFsdWF0ZShPbGRJbgogUmVnaXN0ZXJJRCogUHJl
SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogewogICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdp
c3RlckZvckxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IucmVnaXN0ZXJJ
c0ZvckNvbnN0YW50KGxvY2FsKSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIw
ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIDEu
MCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2Fs
LCByMC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJlSW5jKGxvY2FsKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KQEAgLTIzOTEsNiArMjQwNCwxMSBAQCBKU1Zh
bHVlKiBQcmVJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkCiBSZWdpc3RlcklEKiBQcmVEZWNS
ZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVy
Rm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5yZWdpc3RlcklzRm9y
Q29uc3RhbnQobG9jYWwpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBn
ZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7
CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCBy
MC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJl
RGVjKGxvY2FsKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KQEAgLTQxMjcsOSArNDE0NSwxNCBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAKIFJlZ2lzdGVySUQqIFJlYWRNb2Rp
ZnlSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGRzdCA9IGdlbmVyYXRvci5yZWdpc3Rl
ckZvckxvY2FsKG1faWRlbnQpKSB7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5y
ZWdpc3RlcklzRm9yQ29uc3RhbnQobG9jYWwpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBz
cmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsLCBzcmMyLCBtX29wZXJhdG9yKTsKKyAgICAgICAgfQorICAg
ICAgICAKICAgICAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Jp
Z2h0LmdldCgpKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlB
c3NpZ25tZW50KGdlbmVyYXRvciwgZHN0LCBkc3QsIHNyYzIsIG1fb3BlcmF0b3IpOworICAgICAg
ICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9y
LCBsb2NhbCwgbG9jYWwsIHNyYzIsIG1fb3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAgIH0KIApAQCAt
NDE1Nyw2ICs0MTgwLDkgQEAgdm9pZCBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6Om9wdGltaXplVmFy
aQogUmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGlmIChSZWdpc3RlcklEKiBsb2Nh
bCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIGlmIChn
ZW5lcmF0b3IucmVnaXN0ZXJJc0ZvckNvbnN0YW50KGxvY2FsKSkKKyAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3JpZ2h0LmdldCgpKTsKKyAgICAgICAgCiAgICAg
ICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbCwgbV9yaWdo
dC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20884</attachid>
            <date>2008-04-29 00:39:12 -0700</date>
            <delta_ts>2008-04-29 01:22:47 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>const.diff</filename>
            <type>text/plain</type>
            <size>23382</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNjcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMDgtMDQt
MjkgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE4NzQ5OiBTUVVJUlJF
TEZJU0g6IGNvbnN0IHN1cHBvcnQgaXMgYnJva2VuCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDk+CisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciBjb25zdCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uIGFuZCBhdCBydW50aW1lIGJ5IHVzaW5nCisg
ICAgICAgIGEgc3BhcmUgYml0IGZyb20gdGhlIGluZGljZXMgaW4gU3ltYm9sVGFibGUuCisKKyAg
ICAgICAgRml4ZXMgMiBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEtKUzo6bWlzc2luZ1RoaXNWYWx1ZU1hcmtlcik6CisgICAgICAgICogVk0vQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmFkZFZhcik6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoS0pT
OjpDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjpyZWdpc3RlckZvckxvY2FsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6cmVn
aXN0ZXJGb3JMb2NhbENvbnN0SW5pdCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6Omlz
TG9jYWxDb25zdGFudCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0
b3I6OklkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAo
S0pTOjpDb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgor
ICAgICAgICAoS0pTOjpNYWNoaW5lOjpleGVjdXRlKToKKyAgICAgICAgKEtKUzo6TWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0OjpzYXZlTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKEtK
Uzo6SlNHbG9iYWxPYmplY3Q6OnJlc3RvcmVMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIGtqcy9K
U1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0
UHJvcGVydHlBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBranMvSlNWYXJpYWJsZU9iamVjdC5oOgor
ICAgICAgICAoS0pTOjpKU1ZhcmlhYmxlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKEtK
Uzo6SlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoS0pTOjpKU1Zh
cmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChLSlM6OkpTVmFyaWFibGVP
YmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGtqcy9TeW1i
b2xUYWJsZS5oOgorICAgICAgICAoS0pTOjptaXNzaW5nU3ltYm9sTWFya2VyKToKKyAgICAgICAg
KEtKUzo6aW5kZXhUb1N5bWJvbFRhYmxlRW50cnkpOgorICAgICAgICAoS0pTOjpzeW1ib2xUYWJs
ZUVudHJ5VG9JbmRleCk6CisgICAgICAgIChLSlM6OmlzUmVhZE9ubHlCaXRTZXQpOgorICAgICAg
ICAoS0pTOjpTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAg
ICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtKUzo6UG9zdEluY1Jlc29sdmVOb2RlOjplbWl0
Q29kZSk6CisgICAgICAgIChLSlM6OlBvc3REZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAg
ICAgICAoS0pTOjpQcmVJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpQ
cmVEZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVt
aXRDb2RlKToKKwogMjAwOC0wNC0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogVk0vQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vQ29kZUJsb2NrLmgJKHJldmlzaW9uIDMyNjcyKQorKysgVk0vQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIGludCBsaW5lTnVtYmVyOwogICAgIH07CiAKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBp
bnQgbWlzc2luZ1RoaXNWYWx1ZU1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7IH0KKwogICAgIHN0cnVjdCBDb2RlQmxvY2sgewogICAgICAgICBDb2RlQmxv
Y2soY29uc3QgVVN0cmluZyYgc291cmNlVVJMXywgYm9vbCB1c2VzRXZhbF8sIGJvb2wgbmVlZHND
bG9zdXJlXywgQ29kZVR5cGUgY29kZVR5cGVfID0gRnVuY3Rpb25Db2RlKQogICAgICAgICAgICAg
OiBzb3VyY2VVUkwoc291cmNlVVJMXykKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzMjY3MikKKysrIFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTMgKzEzNywxMyBAQCB2b2lk
IENvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKICNlbmRpZgogfQogCi1ib29sIENvZGVHZW5lcmF0
b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgUmVnaXN0ZXJJRComIHIwKQorYm9v
bCBDb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFJlZ2lzdGVy
SUQqJiByMCwgYm9vbCBpc0NvbnN0YW50KQogewogICAgIGludCBpbmRleCA9IG1fbmV4dFZhcjsK
LSAgICBwYWlyPFN5bWJvbFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3ltYm9sVGFi
bGUoKS5hZGQoaWRlbnQudXN0cmluZygpLnJlcCgpLCBpbmRleCk7CisgICAgcGFpcjxTeW1ib2xU
YWJsZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVz
dHJpbmcoKS5yZXAoKSwgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkoaW5kZXgsIGlzQ29uc3RhbnQp
KTsKIAogICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgaW5kZXggPSByZXN1bHQuZmly
c3QtPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSBzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChyZXN1
bHQuZmlyc3QtPnNlY29uZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC0tbV9uZXh0VmFyOwogICAg
ICAgICArK21fY29kZUJsb2NrLT5udW1WYXJzOwpAQCAtMTc0LDE4ICsxNzQsMjEgQEAgQ29kZUdl
bmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZQogICAgICAgICAKICAgICAgICAgLy8g
QWRkIHByZXZpb3VzbHkgZGVmaW5lZCBzeW1ib2xzIHRvIGJvb2trZWVwaW5nLgogICAgICAgICBt
X2xvY2Fscy5yZXNpemUoc2l6ZSk7CisKICAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVu
ZCA9IHN5bWJvbFRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0
b3IgaXQgPSBzeW1ib2xUYWJsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgbV9sb2NhbHNbbG9jYWxzSW5kZXgoaXQtPnNlY29uZCldLnNldEluZGV4KGl0LT5zZWNvbmQp
OworICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdCA9IHN5bWJvbFRhYmxlLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IHN5bWJv
bFRhYmxlRW50cnlUb0luZGV4KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgbV9sb2NhbHNbbG9j
YWxzSW5kZXgoaW5kZXgpXS5zZXRJbmRleChpbmRleCk7CisgICAgICAgIH0KIAogICAgICAgICAv
LyBTaGlmdCBuZXcgc3ltYm9scyBzbyB0aGV5IGdldCBzdG9yZWQgcHJpb3IgdG8gcHJldmlvdXNs
eSBkZWZpbmVkIHN5bWJvbHMuCiAgICAgICAgIG1fbmV4dFZhciAtPSBzaXplOwogICAgIH0gZWxz
ZQotICAgICAgICBhZGRWYXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7IC8vIE5v
IG5lZWQgdG8gbWFrZSAidGhpcyIgYSB0cnVlIHBhcmFtZXRlciwgc2luY2UgaXQncyBub3QgcGFz
c2VkIGJ5IG91ciBjYWxsZXIuCisgICAgICAgIGFkZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJ
ZGVudGlmaWVyLCBmYWxzZSk7IC8vIE5vIG5lZWQgdG8gbWFrZSAidGhpcyIgYSB0cnVlIHBhcmFt
ZXRlciwgc2luY2UgaXQncyBub3QgcGFzc2VkIGJ5IG91ciBjYWxsZXIuCiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRnVu
Y0RlY2xOb2RlKiBmdW5jRGVjbCA9IGZ1bmN0aW9uU3RhY2tbaV07Ci0gICAgICAgIGVtaXROZXdG
dW5jdGlvbihhZGRWYXIoZnVuY0RlY2wtPm1faWRlbnQpLCBmdW5jRGVjbCk7CisgICAgICAgIGVt
aXROZXdGdW5jdGlvbihhZGRWYXIoZnVuY0RlY2wtPm1faWRlbnQsIGZhbHNlKSwgZnVuY0RlY2wp
OwogICAgIH0KIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dsb2JhbE9iamVjdCo+KHNjb3BlQ2hhaW4uYm90dG9tKCkpOwpAQCAtMTk2LDcgKzE5OSw3
IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpCiAgICAgICAgIGlmICghZ2xv
YmFsT2JqZWN0LT5oYXNQcm9wZXJ0eSgmdG1wRXhlYywgdmFyU3RhY2tbaV0uZmlyc3QpKQotICAg
ICAgICAgICAgIGVtaXRMb2FkKGFkZFZhcih2YXJTdGFja1tpXS5maXJzdCksIGpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgIGVtaXRMb2FkKGFkZFZhcih2YXJTdGFja1tpXS5maXJzdCwgdmFy
U3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpLCBqc1VuZGVm
aW5lZCgpKTsKIH0KIAogQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbkJvZHksIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZhclN0YWNrJiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaywgVmVjdG9yPElkZW50aWZpZXI+JiBwYXJh
bWV0ZXJzKQpAQCAtMjE2LDcgKzIxOSw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3Io
RnVuY3Rpb25Cb2QKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBmdW5jRGVjbC0+
bV9pZGVudDsKICAgICAgICAgCiAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC51c3RyaW5n
KCkucmVwKCkpOwotICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50KSwgZnVuY0Rl
Y2wpOworICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBmYWxzZSksIGZ1bmNE
ZWNsKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUo
KTsgKytpKSB7CkBAIC0yMjUsNyArMjI4LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRv
cihGdW5jdGlvbkJvZAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBS
ZWdpc3RlcklEKiByMDsKLSAgICAgICAgaWYgKGFkZFZhcihpZGVudCwgcjApKQorICAgICAgICBp
ZiAoYWRkVmFyKGlkZW50LCByMCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFj
a3M6OklzQ29uc3RhbnQpKQogICAgICAgICAgICAgZW1pdExvYWQocjAsIGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KIApAQCAtMjUwLDcgKzI1Myw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0
b3IoRXZhbE5vZGUqIGUKICAgICAsIG1fbmV4dFZhcigtMSkKICAgICAsIG1fcHJvcGVydHlOYW1l
cyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCiB7Ci0gICAgYWRkVmFyKG1fcHJvcGVydHlO
YW1lcy0+dGhpc0lkZW50aWZpZXIpOworICAgIGFkZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJ
ZGVudGlmaWVyLCBmYWxzZSk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJT
dGFjay5zaXplKCk7ICsraSkKICAgICAgICAgY29kZUJsb2NrLT5kZWNsYXJlZFZhcmlhYmxlTmFt
ZXMuYXBwZW5kKHZhclN0YWNrW2ldLmZpcnN0KTsKQEAgLTI3MSw3ICsyNzQsNyBAQCB2b2lkIENv
ZGVHZW5lcmF0b3I6OmFkZFBhcmFtZXRlcihjb25zdCBJCiAgICAgLy8gaW4gdGhlIHN5bWJvbCB0
YWJsZS4KICAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IGlkZW50LnVzdHJpbmcoKS5yZXAoKTsKICAg
ICBpZiAoIW1fZnVuY3Rpb25zLmNvbnRhaW5zKHJlcCkpIHsKLSAgICAgICAgc3ltYm9sVGFibGUo
KS5zZXQocmVwLCBtX25leHRQYXJhbWV0ZXIpOworICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChy
ZXAsIGluZGV4VG9TeW1ib2xUYWJsZUVudHJ5KG1fbmV4dFBhcmFtZXRlciwgZmFsc2UpKTsKICAg
ICAgICAgbV9sb2NhbHNbbG9jYWxzSW5kZXgobV9uZXh0UGFyYW1ldGVyKV0uc2V0SW5kZXgobV9u
ZXh0UGFyYW1ldGVyKTsKICAgICB9CiAgICAgCkBAIC0yODksMTEgKzI5MiwxMSBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvckxvCiAgICAgaWYgKCFzaG91bGRPcHRpbWl6
ZUxvY2FscygpICYmIGlkZW50ICE9IG1fcHJvcGVydHlOYW1lcy0+dGhpc0lkZW50aWZpZXIpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUoKS5nZXQoaWRl
bnQudXN0cmluZygpLnJlcCgpKTsKLSAgICBpZiAoaW5kZXggPT0gbWlzc2luZ1N5bWJvbE1hcmtl
cigpKQorICAgIGludCBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LnVzdHJpbmcoKS5y
ZXAoKSk7CisgICAgaWYgKGVudHJ5ID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gJm1fbG9jYWxzW2xvY2Fsc0luZGV4KGluZGV4KV07Cisg
ICAgcmV0dXJuICZtX2xvY2Fsc1tsb2NhbHNJbmRleChzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChl
bnRyeSkpXTsKIH0KIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6cmVnaXN0ZXJGb3JMb2Nh
bENvbnN0SW5pdChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKQEAgLTMwMSwxMCArMzA0LDE1IEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yTG8KICAgICBpZiAobV9jb2Rl
VHlwZSA9PSBFdmFsQ29kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaW50IGluZGV4
ID0gc3ltYm9sVGFibGUoKS5nZXQoaWRlbnQudXN0cmluZygpLnJlcCgpKTsKLSAgICBBU1NFUlQo
aW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKTsKKyAgICBpbnQgZW50cnkgPSBzeW1ib2xU
YWJsZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOworICAgIEFTU0VSVChlbnRyeSAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpOwogICAgIAotICAgIHJldHVybiAmbV9sb2NhbHNbbG9jYWxz
SW5kZXgoaW5kZXgpXTsKKyAgICByZXR1cm4gJm1fbG9jYWxzW2xvY2Fsc0luZGV4KHN5bWJvbFRh
YmxlRW50cnlUb0luZGV4KGVudHJ5KSldOworfQorCitib29sIENvZGVHZW5lcmF0b3I6OmlzTG9j
YWxDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICByZXR1cm4gaXNSZWFk
T25seUJpdFNldChzeW1ib2xUYWJsZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpKTsKIH0K
IAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KCkKQEAgLTg0Myw3ICs4
NTEsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvCiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyMS0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIyID8gcjItPmlu
ZGV4KCkgOiBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOyAvLyBXZSBlbmNvZGUgdGhlICJ0aGlzIiB2
YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBhbiBleHBsaWNpdCBpbnN0
cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0LgorICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyMiA/IHIyLT5pbmRleCgpIDogbWlzc2luZ1RoaXNWYWx1ZU1hcmtlcigpKTsgLy8gV2Ug
ZW5jb2RlIHRoZSAidGhpcyIgdmFsdWUgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbSwgdG8gYXZv
aWQgYW4gZXhwbGljaXQgaW5zdHJ1Y3Rpb24gZm9yIGNvcHlpbmcgb3IgbG9hZGluZyBpdC4KICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2WzBdLT5pbmRleCgpIDog
bV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYwogCkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAzMjY3MikKKysrIFZNL0NvZGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgLy8gZHluYW1pYyBzY29wZSBzaG91bGQgbm90IGludGVyZmVyZSB3aXRoIGNv
bnN0IGluaXRpYWxpc2F0aW9uCiAgICAgICAgIFJlZ2lzdGVySUQqIHJlZ2lzdGVyRm9yTG9jYWxD
b25zdEluaXQoY29uc3QgSWRlbnRpZmllciYpOwogCisgICAgICAgIGJvb2wgaXNMb2NhbENvbnN0
YW50KGNvbnN0IElkZW50aWZpZXImKTsKKwogICAgICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGF2
YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBieQogICAgICAg
ICAvLyBuZXdUZW1wb3JhcnkgcmVxdWlyZSBhIG1vZGlmaWVkIGZvcm0gb2YgcmVmZXJlbmNlIGNv
dW50aW5nOiBhbnkKICAgICAgICAgLy8gcmVnaXN0ZXIgd2l0aCBhIHJlZmNvdW50IG9mIDAgaXMg
Y29uc2lkZXJlZCAiYXZhaWxhYmxlIiwgbWVhbmluZyB0aGF0CkBAIC0yNTIsNiArMjU0LDE3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICB9OwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxK
U1ZhbHVlKiwgdW5zaWduZWQsIERlZmF1bHRIYXNoPEpTVmFsdWUqPjo6SGFzaCwgSlNWYWx1ZUhh
c2hUcmFpdHM+IEpTVmFsdWVNYXA7CisKKyAgICAgICAgc3RydWN0IElkZW50aWZpZXJNYXBJbmRl
eEhhc2hUcmFpdHMgeworICAgICAgICAgICAgdHlwZWRlZiBpbnQgVHJhaXRUeXBlOworICAgICAg
ICAgICAgdHlwZWRlZiBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cyBTdG9yYWdlVHJhaXRzOwor
ICAgICAgICAgICAgc3RhdGljIGludCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKTsgfQorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNSZWYgPSBmYWxzZTsKKyAgICAgICAgfTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPFVTdHJpbmc6OlJlcD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIElkZW50aWZpZXJSZXBI
YXNoVHJhaXRzLCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBJZGVudGlmaWVyTWFwOwog
ICAgICAgICAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsKIApAQCAtMjU5
LDE1ICsyNzIsMTUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGludCBsb2NhbHNJbmRleChp
bnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lzdGVySW5kZXggLSAxOyB9CiAgICAgICAg
IAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBSZWdpc3RlcklEIGNvcnJlc3BvbmRpbmcgdG8gaWRl
bnQuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
KyAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29s
IGlzQ29uc3RhbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHIwOwotICAg
ICAgICAgICAgYWRkVmFyKGlkZW50LCByMCk7CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHIw
LCBpc0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybiByMDsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFsc2Ug
aWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9vbCBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqJik7CisgICAgICAgIGJvb2wgYWRk
VmFyKGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiYsIGJvb2wgaXNDb25zdGFudCk7CiAK
ICAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYpOwogCkBAIC0zMDUs
NyArMzE4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGludCBtX25leHRQYXJhbWV0ZXI7
CiAKICAgICAgICAgLy8gQ29uc3RhbnQgcG9vbAotICAgICAgICBTeW1ib2xUYWJsZSBtX2lkZW50
aWZpZXJNYXA7CisgICAgICAgIElkZW50aWZpZXJNYXAgbV9pZGVudGlmaWVyTWFwOwogICAgICAg
ICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKIAogICAgICAgICBDb21tb25JZGVudGlmaWVycyog
bV9wcm9wZXJ0eU5hbWVzOwpJbmRleDogVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0v
TWFjaGluZS5jcHAJKHJldmlzaW9uIDMyNjcyKQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1OCw3ICs1NTgsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dy
YW1Ob2RlKiBwCiAgICAgcmVnaXN0ZXJGaWxlLT51bmNoZWNrZWRHcm93KGNvZGVCbG9jay0+bnVt
VGVtcG9yYXJpZXMpOwogICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2lu
dGVyKCkpOwogCi0gICAgQVNTRVJUKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+c3ltYm9s
VGFibGUoKS5nZXQoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpLT50aGlzSWRlbnRpZmllci51
c3RyaW5nKCkucmVwKCkpID09IFByb2dyYW1Db2RlVGhpc1JlZ2lzdGVyKTsKKyAgICBBU1NFUlQo
c3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5zeW1i
b2xUYWJsZSgpLmdldChDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPnRoaXNJZGVudGlmaWVy
LnVzdHJpbmcoKS5yZXAoKSkpID09IFByb2dyYW1Db2RlVGhpc1JlZ2lzdGVyKTsKICAgICByW1By
b2dyYW1Db2RlVGhpc1JlZ2lzdGVyXS51LmpzVmFsdWUgPSB0aGlzT2JqOwogICAgIAogICAgIGlm
IChjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICBSZWdp
c3RlciogY2FsbEZyYW1lID0gciArIGFyZ3YgLSBDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAg
ICAgICAgaW50IGNhbGxGcmFtZU9mZnNldCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndiAtIENhbGxG
cmFtZUhlYWRlclNpemU7CiAKLSAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0g
bWlzc2luZ1N5bWJvbE1hcmtlcigpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiByW3IyXS51
LmpzVmFsdWU7IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUg
PSByMiA9PSBtaXNzaW5nVGhpc1ZhbHVlTWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSA6IHJbcjJdLnUuanNWYWx1ZTsgLy8gInRoaXMiIHZhbHVlCiAgICAgICAgICAgICBpbml0aWFs
aXplQ2FsbEZyYW1lKGNhbGxGcmFtZSwgY29kZUJsb2NrLCB2UEMsIHNjb3BlQ2hhaW4sIHJlZ2lz
dGVyT2Zmc2V0LCByMCwgYXJndiwgYXJnYywgMCwgdik7CiAKICAgICAgICAgICAgIFNjb3BlQ2hh
aW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBjYWxsRGF0YS5qcy5zY29wZUNoYWluOwpAQCAt
MTQ3NSw3ICsxNDc1LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsKICAgICAgICAgICAg
IGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtl
cigpID8gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmpl
Y3QoZXhlYyk7IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUg
PSByMiA9PSBtaXNzaW5nVGhpc1ZhbHVlTWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUo
KSA6IChyW3IyXS51LmpzVmFsdWUpLT50b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCiAg
ICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oclth
cmd2XS51LmpzVmFsdWUpOwogCiAgICAgICAgICAgICBMaXN0IGFyZ3MoJnJbYXJndiArIDFdLnUu
anNWYWx1ZSwgYXJnYyAtIDEpOwpJbmRleDoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzMjY3MikKKysrIGtqcy9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpzYXZlTG9jYWxTdG9yYWdlKFNhCiAgICAgICAgICAgICBhdHRyaWJ1
dGVzIHw9IFJlYWRPbmx5OwogICAgICAgICBpZiAoaXNEb250RW51bShpdC0+c2Vjb25kKSkKICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gRG9udEVudW07Ci0gICAgICAgIHAucHJvcGVydGllc1tp
XS5pbml0KGl0LT5maXJzdC5nZXQoKSwgdmFsdWVBdChpdC0+c2Vjb25kKSwgYXR0cmlidXRlcyk7
CisgICAgICAgIHAucHJvcGVydGllc1tpXS5pbml0KGl0LT5maXJzdC5nZXQoKSwgdmFsdWVBdChz
eW1ib2xUYWJsZUVudHJ5VG9JbmRleChpdC0+c2Vjb25kKSksIGF0dHJpYnV0ZXMpOwogICAgIH0K
IH0KIApAQCAtMTY3LDEwICsxNjcsMTAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzdG9yZUxv
Y2FsU3RvcmFnZQogICAgIFNhdmVkUHJvcGVydHkqIHByb3BlcnR5ID0gcC5wcm9wZXJ0aWVzLmdl
dCgpOwogICAgIGZvciAoaW50IGkgPSAtY291bnQ7IGkgPCAwOyArK2ksICsrcHJvcGVydHkpIHsK
ICAgICAgICAgQVNTRVJUKCFzeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5LT5uYW1lKCkp
KTsKLSAgICAgICAgc3ltYm9sVGFibGUoKS5zZXQocHJvcGVydHktPm5hbWUoKSwgaSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlKCkuc2V0KHByb3BlcnR5LT5uYW1lKCksIGluZGV4VG9TeW1ib2xUYWJs
ZUVudHJ5KGksIHByb3BlcnR5LT5hdHRyaWJ1dGVzKCkgJiBSZWFkT25seSkpOwogICAgICAgICB2
YWx1ZUF0KGkpID0gcHJvcGVydHktPnZhbHVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBGZXRjaCBh
dHRyaWJ1dGVzIGZyb20gdGhlIFNhdmVkUHJvcGVydHkgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIHN5
bWJvbCB0YWJsZS4KLSAgICAgICAgQVNTRVJUKHByb3BlcnR5LT5hdHRyaWJ1dGVzKCkgJiBSZWFk
T25seSA9PSAwICYmIHByb3BlcnR5LT5hdHRyaWJ1dGVzKCkgJiBEb250RW51bSA9PSAwKTsKKyAg
ICAgICAgQVNTRVJUKHByb3BlcnR5LT5hdHRyaWJ1dGVzKCkgJiBEb250RW51bSA9PSAwKTsKICAg
ICB9CiB9CiAKSW5kZXg6IGtqcy9KU1ZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
anMvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDMyNjcyKQorKysga2pzL0pTVmFyaWFi
bGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgdm9pZCBKU1Zh
cmlhYmxlT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKAogCiBib29sIEpTVmFyaWFibGVPYmplY3Q6
OmdldFByb3BlcnR5QXR0cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAogewotICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxl
KCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCkpOwotICAgIGlmIChpbmRleCAhPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKKyAgICBpbnQgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdl
dChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpKTsKKyAgICBpZiAoZW50cnkgIT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcigpKSB7CiAgICAgICAgIGF0dHJpYnV0ZXMgPSAwOwotICAgICAgICBpZiAo
aXNSZWFkT25seShpbmRleCkpCisgICAgICAgIGlmIChpc1JlYWRPbmx5KGVudHJ5KSkKICAgICAg
ICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7Ci0gICAgICAgIGlmIChpc0RvbnRFbnVtKGlu
ZGV4KSkKKyAgICAgICAgaWYgKGlzRG9udEVudW0oZW50cnkpKQogICAgICAgICAgICAgYXR0cmli
dXRlcyB8PSBEb250RW51bTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDoga2pz
L0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAzMjY3MikKKysrIGtqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpkLT5zeW1ib2xUYWJsZTsgfQogCiAgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlc2UgY2hlY2tzIGZvciByZWFsIGJ5IHN0b3Jpbmcg
cHJvcGVydHkgYXR0cmlidXRlcyBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICBib29sIGlz
UmVhZE9ubHkoaW50KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICBib29sIGlzUmVh
ZE9ubHkoaW50IGVudHJ5KSBjb25zdCB7IHJldHVybiBpc1JlYWRPbmx5Qml0U2V0KGVudHJ5KTsg
fQogICAgICAgICBib29sIGlzRG9udEVudW0oaW50KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICAKICAgICAgICAgdm9pZCBzYXZlTG9jYWxTdG9yYWdlKFNhdmVkUHJvcGVydGllcyYp
IGNvbnN0OwpAQCAtMTAzLDkgKzEwMyw5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgaW5saW5l
IGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewotICAgICAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpKTsKLSAg
ICAgICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgewotICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlQXQoaW5kZXgpKTsKKyAgICAgICAgaW50IGVu
dHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7Cisg
ICAgICAgIGlmIChlbnRyeSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKKyAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsICZ2YWx1ZUF0KHN5bWJvbFRhYmxlRW50cnlUb0luZGV4
KGVudHJ5KSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTEzLDI1ICsxMTMsMjUgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAg
ICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaW50
IGluZGV4ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7
Ci0gICAgICAgIGlmIChpbmRleCA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCisgICAgICAgIGlu
dCBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCkp
OworICAgICAgICBpZiAoZW50cnkgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNSZWFkT25seShpbmRleCkpCisgICAgICAg
IGlmIChpc1JlYWRPbmx5KGVudHJ5KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB2YWx1ZUF0KGluZGV4KSA9IHZhbHVlOworICAgICAgICB2YWx1ZUF0KHN5bWJvbFRhYmxlRW50
cnlUb0luZGV4KGVudHJ5KSkgPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0
cmlidXRlcyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gc3ltYm9sVGFi
bGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7Ci0gICAgICAgIGlmIChpbmRl
eCA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCisgICAgICAgIGludCBlbnRyeSA9IHN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCkpOworICAgICAgICBpZiAoZW50
cnkgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGF0dHJpYnV0ZSBzdXBwb3J0IGJ5IHN0b3Jpbmcg
YXR0cmlidXRlcyBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICBBU1NFUlQoYXR0cmlidXRl
cyAmIFJlYWRPbmx5ID09IDApOwogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyAmIERvbnRFbnVt
ID09IDApOwogICAgICAgICBVTlVTRURfUEFSQU0oYXR0cmlidXRlcyk7Ci0gICAgICAgIHZhbHVl
QXQoaW5kZXgpID0gdmFsdWU7CisgICAgICAgIHZhbHVlQXQoc3ltYm9sVGFibGVFbnRyeVRvSW5k
ZXgoZW50cnkpKSA9IHZhbHVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IGtqcy9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9TeW1ib2xUYWJsZS5oCShyZXZp
c2lvbiAzMjY3MikKKysrIGtqcy9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
MyArNTAsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nOjpSZXAq
IG51bGxSZXBQdHI7CiAgICAgfTsKIAotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNz
aW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsgfQorICAgIHN0YXRpYyBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIDA7IH0K
KworICAgIGlubGluZSBpbnQgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkoaW50IGluZGV4LCBib29s
IGlzUmVhZE9ubHkpIHsgcmV0dXJuIGlzUmVhZE9ubHkgPyBpbmRleCA6IGluZGV4ICYgfjB4ODAw
MDAwMDA7IH0KKyAgICBpbmxpbmUgaW50IHN5bWJvbFRhYmxlRW50cnlUb0luZGV4KGludCBlbnRy
eSkgeyByZXR1cm4gZW50cnkgfCAweDgwMDAwMDAwOyB9CisgICAgaW5saW5lIGJvb2wgaXNSZWFk
T25seUJpdFNldChpbnQgZW50cnkpIHsgcmV0dXJuIGVudHJ5ICYgMHg4MDAwMDAwMDsgfQogCiAg
ICAgc3RydWN0IFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzIHsKICAgICAgICAgdHlwZWRlZiBp
bnQgVHJhaXRUeXBlOwogICAgICAgICB0eXBlZGVmIFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRz
IFN0b3JhZ2VUcmFpdHM7Ci0gICAgICAgIHN0YXRpYyBpbnQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJu
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBpbnQgZW1wdHlWYWx1ZSgpIHsg
cmV0dXJuIDA7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNSZWYgPSBmYWxzZTsKICAgICB9OwpJ
bmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lv
biAzMjY3MikKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjgsOCArMTcy
OCwxMiBAQCBSZWdpc3RlcklEKiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlCiAgICAgLy8g
RklYTUU6IEkgdGhpbmsgd2UgY2FuIGRldGVjdCB0aGUgYWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhw
cmVzc2lvbnMgaGVyZSwgCiAgICAgLy8gYW5kIGVtaXQgYSBQcmVJbmMgaW5zdGVhZCBvZiBhIFBv
c3RJbmMuIEEgcG9zdC1wYXNzIHRvIGVsaW1pbmF0ZSBkZWFkCiAgICAgLy8gY29kZSB3b3VsZCB3
b3JrLCB0b28uCi0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVy
Rm9yTG9jYWwobV9pZGVudCkpCisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9y
LnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xv
Y2FsQ29uc3RhbnQobV9pZGVudCkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRU
b0pTTnVtYmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICAg
ICAgCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKQEAgLTE4MDgsOCArMTgxMiwx
MiBAQCBSZWdpc3RlcklEKiBQb3N0RGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlCiAgICAgLy8gRklY
TUU6IEkgdGhpbmsgd2UgY2FuIGRldGVjdCB0aGUgYWJzZW5zZSBvZiBkZXBlbmRlbnQgZXhwcmVz
c2lvbnMgaGVyZSwgCiAgICAgLy8gYW5kIGVtaXQgYSBQcmVEZWMgaW5zdGVhZCBvZiBhIFBvc3RE
ZWMuIEEgcG9zdC1wYXNzIHRvIGVsaW1pbmF0ZSBkZWFkCiAgICAgLy8gY29kZSB3b3VsZCB3b3Jr
LCB0b28uCi0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9y
TG9jYWwobV9pZGVudCkpCisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJl
Z2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2Fs
Q29uc3RhbnQobV9pZGVudCkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUb0pT
TnVtYmVyKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICAgICAg
CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFBvc3REZWMoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgbG9jYWwpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
YmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKQEAgLTIzMjYsNiArMjMzNCwxMSBA
QCBKU1ZhbHVlKiBUeXBlT2ZWYWx1ZU5vZGU6OmV2YWx1YXRlKE9sZEluCiBSZWdpc3RlcklEKiBQ
cmVJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJl
Z2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2Fs
Q29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCAxLjAp
OworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwg
cjAuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
ZUluYyhsb2NhbCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25J
Zk5lZWRlZChkc3QsIGxvY2FsKTsKICAgICB9CkBAIC0yMzkxLDYgKzI0MDQsMTEgQEAgSlNWYWx1
ZSogUHJlSW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZAogUmVnaXN0ZXJJRCogUHJlRGVjUmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogewogICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZv
ckxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50
KG1faWRlbnQpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0
b3IuZW1pdExvYWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7CisgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKGxv
Y2FsKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgbG9jYWwpOwogICAgIH0KQEAgLTQxMjcsOSArNDE0NSwxNCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBSZWdpc3RlcklEKiBlbWl0UmVhCiAKIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNv
bHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7Ci0gICAgaWYgKFJlZ2lzdGVySUQqIGRzdCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxv
Y2FsKG1faWRlbnQpKSB7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJl
Z2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2Fs
Q29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZW1pdFJl
YWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgbG9jYWwsIHNyYzIsIG1fb3BlcmF0b3IpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQuZ2V0KCkp
OwotICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQo
Z2VuZXJhdG9yLCBkc3QsIGRzdCwgc3JjMiwgbV9vcGVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLCBs
b2NhbCwgc3JjMiwgbV9vcGVyYXRvcik7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQogCkBAIC00MTU3LDYgKzQx
ODAsOSBAQCB2b2lkIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpCiBSZWdpc3Rl
cklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5p
c0xvY2FsQ29uc3RhbnQobV9pZGVudCkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9yaWdodC5nZXQoKSk7CisgICAgICAgIAogICAgICAgICBSZWdpc3RlcklE
KiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1fcmlnaHQuZ2V0KCkpOwogICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1
bHQpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20885</attachid>
            <date>2008-04-29 01:22:47 -0700</date>
            <delta_ts>2008-04-30 13:25:52 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>const.diff</filename>
            <type>text/plain</type>
            <size>23390</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNjcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMDgtMDQt
MjkgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE4NzQ5OiBTUVVJUlJF
TEZJU0g6IGNvbnN0IHN1cHBvcnQgaXMgYnJva2VuCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDk+CisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciBjb25zdCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uIGFuZCBhdCBydW50aW1lIGJ5IHVzaW5nCisg
ICAgICAgIGEgc3BhcmUgYml0IGZyb20gdGhlIGluZGljZXMgaW4gU3ltYm9sVGFibGUuCisKKyAg
ICAgICAgRml4ZXMgMiBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEtKUzo6bWlzc2luZ1RoaXNWYWx1ZU1hcmtlcik6CisgICAgICAgICogVk0vQ29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmFkZFZhcik6Cisg
ICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoS0pT
OjpDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjpyZWdpc3RlckZvckxvY2FsKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6cmVn
aXN0ZXJGb3JMb2NhbENvbnN0SW5pdCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6Omlz
TG9jYWxDb25zdGFudCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToK
KyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0
b3I6OklkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAo
S0pTOjpDb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgor
ICAgICAgICAoS0pTOjpNYWNoaW5lOjpleGVjdXRlKToKKyAgICAgICAgKEtKUzo6TWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0OjpzYXZlTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKEtK
Uzo6SlNHbG9iYWxPYmplY3Q6OnJlc3RvcmVMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIGtqcy9K
U1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6Z2V0
UHJvcGVydHlBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBranMvSlNWYXJpYWJsZU9iamVjdC5oOgor
ICAgICAgICAoS0pTOjpKU1ZhcmlhYmxlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKEtK
Uzo6SlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoS0pTOjpKU1Zh
cmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChLSlM6OkpTVmFyaWFibGVP
YmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGtqcy9TeW1i
b2xUYWJsZS5oOgorICAgICAgICAoS0pTOjptaXNzaW5nU3ltYm9sTWFya2VyKToKKyAgICAgICAg
KEtKUzo6aW5kZXhUb1N5bWJvbFRhYmxlRW50cnkpOgorICAgICAgICAoS0pTOjpzeW1ib2xUYWJs
ZUVudHJ5VG9JbmRleCk6CisgICAgICAgIChLSlM6OmlzUmVhZE9ubHlCaXRTZXQpOgorICAgICAg
ICAoS0pTOjpTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAg
ICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtKUzo6UG9zdEluY1Jlc29sdmVOb2RlOjplbWl0
Q29kZSk6CisgICAgICAgIChLSlM6OlBvc3REZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAg
ICAgICAoS0pTOjpQcmVJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpQ
cmVEZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVt
aXRDb2RlKToKKwogMjAwOC0wNC0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogVk0vQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vQ29kZUJsb2NrLmgJKHJldmlzaW9uIDMyNjcyKQorKysgVk0vQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIGludCBsaW5lTnVtYmVyOwogICAgIH07CiAKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBp
bnQgbWlzc2luZ1RoaXNWYWx1ZU1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7IH0KKwogICAgIHN0cnVjdCBDb2RlQmxvY2sgewogICAgICAgICBDb2RlQmxv
Y2soY29uc3QgVVN0cmluZyYgc291cmNlVVJMXywgYm9vbCB1c2VzRXZhbF8sIGJvb2wgbmVlZHND
bG9zdXJlXywgQ29kZVR5cGUgY29kZVR5cGVfID0gRnVuY3Rpb25Db2RlKQogICAgICAgICAgICAg
OiBzb3VyY2VVUkwoc291cmNlVVJMXykKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzMjY3MikKKysrIFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTMgKzEzNywxMyBAQCB2b2lk
IENvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKICNlbmRpZgogfQogCi1ib29sIENvZGVHZW5lcmF0
b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgUmVnaXN0ZXJJRComIHIwKQorYm9v
bCBDb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFJlZ2lzdGVy
SUQqJiByMCwgYm9vbCBpc0NvbnN0YW50KQogewogICAgIGludCBpbmRleCA9IG1fbmV4dFZhcjsK
LSAgICBwYWlyPFN5bWJvbFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3ltYm9sVGFi
bGUoKS5hZGQoaWRlbnQudXN0cmluZygpLnJlcCgpLCBpbmRleCk7CisgICAgcGFpcjxTeW1ib2xU
YWJsZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVz
dHJpbmcoKS5yZXAoKSwgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkoaW5kZXgsIGlzQ29uc3RhbnQp
KTsKIAogICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgaW5kZXggPSByZXN1bHQuZmly
c3QtPnNlY29uZDsKKyAgICAgICAgaW5kZXggPSBzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChyZXN1
bHQuZmlyc3QtPnNlY29uZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC0tbV9uZXh0VmFyOwogICAg
ICAgICArK21fY29kZUJsb2NrLT5udW1WYXJzOwpAQCAtMTc0LDE4ICsxNzQsMjEgQEAgQ29kZUdl
bmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZQogICAgICAgICAKICAgICAgICAgLy8g
QWRkIHByZXZpb3VzbHkgZGVmaW5lZCBzeW1ib2xzIHRvIGJvb2trZWVwaW5nLgogICAgICAgICBt
X2xvY2Fscy5yZXNpemUoc2l6ZSk7CisgICAgICAgIAogICAgICAgICBTeW1ib2xUYWJsZTo6aXRl
cmF0b3IgZW5kID0gc3ltYm9sVGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKFN5bWJvbFRhYmxl
OjppdGVyYXRvciBpdCA9IHN5bWJvbFRhYmxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBtX2xvY2Fsc1tsb2NhbHNJbmRleChpdC0+c2Vjb25kKV0uc2V0SW5kZXgoaXQt
PnNlY29uZCk7CisgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ID0gc3ltYm9s
VGFibGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaW50IGluZGV4
ID0gc3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBtX2xv
Y2Fsc1tsb2NhbHNJbmRleChpbmRleCldLnNldEluZGV4KGluZGV4KTsKKyAgICAgICAgfQogCiAg
ICAgICAgIC8vIFNoaWZ0IG5ldyBzeW1ib2xzIHNvIHRoZXkgZ2V0IHN0b3JlZCBwcmlvciB0byBw
cmV2aW91c2x5IGRlZmluZWQgc3ltYm9scy4KICAgICAgICAgbV9uZXh0VmFyIC09IHNpemU7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGFkZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVy
KTsgLy8gTm8gbmVlZCB0byBtYWtlICJ0aGlzIiBhIHRydWUgcGFyYW1ldGVyLCBzaW5jZSBpdCdz
IG5vdCBwYXNzZWQgYnkgb3VyIGNhbGxlci4KKyAgICAgICAgYWRkVmFyKG1fcHJvcGVydHlOYW1l
cy0+dGhpc0lkZW50aWZpZXIsIGZhbHNlKTsgLy8gTm8gbmVlZCB0byBtYWtlICJ0aGlzIiBhIHRy
dWUgcGFyYW1ldGVyLCBzaW5jZSBpdCdzIG5vdCBwYXNzZWQgYnkgb3VyIGNhbGxlci4KIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewogICAg
ICAgICBGdW5jRGVjbE5vZGUqIGZ1bmNEZWNsID0gZnVuY3Rpb25TdGFja1tpXTsKLSAgICAgICAg
ZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihmdW5jRGVjbC0+bV9pZGVudCksIGZ1bmNEZWNsKTsKKyAg
ICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihmdW5jRGVjbC0+bV9pZGVudCwgZmFsc2UpLCBm
dW5jRGVjbCk7CiAgICAgfQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0
YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oc2NvcGVDaGFpbi5ib3R0b20oKSk7CkBAIC0xOTYs
NyArMTk5LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZQogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkKICAgICAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KCZ0bXBFeGVjLCB2YXJTdGFja1tpXS5maXJz
dCkpCi0gICAgICAgICAgICAgZW1pdExvYWQoYWRkVmFyKHZhclN0YWNrW2ldLmZpcnN0KSwganNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgZW1pdExvYWQoYWRkVmFyKHZhclN0YWNrW2ldLmZp
cnN0LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCks
IGpzVW5kZWZpbmVkKCkpOwogfQogCiBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmFyU3RhY2sm
IHZhclN0YWNrLCBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrLCBWZWN0b3I8SWRlbnRpZmll
cj4mIHBhcmFtZXRlcnMpCkBAIC0yMTYsNyArMjE5LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdl
bmVyYXRvcihGdW5jdGlvbkJvZAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGZ1
bmNEZWNsLT5tX2lkZW50OwogICAgICAgICAKICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50
LnVzdHJpbmcoKS5yZXAoKSk7Ci0gICAgICAgIGVtaXROZXdGdW5jdGlvbihhZGRWYXIoaWRlbnQp
LCBmdW5jRGVjbCk7CisgICAgICAgIGVtaXROZXdGdW5jdGlvbihhZGRWYXIoaWRlbnQsIGZhbHNl
KSwgZnVuY0RlY2wpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3Rh
Y2suc2l6ZSgpOyArK2kpIHsKQEAgLTIyNSw3ICsyMjgsNyBAQCBDb2RlR2VuZXJhdG9yOjpDb2Rl
R2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAg
ICAgICAgIFJlZ2lzdGVySUQqIHIwOwotICAgICAgICBpZiAoYWRkVmFyKGlkZW50LCByMCkpCisg
ICAgICAgIGlmIChhZGRWYXIoaWRlbnQsIHIwLCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJh
dGlvblN0YWNrczo6SXNDb25zdGFudCkpCiAgICAgICAgICAgICBlbWl0TG9hZChyMCwganNVbmRl
ZmluZWQoKSk7CiAgICAgfQogCkBAIC0yNTAsNyArMjUzLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29k
ZUdlbmVyYXRvcihFdmFsTm9kZSogZQogICAgICwgbV9uZXh0VmFyKC0xKQogICAgICwgbV9wcm9w
ZXJ0eU5hbWVzKENvbW1vbklkZW50aWZpZXJzOjpzaGFyZWQoKSkKIHsKLSAgICBhZGRWYXIobV9w
cm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7CisgICAgYWRkVmFyKG1fcHJvcGVydHlOYW1l
cy0+dGhpc0lkZW50aWZpZXIsIGZhbHNlKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICBjb2RlQmxvY2stPmRlY2xhcmVkVmFy
aWFibGVOYW1lcy5hcHBlbmQodmFyU3RhY2tbaV0uZmlyc3QpOwpAQCAtMjcxLDcgKzI3NCw3IEBA
IHZvaWQgQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IEkKICAgICAvLyBpbiB0aGUg
c3ltYm9sIHRhYmxlLgogICAgIFVTdHJpbmc6OlJlcCogcmVwID0gaWRlbnQudXN0cmluZygpLnJl
cCgpOwogICAgIGlmICghbV9mdW5jdGlvbnMuY29udGFpbnMocmVwKSkgewotICAgICAgICBzeW1i
b2xUYWJsZSgpLnNldChyZXAsIG1fbmV4dFBhcmFtZXRlcik7CisgICAgICAgIHN5bWJvbFRhYmxl
KCkuc2V0KHJlcCwgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkobV9uZXh0UGFyYW1ldGVyLCBmYWxz
ZSkpOwogICAgICAgICBtX2xvY2Fsc1tsb2NhbHNJbmRleChtX25leHRQYXJhbWV0ZXIpXS5zZXRJ
bmRleChtX25leHRQYXJhbWV0ZXIpOwogICAgIH0KICAgICAKQEAgLTI4OSwxMSArMjkyLDExIEBA
IFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yTG8KICAgICBpZiAoIXNob3Vs
ZE9wdGltaXplTG9jYWxzKCkgJiYgaWRlbnQgIT0gbV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRp
ZmllcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgp
LmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwotICAgIGlmIChpbmRleCA9PSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkpCisgICAgaW50IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQoaWRlbnQudXN0
cmluZygpLnJlcCgpKTsKKyAgICBpZiAoZW50cnkgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiAmbV9sb2NhbHNbbG9jYWxzSW5kZXgoaW5k
ZXgpXTsKKyAgICByZXR1cm4gJm1fbG9jYWxzW2xvY2Fsc0luZGV4KHN5bWJvbFRhYmxlRW50cnlU
b0luZGV4KGVudHJ5KSldOwogfQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpyZWdpc3Rl
ckZvckxvY2FsQ29uc3RJbml0KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQpAQCAtMzAxLDEwICsz
MDQsMTUgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6cmVnaXN0ZXJGb3JMbwogICAgIGlm
IChtX2NvZGVUeXBlID09IEV2YWxDb2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBp
bnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwotICAg
IEFTU0VSVChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOworICAgIGludCBlbnRyeSA9
IHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LnVzdHJpbmcoKS5yZXAoKSk7CisgICAgQVNTRVJUKGVu
dHJ5ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7CiAgICAgCi0gICAgcmV0dXJuICZtX2xvY2Fs
c1tsb2NhbHNJbmRleChpbmRleCldOworICAgIHJldHVybiAmbV9sb2NhbHNbbG9jYWxzSW5kZXgo
c3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoZW50cnkpKV07Cit9CisKK2Jvb2wgQ29kZUdlbmVyYXRv
cjo6aXNMb2NhbENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIHJldHVy
biBpc1JlYWRPbmx5Qml0U2V0KHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LnVzdHJpbmcoKS5yZXAo
KSkpOwogfQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpuZXdUZW1wb3JhcnkoKQpAQCAt
ODQzLDcgKzg1MSw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY28K
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcGNvZGVJRCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHIxLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjIg
PyByMi0+aW5kZXgoKSA6IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7IC8vIFdlIGVuY29kZSB0aGUg
InRoaXMiIHZhbHVlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0sIHRvIGF2b2lkIGFuIGV4cGxp
Y2l0IGluc3RydWN0aW9uIGZvciBjb3B5aW5nIG9yIGxvYWRpbmcgaXQuCisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5nVGhpc1ZhbHVlTWFya2VyKCkp
OyAvLyBXZSBlbmNvZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFt
LCB0byBhdm9pZCBhbiBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5n
IGl0LgogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSA/IGFyZ3ZbMF0tPmlu
ZGV4KCkgOiBtX3RlbXBvcmFyaWVzLnNpemUoKSk7IC8vIGFyZ3YKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYXJndi5zaXplKCkpOyAvLyBhcmdjCiAKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDMyNjcyKQorKysg
Vk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw4IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAvLyBkeW5hbWljIHNjb3BlIHNob3VsZCBub3QgaW50ZXJmZXJl
IHdpdGggY29uc3QgaW5pdGlhbGlzYXRpb24KICAgICAgICAgUmVnaXN0ZXJJRCogcmVnaXN0ZXJG
b3JMb2NhbENvbnN0SW5pdChjb25zdCBJZGVudGlmaWVyJik7CiAKKyAgICAgICAgYm9vbCBpc0xv
Y2FsQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOworCiAgICAgICAgIC8vIFJldHVybnMgdGhl
IG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5
CiAgICAgICAgIC8vIG5ld1RlbXBvcmFyeSByZXF1aXJlIGEgbW9kaWZpZWQgZm9ybSBvZiByZWZl
cmVuY2UgY291bnRpbmc6IGFueQogICAgICAgICAvLyByZWdpc3RlciB3aXRoIGEgcmVmY291bnQg
b2YgMCBpcyBjb25zaWRlcmVkICJhdmFpbGFibGUiLCBtZWFuaW5nIHRoYXQKQEAgLTI1Miw2ICsy
NTQsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH07CiAKICAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPEpTVmFsdWUqLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8SlNWYWx1ZSo+OjpIYXNoLCBK
U1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKKworICAgICAgICBzdHJ1Y3QgSWRlbnRpZmll
ck1hcEluZGV4SGFzaFRyYWl0cyB7CisgICAgICAgICAgICB0eXBlZGVmIGludCBUcmFpdFR5cGU7
CisgICAgICAgICAgICB0eXBlZGVmIFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJhaXRzIFN0b3JhZ2VU
cmFpdHM7CisgICAgICAgICAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc1JlZiA9IGZhbHNlOworICAgICAgICB9OworCisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSWRlbnRp
ZmllclJlcEhhc2hUcmFpdHMsIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZp
ZXJNYXA7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwg
UmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwog
CkBAIC0yNTksMTUgKzI3MiwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgaW50IGxvY2Fs
c0luZGV4KGludCByZWdpc3RlckluZGV4KSB7IHJldHVybiAtcmVnaXN0ZXJJbmRleCAtIDE7IH0K
ICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIFJlZ2lzdGVySUQgY29ycmVzcG9uZGlu
ZyB0byBpZGVudC4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGJvb2wgaXNDb25zdGFudCkKICAgICAgICAgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCog
cjA7Ci0gICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHIwKTsKKyAgICAgICAgICAgIGFkZFZhcihp
ZGVudCwgcjAsIGlzQ29uc3RhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHIwOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVk
LCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAg
ICBib29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRComKTsKKyAgICAgICAg
Ym9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqJiwgYm9vbCBpc0NvbnN0
YW50KTsKIAogICAgICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJik7CiAK
QEAgLTMwNSw3ICszMTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgaW50IG1fbmV4dFBh
cmFtZXRlcjsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sCi0gICAgICAgIFN5bWJvbFRhYmxl
IG1faWRlbnRpZmllck1hcDsKKyAgICAgICAgSWRlbnRpZmllck1hcCBtX2lkZW50aWZpZXJNYXA7
CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwogCiAgICAgICAgIENvbW1vbklkZW50
aWZpZXJzKiBtX3Byb3BlcnR5TmFtZXM7CkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzI2NzIpCisrKyBWTS9NYWNoaW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTU4LDcgKzU1OCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1
dGUoUHJvZ3JhbU5vZGUqIHAKICAgICByZWdpc3RlckZpbGUtPnVuY2hlY2tlZEdyb3coY29kZUJs
b2NrLT5udW1UZW1wb3Jhcmllcyk7CiAgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+
YmFzZVBvaW50ZXIoKSk7CiAKLSAgICBBU1NFUlQoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5zeW1ib2xUYWJsZSgpLmdldChDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPnRoaXNJZGVu
dGlmaWVyLnVzdHJpbmcoKS5yZXAoKSkgPT0gUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXIpOworICAg
IEFTU0VSVChzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCktPnN5bWJvbFRhYmxlKCkuZ2V0KENvbW1vbklkZW50aWZpZXJzOjpzaGFyZWQoKS0+dGhpc0lk
ZW50aWZpZXIudXN0cmluZygpLnJlcCgpKSkgPT0gUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXIpOwog
ICAgIHJbUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXJdLnUuanNWYWx1ZSA9IHRoaXNPYmo7CiAgICAg
CiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKQEAgLTE0NTIsNyArMTQ1
Miw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUgPSByICsgYXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7
CiAgICAgICAgICAgICBpbnQgY2FsbEZyYW1lT2Zmc2V0ID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd2
IC0gQ2FsbEZyYW1lSGVhZGVyU2l6ZTsKIAotICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUg
PSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6
IHJbcjJdLnUuanNWYWx1ZTsgLy8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICByW2FyZ3ZdLnUu
anNWYWx1ZSA9IHIyID09IG1pc3NpbmdUaGlzVmFsdWVNYXJrZXIoKSA/IGV4ZWMtPmdsb2JhbFRo
aXNWYWx1ZSgpIDogcltyMl0udS5qc1ZhbHVlOyAvLyAidGhpcyIgdmFsdWUKICAgICAgICAgICAg
IGluaXRpYWxpemVDYWxsRnJhbWUoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywgc2NvcGVDaGFp
biwgcmVnaXN0ZXJPZmZzZXQsIHIwLCBhcmd2LCBhcmdjLCAwLCB2KTsKIAogICAgICAgICAgICAg
U2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3BlQ2hh
aW47CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0
ZShFeGVjdXRpCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgewogICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSByMiA9PSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6IChyW3IyXS51LmpzVmFsdWUp
LT50b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICByW2FyZ3ZdLnUu
anNWYWx1ZSA9IHIyID09IG1pc3NpbmdUaGlzVmFsdWVNYXJrZXIoKSA/IGV4ZWMtPmdsb2JhbFRo
aXNWYWx1ZSgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIg
dmFsdWUKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihyW2FyZ3ZdLnUuanNWYWx1ZSk7CiAKICAgICAgICAgICAgIExpc3QgYXJncygmclthcmd2
ICsgMV0udS5qc1ZhbHVlLCBhcmdjIC0gMSk7CkluZGV4OiBranMvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDMyNjcyKQor
Kysga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNhdmVMb2NhbFN0b3JhZ2UoU2EKICAgICAgICAgICAg
IGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAgICAgIGlmIChpc0RvbnRFbnVtKGl0LT5zZWNv
bmQpKQogICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBEb250RW51bTsKLSAgICAgICAgcC5wcm9w
ZXJ0aWVzW2ldLmluaXQoaXQtPmZpcnN0LmdldCgpLCB2YWx1ZUF0KGl0LT5zZWNvbmQpLCBhdHRy
aWJ1dGVzKTsKKyAgICAgICAgcC5wcm9wZXJ0aWVzW2ldLmluaXQoaXQtPmZpcnN0LmdldCgpLCB2
YWx1ZUF0KHN5bWJvbFRhYmxlRW50cnlUb0luZGV4KGl0LT5zZWNvbmQpKSwgYXR0cmlidXRlcyk7
CiAgICAgfQogfQogCkBAIC0xNjcsMTAgKzE2NywxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXN0b3JlTG9jYWxTdG9yYWdlCiAgICAgU2F2ZWRQcm9wZXJ0eSogcHJvcGVydHkgPSBwLnByb3Bl
cnRpZXMuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IC1jb3VudDsgaSA8IDA7ICsraSwgKytwcm9w
ZXJ0eSkgewogICAgICAgICBBU1NFUlQoIXN5bWJvbFRhYmxlKCkuY29udGFpbnMocHJvcGVydHkt
Pm5hbWUoKSkpOwotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChwcm9wZXJ0eS0+bmFtZSgpLCBp
KTsKKyAgICAgICAgc3ltYm9sVGFibGUoKS5zZXQocHJvcGVydHktPm5hbWUoKSwgaW5kZXhUb1N5
bWJvbFRhYmxlRW50cnkoaSwgcHJvcGVydHktPmF0dHJpYnV0ZXMoKSAmIFJlYWRPbmx5KSk7CiAg
ICAgICAgIHZhbHVlQXQoaSkgPSBwcm9wZXJ0eS0+dmFsdWUoKTsKICAgICAgICAgLy8gRklYTUU6
IEZldGNoIGF0dHJpYnV0ZXMgZnJvbSB0aGUgU2F2ZWRQcm9wZXJ0eSBhbmQgc3RvcmUgdGhlbSBp
biB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICBBU1NFUlQocHJvcGVydHktPmF0dHJpYnV0ZXMo
KSAmIFJlYWRPbmx5ID09IDAgJiYgcHJvcGVydHktPmF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtID09
IDApOworICAgICAgICBBU1NFUlQocHJvcGVydHktPmF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtID09
IDApOwogICAgIH0KIH0KIApJbmRleDoga2pzL0pTVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtqcy9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMzI2NzIpCisrKyBranMv
SlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1NywxMiBAQCB2
b2lkIEpTVmFyaWFibGVPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoCiAKIGJvb2wgSlNWYXJpYWJs
ZU9iamVjdDo6Z2V0UHJvcGVydHlBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiB7Ci0gICAgaW50IGluZGV4ID0gc3lt
Ym9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7Ci0gICAgaWYgKGlu
ZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgeworICAgIGludCBlbnRyeSA9IHN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCkpOworICAgIGlmIChlbnRyeSAh
PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKICAgICAgICAgYXR0cmlidXRlcyA9IDA7Ci0gICAg
ICAgIGlmIChpc1JlYWRPbmx5KGluZGV4KSkKKyAgICAgICAgaWYgKGlzUmVhZE9ubHkoZW50cnkp
KQogICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZWFkT25seTsKLSAgICAgICAgaWYgKGlzRG9u
dEVudW0oaW5kZXgpKQorICAgICAgICBpZiAoaXNEb250RW51bShlbnRyeSkpCiAgICAgICAgICAg
ICBhdHRyaWJ1dGVzIHw9IERvbnRFbnVtOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Cklu
ZGV4OiBranMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU1ZhcmlhYmxl
T2JqZWN0LmgJKHJldmlzaW9uIDMyNjcyKQorKysga2pzL0pTVmFyaWFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKmQtPnN5bWJvbFRhYmxlOyB9
CiAKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGVzZSBjaGVja3MgZm9yIHJlYWwgYnkg
c3RvcmluZyBwcm9wZXJ0eSBhdHRyaWJ1dGVzIGluIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAg
IGJvb2wgaXNSZWFkT25seShpbnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIGJv
b2wgaXNSZWFkT25seShpbnQgZW50cnkpIGNvbnN0IHsgcmV0dXJuIGlzUmVhZE9ubHlCaXRTZXQo
ZW50cnkpOyB9CiAgICAgICAgIGJvb2wgaXNEb250RW51bShpbnQpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHNhdmVMb2NhbFN0b3JhZ2UoU2F2ZWRQcm9w
ZXJ0aWVzJikgY29uc3Q7CkBAIC0xMDMsOSArMTAzLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAg
ICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICB7Ci0gICAgICAg
IGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVw
KCkpOwotICAgICAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7Ci0gICAg
ICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCAmdmFsdWVBdChpbmRleCkpOworICAgICAg
ICBpbnQgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJl
cCgpKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgeworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVlQXQoc3ltYm9sVGFibGVFbnRy
eVRvSW5kZXgoZW50cnkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTMsMjUgKzExMywyNSBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0KGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygp
LnJlcCgpKTsKLSAgICAgICAgaWYgKGluZGV4ID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKKyAg
ICAgICAgaW50IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmco
KS5yZXAoKSk7CisgICAgICAgIGlmIChlbnRyeSA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpc1JlYWRPbmx5KGluZGV4KSkK
KyAgICAgICAgaWYgKGlzUmVhZE9ubHkoZW50cnkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIHZhbHVlQXQoaW5kZXgpID0gdmFsdWU7CisgICAgICAgIHZhbHVlQXQoc3ltYm9s
VGFibGVFbnRyeVRvSW5kZXgoZW50cnkpKSA9IHZhbHVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBpbnQgaW5kZXggPSBz
eW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpKTsKLSAgICAgICAg
aWYgKGluZGV4ID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKKyAgICAgICAgaW50IGVudHJ5ID0g
c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7CisgICAgICAg
IGlmIChlbnRyeSA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYXR0cmlidXRlIHN1cHBvcnQgYnkg
c3RvcmluZyBhdHRyaWJ1dGVzIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgIEFTU0VSVChh
dHRyaWJ1dGVzICYgUmVhZE9ubHkgPT0gMCk7CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzICYg
RG9udEVudW0gPT0gMCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgdmFsdWVBdChpbmRleCkgPSB2YWx1ZTsKKyAgICAgICAgdmFsdWVBdChzeW1ib2xUYWJsZUVu
dHJ5VG9JbmRleChlbnRyeSkpID0gdmFsdWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDoga2pzL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1N5bWJvbFRhYmxl
LmgJKHJldmlzaW9uIDMyNjcyKQorKysga2pzL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDEzICs1MCwxNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIFVTdHJp
bmc6OlJlcCogbnVsbFJlcFB0cjsKICAgICB9OwogCi0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
aW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpOyB9CisgICAgaW5saW5lIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1
cm4gMDsgfQorCisgICAgaW5saW5lIGludCBpbmRleFRvU3ltYm9sVGFibGVFbnRyeShpbnQgaW5k
ZXgsIGJvb2wgaXNSZWFkT25seSkgeyByZXR1cm4gaXNSZWFkT25seSA/IGluZGV4IDogaW5kZXgg
JiB+MHg4MDAwMDAwMDsgfQorICAgIGlubGluZSBpbnQgc3ltYm9sVGFibGVFbnRyeVRvSW5kZXgo
aW50IGVudHJ5KSB7IHJldHVybiBlbnRyeSB8IDB4ODAwMDAwMDA7IH0KKyAgICBpbmxpbmUgYm9v
bCBpc1JlYWRPbmx5Qml0U2V0KGludCBlbnRyeSkgeyByZXR1cm4gZW50cnkgJiAweDgwMDAwMDAw
OyB9CiAKICAgICBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHMgewogICAgICAgICB0
eXBlZGVmIGludCBUcmFpdFR5cGU7CiAgICAgICAgIHR5cGVkZWYgU3ltYm9sVGFibGVJbmRleEhh
c2hUcmFpdHMgU3RvcmFnZVRyYWl0czsKLSAgICAgICAgc3RhdGljIGludCBlbXB0eVZhbHVlKCkg
eyByZXR1cm4gbWlzc2luZ1N5bWJvbE1hcmtlcigpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGludCBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gMDsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc1JlZiA9IGZhbHNlOwog
ICAgIH07CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJ
KHJldmlzaW9uIDMyNjcyKQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcy
OCw4ICsxNzI4LDEyIEBAIFJlZ2lzdGVySUQqIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUK
ICAgICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVu
ZGVudCBleHByZXNzaW9ucyBoZXJlLCAKICAgICAvLyBhbmQgZW1pdCBhIFByZUluYyBpbnN0ZWFk
IG9mIGEgUG9zdEluYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKICAgICAvLyBjb2Rl
IHdvdWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3Iu
cmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBn
ZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJh
dG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwp
OworICAgICAgICAKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgfQogCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUFuZFByb3BlcnR5KGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIG1faWRlbnQpOwpAQCAtMTgwOCw4
ICsxODEyLDEyIEBAIFJlZ2lzdGVySUQqIFBvc3REZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUKICAg
ICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVu
dCBleHByZXNzaW9ucyBoZXJlLCAKICAgICAvLyBhbmQgZW1pdCBhIFByZURlYyBpbnN0ZWFkIG9m
IGEgUG9zdERlYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKICAgICAvLyBjb2RlIHdv
dWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVn
aXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5l
cmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwor
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUFuZFByb3BlcnR5KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIG1faWRlbnQpOwpAQCAtMjMyNiw2ICsy
MzM0LDExIEBAIEpTVmFsdWUqIFR5cGVPZlZhbHVlTm9kZTo6ZXZhbHVhdGUoT2xkSW4KIFJlZ2lz
dGVySUQqIFByZUluY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5l
cmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIDEuMCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCks
IGxvY2FsLCByMC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJlSW5jKGxvY2FsKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KQEAgLTIzOTEsNiArMjQwNCwxMSBA
QCBKU1ZhbHVlKiBQcmVJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoT2xkCiBSZWdpc3RlcklEKiBQ
cmVEZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJl
Z2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2Fs
Q29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCAtMS4w
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEFkZChyMC5nZXQoKSwgbG9jYWws
IHIwLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cmVEZWMobG9jYWwpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBsb2NhbCk7CiAgICAgfQpAQCAtNDEyNyw5ICs0MTQ1LDE0IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKIAogUmVnaXN0ZXJJRCogUmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKLSAgICBpZiAoUmVnaXN0ZXJJRCogZHN0ID0gZ2VuZXJhdG9yLnJlZ2lz
dGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5l
cmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCogc3Jj
MiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3JpZ2h0LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCBsb2NhbCwgc3JjMiwgbV9vcGVyYXRvcik7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdo
dC5nZXQoKSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNz
aWdubWVudChnZW5lcmF0b3IsIGRzdCwgZHN0LCBzcmMyLCBtX29wZXJhdG9yKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwg
bG9jYWwsIGxvY2FsLCBzcmMyLCBtX29wZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTQx
NTcsNiArNDE4MCw5IEBAIHZvaWQgUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpvcHRpbWl6ZVZhcmkK
IFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwg
PSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3JpZ2h0LmdldCgpKTsKKyAgICAgICAgCiAgICAgICAgIFJl
Z2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbCwgbV9yaWdodC5nZXQo
KSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHJlc3VsdCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20905</attachid>
            <date>2008-04-30 13:25:52 -0700</date>
            <delta_ts>2008-05-04 21:16:10 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>const.diff</filename>
            <type>text/plain</type>
            <size>23351</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzM2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMDgtMDQt
MzAgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE4NzQ5OiBTUVVJUlJF
TEZJU0g6IGNvbnN0IHN1cHBvcnQgaXMgYnJva2VuCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDk+CisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciBjb25zdCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uIGFuZCBhdCBydW50aW1lIGJ5IHRha2luZwor
ICAgICAgICBhIHNwYXJlIGJpdCBmcm9tIHRoZSBpbmRpY2VzIGluIFN5bWJvbFRhYmxlLgorCisg
ICAgICAgIEZpeGVzIDIgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogVk0vQ29kZUJsb2NrLmg6
CisgICAgICAgIChLSlM6Om1pc3NpbmdUaGlzVmFsdWVNYXJrZXIpOgorICAgICAgICAqIFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjphZGRWYXIpOgor
ICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVy
YXRvcjo6cmVnaXN0ZXJGb3JMb2NhbCk6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OnJl
Z2lzdGVyRm9yTG9jYWxDb25zdEluaXQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpp
c0xvY2FsQ29uc3RhbnQpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6
CisgICAgICAgICogVk0vQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjpJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAg
KEtKUzo6Q29kZUdlbmVyYXRvcjo6YWRkVmFyKToKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoK
KyAgICAgICAgKEtKUzo6TWFjaGluZTo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6Ok1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBranMvSlNHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoS0pTOjpKU0dsb2JhbE9iamVjdDo6c2F2ZUxvY2FsU3RvcmFnZSk6CisgICAgICAgIChL
SlM6OkpTR2xvYmFsT2JqZWN0OjpyZXN0b3JlTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBranMv
SlNWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTVmFyaWFibGVPYmplY3Q6Omdl
dFByb3BlcnR5QXR0cmlidXRlcyk6CisgICAgICAgICoga2pzL0pTVmFyaWFibGVPYmplY3QuaDoK
KyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChL
SlM6OkpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKEtKUzo6SlNW
YXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoS0pTOjpKU1ZhcmlhYmxl
T2JqZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBranMvU3lt
Ym9sVGFibGUuaDoKKyAgICAgICAgKEtKUzo6bWlzc2luZ1N5bWJvbE1hcmtlcik6CisgICAgICAg
IChLSlM6OmluZGV4VG9TeW1ib2xUYWJsZUVudHJ5KToKKyAgICAgICAgKEtKUzo6c3ltYm9sVGFi
bGVFbnRyeVRvSW5kZXgpOgorICAgICAgICAoS0pTOjppc1JlYWRPbmx5Qml0U2V0KToKKyAgICAg
ICAgKEtKUzo6U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAg
ICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OlBvc3RJbmNSZXNvbHZlTm9kZTo6ZW1p
dENvZGUpOgorICAgICAgICAoS0pTOjpQb3N0RGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAg
ICAgICAgKEtKUzo6UHJlSW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6
UHJlRGVjUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6UmVhZE1vZGlmeVJl
c29sdmVOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OkFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Q29kZSk6CisKIDIwMDgtMDQtMjkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWouCkluZGV4OiBWTS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBWTS9Db2RlQmxvY2suaAkocmV2aXNpb24gMzI3MTgpCisrKyBWTS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgaW50IGxpbmVOdW1iZXI7CiAgICAgfTsKIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGludCBtaXNzaW5nVGhpc1ZhbHVlTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsgfQorCiAgICAgc3RydWN0IENvZGVCbG9jayB7CiAgICAgICAgIENvZGVC
bG9jayhjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkxfLCBib29sIHVzZXNFdmFsXywgYm9vbCBuZWVk
c0Nsb3N1cmVfLCBDb2RlVHlwZSBjb2RlVHlwZV8gPSBGdW5jdGlvbkNvZGUpCiAgICAgICAgICAg
ICA6IHNvdXJjZVVSTChzb3VyY2VVUkxfKQpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVk0vQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDMyNzE4KQorKysgVk0v
Q29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywxMyArMTM3LDEzIEBAIHZv
aWQgQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogI2VuZGlmCiB9CiAKLWJvb2wgQ29kZUdlbmVy
YXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBSZWdpc3RlcklEKiYgcjApCiti
b29sIENvZGVHZW5lcmF0b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgUmVnaXN0
ZXJJRComIHIwLCBib29sIGlzQ29uc3RhbnQpCiB7CiAgICAgaW50IGluZGV4ID0gbV9uZXh0VmFy
OwotICAgIHBhaXI8U3ltYm9sVGFibGU6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBzeW1ib2xU
YWJsZSgpLmFkZChpZGVudC51c3RyaW5nKCkucmVwKCksIGluZGV4KTsKKyAgICBwYWlyPFN5bWJv
bFRhYmxlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQu
dXN0cmluZygpLnJlcCgpLCBpbmRleFRvU3ltYm9sVGFibGVFbnRyeShpbmRleCwgaXNDb25zdGFu
dCkpOwogCiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICBpbmRleCA9IHJlc3VsdC5m
aXJzdC0+c2Vjb25kOworICAgICAgICBpbmRleCA9IHN5bWJvbFRhYmxlRW50cnlUb0luZGV4KHJl
c3VsdC5maXJzdC0+c2Vjb25kKTsKICAgICBlbHNlIHsKICAgICAgICAgLS1tX25leHRWYXI7CiAg
ICAgICAgICsrbV9jb2RlQmxvY2stPm51bVZhcnM7CkBAIC0xNzUsMTMgKzE3NSwxNSBAQCBDb2Rl
R2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlCiAgICAgICAgIC8vIEFkZCBwcmV2
aW91c2x5IGRlZmluZWQgc3ltYm9scyB0byBib29ra2VlcGluZy4KICAgICAgICAgbV9sb2NhbHMu
cmVzaXplKHNpemUpOwogICAgICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gc3ltYm9s
VGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdCA9IHN5
bWJvbFRhYmxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX2xvY2Fs
c1tsb2NhbHNJbmRleChpdC0+c2Vjb25kKV0uc2V0SW5kZXgoaXQtPnNlY29uZCk7CisgICAgICAg
IGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ID0gc3ltYm9sVGFibGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGVFbnRy
eVRvSW5kZXgoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBtX2xvY2Fsc1tsb2NhbHNJbmRleChp
bmRleCldLnNldEluZGV4KGluZGV4KTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFNoaWZ0IG5l
dyBzeW1ib2xzIHNvIHRoZXkgZ2V0IHN0b3JlZCBwcmlvciB0byBwcmV2aW91c2x5IGRlZmluZWQg
c3ltYm9scy4KICAgICAgICAgbV9uZXh0VmFyIC09IHNpemU7CiAgICAgfSBlbHNlCi0gICAgICAg
IGFkZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsgLy8gTm8gbmVlZCB0byBt
YWtlICJ0aGlzIiBhIHRydWUgcGFyYW1ldGVyLCBzaW5jZSBpdCdzIG5vdCBwYXNzZWQgYnkgb3Vy
IGNhbGxlci4KKyAgICAgICAgYWRkVmFyKG1fcHJvcGVydHlOYW1lcy0+dGhpc0lkZW50aWZpZXIs
IGZhbHNlKTsgLy8gTm8gbmVlZCB0byBtYWtlICJ0aGlzIiBhIHRydWUgcGFyYW1ldGVyLCBzaW5j
ZSBpdCdzIG5vdCBwYXNzZWQgYnkgb3VyIGNhbGxlci4KIAogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHNjb3BlQ2hhaW4uYm90
dG9tKCkpOwogICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwpAQCAt
MTkyLDEyICsxOTQsMTIgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9k
ZQogICAgIGlmIChjYW5DcmVhdGVWYXJpYWJsZXMpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBGdW5jRGVj
bE5vZGUqIGZ1bmNEZWNsID0gZnVuY3Rpb25TdGFja1tpXTsKLSAgICAgICAgICAgIGVtaXROZXdG
dW5jdGlvbihhZGRWYXIoZnVuY0RlY2wtPm1faWRlbnQpLCBmdW5jRGVjbCk7CisgICAgICAgICAg
ICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGZ1bmNEZWNsLT5tX2lkZW50LCBmYWxzZSksIGZ1bmNE
ZWNsKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YXJTdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
Pmhhc1Byb3BlcnR5KCZ0bXBFeGVjLCB2YXJTdGFja1tpXS5maXJzdCkpCi0gICAgICAgICAgICAg
ICAgZW1pdExvYWQoYWRkVmFyKHZhclN0YWNrW2ldLmZpcnN0KSwganNVbmRlZmluZWQoKSk7Cisg
ICAgICAgICAgICAgICAgZW1pdExvYWQoYWRkVmFyKHZhclN0YWNrW2ldLmZpcnN0LCB2YXJTdGFj
a1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCksIGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CkBAIC0yMzIsNyArMjM0LDcgQEAgQ29k
ZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGZ1bmNEZWNsLT5tX2lkZW50OwogICAgICAgICAKICAgICAgICAgbV9m
dW5jdGlvbnMuYWRkKGlkZW50LnVzdHJpbmcoKS5yZXAoKSk7Ci0gICAgICAgIGVtaXROZXdGdW5j
dGlvbihhZGRWYXIoaWRlbnQpLCBmdW5jRGVjbCk7CisgICAgICAgIGVtaXROZXdGdW5jdGlvbihh
ZGRWYXIoaWRlbnQsIGZhbHNlKSwgZnVuY0RlY2wpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTI0MSw3ICsyNDMsNyBAQCBD
b2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHIwOwotICAgICAgICBpZiAoYWRk
VmFyKGlkZW50LCByMCkpCisgICAgICAgIGlmIChhZGRWYXIoaWRlbnQsIHIwLCB2YXJTdGFja1tp
XS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkpCiAgICAgICAgICAgICBl
bWl0TG9hZChyMCwganNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0yNjYsNyArMjY4LDcgQEAg
Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihFdmFsTm9kZSogZQogICAgICwgbV9uZXh0VmFy
KC0xKQogICAgICwgbV9wcm9wZXJ0eU5hbWVzKENvbW1vbklkZW50aWZpZXJzOjpzaGFyZWQoKSkK
IHsKLSAgICBhZGRWYXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7CisgICAgYWRk
VmFyKG1fcHJvcGVydHlOYW1lcy0+dGhpc0lkZW50aWZpZXIsIGZhbHNlKTsKICAgICAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICBjb2Rl
QmxvY2stPmRlY2xhcmVkVmFyaWFibGVOYW1lcy5hcHBlbmQodmFyU3RhY2tbaV0uZmlyc3QpOwpA
QCAtMjg3LDcgKzI4OSw3IEBAIHZvaWQgQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0
IEkKICAgICAvLyBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgIFVTdHJpbmc6OlJlcCogcmVwID0g
aWRlbnQudXN0cmluZygpLnJlcCgpOwogICAgIGlmICghbV9mdW5jdGlvbnMuY29udGFpbnMocmVw
KSkgewotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChyZXAsIG1fbmV4dFBhcmFtZXRlcik7Cisg
ICAgICAgIHN5bWJvbFRhYmxlKCkuc2V0KHJlcCwgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkobV9u
ZXh0UGFyYW1ldGVyLCBmYWxzZSkpOwogICAgICAgICBtX2xvY2Fsc1tsb2NhbHNJbmRleChtX25l
eHRQYXJhbWV0ZXIpXS5zZXRJbmRleChtX25leHRQYXJhbWV0ZXIpOwogICAgIH0KICAgICAKQEAg
LTMwNSwxMSArMzA3LDExIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9y
TG8KICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkgJiYgaWRlbnQgIT0gbV9wcm9wZXJ0
eU5hbWVzLT50aGlzSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgaW5k
ZXggPSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpOwotICAgIGlmIChp
bmRleCA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCisgICAgaW50IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5nZXQoaWRlbnQudXN0cmluZygpLnJlcCgpKTsKKyAgICBpZiAoZW50cnkgPT0gbWlzc2lu
Z1N5bWJvbE1hcmtlcigpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiAmbV9sb2Nh
bHNbbG9jYWxzSW5kZXgoaW5kZXgpXTsKKyAgICByZXR1cm4gJm1fbG9jYWxzW2xvY2Fsc0luZGV4
KHN5bWJvbFRhYmxlRW50cnlUb0luZGV4KGVudHJ5KSldOwogfQogCiBSZWdpc3RlcklEKiBDb2Rl
R2VuZXJhdG9yOjpyZWdpc3RlckZvckxvY2FsQ29uc3RJbml0KGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQpAQCAtMzE3LDEwICszMTksMTUgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6cmVn
aXN0ZXJGb3JMbwogICAgIGlmIChtX2NvZGVUeXBlID09IEV2YWxDb2RlKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKLSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC51c3Ry
aW5nKCkucmVwKCkpOwotICAgIEFTU0VSVChpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkp
OworICAgIGludCBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KGlkZW50LnVzdHJpbmcoKS5yZXAo
KSk7CisgICAgQVNTRVJUKGVudHJ5ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7CiAgICAgCi0g
ICAgcmV0dXJuICZtX2xvY2Fsc1tsb2NhbHNJbmRleChpbmRleCldOworICAgIHJldHVybiAmbV9s
b2NhbHNbbG9jYWxzSW5kZXgoc3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoZW50cnkpKV07Cit9CisK
K2Jvb2wgQ29kZUdlbmVyYXRvcjo6aXNMb2NhbENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQoreworICAgIHJldHVybiBpc1JlYWRPbmx5Qml0U2V0KHN5bWJvbFRhYmxlKCkuZ2V0KGlk
ZW50LnVzdHJpbmcoKS5yZXAoKSkpOwogfQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpu
ZXdUZW1wb3JhcnkoKQpAQCAtODU5LDcgKzg2Niw3IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXRDYWxsKE9wY28KICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdl
dE9wY29kZShvcGNvZGVJRCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyMC0+aW5kZXgo
KSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIxLT5pbmRleCgpKTsKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocjIgPyByMi0+aW5kZXgoKSA6IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSk7
IC8vIFdlIGVuY29kZSB0aGUgInRoaXMiIHZhbHVlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0s
IHRvIGF2b2lkIGFuIGV4cGxpY2l0IGluc3RydWN0aW9uIGZvciBjb3B5aW5nIG9yIGxvYWRpbmcg
aXQuCisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5n
VGhpc1ZhbHVlTWFya2VyKCkpOyAvLyBXZSBlbmNvZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUg
aW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBhbiBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3Ig
Y29weWluZyBvciBsb2FkaW5nIGl0LgogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNp
emUoKSA/IGFyZ3ZbMF0tPmluZGV4KCkgOiBtX3RlbXBvcmFyaWVzLnNpemUoKSk7IC8vIGFyZ3YK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkpOyAvLyBhcmdjCiAKSW5kZXg6
IFZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDMyNzE4KQorKysgVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAvLyBkeW5hbWljIHNjb3BlIHNo
b3VsZCBub3QgaW50ZXJmZXJlIHdpdGggY29uc3QgaW5pdGlhbGlzYXRpb24KICAgICAgICAgUmVn
aXN0ZXJJRCogcmVnaXN0ZXJGb3JMb2NhbENvbnN0SW5pdChjb25zdCBJZGVudGlmaWVyJik7CiAK
KyAgICAgICAgYm9vbCBpc0xvY2FsQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOworCiAgICAg
ICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVn
aXN0ZXJzIHJldHVybmVkIGJ5CiAgICAgICAgIC8vIG5ld1RlbXBvcmFyeSByZXF1aXJlIGEgbW9k
aWZpZWQgZm9ybSBvZiByZWZlcmVuY2UgY291bnRpbmc6IGFueQogICAgICAgICAvLyByZWdpc3Rl
ciB3aXRoIGEgcmVmY291bnQgb2YgMCBpcyBjb25zaWRlcmVkICJhdmFpbGFibGUiLCBtZWFuaW5n
IHRoYXQKQEAgLTI1Miw2ICsyNTQsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIH07CiAK
ICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTVmFsdWUqLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8
SlNWYWx1ZSo+OjpIYXNoLCBKU1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKKworICAgICAg
ICBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyB7CisgICAgICAgICAgICB0eXBl
ZGVmIGludCBUcmFpdFR5cGU7CisgICAgICAgICAgICB0eXBlZGVmIFN5bWJvbFRhYmxlSW5kZXhI
YXNoVHJhaXRzIFN0b3JhZ2VUcmFpdHM7CisgICAgICAgICAgICBzdGF0aWMgaW50IGVtcHR5VmFs
dWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc1JlZiA9IGZhbHNlOworICAgICAgICB9OworCisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgaW50LCBJZGVudGlm
aWVyUmVwSGFzaCwgSWRlbnRpZmllclJlcEhhc2hUcmFpdHMsIElkZW50aWZpZXJNYXBJbmRleEhh
c2hUcmFpdHM+IElkZW50aWZpZXJNYXA7CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwg
QXJndW1lbnRzTm9kZSopOwogCkBAIC0yNTksMTUgKzI3MiwxNSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgaW50IGxvY2Fsc0luZGV4KGludCByZWdpc3RlckluZGV4KSB7IHJldHVybiAtcmVn
aXN0ZXJJbmRleCAtIDE7IH0KICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgdGhlIFJlZ2lz
dGVySUQgY29ycmVzcG9uZGluZyB0byBpZGVudC4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFy
KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCkKICAgICAgICAgewogICAgICAg
ICAgICAgUmVnaXN0ZXJJRCogcjA7Ci0gICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHIwKTsKKyAg
ICAgICAgICAgIGFkZFZhcihpZGVudCwgcjAsIGlzQ29uc3RhbnQpOwogICAgICAgICAgICAgcmV0
dXJuIHIwOwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgbmV3IFJl
Z2lzdGVySUQgd2FzIGFkZGVkLCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBSZWdpc3RlcklEIHdh
cyByZS11c2VkLgotICAgICAgICBib29sIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0
ZXJJRComKTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVy
SUQqJiwgYm9vbCBpc0NvbnN0YW50KTsKIAogICAgICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25z
dCBJZGVudGlmaWVyJik7CiAKQEAgLTMwNSw3ICszMTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgaW50IG1fbmV4dFBhcmFtZXRlcjsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sCi0g
ICAgICAgIFN5bWJvbFRhYmxlIG1faWRlbnRpZmllck1hcDsKKyAgICAgICAgSWRlbnRpZmllck1h
cCBtX2lkZW50aWZpZXJNYXA7CiAgICAgICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwogCiAg
ICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBtX3Byb3BlcnR5TmFtZXM7CkluZGV4OiBWTS9NYWNo
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzI3MTgpCisr
KyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU4LDcgKzU1OCw3IEBAIEpTVmFs
dWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHAKICAgICByZWdpc3RlckZpbGUtPnVu
Y2hlY2tlZEdyb3coY29kZUJsb2NrLT5udW1UZW1wb3Jhcmllcyk7CiAgICAgUmVnaXN0ZXIqIHIg
PSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSk7CiAKLSAgICBBU1NFUlQoZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLT5zeW1ib2xUYWJsZSgpLmdldChDb21tb25JZGVudGlmaWVyczo6
c2hhcmVkKCktPnRoaXNJZGVudGlmaWVyLnVzdHJpbmcoKS5yZXAoKSkgPT0gUHJvZ3JhbUNvZGVU
aGlzUmVnaXN0ZXIpOworICAgIEFTU0VSVChzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPnN5bWJvbFRhYmxlKCkuZ2V0KENvbW1vbklkZW50aWZpZXJz
OjpzaGFyZWQoKS0+dGhpc0lkZW50aWZpZXIudXN0cmluZygpLnJlcCgpKSkgPT0gUHJvZ3JhbUNv
ZGVUaGlzUmVnaXN0ZXIpOwogICAgIHJbUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXJdLnUuanNWYWx1
ZSA9IHRoaXNPYmo7CiAgICAgCiAgICAgaWYgKGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bikKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRl
KEV4ZWN1dGkKICAgICAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUgPSByICsgYXJndiAtIENh
bGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgICAgICBpbnQgY2FsbEZyYW1lT2Zmc2V0ID0gcmVn
aXN0ZXJPZmZzZXQgKyBhcmd2IC0gQ2FsbEZyYW1lSGVhZGVyU2l6ZTsKIAotICAgICAgICAgICAg
clthcmd2XS51LmpzVmFsdWUgPSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBleGVjLT5n
bG9iYWxUaGlzVmFsdWUoKSA6IHJbcjJdLnUuanNWYWx1ZTsgLy8gInRoaXMiIHZhbHVlCisgICAg
ICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1pc3NpbmdUaGlzVmFsdWVNYXJrZXIo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogcltyMl0udS5qc1ZhbHVlOyAvLyAidGhpcyIg
dmFsdWUKICAgICAgICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUoY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIHZQQywgc2NvcGVDaGFpbiwgcmVnaXN0ZXJPZmZzZXQsIHIwLCBhcmd2LCBhcmdjLCAwLCB2
KTsKIAogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNh
bGxEYXRhLmpzLnNjb3BlQ2hhaW47CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5hdGl2ZSkgewogICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVn
aXN0ZXJCYXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUg
PSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSA6
IChyW3IyXS51LmpzVmFsdWUpLT50b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCisgICAg
ICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1pc3NpbmdUaGlzVmFsdWVNYXJrZXIo
KSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0
KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2FyZ3ZdLnUuanNWYWx1ZSk7CiAKICAgICAgICAgICAg
IExpc3QgYXJncygmclthcmd2ICsgMV0udS5qc1ZhbHVlLCBhcmdjIC0gMSk7CkluZGV4OiBranMv
SlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDMyNzE4KQorKysga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNhdmVMb2NhbFN0b3Jh
Z2UoU2EKICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAgICAgIGlmIChp
c0RvbnRFbnVtKGl0LT5zZWNvbmQpKQogICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBEb250RW51
bTsKLSAgICAgICAgcC5wcm9wZXJ0aWVzW2ldLmluaXQoaXQtPmZpcnN0LmdldCgpLCB2YWx1ZUF0
KGl0LT5zZWNvbmQpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgcC5wcm9wZXJ0aWVzW2ldLmluaXQo
aXQtPmZpcnN0LmdldCgpLCB2YWx1ZUF0KHN5bWJvbFRhYmxlRW50cnlUb0luZGV4KGl0LT5zZWNv
bmQpKSwgYXR0cmlidXRlcyk7CiAgICAgfQogfQogCkBAIC0xNjcsMTAgKzE2NywxMCBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXN0b3JlTG9jYWxTdG9yYWdlCiAgICAgU2F2ZWRQcm9wZXJ0eSog
cHJvcGVydHkgPSBwLnByb3BlcnRpZXMuZ2V0KCk7CiAgICAgZm9yIChpbnQgaSA9IC1jb3VudDsg
aSA8IDA7ICsraSwgKytwcm9wZXJ0eSkgewogICAgICAgICBBU1NFUlQoIXN5bWJvbFRhYmxlKCku
Y29udGFpbnMocHJvcGVydHktPm5hbWUoKSkpOwotICAgICAgICBzeW1ib2xUYWJsZSgpLnNldChw
cm9wZXJ0eS0+bmFtZSgpLCBpKTsKKyAgICAgICAgc3ltYm9sVGFibGUoKS5zZXQocHJvcGVydHkt
Pm5hbWUoKSwgaW5kZXhUb1N5bWJvbFRhYmxlRW50cnkoaSwgcHJvcGVydHktPmF0dHJpYnV0ZXMo
KSAmIFJlYWRPbmx5KSk7CiAgICAgICAgIHZhbHVlQXQoaSkgPSBwcm9wZXJ0eS0+dmFsdWUoKTsK
ICAgICAgICAgLy8gRklYTUU6IEZldGNoIGF0dHJpYnV0ZXMgZnJvbSB0aGUgU2F2ZWRQcm9wZXJ0
eSBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICBBU1NFUlQocHJv
cGVydHktPmF0dHJpYnV0ZXMoKSAmIFJlYWRPbmx5ID09IDAgJiYgcHJvcGVydHktPmF0dHJpYnV0
ZXMoKSAmIERvbnRFbnVtID09IDApOworICAgICAgICBBU1NFUlQocHJvcGVydHktPmF0dHJpYnV0
ZXMoKSAmIERvbnRFbnVtID09IDApOwogICAgIH0KIH0KIApJbmRleDoga2pzL0pTVmFyaWFibGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNp
b24gMzI3MTgpCisrKyBranMvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDEyICs1NywxMiBAQCB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMo
CiAKIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6Z2V0UHJvcGVydHlBdHRyaWJ1dGVzKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiB7Ci0g
ICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmcoKS5y
ZXAoKSk7Ci0gICAgaWYgKGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgeworICAgIGlu
dCBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCkp
OworICAgIGlmIChlbnRyeSAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsKICAgICAgICAgYXR0
cmlidXRlcyA9IDA7Ci0gICAgICAgIGlmIChpc1JlYWRPbmx5KGluZGV4KSkKKyAgICAgICAgaWYg
KGlzUmVhZE9ubHkoZW50cnkpKQogICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBSZWFkT25seTsK
LSAgICAgICAgaWYgKGlzRG9udEVudW0oaW5kZXgpKQorICAgICAgICBpZiAoaXNEb250RW51bShl
bnRyeSkpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IERvbnRFbnVtOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBranMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDMyNzE4KQorKysga2pzL0pTVmFy
aWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4g
KmQtPnN5bWJvbFRhYmxlOyB9CiAKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGVzZSBj
aGVja3MgZm9yIHJlYWwgYnkgc3RvcmluZyBwcm9wZXJ0eSBhdHRyaWJ1dGVzIGluIHRoZSBzeW1i
b2wgdGFibGUuCi0gICAgICAgIGJvb2wgaXNSZWFkT25seShpbnQpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIGJvb2wgaXNSZWFkT25seShpbnQgZW50cnkpIGNvbnN0IHsgcmV0dXJu
IGlzUmVhZE9ubHlCaXRTZXQoZW50cnkpOyB9CiAgICAgICAgIGJvb2wgaXNEb250RW51bShpbnQp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHNhdmVMb2Nh
bFN0b3JhZ2UoU2F2ZWRQcm9wZXJ0aWVzJikgY29uc3Q7CkBAIC0xMDMsOSArMTAzLDkgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xU
YWJsZUdldChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5
TmFtZS51c3RyaW5nKCkucmVwKCkpOwotICAgICAgICBpZiAoaW5kZXggIT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCAmdmFsdWVB
dChpbmRleCkpOworICAgICAgICBpbnQgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0
eU5hbWUudXN0cmluZygpLnJlcCgpKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IG1pc3NpbmdTeW1i
b2xNYXJrZXIoKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJnZhbHVl
QXQoc3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoZW50cnkpKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTMsMjUgKzExMywy
NSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6
OnN5bWJvbFRhYmxlUHV0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLmdldChwcm9w
ZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpKTsKLSAgICAgICAgaWYgKGluZGV4ID09IG1pc3NpbmdT
eW1ib2xNYXJrZXIoKSkKKyAgICAgICAgaW50IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJv
cGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKSk7CisgICAgICAgIGlmIChlbnRyeSA9PSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChp
c1JlYWRPbmx5KGluZGV4KSkKKyAgICAgICAgaWYgKGlzUmVhZE9ubHkoZW50cnkpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHZhbHVlQXQoaW5kZXgpID0gdmFsdWU7CisgICAg
ICAgIHZhbHVlQXQoc3ltYm9sVGFibGVFbnRyeVRvSW5kZXgoZW50cnkpKSA9IHZhbHVlOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2Jq
ZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgewotICAg
ICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eU5hbWUudXN0cmluZygp
LnJlcCgpKTsKLSAgICAgICAgaWYgKGluZGV4ID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKKyAg
ICAgICAgaW50IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHlOYW1lLnVzdHJpbmco
KS5yZXAoKSk7CisgICAgICAgIGlmIChlbnRyeSA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYXR0
cmlidXRlIHN1cHBvcnQgYnkgc3RvcmluZyBhdHRyaWJ1dGVzIGluIHRoZSBzeW1ib2wgdGFibGUu
CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUmVhZE9ubHkgPT0gMCk7CiAgICAgICAgIEFT
U0VSVChhdHRyaWJ1dGVzICYgRG9udEVudW0gPT0gMCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShh
dHRyaWJ1dGVzKTsKLSAgICAgICAgdmFsdWVBdChpbmRleCkgPSB2YWx1ZTsKKyAgICAgICAgdmFs
dWVBdChzeW1ib2xUYWJsZUVudHJ5VG9JbmRleChlbnRyeSkpID0gdmFsdWU7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApJbmRleDoga2pzL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2pzL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDMyNzE4KQorKysga2pzL1N5bWJvbFRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgc3RhdGljIFVTdHJpbmc6OlJlcCogbnVsbFJlcFB0cjsKICAgICB9OwogCi0gICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CisgICAgaW5saW5lIGludCBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkgeyByZXR1cm4gMDsgfQorCisgICAgaW5saW5lIGludCBpbmRleFRvU3ltYm9s
VGFibGVFbnRyeShpbnQgaW5kZXgsIGJvb2wgaXNSZWFkT25seSkgeyByZXR1cm4gaXNSZWFkT25s
eSA/IGluZGV4IDogaW5kZXggJiB+MHg4MDAwMDAwMDsgfQorICAgIGlubGluZSBpbnQgc3ltYm9s
VGFibGVFbnRyeVRvSW5kZXgoaW50IGVudHJ5KSB7IHJldHVybiBlbnRyeSB8IDB4ODAwMDAwMDA7
IH0KKyAgICBpbmxpbmUgYm9vbCBpc1JlYWRPbmx5Qml0U2V0KGludCBlbnRyeSkgeyByZXR1cm4g
ZW50cnkgJiAweDgwMDAwMDAwOyB9CiAKICAgICBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRleEhhc2hU
cmFpdHMgewogICAgICAgICB0eXBlZGVmIGludCBUcmFpdFR5cGU7CiAgICAgICAgIHR5cGVkZWYg
U3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHMgU3RvcmFnZVRyYWl0czsKLSAgICAgICAgc3RhdGlj
IGludCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gbWlzc2luZ1N5bWJvbE1hcmtlcigpOyB9Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAg
c3RhdGljIGludCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc1JlZiA9IGZhbHNlOwogICAgIH07CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDMyNzE4KQorKysga2pzL25vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcyOCw4ICsxNzI4LDEyIEBAIFJlZ2lzdGVySUQqIFBvc3RJbmNSZXNv
bHZlTm9kZTo6ZW1pdENvZGUKICAgICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRo
ZSBhYnNlbnNlIG9mIGRlcGVuZGVudCBleHByZXNzaW9ucyBoZXJlLCAKICAgICAvLyBhbmQgZW1p
dCBhIFByZUluYyBpbnN0ZWFkIG9mIGEgUG9zdEluYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRl
IGRlYWQKICAgICAvLyBjb2RlIHdvdWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCog
bG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICBpZiAoUmVn
aXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgewor
ICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgbG9jYWwpOworICAgICAgICAKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UG9zdEluYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAg
fQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
QmFzZUFuZFByb3BlcnR5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIG1f
aWRlbnQpOwpAQCAtMTgwOCw4ICsxODEyLDEyIEBAIFJlZ2lzdGVySUQqIFBvc3REZWNSZXNvbHZl
Tm9kZTo6ZW1pdENvZGUKICAgICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBh
YnNlbnNlIG9mIGRlcGVuZGVudCBleHByZXNzaW9ucyBoZXJlLCAKICAgICAvLyBhbmQgZW1pdCBh
IFByZURlYyBpbnN0ZWFkIG9mIGEgUG9zdERlYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRl
YWQKICAgICAvLyBjb2RlIHdvdWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9j
YWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAg
ICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KSwgbG9jYWwpOworICAgICAgICAKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgfQog
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFz
ZUFuZFByb3BlcnR5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCksIG1faWRl
bnQpOwpAQCAtMjMyNiw2ICsyMzM0LDExIEBAIEpTVmFsdWUqIFR5cGVPZlZhbHVlTm9kZTo6ZXZh
bHVhdGUoT2xkSW4KIFJlZ2lzdGVySUQqIFByZUluY1Jlc29sdmVOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAg
ICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgeworICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIDEuMCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlSW5jKGxvY2FsKTsKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOwogICAgIH0KQEAg
LTIzOTEsNiArMjQwNCwxMSBAQCBKU1ZhbHVlKiBQcmVJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUo
T2xkCiBSZWdpc3RlcklEKiBQcmVEZWNSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxv
Y2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYg
KGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCAtMS4wKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEFk
ZChyMC5nZXQoKSwgbG9jYWwsIHIwLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcmVEZWMobG9jYWwpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
Lm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbCk7CiAgICAgfQpAQCAtNDEyNyw5
ICs0MTQ1LDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKIAog
UmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBpZiAoUmVnaXN0ZXJJRCogZHN0
ID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICBpZiAoUmVnaXN0
ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAg
ICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkgeworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3JpZ2h0LmdldCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCwgc3JjMiwgbV9vcGVyYXRvcik7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9
IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGRzdCwgZHN0LCBzcmMyLCBtX29w
ZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3Np
Z25tZW50KGdlbmVyYXRvciwgbG9jYWwsIGxvY2FsLCBzcmMyLCBtX29wZXJhdG9yKTsKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0
KTsKICAgICB9CiAKQEAgLTQxNTcsNiArNDE4MCw5IEBAIHZvaWQgUmVhZE1vZGlmeVJlc29sdmVO
b2RlOjpvcHRpbWl6ZVZhcmkKIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAo
UmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkg
eworICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3JpZ2h0LmdldCgpKTsKKyAg
ICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShs
b2NhbCwgbV9yaWdodC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20964</attachid>
            <date>2008-05-04 21:16:10 -0700</date>
            <delta_ts>2008-05-05 00:26:29 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>const.diff</filename>
            <type>text/plain</type>
            <size>10149</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyODU5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDgtMDUt
MDQgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE4NzQ5OiBTUVVJUlJF
TEZJU0g6IGNvbnN0IHN1cHBvcnQgaXMgYnJva2VuCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDk+CisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZv
ciBjb25zdCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgorCisgICAgICAgIEZpeGVzIDIgbGF5b3V0
IHRlc3RzLgorCisgICAgICAgICogVk0vQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChLSlM6
OkNvZGVHZW5lcmF0b3I6OmFkZFZhcik6CisgICAgICAgIChLSlM6OkNvZGVHZW5lcmF0b3I6OkNv
ZGVHZW5lcmF0b3IpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjppc0xvY2FsQ29uc3Rh
bnQpOgorICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEtKUzo6Q29kZUdl
bmVyYXRvcjo6YWRkVmFyKToKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoS0pT
OjpQb3N0SW5jUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6UG9zdERlY1Jl
c29sdmVOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OlByZUluY1Jlc29sdmVOb2RlOjpl
bWl0Q29kZSk6CisgICAgICAgIChLSlM6OlByZURlY1Jlc29sdmVOb2RlOjplbWl0Q29kZSk6Cisg
ICAgICAgIChLSlM6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAo
S0pTOjpBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorCiAyMDA4LTA1LTA0ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCklu
ZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMzI4NTkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDEwICsxMzYsMTEgQEAgdm9pZCBDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgp
CiAjZW5kaWYKIH0KIAotYm9vbCBDb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIFJlZ2lzdGVySUQqJiByMCkKK2Jvb2wgQ29kZUdlbmVyYXRvcjo6YWRkVmFyKGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBSZWdpc3RlcklEKiYgcjAsIGJvb2wgaXNDb25zdGFudCkK
IHsKICAgICBpbnQgaW5kZXggPSBtX25leHRWYXI7Ci0gICAgcGFpcjxTeW1ib2xUYWJsZTo6aXRl
cmF0b3IsIGJvb2w+IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LnVzdHJpbmcoKS5y
ZXAoKSwgaW5kZXgpOworICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIGlzQ29u
c3RhbnQgPyBSZWFkT25seSA6IDApOworICAgIHBhaXI8U3ltYm9sVGFibGU6Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC51c3RyaW5nKCkucmVwKCksIG5l
d0VudHJ5KTsKIAogICAgIGlmICghcmVzdWx0LnNlY29uZCkKICAgICAgICAgaW5kZXggPSByZXN1
bHQuZmlyc3QtPnNlY29uZC5pbmRleDsKQEAgLTE4MCw3ICsxODEsNyBAQCBDb2RlR2VuZXJhdG9y
OjpDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlCiAgICAgICAgIC8vIFNoaWZ0IG5ldyBzeW1ib2xz
IHNvIHRoZXkgZ2V0IHN0b3JlZCBwcmlvciB0byBwcmV2aW91c2x5IGRlZmluZWQgc3ltYm9scy4K
ICAgICAgICAgbV9uZXh0VmFyIC09IHNpemU7CiAgICAgfSBlbHNlCi0gICAgICAgIGFkZFZhciht
X3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsgLy8gTm8gbmVlZCB0byBtYWtlICJ0aGlz
IiBhIHRydWUgcGFyYW1ldGVyLCBzaW5jZSBpdCdzIG5vdCBwYXNzZWQgYnkgb3VyIGNhbGxlci4K
KyAgICAgICAgYWRkVmFyKG1fcHJvcGVydHlOYW1lcy0+dGhpc0lkZW50aWZpZXIsIGZhbHNlKTsg
Ly8gTm8gbmVlZCB0byBtYWtlICJ0aGlzIiBhIHRydWUgcGFyYW1ldGVyLCBzaW5jZSBpdCdzIG5v
dCBwYXNzZWQgYnkgb3VyIGNhbGxlci4KIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHNjb3BlQ2hhaW4uYm90dG9tKCkpOwog
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwpAQCAtMTkwLDEyICsx
OTEsMTIgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZQogICAgIGlm
IChjYW5DcmVhdGVWYXJpYWJsZXMpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1
bmNEZWNsID0gZnVuY3Rpb25TdGFja1tpXTsKLSAgICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihh
ZGRWYXIoZnVuY0RlY2wtPm1faWRlbnQpLCBmdW5jRGVjbCk7CisgICAgICAgICAgICBlbWl0TmV3
RnVuY3Rpb24oYWRkVmFyKGZ1bmNEZWNsLT5tX2lkZW50LCBmYWxzZSksIGZ1bmNEZWNsKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFj
ay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIHZhclN0YWNrW2ldLmZpcnN0KSkKLSAgICAgICAgICAgICAgICBlbWl0TG9hZChh
ZGRWYXIodmFyU3RhY2tbaV0uZmlyc3QpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0TG9hZChhZGRWYXIodmFyU3RhY2tbaV0uZmlyc3QsIHZhclN0YWNrW2ldLnNlY29uZCAm
IERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSwganNVbmRlZmluZWQoKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9u
U3RhY2suc2l6ZSgpOyArK2kpIHsKQEAgLTIzMCw3ICsyMzEsNyBAQCBDb2RlR2VuZXJhdG9yOjpD
b2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gZnVuY0RlY2wtPm1faWRlbnQ7CiAgICAgICAgIAogICAgICAgICBtX2Z1bmN0aW9ucy5hZGQo
aWRlbnQudXN0cmluZygpLnJlcCgpKTsKLSAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihp
ZGVudCksIGZ1bmNEZWNsKTsKKyAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwg
ZmFsc2UpLCBmdW5jRGVjbCk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YXJTdGFjay5zaXplKCk7ICsraSkgewpAQCAtMjM5LDcgKzI0MCw3IEBAIENvZGVHZW5lcmF0b3I6
OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgUmVnaXN0ZXJJRCogcjA7Ci0gICAgICAgIGlmIChhZGRWYXIoaWRlbnQsIHIw
KSkKKyAgICAgICAgaWYgKGFkZFZhcihpZGVudCwgcjAsIHZhclN0YWNrW2ldLnNlY29uZCAmIERl
Y2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSkKICAgICAgICAgICAgIGVtaXRMb2FkKHIwLCBq
c1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTI2NCw3ICsyNjUsNyBAQCBDb2RlR2VuZXJhdG9y
OjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBlCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBt
X3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewotICAgIGFkZFZh
cihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKKyAgICBhZGRWYXIobV9wcm9wZXJ0
eU5hbWVzLT50aGlzSWRlbnRpZmllciwgZmFsc2UpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFyU3RhY2suc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvZGVCbG9jay0+ZGVjbGFy
ZWRWYXJpYWJsZU5hbWVzLmFwcGVuZCh2YXJTdGFja1tpXS5maXJzdCk7CkBAIC0zMTgsNiArMzE5
LDExIEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OnJlZ2lzdGVyRm9yTG8KICAgICByZXR1
cm4gJm1fbG9jYWxzW2xvY2Fsc0luZGV4KGluZGV4KV07CiB9CiAKK2Jvb2wgQ29kZUdlbmVyYXRv
cjo6aXNMb2NhbENvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIHJldHVy
biBzeW1ib2xUYWJsZSgpLmdldChpZGVudC51c3RyaW5nKCkucmVwKCkpLmF0dHJpYnV0ZXMgJiBS
ZWFkT25seTsKK30KKwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KCkK
IHsKICAgICAvLyBSZWNsYWltIGZyZWUgcmVnaXN0ZXIgSURzLgpJbmRleDogVk0vQ29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMzI4NTkp
CisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRl
cmZlcmUgd2l0aCBjb25zdCBpbml0aWFsaXNhdGlvbgogICAgICAgICBSZWdpc3RlcklEKiByZWdp
c3RlckZvckxvY2FsQ29uc3RJbml0KGNvbnN0IElkZW50aWZpZXImKTsKIAorICAgICAgICBib29s
IGlzTG9jYWxDb25zdGFudChjb25zdCBJZGVudGlmaWVyJik7CisKICAgICAgICAgLy8gUmV0dXJu
cyB0aGUgbmV4dCBhdmFpbGFibGUgdGVtcG9yYXJ5IHJlZ2lzdGVyLiBSZWdpc3RlcnMgcmV0dXJu
ZWQgYnkKICAgICAgICAgLy8gbmV3VGVtcG9yYXJ5IHJlcXVpcmUgYSBtb2RpZmllZCBmb3JtIG9m
IHJlZmVyZW5jZSBjb3VudGluZzogYW55CiAgICAgICAgIC8vIHJlZ2lzdGVyIHdpdGggYSByZWZj
b3VudCBvZiAwIGlzIGNvbnNpZGVyZWQgImF2YWlsYWJsZSIsIG1lYW5pbmcgdGhhdApAQCAtMjYy
LDE1ICsyNjQsMTUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGludCBsb2NhbHNJbmRleChp
bnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lzdGVySW5kZXggLSAxOyB9CiAgICAgICAg
IAogICAgICAgICAvLyBSZXR1cm5zIHRoZSBSZWdpc3RlcklEIGNvcnJlc3BvbmRpbmcgdG8gaWRl
bnQuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
KyAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29s
IGlzQ29uc3RhbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsOwot
ICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBsb2NhbCk7CisgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsIGxvY2FsLCBpc0NvbnN0YW50KTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBh
ZGRlZCwgZmFsc2UgaWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAg
ICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lzdGVySUQqJik7CisgICAg
ICAgIGJvb2wgYWRkVmFyKGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiYsIGJvb2wgaXND
b25zdGFudCk7CiAKICAgICAgICAgdm9pZCBhZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYp
OwogCkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJl
dmlzaW9uIDMyODU5KQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczNyw4
ICsxNzM3LDEyIEBAIFJlZ2lzdGVySUQqIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZW1pdENvZGUKICAg
ICAvLyBGSVhNRTogSSB0aGluayB3ZSBjYW4gZGV0ZWN0IHRoZSBhYnNlbnNlIG9mIGRlcGVuZGVu
dCBleHByZXNzaW9ucyBoZXJlLCAKICAgICAvLyBhbmQgZW1pdCBhIFByZUluYyBpbnN0ZWFkIG9m
IGEgUG9zdEluYy4gQSBwb3N0LXBhc3MgdG8gZWxpbWluYXRlIGRlYWQKICAgICAvLyBjb2RlIHdv
dWxkIHdvcmssIHRvby4KLSAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5lcmF0b3IucmVn
aXN0ZXJGb3JMb2NhbChtX2lkZW50KSkKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSBnZW5l
cmF0b3IucmVnaXN0ZXJGb3JMb2NhbChtX2lkZW50KSkgeworICAgICAgICBpZiAoZ2VuZXJhdG9y
LmlzTG9jYWxDb25zdGFudChtX2lkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFRvSlNOdW1iZXIoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwpOwor
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UG9zdEluYyhnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgbV9pZGVudCk7CkBAIC0xODE3LDggKzE4MjEsMTIg
QEAgUmVnaXN0ZXJJRCogUG9zdERlY1Jlc29sdmVOb2RlOjplbWl0Q29kZQogICAgIC8vIEZJWE1F
OiBJIHRoaW5rIHdlIGNhbiBkZXRlY3QgdGhlIGFic2Vuc2Ugb2YgZGVwZW5kZW50IGV4cHJlc3Np
b25zIGhlcmUsIAogICAgIC8vIGFuZCBlbWl0IGEgUHJlRGVjIGluc3RlYWQgb2YgYSBQb3N0RGVj
LiBBIHBvc3QtcGFzcyB0byBlbGltaW5hdGUgZGVhZAogICAgIC8vIGNvZGUgd291bGQgd29yaywg
dG9vLgotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxv
Y2FsKG1faWRlbnQpKQorICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdp
c3RlckZvckxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENv
bnN0YW50KG1faWRlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VG9KU051
bWJlcihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgICAgIAog
ICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFs
dWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHZhbHVlLmdldCgpLCBtX2lkZW50KTsKQEAgLTIzMzUsNiArMjM0MywxMSBAQCBKU1ZhbHVl
KiBUeXBlT2ZWYWx1ZU5vZGU6OmV2YWx1YXRlKE9sZEluCiBSZWdpc3RlcklEKiBQcmVJbmNSZXNv
bHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9y
TG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQo
bV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCAxLjApOworICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QWRkKHIwLmdldCgpLCBsb2NhbCwgcjAuZ2V0KCkp
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUluYyhsb2Nh
bCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIGxvY2FsKTsKICAgICB9CkBAIC0yNDAwLDYgKzI0MTMsMTEgQEAgSlNWYWx1ZSogUHJlSW5j
UmVzb2x2ZU5vZGU6OmV2YWx1YXRlKE9sZAogUmVnaXN0ZXJJRCogUHJlRGVjUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1f
aWRlbnQpKSB7CisgICAgICAgIGlmIChnZW5lcmF0b3IuaXNMb2NhbENvbnN0YW50KG1faWRlbnQp
KSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdExv
YWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgLTEuMCk7CisgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRBZGQocjAuZ2V0KCksIGxvY2FsLCByMC5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKGxvY2FsKTsKICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9j
YWwpOwogICAgIH0KQEAgLTQxMzYsOSArNDE1NCwxNCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBS
ZWdpc3RlcklEKiBlbWl0UmVhCiAKIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6
ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0g
ICAgaWYgKFJlZ2lzdGVySUQqIGRzdCA9IGdlbmVyYXRvci5yZWdpc3RlckZvckxvY2FsKG1faWRl
bnQpKSB7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9y
TG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQo
bV9pZGVudCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9yaWdodC5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZW1pdFJlYWRNb2RpZnlB
c3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9j
YWwsIHNyYzIsIG1fb3BlcmF0b3IpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBSZWdp
c3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQuZ2V0KCkpOwotICAgICAg
ICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9y
LCBkc3QsIGRzdCwgc3JjMiwgbV9vcGVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIHJlc3Vs
dCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLCBsb2NhbCwgc3Jj
MiwgbV9vcGVyYXRvcik7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQogCkBAIC00MTY2LDYgKzQxODksOSBAQCB2
b2lkIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6b3B0aW1pemVWYXJpCiBSZWdpc3RlcklEKiBBc3Np
Z25SZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CiAgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lz
dGVyRm9yTG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29u
c3RhbnQobV9pZGVudCkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9yaWdodC5nZXQoKSk7CisgICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQg
PSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwsIG1fcmlnaHQuZ2V0KCkpOwogICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAg
IH0K
</data>
<flag name="review"
          id="9169"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>