<?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>32391</bug_id>
          
          <creation_ts>2009-12-10 13:05:00 -0800</creation_ts>
          <short_desc>Don&apos;t allow default framebuffer to be mutated</short_desc>
          <delta_ts>2009-12-15 11:08:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>32099</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>brettw</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>petersont</cc>
    
    <cc>rlp</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170497</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-10 13:05:00 -0800</bug_when>
    <thetext>In both WebKit and Chrome&apos;s WebGL implementations, when bindFramebuffer is called with a null framebuffer, an internal FBO is actually bound. To avoid breaking these implementations, framebufferRenderbuffer and framebufferTexture2D need to synthesize GL errors when the default framebuffer is bound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170618</commentid>
    <comment_count>1</comment_count>
      <attachid>44658</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-10 19:12:43 -0800</bug_when>
    <thetext>Created attachment 44658
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170619</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-10 19:17:29 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44658 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170628</commentid>
    <comment_count>3</comment_count>
      <attachid>44658</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-10 20:19:34 -0800</bug_when>
    <thetext>Comment on attachment 44658
Proposed patch

I think that active fbo should be tracked in the WebGLRenderingContext rather than the lower level -- in general the design of the graphics contexts is intended to minimise low level checking and instead have the DOM binding perform checks (eg. we assume webcore internally uses GraphicsContext3D in a safe way -- the DOM API assumes that web developers aren&apos;t)

This has the benefit of allowing all implementations to share the same guard logic implementation as well.

In all honesty I currently believe that too much of the validation is performed in the GraphicsContext3D implementations and intend to fix that at some point -- we basically want GraphicsContext3D to be a C++ object wrapping the appropriate system libraries with very little (if any) validation.

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170656</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-11 01:18:24 -0800</bug_when>
    <thetext>The fact that GraphicsContext3D uses a framebuffer object internally is an implementation detail. It is a violation of abstraction barriers to assume this in the WebGLRenderingContext. I believe this patch is correctly formulated as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170883</commentid>
    <comment_count>5</comment_count>
      <attachid>44704</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-11 12:53:40 -0800</bug_when>
    <thetext>Created attachment 44704
Revised patch

Moved synthesis of error messages from GraphicsContext3D to WebGLRenderingContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170884</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 12:57:00 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44704 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170895</commentid>
    <comment_count>7</comment_count>
      <attachid>44704</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-11 13:14:26 -0800</bug_when>
    <thetext>Comment on attachment 44704
Revised patch


&gt; +    // Don&apos;t allow the default framebuffer to be mutated; all current
&gt; +    // implementations use an FBO internally in place of the default
&gt; +    // FBO.
I&apos;m not sure why this needs to be specially commented as being implementation dependent, my understanding of the spec is such that when we unless the user has bound a framebuffer object then the default framebuffer 0 will be bound which is expected to produce an INVALID_OPERATION error. From the man page:
GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is bound.

Given the GraphicsContext3D is not necessarily using GL it would seem incorrect to require it to synthesize the GL error, when the WebGLRenderingContext must itself already know whether or not a framebuffer has been bound.

Your thoughts?

(looking at the changes to the actual GraphicsContext3D is depressing, i should sit down at some point and try and remove the layering violations -- DOM types shouldn&apos;t be used in the platform layer, my bad :-( )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170898</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-11 13:29:38 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 44704 [details])
&gt; 
&gt; &gt; +    // Don&apos;t allow the default framebuffer to be mutated; all current
&gt; &gt; +    // implementations use an FBO internally in place of the default
&gt; &gt; +    // FBO.
&gt; I&apos;m not sure why this needs to be specially commented as being implementation
&gt; dependent, my understanding of the spec is such that when we unless the user
&gt; has bound a framebuffer object then the default framebuffer 0 will be bound
&gt; which is expected to produce an INVALID_OPERATION error. From the man page:
&gt; GL_INVALID_OPERATION is generated if the default framebuffer object name 0 is
&gt; bound.
&gt; 
&gt; Given the GraphicsContext3D is not necessarily using GL it would seem incorrect
&gt; to require it to synthesize the GL error, when the WebGLRenderingContext must
&gt; itself already know whether or not a framebuffer has been bound.
&gt; 
&gt; Your thoughts?

The WebGLRenderingContext relies heavily on the GraphicsContext3D to implement OpenGL ES 2.0 semantics for the majority of OpenGL errors that are raised -- INVALID_ENUM, INVALID_VALUE, etc. The number of errors which are synthesized is very small compared to the number of errors that need to be caught by the real OpenGL implementation. It&apos;s impractical to replicate in the WebGLRenderingContext all of the checks that OpenGL would do.

It&apos;s really an implementation detail that the current GraphicsContext3Ds use a FBO internally which they bind when the user-level code binds the default framebuffer. Conceptually, the GraphicsContext3D should make it look like the default framebuffer is bound even though it isn&apos;t, and it should be the entity responsible for synthesizing the error. However, given that all of the current GraphicsContext3Ds do use FBOs internally, it seems okay to intercept these calls at the WebGLRenderingContext level, and this does increase code sharing.

In Chrome we are soon going to need to move the OpenGL calls out of the WebKit / &quot;renderer&quot; process. At that point the renderer process will send commands to a separate GPU process responsible for making the actual OpenGL calls. Since the renderer is untrusted code in this security model, many or most of the checks being done by the WebGLRenderingContext will need to be replicated in the GPU process. When we have this working we will want to have a discussion about how to conditionalize some of the validation in the WebGLRenderingContext. If Apple might want to move in the same architectural direction, we could share a large amount of code.

&gt; (looking at the changes to the actual GraphicsContext3D is depressing, i should
&gt; sit down at some point and try and remove the layering violations -- DOM types
&gt; shouldn&apos;t be used in the platform layer, my bad :-( )

I&apos;d be happy to help clean this up as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170950</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-11 15:10:20 -0800</bug_when>
    <thetext>&gt; The WebGLRenderingContext relies heavily on the GraphicsContext3D to implement
&gt; OpenGL ES 2.0 semantics for the majority of OpenGL errors that are raised --
&gt; INVALID_ENUM, INVALID_VALUE, etc. The number of errors which are synthesized is
&gt; very small compared to the number of errors that need to be caught by the real
&gt; OpenGL implementation. It&apos;s impractical to replicate in the
&gt; WebGLRenderingContext all of the checks that OpenGL would do.
Input validation logically has to occur in WebGLRenderingContext that&apos;s the boundary between trusted and untrusted code.  GraphicsContext3D should not be doing any validation.
 
&gt; In Chrome we are soon going to need to move the OpenGL calls out of the WebKit
&gt; / &quot;renderer&quot; process. At that point the renderer process will send commands to
&gt; a separate GPU process responsible for making the actual OpenGL calls. Since
&gt; the renderer is untrusted code in this security model, many or most of the
&gt; checks being done by the WebGLRenderingContext will need to be replicated in
&gt; the GPU process. When we have this working we will want to have a discussion
&gt; about how to conditionalize some of the validation in the
&gt; WebGLRenderingContext. If Apple might want to move in the same architectural
&gt; direction, we could share a large amount of code.

I was going to refactor GraphicsContext3DMac into GraphicsContext3DGL and GraphicsContext3DMac as building on GL to get code sharing going there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171009</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-11 18:16:43 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; The WebGLRenderingContext relies heavily on the GraphicsContext3D to implement
&gt; &gt; OpenGL ES 2.0 semantics for the majority of OpenGL errors that are raised --
&gt; &gt; INVALID_ENUM, INVALID_VALUE, etc. The number of errors which are synthesized is
&gt; &gt; very small compared to the number of errors that need to be caught by the real
&gt; &gt; OpenGL implementation. It&apos;s impractical to replicate in the
&gt; &gt; WebGLRenderingContext all of the checks that OpenGL would do.
&gt; Input validation logically has to occur in WebGLRenderingContext that&apos;s the
&gt; boundary between trusted and untrusted code.  GraphicsContext3D should not be
&gt; doing any validation.

In an architecture where the process containing WebGLRenderingContext&apos;s compiled code is untrusted, it isn&apos;t possible to rely upon its validation results. An attacker might sidestep them and issue GraphicsContext3D calls directly. The WebGLRenderingContext can still catch certain classes of erroneous inputs, but on the other side the serialized commands from the GraphicsContext3D must be validated.

For the near term we can certainly centralize the validation in the WebGLRenderingContext. It&apos;s better to have that code in one place rather than splitting it across the WebGLRenderingContext and GraphicsContext3D.

I&apos;d be glad to discuss this more via email or face-to-face. Hopefully this discussion will not impact the review of this particular patch.

&gt; &gt; In Chrome we are soon going to need to move the OpenGL calls out of the WebKit
&gt; &gt; / &quot;renderer&quot; process. At that point the renderer process will send commands to
&gt; &gt; a separate GPU process responsible for making the actual OpenGL calls. Since
&gt; &gt; the renderer is untrusted code in this security model, many or most of the
&gt; &gt; checks being done by the WebGLRenderingContext will need to be replicated in
&gt; &gt; the GPU process. When we have this working we will want to have a discussion
&gt; &gt; about how to conditionalize some of the validation in the
&gt; &gt; WebGLRenderingContext. If Apple might want to move in the same architectural
&gt; &gt; direction, we could share a large amount of code.
&gt; 
&gt; I was going to refactor GraphicsContext3DMac into GraphicsContext3DGL and
&gt; GraphicsContext3DMac as building on GL to get code sharing going there.

In the Chrome implementation we&apos;ll soon need a way to swap out the calls to the GL entry points. I&apos;m not familiar with the WebKit API that was just checked in but I think that we need a way to register a factory for GraphicsContext3D instances. If GraphicsContext3DGL contained only shared code but left the actual GL calls up to a subclass, that would work well. I&apos;d like to discuss this more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171490</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-12-14 11:49:23 -0800</bug_when>
    <thetext>Could I please get a review of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171931</commentid>
    <comment_count>12</comment_count>
      <attachid>44704</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-15 11:08:22 -0800</bug_when>
    <thetext>Comment on attachment 44704
Revised patch

Clearing flags on attachment: 44704

Committed r52164: &lt;http://trac.webkit.org/changeset/52164&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171932</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-15 11:08:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44658</attachid>
            <date>2009-12-10 19:12:43 -0800</date>
            <delta_ts>2009-12-11 12:53:40 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>18935</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTk3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMTItMTAgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERv
bid0IGFsbG93IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzOTEKKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorCiAyMDA5LTEyLTEwICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAkocmV2aXNpb24gNTE5NzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTYzNiw2ICs2MzYsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOwogICAg
ICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgICAgIExp
c3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOworICAgICAgICAvLyBG
b3IgdHJhY2tpbmcgd2hldGhlciB0aGUgaW50ZXJuYWwgRkJPIGlzIGJvdW5kCisgICAgICAgIEdM
dWludCBtX2JvdW5kRkJPOwogI2VuZGlmICAgICAgICAKIAogICAgICAgICAvLyBGSVhNRTogaWRl
YWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5j
cHAJKHJldmlzaW9uIDUxOTc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIEdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCgpCiAgICAgLCBtX3RleHR1cmUoMCkK
ICAgICAsIG1fZmJvKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2JvdW5kRkJP
KDApCiB7CiAgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOwogICAg
IENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKQEAgLTE1MSw2ICsxNTIsNyBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoKQogICAgIC8vIGNyZWF0ZSBh
biBGQk8KICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5k
RkJPID0gbV9mYm87CiAgICAgCiAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVw
dGhCdWZmZXIpOwogICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhCdWZmZXIpOwpAQCAtMjA0LDYgKzIwNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgMCk7CiAgICAgCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CiAgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CiAgICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9O
RU5ULCB3aWR0aCwgaGVpZ2h0KTsKICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCAwKTsKQEAgLTI2Miw3ICsyNjUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQnVmZmVyKHVuc2lnCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCh0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiBtX2Zibyk7
CisgICAgR0x1aW50IGlkID0gYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IG1f
ZmJvOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBpZCk7CisgICAgbV9ib3Vu
ZEZCTyA9IGlkOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQpA
QCAtNDY5LDEyICs0NzQsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlcikKIHsKKyAgICBpZiAobV9i
b3VuZEZCTyA9PSBtX2ZibykgeworICAgICAgICAvLyBUcmVhdCB0aGlzIGFzIHRob3VnaCB0aGUg
ZGVmYXVsdCBmcmFtZWJ1ZmZlciBvYmplY3QgbmFtZSAwCisgICAgICAgIC8vIGlzIGJvdW5kIC0t
IGRvbid0IGxldCB1c2VyIGNvZGUgZGVzdHJveSB0aGUgc3RhdGUgb2YgdGhlCisgICAgICAgIC8v
IGludGVybmFsIGZyYW1lYnVmZmVyIG9iamVjdC4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
dGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQp
IGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJh
bWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
bG9uZyBsZXZlbCkKIHsKKyAgICBpZiAobV9ib3VuZEZCTyA9PSBtX2ZibykgeworICAgICAgICAv
LyBUcmVhdCB0aGlzIGFzIHRob3VnaCB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciBvYmplY3QgbmFt
ZSAwCisgICAgICAgIC8vIGlzIGJvdW5kIC0tIGRvbid0IGxldCB1c2VyIGNvZGUgZGVzdHJveSB0
aGUgc3RhdGUgb2YgdGhlCisgICAgICAgIC8vIGludGVybmFsIGZyYW1lYnVmZmVyIG9iamVjdC4K
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6Omds
RnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRl
eHR1cmUgPyAoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSA6IDAsIGxldmVsKTsKIH0KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gNTE5NzYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMTAgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERvbid0IGFsbG93IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0
YXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIz
OTEKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kRnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKwogMjAwOS0x
Mi0xMCAgTWlrZSBCZWxzaGUgIDxtaWtlQGJlbHNoZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgYnVpbGQgZml4IGZvciBjaHJvbWl1bS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA1MTk3NikKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTEgKzExNiwx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVy
ZSk7CiAgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAogICAgICAgICAg
ICAgICAgICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBXZWJHTEZy
YW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSk7
CiAgICAgdm9pZCBidWZmZXJEYXRhSW1wbCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwogICAgIHZvaWQgZGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIHZvaWQgZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdm9pZCBmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRh
Y2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZm
ZXIqIHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsKTsKICAgICB1bnNpZ25l
ZCBsb25nIGdldEVycm9yKCk7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVk
IGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7CkBAIC0xMzQsNiArMTM4LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBpbnQg
bV9kZXB0aEJ1ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRI
ZWlnaHQ7CiAKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hldGhlciB0aGUgaW50ZXJuYWwgRkJPIGlz
IGJvdW5kCisgICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87CisKICNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKICAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOwogICAgIHZv
aWQgZmxpcFZlcnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCkBAIC0yMzQsNiAr
MjQxLDcgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZQogICAgIDog
bV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAg
ICwgbV9ib3VuZEZCTygwKQogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAg
ICwgbV9zY2FubGluZSgwKQogI2VuZGlmCkBAIC01OTQsNiArNjAyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAogICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCAw
KTsKIAogICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OworICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CiAgICAgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDAp
OwpAQCAtNjgxLDYgKzY5MCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVn
aW5QYWkKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKICAgICB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9i
b3VuZEZCTyAhPSBtX2Zibyk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICNpZiBQTEFURk9S
TShTS0lBKQogICAgIGNvbnN0IFNrQml0bWFwKiBjYW52YXNCaXRtYXAgPSBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCk7CiAgICAgY29uc3QgU2tCaXRt
YXAqIHJlYWRiYWNrQml0bWFwID0gMDsKQEAgLTczMCw2ICs3NDIsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxh
dGZvcm0KICNlbmRpZgogCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworCiAjaWZkZWYg
RkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAgaWYgKHBpeGVscykKICAgICAgICAgZmxp
cFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCk7CkBAIC03
ODgsNiArODAzLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEJ1ZmYK
ICAgICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZJRCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViR0xGcmFtZWJ1
ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1
aW50IGlkID0gRVhUUkFDVChmcmFtZWJ1ZmZlcik7CisgICAgaWYgKCFpZCkKKyAgICAgICAgaWQg
PSBtX2ZibzsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGlkKTsKKyAgICBtX2Jv
dW5kRkJPID0gaWQ7Cit9CisKIC8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xfVEVYVFVS
RV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKIC8vIHdlIGNvdWxkIGp1c3QgdXNlOgogLy8gR0xfU0FN
RV9NRVRIT0RfMl9YMihCaW5kVGV4dHVyZSwgYmluZFRleHR1cmUsIHVuc2lnbmVkIGxvbmcsIFdl
YkdMVGV4dHVyZSopCkBAIC04NTEsNiArODc3LDMyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6ZW5hYmxlVmUKICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsK
IH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNp
Z25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBpZiAobV9ib3VuZEZCTyA9PSBtX2ZibykgeworICAgICAgICAvLyBUcmVh
dCB0aGlzIGFzIHRob3VnaCB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciBvYmplY3QgbmFtZSAwCisg
ICAgICAgIC8vIGlzIGJvdW5kIC0tIGRvbid0IGxldCB1c2VyIGNvZGUgZGVzdHJveSB0aGUgc3Rh
dGUgb2YgdGhlCisgICAgICAgIC8vIGludGVybmFsIGZyYW1lYnVmZmVyIG9iamVjdC4KKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCBFWFRSQUNUKHJlbmRlcmJ1ZmZlcikpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBX
ZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwpCit7CisgICAgaWYgKG1fYm91bmRGQk8g
PT0gbV9mYm8pIHsKKyAgICAgICAgLy8gVHJlYXQgdGhpcyBhcyB0aG91Z2ggdGhlIGRlZmF1bHQg
ZnJhbWVidWZmZXIgb2JqZWN0IG5hbWUgMAorICAgICAgICAvLyBpcyBib3VuZCAtLSBkb24ndCBs
ZXQgdXNlciBjb2RlIGRlc3Ryb3kgdGhlIHN0YXRlIG9mIHRoZQorICAgICAgICAvLyBpbnRlcm5h
bCBmcmFtZWJ1ZmZlciBvYmplY3QuCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgRVhUUkFDVCh0ZXh0dXJlKSwgbGV2ZWwpOwor
fQorCiB1bnNpZ25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEVycm9yKCkK
IHsKICAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkgewpAQCAtMTE5MCw3ICsx
MjQyLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWcKICAgICBt
X2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKIH0KIAotR0xfU0FNRV9NRVRI
T0RfMl9YMihCaW5kRnJhbWVidWZmZXJFWFQsIGJpbmRGcmFtZWJ1ZmZlciwgdW5zaWduZWQgbG9u
ZywgV2ViR0xGcmFtZWJ1ZmZlciopCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
KQoreworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVy
KTsKK30KIAogR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kUmVuZGVyYnVmZmVyRVhULCBiaW5kUmVu
ZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCiAKQEAgLTEzNDks
OSArMTQwNCwxNSBAQCBHTF9TQU1FX01FVEhPRF8wKEZpbmlzaCwgZmluaXNoKQogCiBHTF9TQU1F
X01FVEhPRF8wKEZsdXNoLCBmbHVzaCkKIAotR0xfU0FNRV9NRVRIT0RfNF9YNChGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVCwgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIG1faW50
ZXJuYWwtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQogCi1HTF9TQU1FX01FVEhPRF81X1g0KEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhULCBmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKiwgbG9uZykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0
LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1
cmUsIGxldmVsKTsKK30KIAogR0xfU0FNRV9NRVRIT0RfMShGcm9udEZhY2UsIGZyb250RmFjZSwg
dW5zaWduZWQgbG9uZykKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTE5NzYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0xMCAg
S2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRG9uJ3QgYWxsb3cgZGVmYXVsdCBmcmFtZWJ1ZmZl
ciB0byBiZSBtdXRhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMjM5MQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZXJyb3ItcmVwb3J0
aW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9iamVj
dC1iZWhhdmlvdXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Nj
cmlwdC10ZXN0cy9lcnJvci1yZXBvcnRpbmcuanM6CisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvc2NyaXB0LXRlc3RzL251bGwtb2JqZWN0LWJlaGF2aW91ci5qczoKKwogMjAwOS0xMi0xMCAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdh
dmluIEJhcnJhY2xvdWdoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZXJy
b3ItcmVwb3J0aW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9lcnJvci1yZXBvcnRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MTk3
NikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Vycm9yLXJlcG9ydGluZy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDE1IEBAIFBBU1MgY29udGV4dC5n
ZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVIKIFBBU1MgY29udGV4dC5nZXRBY3RpdmVVbmlmb3Jt
KHByb2dyYW0sIDUwKSBpcyBudWxsCiBQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0
LklOVkFMSURfVkFMVUUKIFBBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVJS
T1IKK1Rlc3RpbmcgYXR0ZW1wdHMgdG8gbWFuaXB1bGF0ZSB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZl
cgorUEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCAwKSBp
cyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0Lk5PX0VSUk9S
CitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZF
UiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkgaXMg
dW5kZWZpbmVkLgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX09Q
RVJBVElPTgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgorUEFT
UyBjb250ZXh0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKGNvbnRleHQuRlJBTUVCVUZGRVIsIGNvbnRl
eHQuQ09MT1JfQVRUQUNITUVOVDAsIGNvbnRleHQuVEVYVFVSRV8yRCwgMCwgMCkgaXMgdW5kZWZp
bmVkLgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX09QRVJBVElP
TgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9iamVjdC1iZWhhdmlvdXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJl
aGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUxOTc2KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVoYXZpb3VyLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYsNiArMTYsOCBAQCBQQVNTIGNvbnRleHQuYmluZEJ1ZmZlcihjb250ZXh0
LkFSUkFZX0JVCiBQQVNTIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZG
RVIsIDApIGlzIHVuZGVmaW5lZC4KIFBBU1MgY29udGV4dC5iaW5kUmVuZGVyYnVmZmVyKGNvbnRl
eHQuUkVOREVSQlVGRkVSLCAwKSBpcyB1bmRlZmluZWQuCiBQQVNTIGNvbnRleHQuYmluZFRleHR1
cmUoY29udGV4dC5URVhUVVJFXzJELCAwKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHQuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9B
VFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkgdGhyZXcgZXhjZXB0aW9uIEdMIGVy
cm9yIDEyODIgaW4gZnJhbWVidWZmZXJSZW5kZXJidWZmZXIuCitQQVNTIGNvbnRleHQuZnJhbWVi
dWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hN
RU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAwKSB0aHJldyBleGNlcHRpb24gR0wgZXJyb3Ig
MTI4MiBpbiBmcmFtZWJ1ZmZlclRleHR1cmUyRC4KIFBBU1MgY29udGV4dC5nZXRQcm9ncmFtUGFy
YW1ldGVyKHVuZGVmaW5lZCwgMCkgdGhyZXcgZXhjZXB0aW9uIEdMIGVycm9yIDEyODIgaW4gZ2V0
UHJvZ3JhbVBhcmFtZXRlci4KIFBBU1MgY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyh1bmRlZmlu
ZWQsIDApIHRocmV3IGV4Y2VwdGlvbiBHTCBlcnJvciAxMjgyIGluIGdldFByb2dyYW1JbmZvTG9n
LgogUEFTUyBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcih1bmRlZmluZWQsIDApIHRocmV3IGV4
Y2VwdGlvbiBHTCBlcnJvciAxMjgyIGluIGdldFNoYWRlclBhcmFtZXRlci4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9lcnJvci1yZXBvcnRpbmcuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3Rz
L2Vycm9yLXJlcG9ydGluZy5qcwkocmV2aXNpb24gNTE5NzYpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvZXJyb3ItcmVwb3J0aW5nLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwyMCArMzYsMTggQEAgc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJj
b250ZXh0LgogLy8gRXJyb3Igc3RhdGUgc2hvdWxkIGJlIGNsZWFyIGJ5IHRoaXMgcG9pbnQKIHNo
b3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOwogCi0vLyBG
SVhNRTogdGhlIGZvbGxvd2luZyB0ZXN0cyBkb24ndCB3b3JrIHByb3Blcmx5IHlldAotLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzkxCi0vLyBkZWJ1ZygiVGVz
dGluZyBhdHRlbXB0cyB0byBtYW5pcHVsYXRlIHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIik7Ci0v
LyBzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dC5iaW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFN
RUJVRkZFUiwgMCkiKTsKLS8vIHNob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4
dC5OT19FUlJPUiIpOwotLy8gc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5U
LCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkiKTsKLS8vIC8vIFN5bnRoZXRpYyBPcGVuR0wgZXJy
b3IKLS8vIHNob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5JTlZBTElEX09Q
RVJBVElPTiIpOwotLy8gLy8gRXJyb3Igc3RhdGUgc2hvdWxkIGJlIGNsZWFyIGJ5IHRoaXMgcG9p
bnQKLS8vIHNob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIp
OwotLy8gc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29u
dGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhU
VVJFXzJELCAwLCAwKSIpOwotLy8gLy8gU3ludGhldGljIE9wZW5HTCBlcnJvcgotLy8gc2hvdWxk
QmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OIik7Ci0v
LyAvLyBFcnJvciBzdGF0ZSBzaG91bGQgYmUgY2xlYXIgYnkgdGhpcyBwb2ludAotLy8gc2hvdWxk
QmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0Lk5PX0VSUk9SIik7CitkZWJ1ZygiVGVz
dGluZyBhdHRlbXB0cyB0byBtYW5pcHVsYXRlIHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIik7Citz
aG91bGRCZVVuZGVmaW5lZCgiY29udGV4dC5iaW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJV
RkZFUiwgMCkiKTsKK3Nob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19F
UlJPUiIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0
LlJFTkRFUkJVRkZFUiwgMCkiKTsKKy8vIFN5bnRoZXRpYyBPcGVuR0wgZXJyb3IKK3Nob3VsZEJl
KCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5JTlZBTElEX09QRVJBVElPTiIpOworLy8g
RXJyb3Igc3RhdGUgc2hvdWxkIGJlIGNsZWFyIGJ5IHRoaXMgcG9pbnQKK3Nob3VsZEJlKCJjb250
ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOworc2hvdWxkQmVVbmRlZmluZWQo
ImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4
dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAwKSIpOworLy8gU3lu
dGhldGljIE9wZW5HTCBlcnJvcgorc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250
ZXh0LklOVkFMSURfT1BFUkFUSU9OIik7CisvLyBFcnJvciBzdGF0ZSBzaG91bGQgYmUgY2xlYXIg
YnkgdGhpcyBwb2ludAorc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0Lk5P
X0VSUk9SIik7CiAKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvbnVsbC1vYmplY3QtYmVoYXZpb3VyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0
cy9udWxsLW9iamVjdC1iZWhhdmlvdXIuanMJKHJldmlzaW9uIDUxOTc2KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL251bGwtb2JqZWN0LWJlaGF2aW91ci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTgsMTAgKzE4LDEyIEBAIHNob3VsZEJlVW5kZWZpbmVkKCJj
b250ZXh0LmJpbmRCdWZmZXIoY28KIHNob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0LmJpbmRGcmFt
ZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCAwKSIpOwogc2hvdWxkQmVVbmRlZmluZWQoImNv
bnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkiKTsKIHNob3Vs
ZEJlVW5kZWZpbmVkKCJjb250ZXh0LmJpbmRUZXh0dXJlKGNvbnRleHQuVEVYVFVSRV8yRCwgMCki
KTsKLS8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIHR3byB0ZXN0cyBzaG91bGQgc3RhdGUgc2hvdWxk
VGhyb3csIG5vdCBzaG91bGRCZVVuZGVmaW5lZAotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzkxCi0vLyBzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dC5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCBjb250ZXh0LkRFUFRIX0FU
VEFDSE1FTlQsIGNvbnRleHQuUkVOREVSQlVGRkVSLCAwKSIpOwotLy8gc2hvdWxkQmVVbmRlZmlu
ZWQoImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29u
dGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAwKSIpOworLy8g
VGhlIGZvbGxvd2luZyB0d28gdGhyb3cgZXhjZXB0aW9ucyBiZWNhdXNlIGNvbmNlcHR1YWxseSBu
bworLy8gZnJhbWVidWZmZXIgaXMgYm91bmQgYXQgdGhpcyBwb2ludC4gSW4gcmVhbGl0eSB0aGUg
V2ViR0wKKy8vIGltcGxlbWVudGF0aW9uJ3MgaW50ZXJuYWwgZnJhbWVidWZmZXIgaXMgYm91bmQs
IGJ1dCB3ZSBjYW4ndCBhbGxvdworLy8gdXNlciBjb2RlIHRvIG1hbmlwdWxhdGUgaXQuCitzaG91
bGRUaHJvdygiY29udGV4dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihjb250ZXh0LkZSQU1FQlVG
RkVSLCBjb250ZXh0LkRFUFRIX0FUVEFDSE1FTlQsIGNvbnRleHQuUkVOREVSQlVGRkVSLCAwKSIp
Oworc2hvdWxkVGhyb3coImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFN
RUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAw
LCAwKSIpOwogc2hvdWxkVGhyb3coImNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcih1bmRlZmlu
ZWQsIDApIik7CiBzaG91bGRUaHJvdygiY29udGV4dC5nZXRQcm9ncmFtSW5mb0xvZyh1bmRlZmlu
ZWQsIDApIik7CiBzaG91bGRUaHJvdygiY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIodW5kZWZp
bmVkLCAwKSIpOwo=
</data>
<flag name="review"
          id="26558"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44704</attachid>
            <date>2009-12-11 12:53:40 -0800</date>
            <delta_ts>2009-12-15 11:08:22 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>14288</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjAxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMTItMTEgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERv
bid0IGFsbG93IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzOTEKKworICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToK
KwogMjAwOS0xMi0xMSAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA1MTk3NikKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEwLDYgKzcxMCwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVi
dWZmZXJSCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gICAgICAg
CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRl
ZDsgYWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5h
bGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpA
QCAtNzIxLDYgKzcyOCwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZm
ZXJUCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAvLyBE
b24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3Vy
cmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxh
Y2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5j
cHAJKHJldmlzaW9uIDUxOTc2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZwogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyKiBidWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBidWZmZXIt
Pm9iamVjdCgpIDogbV9mYm8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCAo
YnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6
IG1fZmJvKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTIwMTUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMTItMTEgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERvbid0IGFsbG93IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUg
bXV0YXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzOTEKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5Q
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5k
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcik6CisKIDIwMDktMTItMTEgIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDUxOTc2KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw2ICsxMTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVk
IGxvbmcgdGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LAogICAgICAgICAgICAgICAgICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyKTsKKyAgICB2b2lkIGJp
bmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVy
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSk7CiAgICAgdm9pZCBidWZmZXJEYXRhSW1wbCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgaW50IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwpAQCAt
MTM0LDYgKzEzNiw5IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgaW50IG1fZGVwdGhCdWZmZXI7
CiAgICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0OwogCisgICAg
Ly8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3VuZAorICAgIHVuc2lnbmVkIGludCBtX2Jv
dW5kRkJPOworCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAgdW5zaWdu
ZWQgY2hhciogbV9zY2FubGluZTsKICAgICB2b2lkIGZsaXBWZXJ0aWNhbGx5KHVuc2lnbmVkIGNo
YXIqIGZyYW1lYnVmZmVyLApAQCAtMjM0LDYgKzIzOSw3IEBAIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OkdyYXBoaWNzQ29udGUKICAgICA6IG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkK
ICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKICNpZmRlZiBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICAsIG1fc2NhbmxpbmUoMCkKICNlbmRpZgpAQCAt
NTk0LDYgKzYwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSgK
ICAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CiAKICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CiAg
ICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZm
ZXIpOwogICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBH
TF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKQEAgLTY4MSw2ICs2ODgsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gMDsKKyAg
ICBib29sIG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0gbV9mYm8pOworICAgIGlmICht
dXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX2Zibyk7CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBjb25zdCBTa0JpdG1hcCog
Y2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmJpdG1hcCgpOwogICAgIGNvbnN0IFNrQml0bWFwKiByZWFkYmFja0JpdG1hcCA9IDA7CkBAIC03
MzAsNiArNzQwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQog
I2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIAorICAgIGlmIChtdXN0
UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2JvdW5kRkJPKTsKKwogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQog
ICAgIGlmIChwaXhlbHMpCiAgICAgICAgIGZsaXBWZXJ0aWNhbGx5KHBpeGVscywgbV9jYWNoZWRX
aWR0aCwgbV9jYWNoZWRIZWlnaHQpOwpAQCAtNzg4LDYgKzgwMSwxNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJpbmRCdWZmCiAgICAgZ2xCaW5kQnVmZmVyKHRhcmdldCwgYnVm
SUQpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBpZCA9IEVYVFJBQ1QoZnJhbWVidWZmZXIp
OworICAgIGlmICghaWQpCisgICAgICAgIGlkID0gbV9mYm87CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQodGFyZ2V0LCBpZCk7CisgICAgbV9ib3VuZEZCTyA9IGlkOworfQorCiAvLyBJZiB3ZSBk
aWRuJ3QgaGF2ZSB0byBoYWNrIEdMX1RFWFRVUkVfV1JBUF9SIGZvciBjdWJlIG1hcHMsCiAvLyB3
ZSBjb3VsZCBqdXN0IHVzZToKIC8vIEdMX1NBTUVfTUVUSE9EXzJfWDIoQmluZFRleHR1cmUsIGJp
bmRUZXh0dXJlLCB1bnNpZ25lZCBsb25nLCBXZWJHTFRleHR1cmUqKQpAQCAtMTE5MCw3ICsxMjE0
LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWcKICAgICBtX2lu
dGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKIH0KIAotR0xfU0FNRV9NRVRIT0Rf
Ml9YMihCaW5kRnJhbWVidWZmZXJFWFQsIGJpbmRGcmFtZWJ1ZmZlciwgdW5zaWduZWQgbG9uZywg
V2ViR0xGcmFtZWJ1ZmZlciopCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQor
eworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVyKTsK
K30KIAogR0xfU0FNRV9NRVRIT0RfMl9YMihCaW5kUmVuZGVyYnVmZmVyRVhULCBiaW5kUmVuZGVy
YnVmZmVyLCB1bnNpZ25lZCBsb25nLCBXZWJHTFJlbmRlcmJ1ZmZlciopCiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDUyMDE1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMTItMTEgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERv
bid0IGFsbG93IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzOTEKKworICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2Vycm9yLXJlcG9ydGluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVoYXZpb3VyLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvZXJyb3ItcmVwb3J0aW5nLmpz
OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9udWxsLW9iamVjdC1i
ZWhhdmlvdXIuanM6CisKIDIwMDktMTItMTEgIERyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZXJyb3ItcmVwb3J0aW5nLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9lcnJvci1yZXBvcnRpbmct
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MTk3NikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2Vycm9yLXJlcG9ydGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3
LDYgKzE3LDE1IEBAIFBBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVIKIFBB
U1MgY29udGV4dC5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIDUwKSBpcyBudWxsCiBQQVNTIGNv
bnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKIFBBU1MgY29udGV4dC5n
ZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVJST1IKK1Rlc3RpbmcgYXR0ZW1wdHMgdG8gbWFuaXB1
bGF0ZSB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlcgorUEFTUyBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZl
cihjb250ZXh0LkZSQU1FQlVGRkVSLCAwKSBpcyB1bmRlZmluZWQuCitQQVNTIGNvbnRleHQuZ2V0
RXJyb3IoKSBpcyBjb250ZXh0Lk5PX0VSUk9SCitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBj
b250ZXh0LlJFTkRFUkJVRkZFUiwgMCkgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0LmdldEVy
cm9yKCkgaXMgY29udGV4dC5JTlZBTElEX09QRVJBVElPTgorUEFTUyBjb250ZXh0LmdldEVycm9y
KCkgaXMgY29udGV4dC5OT19FUlJPUgorUEFTUyBjb250ZXh0LmZyYW1lYnVmZmVyVGV4dHVyZTJE
KGNvbnRleHQuRlJBTUVCVUZGRVIsIGNvbnRleHQuQ09MT1JfQVRUQUNITUVOVDAsIGNvbnRleHQu
VEVYVFVSRV8yRCwgMCwgMCkgaXMgdW5kZWZpbmVkLgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkg
aXMgY29udGV4dC5JTlZBTElEX09QRVJBVElPTgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMg
Y29udGV4dC5OT19FUlJPUgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9udWxsLW9iamVj
dC1iZWhhdmlvdXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDUxOTc2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVo
YXZpb3VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsOCBAQCBQQVNT
IGNvbnRleHQuYmluZEJ1ZmZlcihjb250ZXh0LkFSUkFZX0JVCiBQQVNTIGNvbnRleHQuYmluZEZy
YW1lYnVmZmVyKGNvbnRleHQuRlJBTUVCVUZGRVIsIDApIGlzIHVuZGVmaW5lZC4KIFBBU1MgY29u
dGV4dC5iaW5kUmVuZGVyYnVmZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCAwKSBpcyB1bmRlZmlu
ZWQuCiBQQVNTIGNvbnRleHQuYmluZFRleHR1cmUoY29udGV4dC5URVhUVVJFXzJELCAwKSBpcyB1
bmRlZmluZWQuCitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5G
UkFNRUJVRkZFUiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZF
UiwgMCkgdGhyZXcgZXhjZXB0aW9uIEdMIGVycm9yIDEyODIgaW4gZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIuCitQQVNTIGNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJV
RkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAw
KSB0aHJldyBleGNlcHRpb24gR0wgZXJyb3IgMTI4MiBpbiBmcmFtZWJ1ZmZlclRleHR1cmUyRC4K
IFBBU1MgY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHVuZGVmaW5lZCwgMCkgdGhyZXcgZXhj
ZXB0aW9uIEdMIGVycm9yIDEyODIgaW4gZ2V0UHJvZ3JhbVBhcmFtZXRlci4KIFBBU1MgY29udGV4
dC5nZXRQcm9ncmFtSW5mb0xvZyh1bmRlZmluZWQsIDApIHRocmV3IGV4Y2VwdGlvbiBHTCBlcnJv
ciAxMjgyIGluIGdldFByb2dyYW1JbmZvTG9nLgogUEFTUyBjb250ZXh0LmdldFNoYWRlclBhcmFt
ZXRlcih1bmRlZmluZWQsIDApIHRocmV3IGV4Y2VwdGlvbiBHTCBlcnJvciAxMjgyIGluIGdldFNo
YWRlclBhcmFtZXRlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Njcmlw
dC10ZXN0cy9lcnJvci1yZXBvcnRpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2Vycm9yLXJlcG9ydGluZy5qcwkocmV2aXNpb24g
NTE5NzYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvZXJy
b3ItcmVwb3J0aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMCArMzYsMTggQEAgc2hvdWxk
QmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0LgogLy8gRXJyb3Igc3RhdGUgc2hvdWxk
IGJlIGNsZWFyIGJ5IHRoaXMgcG9pbnQKIHNob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAi
Y29udGV4dC5OT19FUlJPUiIpOwogCi0vLyBGSVhNRTogdGhlIGZvbGxvd2luZyB0ZXN0cyBkb24n
dCB3b3JrIHByb3Blcmx5IHlldAotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzkxCi0vLyBkZWJ1ZygiVGVzdGluZyBhdHRlbXB0cyB0byBtYW5pcHVsYXRlIHRo
ZSBkZWZhdWx0IGZyYW1lYnVmZmVyIik7Ci0vLyBzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dC5i
aW5kRnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgMCkiKTsKLS8vIHNob3VsZEJlKCJj
b250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOwotLy8gc2hvdWxkQmVVbmRl
ZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZF
UiwgY29udGV4dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkiKTsK
LS8vIC8vIFN5bnRoZXRpYyBPcGVuR0wgZXJyb3IKLS8vIHNob3VsZEJlKCJjb250ZXh0LmdldEVy
cm9yKCkiLCAiY29udGV4dC5JTlZBTElEX09QRVJBVElPTiIpOwotLy8gLy8gRXJyb3Igc3RhdGUg
c2hvdWxkIGJlIGNsZWFyIGJ5IHRoaXMgcG9pbnQKLS8vIHNob3VsZEJlKCJjb250ZXh0LmdldEVy
cm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOwotLy8gc2hvdWxkQmVVbmRlZmluZWQoImNvbnRl
eHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xP
Ul9BVFRBQ0hNRU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAwKSIpOwotLy8gLy8gU3ludGhl
dGljIE9wZW5HTCBlcnJvcgotLy8gc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250
ZXh0LklOVkFMSURfT1BFUkFUSU9OIik7Ci0vLyAvLyBFcnJvciBzdGF0ZSBzaG91bGQgYmUgY2xl
YXIgYnkgdGhpcyBwb2ludAotLy8gc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250
ZXh0Lk5PX0VSUk9SIik7CitkZWJ1ZygiVGVzdGluZyBhdHRlbXB0cyB0byBtYW5pcHVsYXRlIHRo
ZSBkZWZhdWx0IGZyYW1lYnVmZmVyIik7CitzaG91bGRCZVVuZGVmaW5lZCgiY29udGV4dC5iaW5k
RnJhbWVidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgMCkiKTsKK3Nob3VsZEJlKCJjb250ZXh0
LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOworc2hvdWxkQmVVbmRlZmluZWQoImNv
bnRleHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4
dC5ERVBUSF9BVFRBQ0hNRU5ULCBjb250ZXh0LlJFTkRFUkJVRkZFUiwgMCkiKTsKKy8vIFN5bnRo
ZXRpYyBPcGVuR0wgZXJyb3IKK3Nob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4
dC5JTlZBTElEX09QRVJBVElPTiIpOworLy8gRXJyb3Igc3RhdGUgc2hvdWxkIGJlIGNsZWFyIGJ5
IHRoaXMgcG9pbnQKK3Nob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19F
UlJPUiIpOworc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJlMkQo
Y29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4dC5U
RVhUVVJFXzJELCAwLCAwKSIpOworLy8gU3ludGhldGljIE9wZW5HTCBlcnJvcgorc2hvdWxkQmUo
ImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OIik7CisvLyBF
cnJvciBzdGF0ZSBzaG91bGQgYmUgY2xlYXIgYnkgdGhpcyBwb2ludAorc2hvdWxkQmUoImNvbnRl
eHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0Lk5PX0VSUk9SIik7CiAKIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVz
dHMvbnVsbC1vYmplY3QtYmVoYXZpb3VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9udWxsLW9iamVjdC1iZWhhdmlvdXIuanMJKHJl
dmlzaW9uIDUxOTc2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRl
c3RzL251bGwtb2JqZWN0LWJlaGF2aW91ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTgsMTAgKzE4
LDEyIEBAIHNob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0LmJpbmRCdWZmZXIoY28KIHNob3VsZEJl
VW5kZWZpbmVkKCJjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCAw
KSIpOwogc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuYmluZFJlbmRlcmJ1ZmZlcihjb250ZXh0
LlJFTkRFUkJVRkZFUiwgMCkiKTsKIHNob3VsZEJlVW5kZWZpbmVkKCJjb250ZXh0LmJpbmRUZXh0
dXJlKGNvbnRleHQuVEVYVFVSRV8yRCwgMCkiKTsKLS8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIHR3
byB0ZXN0cyBzaG91bGQgc3RhdGUgc2hvdWxkVGhyb3csIG5vdCBzaG91bGRCZVVuZGVmaW5lZAot
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzkxCi0vLyBzaG91
bGRCZVVuZGVmaW5lZCgiY29udGV4dC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihjb250ZXh0LkZS
QU1FQlVGRkVSLCBjb250ZXh0LkRFUFRIX0FUVEFDSE1FTlQsIGNvbnRleHQuUkVOREVSQlVGRkVS
LCAwKSIpOwotLy8gc2hvdWxkQmVVbmRlZmluZWQoImNvbnRleHQuZnJhbWVidWZmZXJUZXh0dXJl
MkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hNRU5UMCwgY29udGV4
dC5URVhUVVJFXzJELCAwLCAwKSIpOworLy8gVGhlIGZvbGxvd2luZyB0d28gdGhyb3cgZXhjZXB0
aW9ucyBiZWNhdXNlIGNvbmNlcHR1YWxseSBubworLy8gZnJhbWVidWZmZXIgaXMgYm91bmQgYXQg
dGhpcyBwb2ludC4gSW4gcmVhbGl0eSB0aGUgV2ViR0wKKy8vIGltcGxlbWVudGF0aW9uJ3MgaW50
ZXJuYWwgZnJhbWVidWZmZXIgaXMgYm91bmQsIGJ1dCB3ZSBjYW4ndCBhbGxvdworLy8gdXNlciBj
b2RlIHRvIG1hbmlwdWxhdGUgaXQuCitzaG91bGRUaHJvdygiY29udGV4dC5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihjb250ZXh0LkZSQU1FQlVGRkVSLCBjb250ZXh0LkRFUFRIX0FUVEFDSE1FTlQs
IGNvbnRleHQuUkVOREVSQlVGRkVSLCAwKSIpOworc2hvdWxkVGhyb3coImNvbnRleHQuZnJhbWVi
dWZmZXJUZXh0dXJlMkQoY29udGV4dC5GUkFNRUJVRkZFUiwgY29udGV4dC5DT0xPUl9BVFRBQ0hN
RU5UMCwgY29udGV4dC5URVhUVVJFXzJELCAwLCAwKSIpOwogc2hvdWxkVGhyb3coImNvbnRleHQu
Z2V0UHJvZ3JhbVBhcmFtZXRlcih1bmRlZmluZWQsIDApIik7CiBzaG91bGRUaHJvdygiY29udGV4
dC5nZXRQcm9ncmFtSW5mb0xvZyh1bmRlZmluZWQsIDApIik7CiBzaG91bGRUaHJvdygiY29udGV4
dC5nZXRTaGFkZXJQYXJhbWV0ZXIodW5kZWZpbmVkLCAwKSIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>