<?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>27785</bug_id>
          
          <creation_ts>2009-07-28 15:32:25 -0700</creation_ts>
          <short_desc>[V8] [two-sided] Add a way to register V8 extensions for Isolated Worlds only</short_desc>
          <delta_ts>2009-07-30 13:46:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Perry">mpcomplete</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135402</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 15:32:25 -0700</bug_when>
    <thetext>Right now we can only register for all types of contexts (frames and isolated worlds).  We need to be able to control both separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135403</commentid>
    <comment_count>1</comment_count>
      <attachid>33678</attachid>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 15:35:26 -0700</bug_when>
    <thetext>Created attachment 33678
first attempt

There is a corresponding Chromium change here: http://codereview.chromium.org/159542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135404</commentid>
    <comment_count>2</comment_count>
      <attachid>33678</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-28 15:48:10 -0700</bug_when>
    <thetext>Comment on attachment 33678
first attempt

+        } else if (it-&gt;scheme.length() &gt; 0 &amp;&amp; (it-&gt;scheme != m_frame-&gt;loader()-&gt;activeDocumentLoader()-&gt;url().protocol() || it-&gt;scheme != m_frame-&gt;page()-&gt;mainFrame()-&gt;loader()-&gt;activeDocumentLoader()-&gt;url().protocol())) {

You don&apos;t need the &quot;else&quot; here because the &quot;if&quot; clause ends in continue.

+        v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt; global, bool isolatedContext);

Adding bools to this function doesn&apos;t really scale.  Can we pass in the set of extensions somehow?  You might want a helper function that grabs the proper set of extensions for normal and for isolated worlds.

Also, there&apos;s is no such thing as an &quot;isolated context&quot;.  There are isolated worlds, which eventually will hold more than one context each.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135406</commentid>
    <comment_count>3</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 16:02:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; +        v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt;
&gt; global, bool isolatedContext);
&gt; 
&gt; Adding bools to this function doesn&apos;t really scale.  Can we pass in the set of
&gt; extensions somehow?  You might want a helper function that grabs the proper set
&gt; of extensions for normal and for isolated worlds.

Doesn&apos;t scale how? Do you foresee many other parameters being added here?

&gt; Also, there&apos;s is no such thing as an &quot;isolated context&quot;.  There are isolated
&gt; worlds, which eventually will hold more than one context each.

I&apos;ve been using &quot;isolated context&quot; as a generic term for contexts created by either &quot;evaluateInNewContext&quot; or &quot;evaluateInNewWorld&quot;. Do you have a suggestion for a better term?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135410</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-28 16:28:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; +        v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt;
&gt; &gt; global, bool isolatedContext);
&gt; &gt; 
&gt; &gt; Adding bools to this function doesn&apos;t really scale.  Can we pass in the set of
&gt; &gt; extensions somehow?  You might want a helper function that grabs the proper set
&gt; &gt; of extensions for normal and for isolated worlds.
&gt; 
&gt; Doesn&apos;t scale how? Do you foresee many other parameters being added here?

There seems to be room for expansion in the rest of the patch:

+ enum IsolatedContextTag { IsolatedContextOnly };

struct V8ExtensionInfo {
    String scheme;
    bool isolatedContextOnly;
    v8::Extension* extension;
};

What if we want to add extensions only for contexts created with certain permissions?  etc.

&gt; &gt; Also, there&apos;s is no such thing as an &quot;isolated context&quot;.  There are isolated
&gt; &gt; worlds, which eventually will hold more than one context each.
&gt; 
&gt; I&apos;ve been using &quot;isolated context&quot; as a generic term for contexts created by
&gt; either &quot;evaluateInNewContext&quot; or &quot;evaluateInNewWorld&quot;. Do you have a suggestion
&gt; for a better term?

evaluateInNewContext will eventually be removed.  We&apos;re keeping it around in case we need to audible back to the old design for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135416</commentid>
    <comment_count>5</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 16:55:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; +        v8::Persistent&lt;v8::Context&gt; createNewContext(v8::Handle&lt;v8::Object&gt;
&gt; &gt; &gt; global, bool isolatedContext);
&gt; &gt; &gt; 
&gt; &gt; &gt; Adding bools to this function doesn&apos;t really scale.  Can we pass in the set of
&gt; &gt; &gt; extensions somehow?  You might want a helper function that grabs the proper set
&gt; &gt; &gt; of extensions for normal and for isolated worlds.
&gt; &gt; 
&gt; &gt; Doesn&apos;t scale how? Do you foresee many other parameters being added here?
&gt; 
&gt; There seems to be room for expansion in the rest of the patch:
&gt; 
&gt; + enum IsolatedContextTag { IsolatedContextOnly };

That was more of a way to use the type system to register an extension for a different purpose.

&gt; struct V8ExtensionInfo {
&gt;     String scheme;
&gt;     bool isolatedContextOnly;
&gt;     v8::Extension* extension;
&gt; };
&gt; 
&gt; What if we want to add extensions only for contexts created with certain
&gt; permissions?  etc.

True.  I had another idea that would have addressed this use case.  What about:

  registerExtension(v8::Extension);
  registerExtension(v8::Extension, int contextTypeBitfield);
  evaluateInNewWorld(int contextType);

and then the consumer could group contexts as he pleases.  For content scripts, we would do:

  registerExtension(foo, CONTENT_SCRIPT_CONTEXT);
  registerExtension(bar, CONTENT_SCRIPT_CONTEXT | SOME_OTHER_TYPE);
  registerExtension(baz, SOME_OTHER_TYPE);
  ...
  evaluateInNewWorld(CONTENT_SCRIPT_CONTEXT);  // would enable foo and bar

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135418</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-28 16:58:38 -0700</bug_when>
    <thetext>&gt; Thoughts?

That seems better because it doesn&apos;t tie the isolated world mechanism directly to the extension system.  For example, you could imagine the Web Inspector using an isolated world and not wanting to see the v8extensions appropriate for content scripts.

We might be over engineering.  Perhaps you&apos;re right and we should use the minimal mechanism for our current use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135419</commentid>
    <comment_count>7</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 16:59:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Thoughts?
&gt; 
&gt; We might be over engineering.  Perhaps you&apos;re right and we should use the
&gt; minimal mechanism for our current use cases.

That&apos;s why I changed my mind and eventually settled on the current patch :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135440</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-28 17:44:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; True.  I had another idea that would have addressed this use case.  What about:
&gt; 
&gt;   registerExtension(v8::Extension);
&gt;   registerExtension(v8::Extension, int contextTypeBitfield);
&gt;   evaluateInNewWorld(int contextType);

I&apos;m going to give this approach a shot. The only weirdness is that the embedder (chromium) would be the one to define the bitfields. That means webkit can&apos;t use the bitfield feature on its own, or would have to reserve a bit range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135648</commentid>
    <comment_count>9</comment_count>
      <attachid>33733</attachid>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-29 12:44:34 -0700</bug_when>
    <thetext>Created attachment 33733
rework of above using an extensionGroup tag

Here&apos;s the rework using a tag for contexts. You can see how it&apos;s used in the chromium code review I linked earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135653</commentid>
    <comment_count>10</comment_count>
      <attachid>33733</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-29 12:53:26 -0700</bug_when>
    <thetext>Comment on attachment 33733
rework of above using an extensionGroup tag

This looks good.  The below are only minor style issues:

1) Sometimes we call the value extensionGroup and sometimes extensionFlags.  We should probably make this consistent.

2) We should put the parameter name in the headers.  Having a bare &quot;int&quot; is very ambiguous.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135656</commentid>
    <comment_count>11</comment_count>
      <attachid>33734</attachid>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-29 13:02:30 -0700</bug_when>
    <thetext>Created attachment 33734
fixed up the naming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135660</commentid>
    <comment_count>12</comment_count>
      <attachid>33734</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-29 13:12:22 -0700</bug_when>
    <thetext>Comment on attachment 33734
fixed up the naming

Great.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135665</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-29 13:23:02 -0700</bug_when>
    <thetext>I believe this requires a simultaneous downstream change during landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135991</commentid>
    <comment_count>14</comment_count>
    <who name="Matt Perry">mpcomplete</who>
    <bug_when>2009-07-30 13:46:35 -0700</bug_when>
    <thetext>Committed http://trac.webkit.org/changeset/46594.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33678</attachid>
            <date>2009-07-28 15:35:26 -0700</date>
            <delta_ts>2009-07-29 12:44:34 -0700</delta_ts>
            <desc>first attempt</desc>
            <filename>register.patch</filename>
            <type>text/plain</type>
            <size>8240</size>
            <attacher name="Matt Perry">mpcomplete</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjUwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDctMjggIE1hdHQgUGVycnkgIDxtcGNvbXBsZXRlQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSB3YXkgdG8gcmVnaXN0ZXIgVjggZXh0ZW5zaW9ucyBmb3IgSXNvbGF0ZWQgV29ybGRz
IG9ubHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzc4NQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVhdGVJ
bk5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjopOgorCiAyMDA5
LTA3LTI4ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmNwcAkocmV2aXNpb24gNDY1MDIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGljIHZv
aWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjawogdm9pZCBWOElzb2xhdGVkV29ybGQ6OmV2
YWx1YXRlKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVjhQcm94eSog
cHJveHkpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4
dCA9IHByb3h5LT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdHJ1
ZSk7CiAKICAgICAvLyBSdW4gY29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCiAgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAJKHJldmlzaW9uIDQ2NTAyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVh
dGVJbk5ld0NvbnRleHQoY29uc3QKIAogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8RE9NV2luZG93Pih3aW5kb3dXcmFwcGVyKSA9PSBtX2ZyYW1lLT5k
b21XaW5kb3coKSk7CiAKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9
IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PigpLCB0cnVlKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNj
b3BlKGNvbnRleHQpOwogCiAgICAgLy8gU2V0dXAgY29udGV4dCBpZCBmb3IgSlMgZGVidWdnZXIu
CkBAIC04NTksNyArODU5LDcgQEAgYm9vbCBWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShOb2Rl
KiBubwogICAgIHJldHVybiBjYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOwogfQogCi12ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOFBy
b3h5OjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBib29s
IGlzb2xhdGVkQ29udGV4dCkKIHsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gcmVz
dWx0OwogCkBAIC04ODAsMTEgKzg4MCwxNCBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
VjhQcm94eTo6Y3JlCiAgICAgT3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVz
KG5ldyBjb25zdCBjaGFyKlttX2V4dGVuc2lvbnMuc2l6ZSgpXSk7CiAgICAgaW50IGluZGV4ID0g
MDsKICAgICBmb3IgKFY4RXh0ZW5zaW9uTGlzdDo6aXRlcmF0b3IgaXQgPSBtX2V4dGVuc2lvbnMu
YmVnaW4oKTsgaXQgIT0gbV9leHRlbnNpb25zLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChp
dC0+aXNvbGF0ZWRDb250ZXh0T25seSAmJiAhaXNvbGF0ZWRDb250ZXh0KSB7CisgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgLy8gTm90ZTogd2UgY2hlY2sgdGhlIGxvYWRlciBVUkwgaGVy
ZSBpbnN0ZWFkIG9mIHRoZSBkb2N1bWVudCBVUkwKICAgICAgICAgLy8gYmVjYXVzZSB3ZSBtaWdo
dCBiZSBjdXJyZW50bHkgbG9hZGluZyBhbiBVUkwgaW50byBhIGJsYW5rIHBhZ2UuCiAgICAgICAg
IC8vIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9p
ZD0xMDkyNAotICAgICAgICBpZiAoaXQtPnNjaGVtZS5sZW5ndGgoKSA+IDAgJiYgKGl0LT5zY2hl
bWUgIT0gbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnVybCgpLnBy
b3RvY29sKCkgfHwgaXQtPnNjaGVtZSAhPSBtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT5s
b2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkucHJvdG9jb2woKSkpCisgICAg
ICAgIH0gZWxzZSBpZiAoaXQtPnNjaGVtZS5sZW5ndGgoKSA+IDAgJiYgKGl0LT5zY2hlbWUgIT0g
bV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnVybCgpLnByb3RvY29s
KCkgfHwgaXQtPnNjaGVtZSAhPSBtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkucHJvdG9jb2woKSkpIHsKICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgZXh0ZW5zaW9uTmFtZXNbaW5kZXgr
K10gPSBpdC0+ZXh0ZW5zaW9uLT5uYW1lKCk7CiAgICAgfQpAQCAtOTgyLDcgKzk4NSw3IEBAIHZv
aWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIGlzVjhJbml0aWFsaXpl
ZCA9IHRydWU7CiAgICAgfQogCi0gICAgbV9jb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dChtX2ds
b2JhbCk7CisgICAgbV9jb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbCwgZmFsc2Up
OwogICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEy
MDEsMTAgKzEyMDQsMjcgQEAgU3RyaW5nIFY4UHJveHk6OnNvdXJjZU5hbWUoKQogICAgIHJldHVy
biB0b1dlYkNvcmVTdHJpbmcodjg6OkRlYnVnOjpDYWxsKGZyYW1lU291cmNlTmFtZSkpOwogfQog
Cit2b2lkIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNpb24qIGV4
dGVuc2lvbikgeworICAgIC8vIElmIHRoZSBleHRlbnNpb24gZXhpc3RzIGluIG91ciBsaXN0LCBp
dCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggVjguCisgICAgZm9yIChWOEV4dGVuc2lvbkxp
c3Q6Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25zLmJlZ2luKCk7IGl0ICE9IG1fZXh0ZW5zaW9u
cy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmV4dGVuc2lvbiA9PSBleHRlbnNpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdjg6OlJlZ2lzdGVyRXh0ZW5zaW9u
KGV4dGVuc2lvbik7Cit9CisKIHZvaWQgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4
dGVuc2lvbiogZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKQogewot
ICAgIHY4OjpSZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgIFY4RXh0ZW5zaW9uSW5m
byBpbmZvID0ge3NjaGVtZVJlc3RyaWN0aW9uLCBleHRlbnNpb259OworICAgIHJlZ2lzdGVyRXh0
ZW5zaW9uV2l0aFY4KGV4dGVuc2lvbik7CisgICAgVjhFeHRlbnNpb25JbmZvIGluZm8gPSB7c2No
ZW1lUmVzdHJpY3Rpb24sIGZhbHNlLCBleHRlbnNpb259OworICAgIG1fZXh0ZW5zaW9ucy5wdXNo
X2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4
dGVuc2lvbiogZXh0ZW5zaW9uLCBJc29sYXRlZENvbnRleHRUYWcpCit7CisgICAgcmVnaXN0ZXJF
eHRlbnNpb25XaXRoVjgoZXh0ZW5zaW9uKTsKKyAgICBWOEV4dGVuc2lvbkluZm8gaW5mbyA9IHtT
dHJpbmcoKSwgdHJ1ZSwgZXh0ZW5zaW9ufTsKICAgICBtX2V4dGVuc2lvbnMucHVzaF9iYWNrKGlu
Zm8pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gNDY1MDIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDExICsx
MzgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY29uc3QgaW50IGtNYXhSZWN1cnNp
b25EZXB0aCA9IDIwOwogCi0gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRo
YXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElmIHNjaGVtZQotICAgIC8vIGlzIG5v
bi1lbXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hlbWUgdGhlIGV4dGVuc2lvbiBzaG91bGQg
YmUgdXNlZCB3aXRoLgotICAgIC8vIE90aGVyd2lzZSwgdGhlIGV4dGVuc2lvbiBpcyB1c2VkIHdp
dGggYWxsIHNjaGVtZXMuCisgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRo
YXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElmCisgICAgLy8gc2NoZW1lIGlzIG5v
bi1lbXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hlbWUgdGhlIGV4dGVuc2lvbiBzaG91bGQg
YmUKKyAgICAvLyB1c2VkIHdpdGguIElmIGlzb2xhdGVkQ29udGV4dE9ubHkgaXMgdHJ1ZSwgdGhl
IGV4dGVuc2lvbiB3aWxsIG9ubHkgYmUKKyAgICAvLyBsb2FkZWQgaW50byBpc29sYXRlZCAobm9u
LWZyYW1lKSBzY3JpcHQgY29udGV4dHMuIE90aGVyd2lzZSwgdGhlCisgICAgLy8gZXh0ZW5zaW9u
IGlzIHVzZWQgd2l0aCBhbGwgc2NoZW1lcyBhbmQgY29udGV4dHMuCiAgICAgc3RydWN0IFY4RXh0
ZW5zaW9uSW5mbyB7CiAgICAgICAgIFN0cmluZyBzY2hlbWU7CisgICAgICAgIGJvb2wgaXNvbGF0
ZWRDb250ZXh0T25seTsKICAgICAgICAgdjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9uOwogICAgIH07
CiAgICAgdHlwZWRlZiBzdGQ6Omxpc3Q8VjhFeHRlbnNpb25JbmZvPiBWOEV4dGVuc2lvbkxpc3Q7
CkBAIC0xNTgsNiArMTYxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgR2Vu
ZXJhbEVycm9yCiAgICAgICAgIH07CiAKKyAgICAgICAgZW51bSBJc29sYXRlZENvbnRleHRUYWcg
eyBJc29sYXRlZENvbnRleHRPbmx5IH07CisKICAgICAgICAgZXhwbGljaXQgVjhQcm94eShGcmFt
ZSogZnJhbWUpIDogbV9mcmFtZShmcmFtZSksIG1faW5saW5lQ29kZShmYWxzZSksIG1fdGltZXJD
YWxsYmFjayhmYWxzZSksIG1fcmVjdXJzaW9uKDApIHsgfQogCiAgICAgICAgIH5WOFByb3h5KCk7
CkBAIC0zMzgsMTQgKzM0MywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdB
Uk5JTkc6IENhbGwgfGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGV8IG9ubHkgb24gZnJlc2gg
Y29udGV4dHMhCiAgICAgICAgIHN0YXRpYyB2b2lkIGluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5
cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCi0gICAgICAgIC8vIFJlZ2lzdGVycyBhbiBl
eHRlbnNpb24gdG8gYmUgYXZhaWxhYmxlIG9uIHdlYnBhZ2VzIHdpdGggYSBwYXJ0aWN1bGFyIHNj
aGVtZQotICAgICAgICAvLyBJZiB0aGUgc2NoZW1lIGFyZ3VtZW50IGlzIGVtcHR5LCB0aGUgZXh0
ZW5zaW9uIGlzIGF2YWlsYWJsZSBvbiBhbGwgcGFnZXMuCi0gICAgICAgIC8vIFdpbGwgb25seSBh
ZmZlY3QgdjggY29udGV4dHMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhpcyBjYWxsLiBUYWtlcyBvd25l
cnNoaXAKLSAgICAgICAgLy8gb2YgdGhlIHY4OjpFeHRlbnNpb24gb2JqZWN0IHBhc3NlZC4KKyAg
ICAgICAgLy8gUmVnaXN0ZXJzIGEgdjggZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJw
YWdlcy4gVGhlIHR3byBmb3JtcworICAgICAgICAvLyBvZmZlciB2YXJpb3VzIHJlc3RyaWN0aW9u
cyBvbiB3aGF0IHR5cGVzIG9mIGNvbnRleHRzIHRoZSBleHRlbnNpb24gaXMKKyAgICAgICAgLy8g
bG9hZGVkIGludG8uIElmIGEgc2NoZW1lIGlzIHByb3ZpZGVkLCBvbmx5IHBhZ2VzIHdob3NlIFVS
TCBoYXMgdGhlIGdpdmVuCisgICAgICAgIC8vIHNjaGVtZSB3aWxsIG1hdGNoLiBJZiBJc29sYXRl
ZENvbnRleHQgaXMgcHJvdmlkZWQsIHRoZSBleHRlbnNpb24gd2lsbAorICAgICAgICAvLyBvbmx5
IGJlIGxvYWRlZCBpbnRvIHNjcmlwdCB0aGF0IGlzIHJ1biBpbiBhbiBpc29sYXRlZCBjb250ZXh0
LiAgV2lsbCBvbmx5CisgICAgICAgIC8vIGFmZmVjdCB2OCBjb250ZXh0cyBpbml0aWFsaXplZCBh
ZnRlciB0aGlzIGNhbGwuIFRha2VzIG93bmVyc2hpcCBvZiB0aGUKKyAgICAgICAgLy8gdjg6OkV4
dGVuc2lvbiBvYmplY3QgcGFzc2VkLgogICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVu
c2lvbih2ODo6RXh0ZW5zaW9uKiwgY29uc3QgU3RyaW5nJiBzY2hlbWVSZXN0cmljdGlvbik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qLCBJc29s
YXRlZENvbnRleHRUYWcpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTZXBhcmF0ZSB0aGVzZSBjb25j
ZXJucyBmcm9tIFY4UHJveHk/Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBj
cmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsKTsKKyAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnbG9iYWwsIGJvb2wgaXNvbGF0ZWRDb250ZXh0KTsKICAgICAgICAgc3RhdGlj
IGJvb2wgaW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBE
T01XaW5kb3cqIHdpbmRvdyk7CiAKICAgICAgICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVkKCk7
CkBAIC0zOTQsNiArNDAzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX3V0aWxpdHlDb250ZXh0KTsKICAgICAg
ICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpF
eHRlbnNpb24qKTsKKwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0Owo=
</data>
<flag name="review"
          id="17900"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33733</attachid>
            <date>2009-07-29 12:44:34 -0700</date>
            <delta_ts>2009-07-29 13:02:30 -0700</delta_ts>
            <desc>rework of above using an extensionGroup tag</desc>
            <filename>register-2.patch</filename>
            <type>text/plain</type>
            <size>12257</size>
            <attacher name="Matt Perry">mpcomplete</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDctMjkgIE1hdHQgUGVycnkgIDxtcGNvbXBsZXRlQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSB3YXkgdG8gcmVnaXN0ZXIgVjggZXh0ZW5zaW9ucyBmb3IgSXNvbGF0ZWQgV29ybGRz
IG9ubHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzc4NQorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRl
ZFdvcmxkOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpldmFsdWF0ZUluTmV3V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y3Jl
YXRlTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0
aFY4KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisKIDIwMDktMDctMjkgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDQ2NTQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDE0ICsxODAsMTQgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQoY29u
c3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAp
CiB7Ci0gICAgbV9wcm94eS0+ZXZhbHVhdGVJbk5ld1dvcmxkKHNvdXJjZXMpOworICAgIG1fcHJv
eHktPmV2YWx1YXRlSW5OZXdXb3JsZChzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAKLXZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNj
cmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGlu
dCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3Q29udGV4dChz
b3VyY2VzKTsKKyAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3Q29udGV4dChzb3VyY2VzLCBleHRl
bnNpb25Hcm91cCk7CiB9CiAKIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGVudmly
b25tZW50IG9mIHRoaXMgcHJveHkuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTMgKzY5LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsIGl0
cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljCiAgICAgICAgIC8vIEphdmFTY3JpcHQgb2Jq
ZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9y
CiAgICAgICAgIC8vIGFsbCBET00gbm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCi0gICAgICAg
IHZvaWQgZXZhbHVhdGVJbk5ld1dvcmxkKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYp
OworICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mLCBpbnQpOwogCiAgICAgICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYSBu
ZXcgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBmcmFtZS4gVGhlCiAgICAgICAgIC8v
IHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlIGFuZCBpdHMgb3duIHByb3RvdHlwZXMg
Zm9yIGludHJpbnNpYwogICAgICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJy
YXksIGFuZCBzby1vbikuIEl0IHNoYXJlcyB0aGUgd3JhcHBlcnMgZm9yCiAgICAgICAgIC8vIGFs
bCBET00gbm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZhbHVhdGVJ
bk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jik7CisgICAgICAgIHZv
aWQgZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jiwg
aW50KTsKIAogICAgICAgICAvLyBKU0MgaGFzIGEgV2luZG93U2hlbGwgb2JqZWN0LCBidXQgZm9y
IFY4LCB0aGUgU2NyaXB0Q29udHJvbGxlcgogICAgICAgICAvLyBpcyB0aGUgV2luZG93U2hlbGwu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwCShyZXZpc2lvbiA0
NjU0OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEwIEBAIHN0YXRpYyB2b2lkIGNvbnRleHRXZWFrUmVmZXJl
bmNlQ2FsbGJhY2sKICAgICBkZWxldGUgd29ybGQ7CiB9CiAKLXZvaWQgVjhJc29sYXRlZFdvcmxk
OjpldmFsdWF0ZShjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIFY4UHJv
eHkqIHByb3h5KQordm9pZCBWOElzb2xhdGVkV29ybGQ6OmV2YWx1YXRlKGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25G
bGFncykKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSBwcm94eS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCkpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0
ID0gcHJveHktPmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRl
bnNpb25GbGFncyk7CiAKICAgICAvLyBSdW4gY29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCiAgICAg
djg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlw
dCBpbiBhIG5ldyBpc29sYXRlZCB3b3JsZC4gIFRoZSBzY3JpcHQgaGFzIGFjY2VzcwogICAgICAg
ICAvLyB0byB0aGUgRE9NIG9mIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggfHByb3h5fC4K
LSAgICAgICAgc3RhdGljIHZvaWQgZXZhbHVhdGUoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzLCBWOFByb3h5KiBwcm94eSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGV2YWx1
YXRlKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgVjhQcm94eSogcHJv
eHksIGludCBleHRlbnNpb25GbGFncyk7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0
ZWQgd29ybGQgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRl
cmVkKCkuICBCZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksMTMgKzI3OSwxMyBAQCBib29s
IFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAg
ICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAgIFY4SXNvbGF0ZWRXb3JsZDo6ZXZhbHVhdGUo
c291cmNlcywgdGhpcyk7CisgICAgVjhJc29sYXRlZFdvcmxkOjpldmFsdWF0ZShzb3VyY2VzLCB0
aGlzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbk5ld0Nv
bnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQordm9pZCBWOFBy
b3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4m
IHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKIHsKICAgICBpbml0Q29udGV4dElmTmVlZGVk
KCk7CiAKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5OZXdDb250
ZXh0KGNvbnN0CiAKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPERPTVdpbmRvdz4od2luZG93V3JhcHBlcikgPT0gbV9mcmFtZS0+ZG9tV2luZG93KCkp
OwogCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVOZXdD
b250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgZXh0ZW5zaW9uR3JvdXApOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2Nv
cGUoY29udGV4dCk7CiAKICAgICAvLyBTZXR1cCBjb250ZXh0IGlkIGZvciBKUyBkZWJ1Z2dlci4K
QEAgLTg1OSw3ICs4NTksNyBAQCBib29sIFY4UHJveHk6OmNoZWNrTm9kZVNlY3VyaXR5KE5vZGUq
IG5vCiAgICAgcmV0dXJuIGNhbkFjY2Vzc0ZyYW1lKHRhcmdldCwgdHJ1ZSk7CiB9CiAKLXY4OjpQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOFByb3h5OjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gZ2xvYmFsKQordjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4UHJv
eHk6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBl
eHRlbnNpb25Hcm91cCkKIHsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gcmVzdWx0
OwogCkBAIC04ODAsNiArODgwLDkgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4UHJv
eHk6OmNyZQogICAgIE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcg
Y29uc3QgY2hhcipbbV9leHRlbnNpb25zLnNpemUoKV0pOwogICAgIGludCBpbmRleCA9IDA7CiAg
ICAgZm9yIChWOEV4dGVuc2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25zLmJlZ2lu
KCk7IGl0ICE9IG1fZXh0ZW5zaW9ucy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmdy
b3VwICYmIGl0LT5ncm91cCAhPSBleHRlbnNpb25Hcm91cCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCiAgICAgICAgIC8vIE5vdGU6IHdlIGNoZWNrIHRoZSBsb2FkZXIgVVJMIGhlcmUgaW5zdGVh
ZCBvZiB0aGUgZG9jdW1lbnQgVVJMCiAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbWlnaHQgYmUgY3Vy
cmVudGx5IGxvYWRpbmcgYW4gVVJMIGludG8gYSBibGFuayBwYWdlLgogICAgICAgICAvLyBTZWUg
aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA5MjQK
QEAgLTk4Miw3ICs5ODUsNyBAQCB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQog
ICAgICAgICBpc1Y4SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIG1fY29udGV4dCA9
IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwpOworICAgIG1fY29udGV4dCA9IGNyZWF0ZU5ld0Nv
bnRleHQobV9nbG9iYWwsIDApOwogICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTEyMTYsMTAgKzEyMTksMjcgQEAgU3RyaW5nIFY4UHJveHk6OnNvdXJj
ZU5hbWUoKQogICAgIHJldHVybiB0b1dlYkNvcmVTdHJpbmcodjg6OkRlYnVnOjpDYWxsKGZyYW1l
U291cmNlTmFtZSkpOwogfQogCit2b2lkIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4
KHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbikgeworICAgIC8vIElmIHRoZSBleHRlbnNpb24gZXhp
c3RzIGluIG91ciBsaXN0LCBpdCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggVjguCisgICAg
Zm9yIChWOEV4dGVuc2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25zLmJlZ2luKCk7
IGl0ICE9IG1fZXh0ZW5zaW9ucy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmV4dGVu
c2lvbiA9PSBleHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdjg6
OlJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lvbik7Cit9CisKIHZvaWQgVjhQcm94eTo6cmVnaXN0
ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHNjaGVt
ZVJlc3RyaWN0aW9uKQogewotICAgIHY4OjpSZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24pOwot
ICAgIFY4RXh0ZW5zaW9uSW5mbyBpbmZvID0ge3NjaGVtZVJlc3RyaWN0aW9uLCBleHRlbnNpb259
OworICAgIHJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KGV4dGVuc2lvbik7CisgICAgVjhFeHRlbnNp
b25JbmZvIGluZm8gPSB7c2NoZW1lUmVzdHJpY3Rpb24sIDAsIGV4dGVuc2lvbn07CisgICAgbV9l
eHRlbnNpb25zLnB1c2hfYmFjayhpbmZvKTsKK30KKwordm9pZCBWOFByb3h5OjpyZWdpc3RlckV4
dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiBleHRlbnNpb24sIGludCBleHRlbnNpb25Hcm91cCkKK3sK
KyAgICByZWdpc3RlckV4dGVuc2lvbldpdGhWOChleHRlbnNpb24pOworICAgIFY4RXh0ZW5zaW9u
SW5mbyBpbmZvID0ge1N0cmluZygpLCBleHRlbnNpb25Hcm91cCwgZXh0ZW5zaW9ufTsKICAgICBt
X2V4dGVuc2lvbnMucHVzaF9iYWNrKGluZm8pOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM4LDExICsxMzgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY29uc3QgaW50IGtNYXhSZWN1cnNpb25EZXB0aCA9IDIwOwogCi0gICAgLy8gSW5mb3JtYXRp
b24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRoYXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjgu
IElmIHNjaGVtZQotICAgIC8vIGlzIG5vbi1lbXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hl
bWUgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgdXNlZCB3aXRoLgotICAgIC8vIE90aGVyd2lzZSwg
dGhlIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggYWxsIHNjaGVtZXMuCisgICAgLy8gSW5mb3JtYXRp
b24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRoYXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjgu
IElmCisgICAgLy8gc2NoZW1lIGlzIG5vbi1lbXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hl
bWUgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUKKyAgICAvLyB1c2VkIHdpdGguIElmIGdyb3VwIGlz
IG5vbi16ZXJvLCB0aGUgZXh0ZW5zaW9uIHdpbGwgb25seSBiZSBsb2FkZWQgaW50bworICAgIC8v
IHNjcmlwdCBjb250ZXh0cyB0aGF0IGJlbG9uZyB0byB0aGF0IGdyb3VwLiBPdGhlcndpc2UsIHRo
ZSBleHRlbnNpb24gaXMKKyAgICAvLyB1c2VkIHdpdGggYWxsIHNjaGVtZXMgYW5kIGNvbnRleHRz
LgogICAgIHN0cnVjdCBWOEV4dGVuc2lvbkluZm8gewogICAgICAgICBTdHJpbmcgc2NoZW1lOwor
ICAgICAgICBpbnQgZ3JvdXA7CiAgICAgICAgIHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbjsKICAg
ICB9OwogICAgIHR5cGVkZWYgc3RkOjpsaXN0PFY4RXh0ZW5zaW9uSW5mbz4gVjhFeHRlbnNpb25M
aXN0OwpAQCAtMjExLDEyICsyMTQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAv
LyBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3Jp
cHQgb2JqZWN0cyAoU3RyaW5nLAogICAgICAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0
cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9kZXMgYW5kIERPTQogICAgICAgICAvLyBjb25z
dHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld1dvcmxkKGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcyk7CisgICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld1dv
cmxkKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50KTsKIAogICAg
ICAgICAvLyBFdmFsdWF0ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGNvbnRleHQuIFRoZSBzY3JpcHQg
Z2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZQogICAgICAgICAvLyBhbmQgaXRzIG93biBwcm90b3R5
cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LAogICAg
ICAgICAvLyBhbmQgc28tb24pLiBJdCBzaGFyZXMgdGhlIHdyYXBwZXJzIGZvciBhbGwgRE9NIG5v
ZGVzIGFuZCBET00gY29uc3RydWN0b3JzLgotICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdDb250
ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAgICAgICB2b2lkIGV2YWx1
YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCk7CiAK
ICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVjdXRp
b24gZW52aXJvbm1lbnQuCiAgICAgICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBob2xkIGFuIGV4ZWN1
dGlvbiBjb250ZXh0LgpAQCAtMzM5LDE0ICszNDIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBXQVJOSU5HOiBDYWxsIHxpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlfCBv
bmx5IG9uIGZyZXNoIGNvbnRleHRzIQogICAgICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsSGlkZGVu
T2JqZWN0UHJvdG90eXBlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKIAotICAgICAgICAvLyBS
ZWdpc3RlcnMgYW4gZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJwYWdlcyB3aXRoIGEg
cGFydGljdWxhciBzY2hlbWUKLSAgICAgICAgLy8gSWYgdGhlIHNjaGVtZSBhcmd1bWVudCBpcyBl
bXB0eSwgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUgb24gYWxsIHBhZ2VzLgotICAgICAgICAv
LyBXaWxsIG9ubHkgYWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMgY2Fs
bC4gVGFrZXMgb3duZXJzaGlwCi0gICAgICAgIC8vIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9iamVj
dCBwYXNzZWQuCisgICAgICAgIC8vIFJlZ2lzdGVycyBhIHY4IGV4dGVuc2lvbiB0byBiZSBhdmFp
bGFibGUgb24gd2VicGFnZXMuIFRoZSB0d28gZm9ybXMKKyAgICAgICAgLy8gb2ZmZXIgdmFyaW91
cyByZXN0cmljdGlvbnMgb24gd2hhdCB0eXBlcyBvZiBjb250ZXh0cyB0aGUgZXh0ZW5zaW9uIGlz
CisgICAgICAgIC8vIGxvYWRlZCBpbnRvLiBJZiBhIHNjaGVtZSBpcyBwcm92aWRlZCwgb25seSBw
YWdlcyB3aG9zZSBVUkwgaGFzIHRoZSBnaXZlbgorICAgICAgICAvLyBzY2hlbWUgd2lsbCBtYXRj
aC4gSWYgZXh0ZW5zaW9uR3JvdXAgaXMgcHJvdmlkZWQsIHRoZSBleHRlbnNpb24gd2lsbAorICAg
ICAgICAvLyBvbmx5IGJlIGxvYWRlZCBpbnRvIHNjcmlwdHMgcnVuIHZpYSBldmFsdWF0ZUluTmV3
V29ybGQgd2l0aCB0aGUKKyAgICAgICAgLy8gbWF0Y2hpbmcgZ3JvdXAuICBXaWxsIG9ubHkgYWZm
ZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMKKyAgICAgICAgLy8gY2FsbC4g
VGFrZXMgb3duZXJzaGlwIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9iamVjdCBwYXNzZWQuCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qLCBjb25zdCBT
dHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJF
eHRlbnNpb24odjg6OkV4dGVuc2lvbiosIGludCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAgICAg
Ly8gRklYTUU6IFNlcGFyYXRlIHRoZXNlIGNvbmNlcm5zIGZyb20gVjhQcm94eT8KLSAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnbG9iYWwpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVu
c2lvbkdyb3VwKTsKICAgICAgICAgc3RhdGljIGJvb2wgaW5zdGFsbERPTVdpbmRvdyh2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvdyk7CiAKICAgICAgICAg
dm9pZCBpbml0Q29udGV4dElmTmVlZGVkKCk7CkBAIC0zOTUsNiArNDAyLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5l
dyhtX3V0aWxpdHlDb250ZXh0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNpb24qKTsKKwogICAgICAgICBGcmFtZSog
bV9mcmFtZTsKIAogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0
Owo=
</data>
<flag name="review"
          id="17941"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33734</attachid>
            <date>2009-07-29 13:02:30 -0700</date>
            <delta_ts>2009-07-29 13:12:22 -0700</delta_ts>
            <desc>fixed up the naming</desc>
            <filename>register-3.patch</filename>
            <type>text/plain</type>
            <size>12317</size>
            <attacher name="Matt Perry">mpcomplete</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDctMjkgIE1hdHQgUGVycnkgIDxtcGNvbXBsZXRlQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSB3YXkgdG8gcmVnaXN0ZXIgVjggZXh0ZW5zaW9ucyBmb3IgSXNvbGF0ZWQgV29ybGRz
IG9ubHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzc4NQorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRl
ZFdvcmxkOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpldmFsdWF0ZUluTmV3V29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y3Jl
YXRlTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0
aFY4KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisKIDIwMDktMDctMjkgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDQ2NTQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDE0ICsxODAsMTQgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluTmV3V29ybGQoY29u
c3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAp
CiB7Ci0gICAgbV9wcm94eS0+ZXZhbHVhdGVJbk5ld1dvcmxkKHNvdXJjZXMpOworICAgIG1fcHJv
eHktPmV2YWx1YXRlSW5OZXdXb3JsZChzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAKLXZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNj
cmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGlu
dCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3Q29udGV4dChz
b3VyY2VzKTsKKyAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3Q29udGV4dChzb3VyY2VzLCBleHRl
bnNpb25Hcm91cCk7CiB9CiAKIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGVudmly
b25tZW50IG9mIHRoaXMgcHJveHkuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMTMgKzY5LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsIGl0
cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljCiAgICAgICAgIC8vIEphdmFTY3JpcHQgb2Jq
ZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9y
CiAgICAgICAgIC8vIGFsbCBET00gbm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCi0gICAgICAg
IHZvaWQgZXZhbHVhdGVJbk5ld1dvcmxkKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYp
OworICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCiAgICAgICAgIC8vIEV4ZWN1dGVzIEph
dmFTY3JpcHQgaW4gYSBuZXcgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBmcmFtZS4g
VGhlCiAgICAgICAgIC8vIHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlIGFuZCBpdHMg
b3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYwogICAgICAgICAvLyBKYXZhU2NyaXB0IG9iamVj
dHMgKFN0cmluZywgQXJyYXksIGFuZCBzby1vbikuIEl0IHNoYXJlcyB0aGUgd3JhcHBlcnMgZm9y
CiAgICAgICAgIC8vIGFsbCBET00gbm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCi0gICAgICAg
IHZvaWQgZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
Jik7CisgICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+JiwgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAgICAvLyBKU0MgaGFz
IGEgV2luZG93U2hlbGwgb2JqZWN0LCBidXQgZm9yIFY4LCB0aGUgU2NyaXB0Q29udHJvbGxlcgog
ICAgICAgICAvLyBpcyB0aGUgV2luZG93U2hlbGwuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SXNvbGF0ZWRXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OElzb2xhdGVkV29ybGQuY3BwCShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhJc29sYXRlZFdvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEwIEBA
IHN0YXRpYyB2b2lkIGNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sKICAgICBkZWxldGUgd29y
bGQ7CiB9CiAKLXZvaWQgVjhJc29sYXRlZFdvcmxkOjpldmFsdWF0ZShjb25zdCBWZWN0b3I8U2Ny
aXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIFY4UHJveHkqIHByb3h5KQordm9pZCBWOElzb2xhdGVk
V29ybGQ6OmV2YWx1YXRlKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywg
VjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkKIHsKICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBwcm94
eS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkpOworICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNyZWF0ZU5ld0NvbnRleHQo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAvLyBSdW4g
Y29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRf
c2NvcGUoY29udGV4dCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3Js
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJ
KHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlwdCBpbiBhIG5ldyBpc29sYXRlZCB3b3JsZC4g
IFRoZSBzY3JpcHQgaGFzIGFjY2VzcwogICAgICAgICAvLyB0byB0aGUgRE9NIG9mIHRoZSBkb2N1
bWVudCBhc3NvY2lhdGVkIHdpdGggfHByb3h5fC4KLSAgICAgICAgc3RhdGljIHZvaWQgZXZhbHVh
dGUoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWOFByb3h5KiBwcm94
eSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGV2YWx1YXRlKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYgc291cmNlcywgVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CiAK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQgd29ybGQgYXNzb2NpYXRlZCB3aXRoCiAg
ICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBCZWNhdXNlIHdvcmxkcyBhcmUg
aXNvbGF0ZWQsIHRoZSBlbnRpcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNp
b24gNDY1NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzksMTMgKzI3OSwxMyBAQCBib29sIFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5
KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3V29y
bGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQordm9pZCBWOFByb3h5
OjpldmFsdWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3Vy
Y2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAgICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwot
ICAgIFY4SXNvbGF0ZWRXb3JsZDo6ZXZhbHVhdGUoc291cmNlcywgdGhpcyk7CisgICAgVjhJc29s
YXRlZFdvcmxkOjpldmFsdWF0ZShzb3VyY2VzLCB0aGlzLCBleHRlbnNpb25Hcm91cCk7CiB9CiAK
LXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlwdFNv
dXJjZUNvZGU+JiBzb3VyY2VzKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91
cCkKIHsKICAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7CiAKQEAgLTI5OCw3ICsyOTgsNyBAQCB2
b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0CiAKICAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRvdz4od2luZG93V3Jh
cHBlcikgPT0gbV9mcmFtZS0+ZG9tV2luZG93KCkpOwogCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVO
ZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3JvdXApOwogICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CiAKICAgICAvLyBTZXR1
cCBjb250ZXh0IGlkIGZvciBKUyBkZWJ1Z2dlci4KQEAgLTg1OSw3ICs4NTksNyBAQCBib29sIFY4
UHJveHk6OmNoZWNrTm9kZVNlY3VyaXR5KE5vZGUqIG5vCiAgICAgcmV0dXJuIGNhbkFjY2Vzc0Zy
YW1lKHRhcmdldCwgdHJ1ZSk7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOFBy
b3h5OjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsKQordjg6
OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNyZWF0ZU5ld0NvbnRleHQodjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCkKIHsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gcmVzdWx0OwogCkBAIC04ODAsNiArODgwLDkgQEAgdjg6
OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNyZQogICAgIE93bkFycmF5UHRyPGNv
bnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipbbV9leHRlbnNpb25zLnNp
emUoKV0pOwogICAgIGludCBpbmRleCA9IDA7CiAgICAgZm9yIChWOEV4dGVuc2lvbkxpc3Q6Oml0
ZXJhdG9yIGl0ID0gbV9leHRlbnNpb25zLmJlZ2luKCk7IGl0ICE9IG1fZXh0ZW5zaW9ucy5lbmQo
KTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmdyb3VwICYmIGl0LT5ncm91cCAhPSBleHRlbnNp
b25Hcm91cCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIC8vIE5vdGU6IHdlIGNo
ZWNrIHRoZSBsb2FkZXIgVVJMIGhlcmUgaW5zdGVhZCBvZiB0aGUgZG9jdW1lbnQgVVJMCiAgICAg
ICAgIC8vIGJlY2F1c2Ugd2UgbWlnaHQgYmUgY3VycmVudGx5IGxvYWRpbmcgYW4gVVJMIGludG8g
YSBibGFuayBwYWdlLgogICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2No
cm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA5MjQKQEAgLTk4Miw3ICs5ODUsNyBAQCB2b2lkIFY4
UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogICAgICAgICBpc1Y4SW5pdGlhbGl6ZWQgPSB0
cnVlOwogICAgIH0KIAotICAgIG1fY29udGV4dCA9IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwp
OworICAgIG1fY29udGV4dCA9IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWwsIDApOwogICAgIGlm
IChtX2NvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMTYsMTAgKzEy
MTksMjcgQEAgU3RyaW5nIFY4UHJveHk6OnNvdXJjZU5hbWUoKQogICAgIHJldHVybiB0b1dlYkNv
cmVTdHJpbmcodjg6OkRlYnVnOjpDYWxsKGZyYW1lU291cmNlTmFtZSkpOwogfQogCit2b2lkIFY4
UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbikg
eworICAgIC8vIElmIHRoZSBleHRlbnNpb24gZXhpc3RzIGluIG91ciBsaXN0LCBpdCB3YXMgYWxy
ZWFkeSByZWdpc3RlcmVkIHdpdGggVjguCisgICAgZm9yIChWOEV4dGVuc2lvbkxpc3Q6Oml0ZXJh
dG9yIGl0ID0gbV9leHRlbnNpb25zLmJlZ2luKCk7IGl0ICE9IG1fZXh0ZW5zaW9ucy5lbmQoKTsg
KytpdCkgeworICAgICAgICBpZiAoaXQtPmV4dGVuc2lvbiA9PSBleHRlbnNpb24pCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdjg6OlJlZ2lzdGVyRXh0ZW5zaW9uKGV4dGVuc2lv
bik7Cit9CisKIHZvaWQgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKQogewotICAgIHY4OjpS
ZWdpc3RlckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgIFY4RXh0ZW5zaW9uSW5mbyBpbmZvID0g
e3NjaGVtZVJlc3RyaWN0aW9uLCBleHRlbnNpb259OworICAgIHJlZ2lzdGVyRXh0ZW5zaW9uV2l0
aFY4KGV4dGVuc2lvbik7CisgICAgVjhFeHRlbnNpb25JbmZvIGluZm8gPSB7c2NoZW1lUmVzdHJp
Y3Rpb24sIDAsIGV4dGVuc2lvbn07CisgICAgbV9leHRlbnNpb25zLnB1c2hfYmFjayhpbmZvKTsK
K30KKwordm9pZCBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiBleHRl
bnNpb24sIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICByZWdpc3RlckV4dGVuc2lvbldpdGhW
OChleHRlbnNpb24pOworICAgIFY4RXh0ZW5zaW9uSW5mbyBpbmZvID0ge1N0cmluZygpLCBleHRl
bnNpb25Hcm91cCwgZXh0ZW5zaW9ufTsKICAgICBtX2V4dGVuc2lvbnMucHVzaF9iYWNrKGluZm8p
OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDExICsxMzgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY29uc3QgaW50IGtNYXhSZWN1cnNpb25E
ZXB0aCA9IDIwOwogCi0gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRoYXQg
aXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElmIHNjaGVtZQotICAgIC8vIGlzIG5vbi1l
bXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hlbWUgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUg
dXNlZCB3aXRoLgotICAgIC8vIE90aGVyd2lzZSwgdGhlIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGgg
YWxsIHNjaGVtZXMuCisgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gZXh0ZW5zaW9uIHRoYXQg
aXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElmCisgICAgLy8gc2NoZW1lIGlzIG5vbi1l
bXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hlbWUgdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUK
KyAgICAvLyB1c2VkIHdpdGguIElmIGdyb3VwIGlzIG5vbi16ZXJvLCB0aGUgZXh0ZW5zaW9uIHdp
bGwgb25seSBiZSBsb2FkZWQgaW50bworICAgIC8vIHNjcmlwdCBjb250ZXh0cyB0aGF0IGJlbG9u
ZyB0byB0aGF0IGdyb3VwLiBPdGhlcndpc2UsIHRoZSBleHRlbnNpb24gaXMKKyAgICAvLyB1c2Vk
IHdpdGggYWxsIHNjaGVtZXMgYW5kIGNvbnRleHRzLgogICAgIHN0cnVjdCBWOEV4dGVuc2lvbklu
Zm8gewogICAgICAgICBTdHJpbmcgc2NoZW1lOworICAgICAgICBpbnQgZ3JvdXA7CiAgICAgICAg
IHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbjsKICAgICB9OwogICAgIHR5cGVkZWYgc3RkOjpsaXN0
PFY4RXh0ZW5zaW9uSW5mbz4gVjhFeHRlbnNpb25MaXN0OwpAQCAtMjExLDEyICsyMTQsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJv
dG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLAogICAgICAg
ICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00g
bm9kZXMgYW5kIERPTQogICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZh
bHVhdGVJbk5ld1dvcmxkKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcyk7
CisgICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld1dvcmxkKGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgICAgICAvLyBFdmFs
dWF0ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGNvbnRleHQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3du
IGdsb2JhbCBzY29wZQogICAgICAgICAvLyBhbmQgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRy
aW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LAogICAgICAgICAvLyBhbmQg
c28tb24pLiBJdCBzaGFyZXMgdGhlIHdyYXBwZXJzIGZvciBhbGwgRE9NIG5vZGVzIGFuZCBET00g
Y29uc3RydWN0b3JzLgotICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0IFZl
Y3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAgICAgICB2b2lkIGV2YWx1YXRlSW5OZXdDb250
ZXh0KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7
CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVj
dXRpb24gZW52aXJvbm1lbnQuCiAgICAgICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBob2xkIGFuIGV4
ZWN1dGlvbiBjb250ZXh0LgpAQCAtMzM5LDE0ICszNDIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBXQVJOSU5HOiBDYWxsIHxpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBl
fCBvbmx5IG9uIGZyZXNoIGNvbnRleHRzIQogICAgICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsSGlk
ZGVuT2JqZWN0UHJvdG90eXBlKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKIAotICAgICAgICAv
LyBSZWdpc3RlcnMgYW4gZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJwYWdlcyB3aXRo
IGEgcGFydGljdWxhciBzY2hlbWUKLSAgICAgICAgLy8gSWYgdGhlIHNjaGVtZSBhcmd1bWVudCBp
cyBlbXB0eSwgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUgb24gYWxsIHBhZ2VzLgotICAgICAg
ICAvLyBXaWxsIG9ubHkgYWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMg
Y2FsbC4gVGFrZXMgb3duZXJzaGlwCi0gICAgICAgIC8vIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9i
amVjdCBwYXNzZWQuCisgICAgICAgIC8vIFJlZ2lzdGVycyBhIHY4IGV4dGVuc2lvbiB0byBiZSBh
dmFpbGFibGUgb24gd2VicGFnZXMuIFRoZSB0d28gZm9ybXMKKyAgICAgICAgLy8gb2ZmZXIgdmFy
aW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0eXBlcyBvZiBjb250ZXh0cyB0aGUgZXh0ZW5zaW9u
IGlzCisgICAgICAgIC8vIGxvYWRlZCBpbnRvLiBJZiBhIHNjaGVtZSBpcyBwcm92aWRlZCwgb25s
eSBwYWdlcyB3aG9zZSBVUkwgaGFzIHRoZSBnaXZlbgorICAgICAgICAvLyBzY2hlbWUgd2lsbCBt
YXRjaC4gSWYgZXh0ZW5zaW9uR3JvdXAgaXMgcHJvdmlkZWQsIHRoZSBleHRlbnNpb24gd2lsbAor
ICAgICAgICAvLyBvbmx5IGJlIGxvYWRlZCBpbnRvIHNjcmlwdHMgcnVuIHZpYSBldmFsdWF0ZUlu
TmV3V29ybGQgd2l0aCB0aGUKKyAgICAgICAgLy8gbWF0Y2hpbmcgZ3JvdXAuICBXaWxsIG9ubHkg
YWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMKKyAgICAgICAgLy8gY2Fs
bC4gVGFrZXMgb3duZXJzaGlwIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9iamVjdCBwYXNzZWQuCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qLCBjb25z
dCBTdHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiosIGludCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAg
ICAgLy8gRklYTUU6IFNlcGFyYXRlIHRoZXNlIGNvbmNlcm5zIGZyb20gVjhQcm94eT8KLSAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBnbG9iYWwpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD4gY3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4
dGVuc2lvbkdyb3VwKTsKICAgICAgICAgc3RhdGljIGJvb2wgaW5zdGFsbERPTVdpbmRvdyh2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvdyk7CiAKICAgICAg
ICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVkKCk7CkBAIC0zOTUsNiArNDAyLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46
Ok5ldyhtX3V0aWxpdHlDb250ZXh0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyRXh0ZW5zaW9uV2l0aFY4KHY4OjpFeHRlbnNpb24qKTsKKwogICAgICAgICBGcmFt
ZSogbV9mcmFtZTsKIAogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250
ZXh0Owo=
</data>
<flag name="review"
          id="17942"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>