<?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>43820</bug_id>
          
          <creation_ts>2010-08-10 17:38:14 -0700</creation_ts>
          <short_desc>Regression in linking of programs</short_desc>
          <delta_ts>2010-08-13 10:51:59 -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>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>41380</dependson>
          <blocked>43942</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262921</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-10 17:38:14 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=41380 introduced a regression in the linking of programs when the shaders are first attached to a program, then deleted, and then the program is linked. The WebGLShader object has its m_object cleared when deleteShader is called from JavaScript. Later, during linkProgram, the WebGLRenderingContext attempts to look up the WebGLShaderObject associated with the program and fails.

The validation of the attached shaders&apos; types must be done with GraphicsContext3D calls instead, calling getShaderiv(shader, SHADER_TYPE, &amp;val).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263346</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-11 11:13:26 -0700</bug_when>
    <thetext>The real problem is when we deleteShader, if a shader is attached to a program, it&apos;s not really deleted; instead, DELETE_STATUS is set to true.  Currently in deleteShader, the name in WebGLShader is always set to 0.  Therefore, when we call getAttachedShaders(), we can&apos;t find any matching WebGLShader objects.

The fix should be tracking whether a shader is attached and don&apos;t set the name in WebGLShader to 0 when deleteShader if it is attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263351</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-11 11:28:09 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; The real problem is when we deleteShader, if a shader is attached to a program, it&apos;s not really deleted; instead, DELETE_STATUS is set to true.  Currently in deleteShader, the name in WebGLShader is always set to 0.  Therefore, when we call getAttachedShaders(), we can&apos;t find any matching WebGLShader objects.
&gt; 
&gt; The fix should be tracking whether a shader is attached and don&apos;t set the name in WebGLShader to 0 when deleteShader if it is attached.

This isn&apos;t the only situation in which the WebGLObject wrappers might get out of sync with the underlying OpenGL resources. Another example would be WebGLRenderbuffer. When a renderbuffer is attached to a framebuffer object, the framebuffer references it, and even if the renderbuffer is deleted, it is still referenced until detached from the framebuffer (or the framebuffer is deleted). In order to properly handle lookups of these renderbuffers, we would need to also track whether they are attached to a framebuffer at the time they are deleted. This tracking logic will quickly become complicated; it will be needed for nearly every WebGLObject subclass.

I believe the correct fix is to avoid looking up the WebGLShader object at all, and simply perform the needed queries against the underlying OpenGL shader object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263437</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-11 13:44:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; The real problem is when we deleteShader, if a shader is attached to a program, it&apos;s not really deleted; instead, DELETE_STATUS is set to true.  Currently in deleteShader, the name in WebGLShader is always set to 0.  Therefore, when we call getAttachedShaders(), we can&apos;t find any matching WebGLShader objects.
&gt; &gt; 
&gt; &gt; The fix should be tracking whether a shader is attached and don&apos;t set the name in WebGLShader to 0 when deleteShader if it is attached.
&gt; 
&gt; This isn&apos;t the only situation in which the WebGLObject wrappers might get out of sync with the underlying OpenGL resources. Another example would be WebGLRenderbuffer. When a renderbuffer is attached to a framebuffer object, the framebuffer references it, and even if the renderbuffer is deleted, it is still referenced until detached from the framebuffer (or the framebuffer is deleted). In order to properly handle lookups of these renderbuffers, we would need to also track whether they are attached to a framebuffer at the time they are deleted. This tracking logic will quickly become complicated; it will be needed for nearly every WebGLObject subclass.
&gt; 
&gt; I believe the correct fix is to avoid looking up the WebGLShader object at all, and simply perform the needed queries against the underlying OpenGL shader object.

If we don&apos;t track WebGLShader objects, in the case of getAttachedShaders() we have to create a second WebGLShader object where the underlying name is the same as the original WebGLShader object.  This will really be confusing.

So at least for the case of WebGLShader, I think we should do the tracking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263444</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-11 14:05:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; The real problem is when we deleteShader, if a shader is attached to a program, it&apos;s not really deleted; instead, DELETE_STATUS is set to true.  Currently in deleteShader, the name in WebGLShader is always set to 0.  Therefore, when we call getAttachedShaders(), we can&apos;t find any matching WebGLShader objects.
&gt; &gt; &gt; 
&gt; &gt; &gt; The fix should be tracking whether a shader is attached and don&apos;t set the name in WebGLShader to 0 when deleteShader if it is attached.
&gt; &gt; 
&gt; &gt; This isn&apos;t the only situation in which the WebGLObject wrappers might get out of sync with the underlying OpenGL resources. Another example would be WebGLRenderbuffer. When a renderbuffer is attached to a framebuffer object, the framebuffer references it, and even if the renderbuffer is deleted, it is still referenced until detached from the framebuffer (or the framebuffer is deleted). In order to properly handle lookups of these renderbuffers, we would need to also track whether they are attached to a framebuffer at the time they are deleted. This tracking logic will quickly become complicated; it will be needed for nearly every WebGLObject subclass.
&gt; &gt; 
&gt; &gt; I believe the correct fix is to avoid looking up the WebGLShader object at all, and simply perform the needed queries against the underlying OpenGL shader object.
&gt; 
&gt; If we don&apos;t track WebGLShader objects, in the case of getAttachedShaders() we have to create a second WebGLShader object where the underlying name is the same as the original WebGLShader object.  This will really be confusing.
&gt; 
&gt; So at least for the case of WebGLShader, I think we should do the tracking.

OK, I see your point about the public APIs needing to work properly. Agreed, the best way to make both work is to track whether a given shader has really been deleted, or whether it is still referenced from a program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263584</commentid>
    <comment_count>5</comment_count>
      <attachid>64184</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-11 20:45:01 -0700</bug_when>
    <thetext>Created attachment 64184
patch

The test is in sync with khronos.

Also tested: the previously failed WebGL Google demos run OK with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264031</commentid>
    <comment_count>6</comment_count>
      <attachid>64184</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-12 15:31:37 -0700</bug_when>
    <thetext>Comment on attachment 64184
patch

Overall the patch looks good; thanks for taking care of this quickly. The new tests look good.

WebCore/html/canvas/WebGLProgram.h:76
 +      WebGLShader* m_fragmentShader;
There&apos;s a deep issue here related to the lifetime of WebGLObjects. Because they are reference counted, they can theoretically be deleted at any time. (The global HashSet of RefPtrs to WebGLObjects in the WebGLRenderingContext prevents this somewhat, but there are still problems because the order the objects are stored in that HashSet is not guaranteed, so neither is deletion order.) These raw pointers may therefore go bad spontaneously. I think the only solution is to make these RefPtrs. I also think it would be great if we could just reuse the RefCounted mechanism rather than adding the new onAttached/onDetached, but I think it would be tricky -- likely involving logic like &quot;if (refCount() &lt;= 2) m_object = 0;&quot; -- and also I&apos;m not 100% sure we would be able to intercept the ref() / deref() calls since they aren&apos;t virtual in RefCountedBase. (I think since RefPtr always calls against the most specifically available subclass that we could simply shadow the superclass version and explicitly call it.)

Please make these RefPtrs and re-test. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264075</commentid>
    <comment_count>7</comment_count>
      <attachid>64281</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-12 16:25:04 -0700</bug_when>
    <thetext>Created attachment 64281
revised patch: use RefPtr for shader members in WebGLProgram

no other change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264077</commentid>
    <comment_count>8</comment_count>
      <attachid>64281</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-12 16:27:29 -0700</bug_when>
    <thetext>Comment on attachment 64281
revised patch: use RefPtr for shader members in WebGLProgram

Looks good to me -- assuming this change builds and was re-tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264078</commentid>
    <comment_count>9</comment_count>
      <attachid>64282</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-12 16:30:05 -0700</bug_when>
    <thetext>Created attachment 64282
revised patch: no need to initialize RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264084</commentid>
    <comment_count>10</comment_count>
      <attachid>64282</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-12 16:48:06 -0700</bug_when>
    <thetext>Comment on attachment 64282
revised patch: no need to initialize RefPtr.

Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264125</commentid>
    <comment_count>11</comment_count>
      <attachid>64282</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-08-12 19:21:27 -0700</bug_when>
    <thetext>Comment on attachment 64282
revised patch: no need to initialize RefPtr.

Ok, but the attach/detach logic looks very similar to RefCounted. Can we just reuse that somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264126</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-12 19:36:14 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 64282 [details])
&gt; Ok, but the attach/detach logic looks very similar to RefCounted. Can we just reuse that somehow?

Mo and I talked about this, but at least for the initial version we&apos;d like to keep it separate. More thought is needed on exactly how the RefCounted reference count maps to the numbers we would need to track to decide when to delete the underlying OpenGL resource (see my comment above about &quot;refCount() &lt;= 2&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264424</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-13 10:12:40 -0700</bug_when>
    <thetext>Committed r65330: &lt;http://trac.webkit.org/changeset/65330&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264436</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-13 10:51:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65330 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64184</attachid>
            <date>2010-08-11 20:45:01 -0700</date>
            <delta_ts>2010-08-12 16:25:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>program.patch</filename>
            <type>text/plain</type>
            <size>31119</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTIxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdyZXNz
aW9uIGluIGxpbmtpbmcgb2YgcHJvZ3JhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODIwCisKKyAgICAgICAgU2hhZGVycyBhbmQgcHJvZ3JhbXMg
c2hvdWxkbid0IGJlIGRlbGV0ZWQgdW50aWwgdGhlaXIgYXR0YWNobWVudHMgYXJlIHJlbW92ZWQs
IHRoZXJlZm9yZSwgd2UgbmVlZCB0byB0cmFjayB0aGUgYXR0YWNoL2RldGFjaC91c2VQcm9ncmFt
LgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOiBUcmFjayB0aGUgb2Jq
ZWN0IGF0dGFjaG1lbnQgY291bnQgYW5kIHdoZXRoZXIgaXQgc2hvdWxkIHJlYWxseSBiZSBkZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xP
YmplY3QuaDogVHJhY2sgdGhlIG9iamVjdCBhdHRhY2htZW50IGNvdW50IGFuZCB3aGV0aGVyIGl0
IHNob3VsZCByZWFsbHkgYmUgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0
OjpvbkF0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpvbkRldGFjaGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpnZXRBdHRhY2htZW50Q291bnQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6IFRyYWNrIHRoZSBhdHRhY2hl
ZCBzaGFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oOiBUcmFjayB0aGUgYXR0YWNoZWQgc2hhZGVycy4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOiBUcmFjayB0aGUgYXR0YWNobWVudCBv
ZiBhIHNoYWRlciB0byBhIHByb2dyYW0uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOiBEZXRhY2ggc2hhZGVycy4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKTogVHJhY2sgdGhlIGF0dGFj
aG1lbnQgb2YgYSBzaGFkZXIgdG8gYSBwcm9ncmFtLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KTogQWxzbyBjaGVjayBpZiBvYmpl
Y3QgPT0gMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0pOiBVc2luZyB0aGUgY2FjaGVkIGF0dGFjaGVkIHNoYWRlcnMgaW5zdGVhZCBvZiBxdWVy
eSBmcm9tIGRyaXZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dXNlUHJvZ3JhbSk6IFRyYWNrIHRoZSBhdHRhY2htZW50IG9mIGEgcHJvZ3JhbSB0byB0aGUgY3Vy
cmVudCByZW5kZXJpbmcgcGlwZWxpbmUuCisKIDIwMTAtMDgtMTEgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFdlYkdMT2JqZWN0OjpXZWJHTE9iamVj
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX29iamVjdCgwKQotICAg
ICwgbV9zaG91bGREZWxldGVPYmplY3QodHJ1ZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9hdHRhY2htZW50Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKIH0K
IApAQCAtNDYsMjcgKzQ3LDI2IEBAIFdlYkdMT2JqZWN0Ojp+V2ViR0xPYmplY3QoKQogICAgICAg
ICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6
c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0LCBib29sIHNob3VsZERlbGV0ZU9iamVj
dCkKK3ZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKICAgICBpZiAob2JqZWN0ID09IG1fb2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGRlbGV0ZU9iamVjdCgpOwogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwotICAgIG1fc2hv
dWxkRGVsZXRlT2JqZWN0ID0gc2hvdWxkRGVsZXRlT2JqZWN0OwogfQogCiB2b2lkIFdlYkdMT2Jq
ZWN0OjpkZWxldGVPYmplY3QoKQogewogICAgIGlmIChtX29iamVjdCkgewotICAgICAgICBpZiAo
bV9zaG91bGREZWxldGVPYmplY3QpCi0gICAgICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAgICAgICAgICAgICBkZWxldGVPYmplY3RJbXBsKG1fb2JqZWN0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgbV9vYmplY3QgPSAwOworICAgICAgICBpZiAobV9jb250ZXh0
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgZGVsZXRlT2JqZWN0SW1wbChtX29iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIG1f
b2JqZWN0ID0gMDsKKyAgICAgICAgbV9kZWxldGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgbV9zaG91
bGREZWxldGVPYmplY3QgPSB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9i
amVjdC5oCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViR0xPYmplY3QoKTsKIAogICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICB2b2lkIHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0
LCBib29sIHNob3VsZERlbGV0ZU9iamVjdCA9IHRydWUpOworICAgIHZvaWQgc2V0T2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7CiAKICAgICB2b2lkIGRl
dGFjaENvbnRleHQoKQpAQCAtNTgsMjAgKzU4LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdm9pZCBvbkF0dGFjaGVk
KCkgeyArK21fYXR0YWNobWVudENvdW50OyB9CisgICAgdm9pZCBvbkRldGFjaGVkKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIC0tbV9hdHRhY2ht
ZW50Q291bnQ7CisgICAgICAgIGlmICghbV9hdHRhY2htZW50Q291bnQgJiYgbV9kZWxldGVkKQor
ICAgICAgICAgICAgbV9vYmplY3QgPSAwOworICAgIH0KKyAgICB1bnNpZ25lZCBnZXRBdHRhY2ht
ZW50Q291bnQoKSB7IHJldHVybiBtX2F0dGFjaG1lbnRDb3VudDsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCiBwcml2YXRlOgogICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Ci0gICAgLy8gVGhlIHNob3VsZERlbGV0ZU9iamVj
dCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgd3JhcHBlcgotICAgIC8vIG93bnMgdGhlIHVu
ZGVybHlpbmcgcmVzb3VyY2UgYW5kIHNob3VsZCBkZWxldGUgaXQgd2hlbiB0aGUKLSAgICAvLyB3
cmFwcGVyIGlzIHVucmVmZXJlbmNlZCBmb3IgdGhlIGxhc3QgdGltZSBhbmQgZGVsZXRlZC4gSXQK
LSAgICAvLyBpcyBvbmx5IHNldCB0byBmYWxzZSBmb3IgY2VydGFpbiBvYmplY3RzIHJldHVybmVk
IGZyb20gZ2V0Ci0gICAgLy8gcXVlcmllcy4gRklYTUU6IHNob3VsZCBjb25zaWRlciBjYW5vbmlj
YWxpemluZyBhbGwgb2YgdGhlc2UKLSAgICAvLyBvYmplY3RzIGluIHRoZSBmdXR1cmUuCi0gICAg
Ym9vbCBtX3Nob3VsZERlbGV0ZU9iamVjdDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1f
Y29udGV4dDsKKyAgICB1bnNpZ25lZCBtX2F0dGFjaG1lbnRDb3VudDsKKyAgICBib29sIG1fZGVs
ZXRlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDY1MjA2KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CkBAIC00MSwxMyArNDIsMjEgQEAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3Jh
bTo6YwogV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHgpCiAgICAgOiBXZWJHTE9iamVjdChjdHgpCiAgICAgLCBtX2xpbmtGYWlsdXJlKGZhbHNlKQor
ICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKKyAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkKIHsKICAg
ICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFt
KCkpOwogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKFBsYXRm
b3JtM0RPYmplY3Qgb2JqKQogewotICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
ZGVsZXRlUHJvZ3JhbShvYmplY3QpOworICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+ZGVsZXRlUHJvZ3JhbShvYmopOworICAgIGlmICghb2JqZWN0KCkpIHsKKyAgICAgICAgaWYg
KG1fdmVydGV4U2hhZGVyKQorICAgICAgICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQo
KTsKKyAgICAgICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpCisgICAgICAgICAgICBtX2ZyYWdtZW50
U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgfQogfQogCiBib29sIFdlYkdMUHJvZ3JhbTo6Y2Fj
aGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKQpAQCAtOTQsNiArMTAzLDU4IEBAIGJvb2wgV2ViR0xQ
cm9ncmFtOjppc1VzaW5nVmVydGV4QXR0cmliMCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1dl
YkdMU2hhZGVyKiBXZWJHTFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpXZWJHTEVudW1UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIG1fdmVy
dGV4U2hhZGVyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoK
KyAgICAgICAgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFdlYkdMUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIgfHwgIXNoYWRlci0+b2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHNoYWRlci0+Z2V0VHlwZSgp
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICAgICAg
aWYgKG1fdmVydGV4U2hhZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X3ZlcnRleFNoYWRlciA9IHNoYWRlcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAobV9mcmFnbWVu
dFNoYWRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9mcmFnbWVudFNo
YWRlciA9IHNoYWRlcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNo
YWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8ICFzaGFkZXIt
Pm9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChzaGFkZXItPmdl
dFR5cGUoKSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6Cisg
ICAgICAgIGlmIChtX3ZlcnRleFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG1fdmVydGV4U2hhZGVyID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBp
ZiAobV9mcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIG1fZnJhZ21lbnRTaGFkZXIgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFBy
b2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBXZWJHTFNoYWRlcjsKKwogY2xhc3MgV2ViR0xQcm9ncmFtIDogcHVibGljIFdlYkdM
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFByb2dyYW0oKSB7IGRlbGV0ZU9i
amVjdCgpOyB9CkBAIC01NCw2ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xpbmtGYWls
dXJlRmxhZ1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua0ZhaWx1cmU7IH0KICAgICB2b2lkIHNl
dExpbmtGYWlsdXJlRmxhZyhib29sIGZhaWxlZCkgeyBtX2xpbmtGYWlsdXJlID0gZmFpbGVkOyB9
CiAKKyAgICBXZWJHTFNoYWRlciogZ2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OldlYkdMRW51bVR5cGUpOworICAgIGJvb2wgYXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKik7Cisg
ICAgYm9vbCBkZXRhY2hTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKwogcHJvdGVjdGVkOgogICAgIFdl
YkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNjUsNiArNzEsOSBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxpbnQ+IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zOwogCiAgICAg
Ym9vbCBtX2xpbmtGYWlsdXJlOworCisgICAgV2ViR0xTaGFkZXIqIG1fdmVydGV4U2hhZGVyOwor
ICAgIFdlYkdMU2hhZGVyKiBtX2ZyYWdtZW50U2hhZGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gNjUyMDYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsMTIgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcgogICAgIFVOVVNFRF9QQVJBTShl
Yyk7CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXByb2dyYW0tPmF0
dGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uQXR0YWNoZWQoKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC02NTAsNyArNjU1LDEy
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmEKIHsKICAgICBpZiAo
IXByb2dyYW0pCiAgICAgICAgIHJldHVybjsKLSAgICAKKyAgICBpZiAocHJvZ3JhbS0+Y29udGV4
dCgpICE9IHRoaXMpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKICAgICBwcm9n
cmFtLT5kZWxldGVPYmplY3QoKTsKIH0KIApAQCAtNzA1LDcgKzcxNSwxMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hh
ZGVyKHNoYWRlcikpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hlZCgpOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTg5Miw3ICs5MDcsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVSZW5kCiAKIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7Ci0g
ICAgaWYgKCFvYmplY3QpIHsKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE4ODIs
MjEgKzE4OTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oCiAg
ICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgVmVjdG9yPFdlYkdMU2hhZGVy
Kj4gc2hhZGVyczsKLSAgICAgICAgYm9vbCBzdWNjZWVkID0gZ2V0QXR0YWNoZWRTaGFkZXJzKHBy
b2dyYW0sIHNoYWRlcnMsIGVjKTsKLSAgICAgICAgaWYgKHN1Y2NlZWQpIHsKLSAgICAgICAgICAg
IGJvb2wgdlNoYWRlciA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBmU2hhZGVyID0gZmFsc2U7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXplKCkgJiYg
KCF2U2hhZGVyIHx8ICFmU2hhZGVyKTsgKytpaSkgewotICAgICAgICAgICAgICAgIGlmIChzaGFk
ZXJzW2lpXS0+Z2V0VHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKQot
ICAgICAgICAgICAgICAgICAgICB2U2hhZGVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChzaGFkZXJzW2lpXS0+Z2V0VHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVO
VF9TSEFERVIpCi0gICAgICAgICAgICAgICAgICAgIGZTaGFkZXIgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCF2U2hhZGVyIHx8ICFmU2hhZGVyKQotICAgICAgICAgICAg
ICAgIHN1Y2NlZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN1Y2NlZWQpIHsK
KyAgICAgICAgaWYgKCFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUikgfHwgIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpKSB7CiAgICAgICAgICAgICBwcm9ncmFtLT5zZXRM
aW5rRmFpbHVyZUZsYWcodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTI3MDEsMTMgKzI3MDIsMjMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgaWYgKHByb2dyYW0gJiYgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY3VycmVudFByb2dy
YW0gPSBwcm9ncmFtOwotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOworICAgIGlmIChwcm9ncmFtICYmIHByb2dyYW0tPm9iamVjdCgpICYmICFnZXRQcm9n
cmFtUGFyYW1ldGVyKHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgZWMp
LmdldEJvb2woKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fY3Vy
cmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkK
KyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgbV9j
dXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShv
YmplY3RPclplcm8ocHJvZ3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgICAg
IHByb2dyYW0tPm9uQXR0YWNoZWQoKTsKKyAgICB9CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjUyMTMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0xMSAg
WmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZ3Jlc3Npb24gaW4gbGlua2luZyBvZiBwcm9ncmFtcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM4MjAKKwor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1leHBlY3RlZC50eHQ6IEZp
eCB0aGUgdGVzdHMgc28gYSBzZWNvbmQgc2hhZGVyIG9mIHRoZSBzYW1lIHR5cGUgYXR0YWNoaW5n
IHRvIGEgcHJvZ3JhbSB3aWxsIGdlbmVyYXRlIGVycm9yOyBhbHNvLCBhZGQgdGVzdHMgZm9yIGRl
bGV0ZVNoYWRlci9kZWxldGVQcm9ncmFtIGJlaGF2aW9yLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sOiBEaXR0by4KKwogMjAxMC0wOC0xMSAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9n
cmFtLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NTIwNikKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyLDE1ICsxMiwxNyBAQCBQQVNTIGJhZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRv
IGNvCiBQQVNTIGdvb2QgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlCiBQQVNTIGdvb2Qg
ZnJhZ21lbnQgc2hhZGVyICMyIHNob3VsZCBjb21waWxlCiBQQVNTIGJhZCBmcmFnbWVudCBzaGFk
ZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZQotUEFTUyBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRo
aXMgcG9pbnQKLVBBU1MgYXR0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZAot
UEFTUyBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgotUEFTUyBhdHRhY2hpbmcgYSBmcmFnbWVudCBzaGFk
ZXIgc2hvdWxkIHN1Y2NlZWQKLVBBU1MgYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgZnJh
Z21lbnQgc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgotUEFTUyBkZXRh
Y2hpbmcgYSB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBzdWNjZWVkCi1QQVNTIGRldGFjaGluZyBhIG5v
dCBhbHJlYWR5IGF0dGFjaGVkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCi1QQVNTIGRldGFjaGluZyBhIGZyYWdtZW50IHNoYWRlciBzaG91bGQgc3VjY2Vl
ZAotUEFTUyBkZXRhY2hpbmcgYSBub3QgYWxyZWFkeSBhdHRhY2hlZCBmcmFnbWVudCBzaGFkZXIg
c2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQK
K1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGF0dGFjaGluZyBh
IHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVk
IHZlcnRleCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBhdHRhY2hpbmcgYSBmcmFnbWVu
dCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBJTlZBTElEX09QRVJBVElPTiA6IGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIGZyYWdt
ZW50IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IGF0dGFjaGluZyBzaGFk
ZXJzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYSBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElE
X09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BF
UkFUSU9OIDogYXR0YWNoaW5nIHNoYWRlcnMgb2YgdGhlIHNhbWUgdHlwZSB0byBhIHByb2dyYW0g
c2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBkZXRhY2hpbmcgYSB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBz
dWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJ
T04gOiBkZXRhY2hpbmcgYSBub3QgYWxyZWFkeSBhdHRhY2hlZCB2ZXJ0ZXggc2hhZGVyIHNob3Vs
ZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogZGV0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBzdWNj
ZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04g
OiBkZXRhY2hpbmcgYSBub3QgYWxyZWFkeSBhdHRhY2hlZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxk
IGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCiBQQVNTIGdldEF0dGFjaGVkU2hhZGVycyBzaG91
bGQgcmV0dXJuIGFuIGVtcHR5IGxpc3QgYnkgZGVmYXVsdAogUEFTUyBhdHRhY2hpbmcgYSBzaW5n
bGUgc2hhZGVyIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0CiBQQVNTIGF0dGFjaGluZyBz
b21lIHNoYWRlcnMgc2hvdWxkIGdpdmUgdGhlIGV4cGVjdGVkIGxpc3QKQEAgLTMyLDI2ICszNCwz
OCBAQCBQQVNTIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVyCiBQQVNTIGF0dGFj
aGluZyBhIHNoYWRlciB0aGF0IGZhaWxlZCB0byBjb21waWxlIHNob3VsZCBzdGlsbCBzaG93IGl0
IGluIHRoZSBsaXN0CiBQQVNTIGF0dGFjaGluZyBzaGFkZXJzLCBpbmNsdWRpbmcgb25lIHRoYXQg
ZmFpbGVkIHRvIGNvbXBpbGUsIHNob3VsZCBzdGlsbCBzaG93IHRoZSBpdCBpbiB0aGUgbGlzdAog
UEFTUyB2YWxpZCBwcm9ncmFtIHNob3VsZCBsaW5rCi1QQVNTIHVzaW5nIGEgdmFsaWQgcHJvZ3Jh
bSBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkCiBQQVNTIHZhbGlkIHBy
b2dyYW0gIzIgc2hvdWxkIGxpbmsKLVBBU1MgdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZCBz
dWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiB1c2lu
ZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkIHN1Y2NlZWQKIFBBU1MgcHJvZ3JhbSB3aXRoIG5vIGZy
YWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rCi1QQVNTIHVzaW5nIGFuIGludmFsaWQg
cHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IHVzaW5nIGFuIGludmFsaWQg
cHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KIFBBU1MgcHJvZ3JhbSB3
aXRoIG5vIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluawotUEFTUyB1c2luZyBhbiBp
bnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiB1c2luZyBhbiBp
bnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCiBQQVNTIHBy
b2dyYW0gd2l0aCBiYWQgdmVydGV4IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rCi1QQVNTIHVz
aW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04K
K1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IHVz
aW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04K
IFBBU1MgcHJvZ3JhbSB3aXRoIGJhZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGlu
awotUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVS
QVRJT04gOiB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCiBQQVNTIHByb2dyYW0gd2l0aCBiYWQgc2hhZGVycyBzaG91bGQgZmFpbCB0byBs
aW5rCi1QQVNTIHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJ
RF9PUEVSQVRJT04KLVBBU1MgdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0
ZSBhIEdMIGVycm9yCi1QQVNTIHNob3VsZCBiZSBubyBlcnJvcnMgYXQgdGhpcyBwb2ludCAjMgot
UEFTUyBkcmF3aW5nIHdpdGggYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdM
IGVycm9yCi1QQVNTIHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5W
QUxJRF9PUEVSQVRJT04KLVBBU1MgZHJhd2luZyB3aXRoIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91
bGQgZ2VuZXJhdGUgc29tZSBHTCBlcnJvciBYWFgKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91
bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJh
dGUgYSBHTCBlcnJvcgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50ICMyCitQQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBkcmF3aW5nIHdpdGggYSB2YWxpZCBwcm9ncmFt
IHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hv
dWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBUcnkgdG8gdXNlIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQg
bm90IGNoYW5nZSB0aGUgY3VycmVudCByZW5kZXJpbmcgc3RhdGUKK1BBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGRyYXdpbmcgd2l0aCBhIHZhbGlkIHByb2dyYW0g
c2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKIFBBU1MgbGlua2luZyBzaG91bGQgZmFpbCB3
aXRoIGluLXVzZSBmb3JtZXJseSBnb29kIHByb2dyYW0sIHdpdGggbmV3IGJhZCBzaGFkZXIgYXR0
YWNoZWQKLVBBU1MgZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJvZ3JhbSBz
aG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvcgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJv
Z3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvcgorUEFTUyBkZWxldGUgc2hhZGVycyBh
ZnRlciBhdHRhY2hpbmcgdGhlbSBhbmQgYmVmb3JlIGxpbmtpbmcgcHJvZ3JhbSBzaG91bGQgbm90
IGFmZmVjdCBsaW5rUHJvZ3JhbQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBkcmF3aW5nIHdpdGggYSB2YWxpZCB3
aGVuIGxhc3QgdXNlZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBkZWxldGUgdGhlIGN1cnJl
bnQgcHJvZ3JhbSBzaG91bGRuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmluZyBzdGF0ZQor
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogVGhlIGN1cnJlbnQg
cHJvZ3JhbSBzaG91bGRuJ3QgYmUgZGVsZXRlZAorUEFTUyBnb29kIGZyYWdtZW50IHNoYWRlciBz
aG91bGQgY29tcGlsZQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURf
VkFMVUUgOiBhbiB1bmF0dGFjaGVkIHNoYWRlciBzaG91bGQgYmUgZGVsZXRlZCBpbW1lZGlhdGVs
eQorUEFTUyBnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZQorUEFTUyBhbiBhdHRh
Y2hlZCBzaGFkZXIgc2hvdWxkbid0IGJlIGRlbGV0ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVFIDogYSBkZWxldGUtbWFya2VkIHByb2dyYW0gc2hvdWxk
IGJlIGRlbGV0ZWQgb25jZSBpdCdzIG5vIGxvbmdlciB0aGUgY3VycmVudCBwcm9ncmFtCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRSA6IGEgZGVsZXRlLW1h
cmtlZCBzaGFkZXIgc2hvdWxkIGJlIGRlbGV0ZWQgb25jZSBhbGwgaXRzIGF0dGFjaG1lbnRzIGFy
ZSByZW1vdmVkCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVz
dC5odG1sCShyZXZpc2lvbiA2NTIwNikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3Byb2dyYW0tdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw3IEBAIGZ1bmN0
aW9uIGdvKCkgewogICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnNCYWQsIGds
LkNPTVBJTEVfU1RBVFVTKSA9PSBmYWxzZSwKICAgICAgICAgICAgICAgImJhZCBmcmFnbWVudCBz
aGFkZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZSIpOwogCi0gICAgYXNzZXJ0TXNnKGdsLmdldEVy
cm9yKCkgPT0gZ2wuTk9fRVJST1IsCi0gICAgICAgICAgICAgICJzaG91bGQgYmUgbm8gZXJyb3Jz
IGF0IHRoaXMgcG9pbnQiKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAi
c2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50Iik7CiAKIC8vLy8vLy8gQ2hlY2sgYXR0
YWNoU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtODcsNyArODYs
NyBAQCBmdW5jdGlvbiBnbygpIHsKICAgICAgICAgaWYoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19F
UlJPUikKICAgICAgICAgICAgIGFzc2VydE1zZyhmYWxzZSwgInVuZXhwZWN0ZWQgZXJyb3IgaW4g
YXR0YWNoU2hhZGVyKCkiKTsKICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2csIHNoYWRlcik7
Ci0gICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGV4cGVjdGVkX2Vycm9yX2NvZGUs
IGVycm1zZyk7CisgICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZXhwZWN0ZWRfZXJyb3JfY29k
ZSwgZXJybXNnKTsKICAgICB9CiAKICAgICBjaGVja0F0dGFjaFNoYWRlcihbXSwgdnMsIGdsLk5P
X0VSUk9SLCAiYXR0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZCIpOwpAQCAt
OTYsNiArOTUsMTAgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAgY2hlY2tBdHRhY2hTaGFkZXIoW10s
IGZzLCBnbC5OT19FUlJPUiwgImF0dGFjaGluZyBhIGZyYWdtZW50IHNoYWRlciBzaG91bGQgc3Vj
Y2VlZCIpOwogICAgIGNoZWNrQXR0YWNoU2hhZGVyKFtmc10sIGZzLCBnbC5JTlZBTElEX09QRVJB
VElPTiwKICAgICAgICAgICAgICAgICAgICAgICAiYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNo
ZWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOwor
ICAgIGNoZWNrQXR0YWNoU2hhZGVyKFt2c10sIHZzMiwgZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisg
ICAgICAgICAgICAgICAgICAgICAgImF0dGFjaGluZyBzaGFkZXJzIG9mIHRoZSBzYW1lIHR5cGUg
dG8gYSBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOworICAgIGNo
ZWNrQXR0YWNoU2hhZGVyKFtmc10sIGZzMiwgZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgImF0dGFjaGluZyBzaGFkZXJzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYSBw
cm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOwogCiAvLy8vLy8vIENo
ZWNrIGRldGFjaFNoYWRlcigpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKQEAgLTEw
Niw3ICsxMDksNyBAQCBmdW5jdGlvbiBnbygpIHsKICAgICAgICAgaWYoZ2wuZ2V0RXJyb3IoKSAh
PSBnbC5OT19FUlJPUikKICAgICAgICAgICAgIGFzc2VydE1zZyhmYWxzZSwgInVuZXhwZWN0ZWQg
ZXJyb3IgaW4gYXR0YWNoU2hhZGVyKCkiKTsKICAgICAgICAgZ2wuZGV0YWNoU2hhZGVyKHByb2cs
IHNoYWRlcik7Ci0gICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGV4cGVjdGVkX2Vy
cm9yX2NvZGUsIGVycm1zZyk7CisgICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZXhwZWN0ZWRf
ZXJyb3JfY29kZSwgZXJybXNnKTsKICAgICB9CiAKICAgICBjaGVja0RldGFjaFNoYWRlcihbdnNd
LCB2cywgZ2wuTk9fRVJST1IsICJkZXRhY2hpbmcgYSB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBzdWNj
ZWVkIik7CkBAIC0xMzIsMjggKzEzNSwzMSBAQCBmdW5jdGlvbiBnbygpIHsKICAgICB9CiAgICAg
Y2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW10sIFtdLCBbXSwgImdldEF0dGFjaGVkU2hhZGVycyBz
aG91bGQgcmV0dXJuIGFuIGVtcHR5IGxpc3QgYnkgZGVmYXVsdCIpOwogICAgIGNoZWNrR2V0QXR0
YWNoZWRTaGFkZXJzKFtmc10sIFtdLCBbZnNdLCAiYXR0YWNoaW5nIGEgc2luZ2xlIHNoYWRlciBz
aG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdCIpOwotICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFk
ZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW10sIFtmcywgdnMsIGZzMiwgdnMyXSwKKyAgICBjaGVj
a0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzXSwgW10sIFtmcywgdnNdLAogICAgICAgICAiYXR0
YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdCIpOwogICAg
IGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmc10sIFtmc10sIFtdLCAiYXR0YWNoaW5nIGEgc2hh
ZGVyIGFuZCBkZXRhY2hpbmcgaXQgc2hvdWQgbGVhdmUgYW4gZW1wdHkgbGlzdCIpOwotICAgIGNo
ZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW2ZzLCB2cywgZnMyLCB2
czJdLCBbXSwKKyAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzXSwgW2ZzLCB2c10s
IFtdLAogICAgICAgICAiYXR0YWNoaW5nIHNvbWUgc2hhZGVycyBhbmQgZGV0YWNoaW5nIHRoZW0g
aW4gc2FtZSBvcmRlciBzaG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0Iik7Ci0gICAgY2hlY2tHZXRB
dHRhY2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbZnMsIHZzMiwgdnMsIGZzMl0sIFtd
LAorICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnNdLCBbdnMsIGZzXSwgW10sCiAg
ICAgICAgICJhdHRhY2hpbmcgc29tZSBzaGFkZXJzIGFuZCBkZXRhY2hpbmcgdGhlbSBpbiByYW5k
b20gb3JkZXIgc2hvdWQgbGVhdmUgYW4gZW1wdHkgbGlzdCIpOwotICAgIGNoZWNrR2V0QXR0YWNo
ZWRTaGFkZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW3ZzXSwgW2ZzLCBmczIsIHZzMl0sCisgICAg
Y2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c10sIFt2c10sIFtmc10sCiAgICAgICAgICJh
dHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21lIHNoYWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZm
ZXJlbmNlIGxpc3QiKTsKLSAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzLCBmczIs
IHZzMl0sIFtmcywgdnMyXSwgW3ZzLCBmczJdLAorICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJz
KFtmcywgdnNdLCBbZnNdLCBbdnNdLAogICAgICAgICAiYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcg
c29tZSBzaGFkZXJzIHNob3VsZCBsZWF2ZSB0aGUgZGlmZmVyZW5jZSBsaXN0Iik7CiAgICAgY2hl
Y2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzQmFkXSwgW10sIFtmc0JhZF0sCiAgICAgICAgICJhdHRh
Y2hpbmcgYSBzaGFkZXIgdGhhdCBmYWlsZWQgdG8gY29tcGlsZSBzaG91bGQgc3RpbGwgc2hvdyBp
dCBpbiB0aGUgbGlzdCIpOwotICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnNCYWQs
IGZzMl0sIFtdLCBbZnMsIHZzQmFkLCBmczJdLAorICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJz
KFtmcywgdnNCYWRdLCBbXSwgW2ZzLCB2c0JhZF0sCiAgICAgICAgICJhdHRhY2hpbmcgc2hhZGVy
cywgaW5jbHVkaW5nIG9uZSB0aGF0IGZhaWxlZCB0byBjb21waWxlLCBzaG91bGQgc3RpbGwgc2hv
dyB0aGUgaXQgaW4gdGhlIGxpc3QiKTsKIAogLy8vLy8vLyBDaGVjayBsaW5rUHJvZ3JhbSgpIGFu
ZCB1c2VQcm9ncmFtIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBmdW5jdGlv
biBjaGVja0xpbmtBbmRVc2Uoc2hhZGVycywgZXhwZWN0ZWRfc3RhdHVzLCBlcnJtc2cpIHsKKyAg
ICBmdW5jdGlvbiBjaGVja0xpbmtBbmRVc2Uoc2hhZGVycywgZGVsZXRlU2hhZGVyQWZ0ZXJBdHRh
Y2gsIGV4cGVjdGVkX3N0YXR1cywgZXJybXNnKSB7CiAgICAgICAgIHZhciBwcm9nID0gZ2wuY3Jl
YXRlUHJvZ3JhbSgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlcnMubGVuZ3Ro
OyArK2kpCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVycy5sZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2csIHNoYWRlcnNbaV0pOworICAgICAg
ICAgICAgaWYgKGRlbGV0ZVNoYWRlckFmdGVyQXR0YWNoKQorICAgICAgICAgICAgICAgIGdsLmRl
bGV0ZVNoYWRlcihzaGFkZXJzW2ldKTsKKyAgICAgICAgfQogICAgICAgICBnbC5iaW5kQXR0cmli
TG9jYXRpb24ocHJvZywgMCwgImFWZXJ0ZXgiKTsKICAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0
aW9uKHByb2csIDEsICJhQ29sb3IiKTsKICAgICAgICAgZ2wubGlua1Byb2dyYW0ocHJvZyk7CkBA
IC0xNjYsMjMgKzE3MiwyMiBAQCBmdW5jdGlvbiBnbygpIHsKICAgICAgICAgICAgIGFzc2VydE1z
ZyhmYWxzZSwgInVuZXhwZWN0ZWQgZXJyb3IgaW4gZ2V0UHJvZ3JhbVBhcmFtZXRlcigpIik7CiAg
ICAgICAgIGdsLnVzZVByb2dyYW0ocHJvZyk7CiAgICAgICAgIGlmIChleHBlY3RlZF9zdGF0dXMg
PT0gdHJ1ZSkKLSAgICAgICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VS
Uk9SLCAidXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkIik7CisgICAgICAgICAg
ICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidXNpbmcgYSB2YWxpZCBwcm9ncmFt
IHNob3VsZCBzdWNjZWVkIik7CiAgICAgICAgIGlmIChleHBlY3RlZF9zdGF0dXMgPT0gZmFsc2Up
Ci0gICAgICAgICAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJB
VElPTiwgInVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9P
UEVSQVRJT04iKTsKKyAgICAgICAgICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9P
UEVSQVRJT04sICJ1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFM
SURfT1BFUkFUSU9OIik7CiAgICAgICAgIHJldHVybiBwcm9nOwogICAgIH0KIAotICAgIHZhciBw
cm9nR29vZDEgPSBjaGVja0xpbmtBbmRVc2UoW3ZzLCBmc10sIHRydWUsICJ2YWxpZCBwcm9ncmFt
IHNob3VsZCBsaW5rIik7Ci0gICAgdmFyIHByb2dHb29kMiA9IGNoZWNrTGlua0FuZFVzZShbdnMs
IGZzMl0sIHRydWUsICJ2YWxpZCBwcm9ncmFtICMyIHNob3VsZCBsaW5rIik7Ci0gICAgdmFyIHBy
b2dCYWQxID0gY2hlY2tMaW5rQW5kVXNlKFt2c10sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIG5vIGZy
YWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rIik7Ci0gICAgdmFyIHByb2dCYWQyID0g
Y2hlY2tMaW5rQW5kVXNlKFtmc10sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIG5vIHZlcnRleCBzaGFk
ZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOwotICAgIHZhciBwcm9nQmFkMyA9IGNoZWNrTGlua0Fu
ZFVzZShbdnNCYWQsIGZzXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIHZlcnRleCBzaGFkZXIg
c2hvdWxkIGZhaWwgdG8gbGluayIpOwotICAgIHZhciBwcm9nQmFkNCA9IGNoZWNrTGlua0FuZFVz
ZShbdnMsIGZzQmFkXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIGZyYWdtZW50IHNoYWRlciBz
aG91bGQgZmFpbCB0byBsaW5rIik7Ci0gICAgdmFyIHByb2dCYWQ1ID0gY2hlY2tMaW5rQW5kVXNl
KFt2c0JhZCwgZnNCYWRdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBiYWQgc2hhZGVycyBzaG91bGQg
ZmFpbCB0byBsaW5rIik7CisgICAgdmFyIHByb2dHb29kMSA9IGNoZWNrTGlua0FuZFVzZShbdnMs
IGZzXSwgZmFsc2UsIHRydWUsICJ2YWxpZCBwcm9ncmFtIHNob3VsZCBsaW5rIik7CisgICAgdmFy
IHByb2dHb29kMiA9IGNoZWNrTGlua0FuZFVzZShbdnMsIGZzMl0sIGZhbHNlLCB0cnVlLCAidmFs
aWQgcHJvZ3JhbSAjMiBzaG91bGQgbGluayIpOworICAgIHZhciBwcm9nQmFkMSA9IGNoZWNrTGlu
a0FuZFVzZShbdnNdLCBmYWxzZSwgZmFsc2UsICJwcm9ncmFtIHdpdGggbm8gZnJhZ21lbnQgc2hh
ZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDIgPSBjaGVja0xpbmtB
bmRVc2UoW2ZzXSwgZmFsc2UsIGZhbHNlLCAicHJvZ3JhbSB3aXRoIG5vIHZlcnRleCBzaGFkZXIg
c2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZhciBwcm9nQmFkMyA9IGNoZWNrTGlua0FuZFVz
ZShbdnNCYWQsIGZzXSwgZmFsc2UsIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCB2ZXJ0ZXggc2hh
ZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDQgPSBjaGVja0xpbmtB
bmRVc2UoW3ZzLCBmc0JhZF0sIGZhbHNlLCBmYWxzZSwgInByb2dyYW0gd2l0aCBiYWQgZnJhZ21l
bnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDUgPSBjaGVj
a0xpbmtBbmRVc2UoW3ZzQmFkLCBmc0JhZF0sIGZhbHNlLCBmYWxzZSwgInByb2dyYW0gd2l0aCBi
YWQgc2hhZGVycyBzaG91bGQgZmFpbCB0byBsaW5rIik7CiAKICAgICBnbC51c2VQcm9ncmFtKHBy
b2dHb29kMSk7Ci0gICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCi0g
ICAgICAgICAgICAgICJ1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEg
R0wgZXJyb3IiKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidXNpbmcg
YSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yIik7CiAKICAgICB2
YXIgdmJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwogICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlf
QlVGRkVSLCB2YnVmKTsKQEAgLTE5NywyMiArMjAyLDIxIEBAIGZ1bmN0aW9uIGdvKCkgewogICAg
IGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwogICAgIGdsLnZlcnRleEF0dHJpYjNmKDEs
IDEuMCwgMC4wLCAwLjApOwogCi0gICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9f
RVJST1IsCi0gICAgICAgICAgICAgICJzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQg
IzIiKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAic2hvdWxkIGJlIG5v
IGVycm9ycyBhdCB0aGlzIHBvaW50ICMyIik7CiAKICAgICBnbC51c2VQcm9ncmFtKHByb2dHb29k
MSk7CiAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOwotICAgIGFzc2VydE1z
ZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAotICAgICAgICAgICAgICAiZHJhd2luZyB3
aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOworICAg
IGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJkcmF3aW5nIHdpdGggYSB2YWxpZCBw
cm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yIik7CiAKICAgICBnbC51c2VQcm9n
cmFtKHByb2dCYWQxKTsKLSAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElE
X09QRVJBVElPTiwKLSAgICAgICAgICAgICAgInVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91
bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2ws
IGdsLklOVkFMSURfT1BFUkFUSU9OLCAidXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOwogICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5H
TEVTLCAwLCAzKTsKLSAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUiwK
LSAgICAgICAgICAgICAgImRyYXdpbmcgd2l0aCBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdl
bmVyYXRlIHNvbWUgR0wgZXJyb3IgWFhYIik7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T19FUlJPUiwgIlRyeSB0byB1c2UgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBub3QgY2hhbmdl
IHRoZSBjdXJyZW50IHJlbmRlcmluZyBzdGF0ZSIpOwogCiAgICAgZ2wudXNlUHJvZ3JhbShwcm9n
R29vZDIpOworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKyAgICBnbEVy
cm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3Jh
bSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOworICAgIGdsLmRldGFjaFNoYWRlcihw
cm9nR29vZDIsIGZzMik7CiAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dHb29kMiwgZnNCYWQpOwog
ICAgIGdsLmxpbmtQcm9ncmFtKHByb2dHb29kMik7CiAgICAgYXNzZXJ0TXNnKGdsLmdldFByb2dy
YW1QYXJhbWV0ZXIocHJvZ0dvb2QyLCBnbC5MSU5LX1NUQVRVUykgPT0gZmFsc2UsCkBAIC0yMjAs
MTQgKzIyNCw2MSBAQCBmdW5jdGlvbiBnbygpIHsKIAogICAgIGdsLnVzZVByb2dyYW0ocHJvZ0dv
b2QxKTsKICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNCk7Ci0gICAgYXNzZXJ0
TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCi0gICAgICAgICAgICAgICJkcmF3aW5n
IHdpdGggYSB2YWxpZCB3aGVuIGxhc3QgdXNlZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBh
IEdMIGVycm9yIik7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImRyYXdp
bmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRl
IGEgR0wgZXJyb3IiKTsKKworICAgIHZhciBwcm9nR29vZDEgPSBjaGVja0xpbmtBbmRVc2UoW3Zz
LCBmc10sIHRydWUsIHRydWUsICJkZWxldGUgc2hhZGVycyBhZnRlciBhdHRhY2hpbmcgdGhlbSBh
bmQgYmVmb3JlIGxpbmtpbmcgcHJvZ3JhbSBzaG91bGQgbm90IGFmZmVjdCBsaW5rUHJvZ3JhbSIp
OworICAgIGdsLnVzZVByb2dyYW0ocHJvZ0dvb2QxKTsKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRS
SUFOR0xFUywgMCwgNCk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImRy
YXdpbmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVy
YXRlIGEgR0wgZXJyb3IiKTsKKworLy8vLy8vLyBDaGVjayBkZWxldGVQcm9ncmFtKCkgYW5kIGRl
bGV0ZVNoYWRlcigpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBnbC51c2VQ
cm9ncmFtKHByb2dHb29kMSk7CisgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9nR29vZDEpOworICAg
IGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA0KTsKKyAgICBnbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PX0VSUk9SLCAiZGVsZXRlIHRoZSBjdXJyZW50IHByb2dyYW0gc2hvdWxkbid0IGNo
YW5nZSB0aGUgY3VycmVudCByZW5kZXJpbmcgc3RhdGUiKTsKKworICAgIGdsLmxpbmtQcm9ncmFt
KHByb2dHb29kMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlRoZSBj
dXJyZW50IHByb2dyYW0gc2hvdWxkbid0IGJlIGRlbGV0ZWQiKTsKKworICAgIHZhciBmczMgPSBn
bC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3VyY2Uo
ZnMzLCAiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZh
cnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9
Iik7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmczMpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNo
YWRlclBhcmFtZXRlcihmczMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLAorICAgICAgICAg
ICAgICAiZ29vZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGNvbXBpbGUiKTsKKworICAgIGdsLmRl
bGV0ZVNoYWRlcihmczMpOworICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsKKyAgICBnbEVycm9y
U2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJhbiB1bmF0dGFjaGVkIHNoYWRlciBzaG91
bGQgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSIpOworCisgICAgZnMzID0gZ2wuY3JlYXRlU2hhZGVy
KGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZzMywgIiNpZmRlZiBH
TF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5nIHZlYzQgdkNv
bG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOworICAgIGdsLmNv
bXBpbGVTaGFkZXIoZnMzKTsKKworICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIo
ZnMzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAgICAgICAgICAgICAgImdvb2QgZnJh
Z21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICBnbC5kZXRhY2hTaGFkZXIocHJv
Z0dvb2QxLCBmcyk7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dHb29kMSwgZnMzKTsKKworICAg
IGdsLmRlbGV0ZVNoYWRlcihmczMpOworICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsKKyAgICBh
c3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9TVEFUVVMpID09
IHRydWUsCisgICAgICAgICAgICAgICJhbiBhdHRhY2hlZCBzaGFkZXIgc2hvdWxkbid0IGJlIGRl
bGV0ZWQiKTsKKworICAgIGdsLnVzZVByb2dyYW0obnVsbCk7CisgICAgZ2wubGlua1Byb2dyYW0o
cHJvZ0dvb2QxKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJh
IGRlbGV0ZS1tYXJrZWQgcHJvZ3JhbSBzaG91bGQgYmUgZGVsZXRlZCBvbmNlIGl0J3Mgbm8gbG9u
Z2VyIHRoZSBjdXJyZW50IHByb2dyYW0iKTsKKworICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsK
KyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJhIGRlbGV0ZS1tYXJr
ZWQgc2hhZGVyIHNob3VsZCBiZSBkZWxldGVkIG9uY2UgYWxsIGl0cyBhdHRhY2htZW50cyBhcmUg
cmVtb3ZlZCIpOwogfQogCiBkZWJ1ZygiIik7Ci1zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwot
CiBnbygpOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiAK
</data>
<flag name="commit-queue"
          id="52694"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64281</attachid>
            <date>2010-08-12 16:25:04 -0700</date>
            <delta_ts>2010-08-12 16:30:05 -0700</delta_ts>
            <desc>revised patch: use RefPtr for shader members in WebGLProgram</desc>
            <filename>program.patch</filename>
            <type>text/plain</type>
            <size>31000</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTIxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdyZXNz
aW9uIGluIGxpbmtpbmcgb2YgcHJvZ3JhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODIwCisKKyAgICAgICAgU2hhZGVycyBhbmQgcHJvZ3JhbXMg
c2hvdWxkbid0IGJlIGRlbGV0ZWQgdW50aWwgdGhlaXIgYXR0YWNobWVudHMgYXJlIHJlbW92ZWQs
IHRoZXJlZm9yZSwgd2UgbmVlZCB0byB0cmFjayB0aGUgYXR0YWNoL2RldGFjaC91c2VQcm9ncmFt
LgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOiBUcmFjayB0aGUgb2Jq
ZWN0IGF0dGFjaG1lbnQgY291bnQgYW5kIHdoZXRoZXIgaXQgc2hvdWxkIHJlYWxseSBiZSBkZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xP
YmplY3QuaDogVHJhY2sgdGhlIG9iamVjdCBhdHRhY2htZW50IGNvdW50IGFuZCB3aGV0aGVyIGl0
IHNob3VsZCByZWFsbHkgYmUgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0
OjpvbkF0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpvbkRldGFjaGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpnZXRBdHRhY2htZW50Q291bnQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6IFRyYWNrIHRoZSBhdHRhY2hl
ZCBzaGFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oOiBUcmFjayB0aGUgYXR0YWNoZWQgc2hhZGVycy4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOiBUcmFjayB0aGUgYXR0YWNobWVudCBv
ZiBhIHNoYWRlciB0byBhIHByb2dyYW0uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOiBEZXRhY2ggc2hhZGVycy4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKTogVHJhY2sgdGhlIGF0dGFj
aG1lbnQgb2YgYSBzaGFkZXIgdG8gYSBwcm9ncmFtLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KTogQWxzbyBjaGVjayBpZiBvYmpl
Y3QgPT0gMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0pOiBVc2luZyB0aGUgY2FjaGVkIGF0dGFjaGVkIHNoYWRlcnMgaW5zdGVhZCBvZiBxdWVy
eSBmcm9tIGRyaXZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dXNlUHJvZ3JhbSk6IFRyYWNrIHRoZSBhdHRhY2htZW50IG9mIGEgcHJvZ3JhbSB0byB0aGUgY3Vy
cmVudCByZW5kZXJpbmcgcGlwZWxpbmUuCisKIDIwMTAtMDgtMTEgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFdlYkdMT2JqZWN0OjpXZWJHTE9iamVj
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX29iamVjdCgwKQotICAg
ICwgbV9zaG91bGREZWxldGVPYmplY3QodHJ1ZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9hdHRhY2htZW50Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKIH0K
IApAQCAtNDYsMjcgKzQ3LDI2IEBAIFdlYkdMT2JqZWN0Ojp+V2ViR0xPYmplY3QoKQogICAgICAg
ICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6
c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0LCBib29sIHNob3VsZERlbGV0ZU9iamVj
dCkKK3ZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKICAgICBpZiAob2JqZWN0ID09IG1fb2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGRlbGV0ZU9iamVjdCgpOwogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwotICAgIG1fc2hv
dWxkRGVsZXRlT2JqZWN0ID0gc2hvdWxkRGVsZXRlT2JqZWN0OwogfQogCiB2b2lkIFdlYkdMT2Jq
ZWN0OjpkZWxldGVPYmplY3QoKQogewogICAgIGlmIChtX29iamVjdCkgewotICAgICAgICBpZiAo
bV9zaG91bGREZWxldGVPYmplY3QpCi0gICAgICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAgICAgICAgICAgICBkZWxldGVPYmplY3RJbXBsKG1fb2JqZWN0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgbV9vYmplY3QgPSAwOworICAgICAgICBpZiAobV9jb250ZXh0
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgZGVsZXRlT2JqZWN0SW1wbChtX29iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIG1f
b2JqZWN0ID0gMDsKKyAgICAgICAgbV9kZWxldGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgbV9zaG91
bGREZWxldGVPYmplY3QgPSB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9i
amVjdC5oCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViR0xPYmplY3QoKTsKIAogICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICB2b2lkIHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0
LCBib29sIHNob3VsZERlbGV0ZU9iamVjdCA9IHRydWUpOworICAgIHZvaWQgc2V0T2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7CiAKICAgICB2b2lkIGRl
dGFjaENvbnRleHQoKQpAQCAtNTgsMjAgKzU4LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdm9pZCBvbkF0dGFjaGVk
KCkgeyArK21fYXR0YWNobWVudENvdW50OyB9CisgICAgdm9pZCBvbkRldGFjaGVkKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIC0tbV9hdHRhY2ht
ZW50Q291bnQ7CisgICAgICAgIGlmICghbV9hdHRhY2htZW50Q291bnQgJiYgbV9kZWxldGVkKQor
ICAgICAgICAgICAgbV9vYmplY3QgPSAwOworICAgIH0KKyAgICB1bnNpZ25lZCBnZXRBdHRhY2ht
ZW50Q291bnQoKSB7IHJldHVybiBtX2F0dGFjaG1lbnRDb3VudDsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCiBwcml2YXRlOgogICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Ci0gICAgLy8gVGhlIHNob3VsZERlbGV0ZU9iamVj
dCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgd3JhcHBlcgotICAgIC8vIG93bnMgdGhlIHVu
ZGVybHlpbmcgcmVzb3VyY2UgYW5kIHNob3VsZCBkZWxldGUgaXQgd2hlbiB0aGUKLSAgICAvLyB3
cmFwcGVyIGlzIHVucmVmZXJlbmNlZCBmb3IgdGhlIGxhc3QgdGltZSBhbmQgZGVsZXRlZC4gSXQK
LSAgICAvLyBpcyBvbmx5IHNldCB0byBmYWxzZSBmb3IgY2VydGFpbiBvYmplY3RzIHJldHVybmVk
IGZyb20gZ2V0Ci0gICAgLy8gcXVlcmllcy4gRklYTUU6IHNob3VsZCBjb25zaWRlciBjYW5vbmlj
YWxpemluZyBhbGwgb2YgdGhlc2UKLSAgICAvLyBvYmplY3RzIGluIHRoZSBmdXR1cmUuCi0gICAg
Ym9vbCBtX3Nob3VsZERlbGV0ZU9iamVjdDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1f
Y29udGV4dDsKKyAgICB1bnNpZ25lZCBtX2F0dGFjaG1lbnRDb3VudDsKKyAgICBib29sIG1fZGVs
ZXRlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDY1MjA2KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMjEgQEAgUGFz
c1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6YwogV2ViR0xQcm9ncmFtOjpXZWJH
TFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgOiBXZWJHTE9iamVjdChj
dHgpCiAgICAgLCBtX2xpbmtGYWlsdXJlKGZhbHNlKQorICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkK
KyAgICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkKIHsKICAgICBzZXRPYmplY3QoY29udGV4dCgpLT5n
cmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOwogfQogCi12b2lkIFdlYkdMUHJv
Z3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2Vi
R0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQogewotICAg
IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmplY3QpOwor
ICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmopOwor
ICAgIGlmICghb2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyKQorICAgICAg
ICAgICAgbV92ZXJ0ZXhTaGFkZXItPm9uRGV0YWNoZWQoKTsKKyAgICAgICAgaWYgKG1fZnJhZ21l
bnRTaGFkZXIpCisgICAgICAgICAgICBtX2ZyYWdtZW50U2hhZGVyLT5vbkRldGFjaGVkKCk7Cisg
ICAgfQogfQogCiBib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KQpAQCAtOTQsNiArMTAyLDU4IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0
cmliMCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1dlYkdMU2hhZGVyKiBXZWJHTFByb2dyYW06
OmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIG1fdmVydGV4U2hhZGVyLmdldCgpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIG1f
ZnJhZ21lbnRTaGFkZXIuZ2V0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitib29sIFdlYkdMUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKiBz
aGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIgfHwgIXNoYWRlci0+b2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHNoYWRlci0+Z2V0VHlwZSgpKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICAgICAgaWYgKG1fdmVydGV4
U2hhZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3ZlcnRleFNoYWRl
ciA9IHNoYWRlcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IHNoYWRl
cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8ICFzaGFkZXItPm9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChzaGFkZXItPmdldFR5cGUoKSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgICAgIGlmICht
X3ZlcnRleFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fdmVydGV4U2hhZGVyID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAobV9mcmFnbWVu
dFNoYWRlciAhPSBzaGFkZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA2
NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAKKyNpbmNs
dWRlICJXZWJHTFNoYWRlci5oIgorCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDYg
KzU2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGlua0ZhaWx1cmVGbGFnU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5rRmFpbHVyZTsgfQogICAgIHZvaWQgc2V0TGlua0ZhaWx1cmVGbGFnKGJv
b2wgZmFpbGVkKSB7IG1fbGlua0ZhaWx1cmUgPSBmYWlsZWQ7IH0KIAorICAgIFdlYkdMU2hhZGVy
KiBnZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSk7Cisg
ICAgYm9vbCBhdHRhY2hTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBib29sIGRldGFjaFNoYWRl
cihXZWJHTFNoYWRlciopOworCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwogCkBAIC02NSw2ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PGludD4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnM7CiAKICAgICBib29sIG1fbGlua0ZhaWx1cmU7
CisKKyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG1fdmVydGV4U2hhZGVyOworICAgIFJlZlB0cjxX
ZWJHTFNoYWRlcj4gbV9mcmFnbWVudFNoYWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDY1MjA2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDEyIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIKICAgICBVTlVTRURfUEFSQU0oZWMpOwog
ICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hT
aGFkZXIoc2hhZGVyKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBv
YmplY3RPclplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtNjUwLDcgKzY1NSwxMiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhCiB7CiAgICAgaWYgKCFwcm9n
cmFtKQogICAgICAgICByZXR1cm47Ci0gICAgCisgICAgaWYgKHByb2dyYW0tPmNvbnRleHQoKSAh
PSB0aGlzKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKQorICAgICAgICByZXR1cm47CiAgICAgcHJvZ3JhbS0+
ZGVsZXRlT2JqZWN0KCk7CiB9CiAKQEAgLTcwNSw3ICs3MTUsMTIgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcgogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYg
KCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNo
YWRlcikpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihz
aGFkZXIpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9y
WmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uRGV0YWNoZWQoKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC04OTIsNyArOTA3LDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUmVuZAogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQogewotICAgIGlm
ICghb2JqZWN0KSB7CisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xODgyLDIxICsx
ODk3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAogICAgIGlm
ICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJHTFNoYWRlcio+IHNo
YWRlcnM7Ci0gICAgICAgIGJvb2wgc3VjY2VlZCA9IGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFt
LCBzaGFkZXJzLCBlYyk7Ci0gICAgICAgIGlmIChzdWNjZWVkKSB7Ci0gICAgICAgICAgICBib29s
IHZTaGFkZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgZlNoYWRlciA9IGZhbHNlOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpICYmICghdlNo
YWRlciB8fCAhZlNoYWRlcik7ICsraWkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZGVyc1tp
aV0tPmdldFR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUikKLSAgICAg
ICAgICAgICAgICAgICAgdlNoYWRlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
c2hhZGVyc1tpaV0tPmdldFR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKQotICAgICAgICAgICAgICAgICAgICBmU2hhZGVyID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICghdlNoYWRlciB8fCAhZlNoYWRlcikKLSAgICAgICAgICAgICAgICBz
dWNjZWVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzdWNjZWVkKSB7CisgICAg
ICAgIGlmICghcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9TSEFERVIpIHx8ICFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSKSkgewogICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua0Zh
aWx1cmVGbGFnKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzAx
LDEzICsyNzAyLDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cmkK
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmIChwcm9ncmFtICYmIHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2N1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0p
KTsKKyAgICBpZiAocHJvZ3JhbSAmJiBwcm9ncmFtLT5vYmplY3QoKSAmJiAhZ2V0UHJvZ3JhbVBh
cmFtZXRlcihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsIGVjKS5nZXRC
b29sKCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1cnJlbnRQ
cm9ncmFtICE9IHByb2dyYW0pIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCisgICAg
ICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKCk7CisgICAgICAgIG1fY3VycmVu
dFByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0
T3JaZXJvKHByb2dyYW0pKTsKKyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9n
cmFtLT5vbkF0dGFjaGVkKCk7CisgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1MjEzKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMTEgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZWdyZXNzaW9uIGluIGxpbmtpbmcgb2YgcHJvZ3JhbXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzODIwCisKKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QtZXhwZWN0ZWQudHh0OiBGaXggdGhl
IHRlc3RzIHNvIGEgc2Vjb25kIHNoYWRlciBvZiB0aGUgc2FtZSB0eXBlIGF0dGFjaGluZyB0byBh
IHByb2dyYW0gd2lsbCBnZW5lcmF0ZSBlcnJvcjsgYWxzbywgYWRkIHRlc3RzIGZvciBkZWxldGVT
aGFkZXIvZGVsZXRlUHJvZ3JhbSBiZWhhdmlvci4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9wcm9ncmFtLXRlc3QuaHRtbDogRGl0dG8uCisKIDIwMTAtMDgtMTEgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10
ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjUyMDYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MiwxNSArMTIsMTcgQEAgUEFTUyBiYWQgdmVydGV4IHNoYWRlciBzaG91bGQgZmFpbCB0byBjbwog
UEFTUyBnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZQogUEFTUyBnb29kIGZyYWdt
ZW50IHNoYWRlciAjMiBzaG91bGQgY29tcGlsZQogUEFTUyBiYWQgZnJhZ21lbnQgc2hhZGVyIHNo
b3VsZCBmYWlsIHRvIGNvbXBpbGUKLVBBU1Mgc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBv
aW50Ci1QQVNTIGF0dGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKLVBBU1Mg
YXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2VuZXJh
dGUgSU5WQUxJRF9PUEVSQVRJT04KLVBBU1MgYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNo
b3VsZCBzdWNjZWVkCi1QQVNTIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIGZyYWdtZW50
IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KLVBBU1MgZGV0YWNoaW5n
IGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZAotUEFTUyBkZXRhY2hpbmcgYSBub3QgYWxy
ZWFkeSBhdHRhY2hlZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJB
VElPTgotUEFTUyBkZXRhY2hpbmcgYSBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKLVBB
U1MgZGV0YWNoaW5nIGEgbm90IGFscmVhZHkgYXR0YWNoZWQgZnJhZ21lbnQgc2hhZGVyIHNob3Vs
ZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50CitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBhdHRhY2hpbmcgYSB2ZXJ0
ZXggc2hhZGVyIHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9PUEVSQVRJT04gOiBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCB2ZXJ0
ZXggc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hh
ZGVyIHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9PUEVSQVRJT04gOiBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBmcmFnbWVudCBz
aGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiBhdHRhY2hpbmcgc2hhZGVycyBv
ZiB0aGUgc2FtZSB0eXBlIHRvIGEgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVS
QVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElP
TiA6IGF0dGFjaGluZyBzaGFkZXJzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYSBwcm9ncmFtIHNob3Vs
ZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogZGV0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2Vl
ZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDog
ZGV0YWNoaW5nIGEgbm90IGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2Vu
ZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IGRldGFjaGluZyBhIGZyYWdtZW50IHNoYWRlciBzaG91bGQgc3VjY2VlZAor
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogZGV0
YWNoaW5nIGEgbm90IGFscmVhZHkgYXR0YWNoZWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBnZW5l
cmF0ZSBJTlZBTElEX09QRVJBVElPTgogUEFTUyBnZXRBdHRhY2hlZFNoYWRlcnMgc2hvdWxkIHJl
dHVybiBhbiBlbXB0eSBsaXN0IGJ5IGRlZmF1bHQKIFBBU1MgYXR0YWNoaW5nIGEgc2luZ2xlIHNo
YWRlciBzaG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdAogUEFTUyBhdHRhY2hpbmcgc29tZSBz
aGFkZXJzIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0CkBAIC0zMiwyNiArMzQsMzggQEAg
UEFTUyBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBzb21lIHNoYWRlcgogUEFTUyBhdHRhY2hpbmcg
YSBzaGFkZXIgdGhhdCBmYWlsZWQgdG8gY29tcGlsZSBzaG91bGQgc3RpbGwgc2hvdyBpdCBpbiB0
aGUgbGlzdAogUEFTUyBhdHRhY2hpbmcgc2hhZGVycywgaW5jbHVkaW5nIG9uZSB0aGF0IGZhaWxl
ZCB0byBjb21waWxlLCBzaG91bGQgc3RpbGwgc2hvdyB0aGUgaXQgaW4gdGhlIGxpc3QKIFBBU1Mg
dmFsaWQgcHJvZ3JhbSBzaG91bGQgbGluawotUEFTUyB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hv
dWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGQgc3VjY2VlZAogUEFTUyB2YWxpZCBwcm9ncmFt
ICMyIHNob3VsZCBsaW5rCi1QQVNTIHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGQgc3VjY2Vl
ZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogdXNpbmcgYSB2
YWxpZCBwcm9ncmFtIHNob3VsZCBzdWNjZWVkCiBQQVNTIHByb2dyYW0gd2l0aCBubyBmcmFnbWVu
dCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluawotUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dy
YW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiB1c2luZyBhbiBpbnZhbGlkIHByb2dy
YW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCiBQQVNTIHByb2dyYW0gd2l0aCBu
byB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKLVBBU1MgdXNpbmcgYW4gaW52YWxp
ZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogdXNpbmcgYW4gaW52YWxp
ZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgogUEFTUyBwcm9ncmFt
IHdpdGggYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluawotUEFTUyB1c2luZyBh
biBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiB1c2luZyBh
biBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCiBQQVNT
IHByb2dyYW0gd2l0aCBiYWQgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKLVBB
U1MgdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJB
VElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9O
IDogdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJB
VElPTgogUEFTUyBwcm9ncmFtIHdpdGggYmFkIHNoYWRlcnMgc2hvdWxkIGZhaWwgdG8gbGluawot
UEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BF
UkFUSU9OCi1QQVNTIHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBH
TCBlcnJvcgotUEFTUyBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQgIzIKLVBBU1Mg
ZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJv
cgotUEFTUyB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURf
T1BFUkFUSU9OCi1QQVNTIGRyYXdpbmcgd2l0aCBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdl
bmVyYXRlIHNvbWUgR0wgZXJyb3IgWFhYCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogSU5WQUxJRF9PUEVSQVRJT04gOiB1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdl
bmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEg
R0wgZXJyb3IKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBlcnJvcnMgYXQgdGhpcyBwb2ludCAjMgorUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3JhbSBzaG91
bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvcgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfT1BFUkFUSU9OIDogdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBn
ZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogVHJ5IHRvIHVzZSBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIG5vdCBj
aGFuZ2UgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIHN0YXRlCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBkcmF3aW5nIHdpdGggYSB2YWxpZCBwcm9ncmFtIHNob3Vs
ZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yCiBQQVNTIGxpbmtpbmcgc2hvdWxkIGZhaWwgd2l0aCBp
bi11c2UgZm9ybWVybHkgZ29vZCBwcm9ncmFtLCB3aXRoIG5ldyBiYWQgc2hhZGVyIGF0dGFjaGVk
Ci1QQVNTIGRyYXdpbmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hvdWxk
bid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IGRyYXdpbmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0g
c2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BBU1MgZGVsZXRlIHNoYWRlcnMgYWZ0ZXIg
YXR0YWNoaW5nIHRoZW0gYW5kIGJlZm9yZSBsaW5raW5nIHByb2dyYW0gc2hvdWxkIG5vdCBhZmZl
Y3QgbGlua1Byb2dyYW0KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IHVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBs
YXN0IHVzZWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvcgorUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZGVsZXRlIHRoZSBjdXJyZW50IHBy
b2dyYW0gc2hvdWxkbid0IGNoYW5nZSB0aGUgY3VycmVudCByZW5kZXJpbmcgc3RhdGUKK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFRoZSBjdXJyZW50IHByb2dy
YW0gc2hvdWxkbid0IGJlIGRlbGV0ZWQKK1BBU1MgZ29vZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxk
IGNvbXBpbGUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVF
IDogYW4gdW5hdHRhY2hlZCBzaGFkZXIgc2hvdWxkIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkKK1BB
U1MgZ29vZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGNvbXBpbGUKK1BBU1MgYW4gYXR0YWNoZWQg
c2hhZGVyIHNob3VsZG4ndCBiZSBkZWxldGVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogSU5WQUxJRF9WQUxVRSA6IGEgZGVsZXRlLW1hcmtlZCBwcm9ncmFtIHNob3VsZCBiZSBk
ZWxldGVkIG9uY2UgaXQncyBubyBsb25nZXIgdGhlIGN1cnJlbnQgcHJvZ3JhbQorUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUgOiBhIGRlbGV0ZS1tYXJrZWQg
c2hhZGVyIHNob3VsZCBiZSBkZWxldGVkIG9uY2UgYWxsIGl0cyBhdHRhY2htZW50cyBhcmUgcmVt
b3ZlZAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRt
bAkocmV2aXNpb24gNjUyMDYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9n
cmFtLXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNyBAQCBmdW5jdGlvbiBn
bygpIHsKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzQmFkLCBnbC5DT01Q
SUxFX1NUQVRVUykgPT0gZmFsc2UsCiAgICAgICAgICAgICAgICJiYWQgZnJhZ21lbnQgc2hhZGVy
IHNob3VsZCBmYWlsIHRvIGNvbXBpbGUiKTsKIAotICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigp
ID09IGdsLk5PX0VSUk9SLAotICAgICAgICAgICAgICAic2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0
aGlzIHBvaW50Iik7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3Vs
ZCBiZSBubyBlcnJvcnMgYXQgdGhpcyBwb2ludCIpOwogCiAvLy8vLy8vIENoZWNrIGF0dGFjaFNo
YWRlcigpIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKQEAgLTg3LDcgKzg2LDcgQEAg
ZnVuY3Rpb24gZ28oKSB7CiAgICAgICAgIGlmKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1Ip
CiAgICAgICAgICAgICBhc3NlcnRNc2coZmFsc2UsICJ1bmV4cGVjdGVkIGVycm9yIGluIGF0dGFj
aFNoYWRlcigpIik7CiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nLCBzaGFkZXIpOwotICAg
ICAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBleHBlY3RlZF9lcnJvcl9jb2RlLCBlcnJt
c2cpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGV4cGVjdGVkX2Vycm9yX2NvZGUsIGVy
cm1zZyk7CiAgICAgfQogCiAgICAgY2hlY2tBdHRhY2hTaGFkZXIoW10sIHZzLCBnbC5OT19FUlJP
UiwgImF0dGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQiKTsKQEAgLTk2LDYg
Kzk1LDEwIEBAIGZ1bmN0aW9uIGdvKCkgewogICAgIGNoZWNrQXR0YWNoU2hhZGVyKFtdLCBmcywg
Z2wuTk9fRVJST1IsICJhdHRhY2hpbmcgYSBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQi
KTsKICAgICBjaGVja0F0dGFjaFNoYWRlcihbZnNdLCBmcywgZ2wuSU5WQUxJRF9PUEVSQVRJT04s
CiAgICAgICAgICAgICAgICAgICAgICAgImF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIGZy
YWdtZW50IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKKyAgICBj
aGVja0F0dGFjaFNoYWRlcihbdnNdLCB2czIsIGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICJhdHRhY2hpbmcgc2hhZGVycyBvZiB0aGUgc2FtZSB0eXBlIHRvIGEg
cHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKKyAgICBjaGVja0F0
dGFjaFNoYWRlcihbZnNdLCBmczIsIGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAg
ICAgICAgICAgICJhdHRhY2hpbmcgc2hhZGVycyBvZiB0aGUgc2FtZSB0eXBlIHRvIGEgcHJvZ3Jh
bSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKIAogLy8vLy8vLyBDaGVjayBk
ZXRhY2hTaGFkZXIoKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCkBAIC0xMDYsNyAr
MTA5LDcgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAgICAgIGlmKGdsLmdldEVycm9yKCkgIT0gZ2wu
Tk9fRVJST1IpCiAgICAgICAgICAgICBhc3NlcnRNc2coZmFsc2UsICJ1bmV4cGVjdGVkIGVycm9y
IGluIGF0dGFjaFNoYWRlcigpIik7CiAgICAgICAgIGdsLmRldGFjaFNoYWRlcihwcm9nLCBzaGFk
ZXIpOwotICAgICAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBleHBlY3RlZF9lcnJvcl9j
b2RlLCBlcnJtc2cpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGV4cGVjdGVkX2Vycm9y
X2NvZGUsIGVycm1zZyk7CiAgICAgfQogCiAgICAgY2hlY2tEZXRhY2hTaGFkZXIoW3ZzXSwgdnMs
IGdsLk5PX0VSUk9SLCAiZGV0YWNoaW5nIGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZCIp
OwpAQCAtMTMyLDI4ICsxMzUsMzEgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAgfQogICAgIGNoZWNr
R2V0QXR0YWNoZWRTaGFkZXJzKFtdLCBbXSwgW10sICJnZXRBdHRhY2hlZFNoYWRlcnMgc2hvdWxk
IHJldHVybiBhbiBlbXB0eSBsaXN0IGJ5IGRlZmF1bHQiKTsKICAgICBjaGVja0dldEF0dGFjaGVk
U2hhZGVycyhbZnNdLCBbXSwgW2ZzXSwgImF0dGFjaGluZyBhIHNpbmdsZSBzaGFkZXIgc2hvdWxk
IGdpdmUgdGhlIGV4cGVjdGVkIGxpc3QiKTsKLSAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhb
ZnMsIHZzLCBmczIsIHZzMl0sIFtdLCBbZnMsIHZzLCBmczIsIHZzMl0sCisgICAgY2hlY2tHZXRB
dHRhY2hlZFNoYWRlcnMoW2ZzLCB2c10sIFtdLCBbZnMsIHZzXSwKICAgICAgICAgImF0dGFjaGlu
ZyBzb21lIHNoYWRlcnMgc2hvdWxkIGdpdmUgdGhlIGV4cGVjdGVkIGxpc3QiKTsKICAgICBjaGVj
a0dldEF0dGFjaGVkU2hhZGVycyhbZnNdLCBbZnNdLCBbXSwgImF0dGFjaGluZyBhIHNoYWRlciBh
bmQgZGV0YWNoaW5nIGl0IHNob3VkIGxlYXZlIGFuIGVtcHR5IGxpc3QiKTsKLSAgICBjaGVja0dl
dEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzLCBmczIsIHZzMl0sIFtmcywgdnMsIGZzMiwgdnMyXSwg
W10sCisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c10sIFtmcywgdnNdLCBbXSwK
ICAgICAgICAgImF0dGFjaGluZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHNh
bWUgb3JkZXIgc2hvdWQgbGVhdmUgYW4gZW1wdHkgbGlzdCIpOwotICAgIGNoZWNrR2V0QXR0YWNo
ZWRTaGFkZXJzKFtmcywgdnMsIGZzMiwgdnMyXSwgW2ZzLCB2czIsIHZzLCBmczJdLCBbXSwKKyAg
ICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzXSwgW3ZzLCBmc10sIFtdLAogICAgICAg
ICAiYXR0YWNoaW5nIHNvbWUgc2hhZGVycyBhbmQgZGV0YWNoaW5nIHRoZW0gaW4gcmFuZG9tIG9y
ZGVyIHNob3VkIGxlYXZlIGFuIGVtcHR5IGxpc3QiKTsKLSAgICBjaGVja0dldEF0dGFjaGVkU2hh
ZGVycyhbZnMsIHZzLCBmczIsIHZzMl0sIFt2c10sIFtmcywgZnMyLCB2czJdLAorICAgIGNoZWNr
R2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnNdLCBbdnNdLCBbZnNdLAogICAgICAgICAiYXR0YWNo
aW5nIGFuZCBkZXRhY2hpbmcgc29tZSBzaGFkZXJzIHNob3VsZCBsZWF2ZSB0aGUgZGlmZmVyZW5j
ZSBsaXN0Iik7Ci0gICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJd
LCBbZnMsIHZzMl0sIFt2cywgZnMyXSwKKyAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMs
IHZzXSwgW2ZzXSwgW3ZzXSwKICAgICAgICAgImF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIHNvbWUg
c2hhZGVycyBzaG91bGQgbGVhdmUgdGhlIGRpZmZlcmVuY2UgbGlzdCIpOwogICAgIGNoZWNrR2V0
QXR0YWNoZWRTaGFkZXJzKFtmc0JhZF0sIFtdLCBbZnNCYWRdLAogICAgICAgICAiYXR0YWNoaW5n
IGEgc2hhZGVyIHRoYXQgZmFpbGVkIHRvIGNvbXBpbGUgc2hvdWxkIHN0aWxsIHNob3cgaXQgaW4g
dGhlIGxpc3QiKTsKLSAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzQmFkLCBmczJd
LCBbXSwgW2ZzLCB2c0JhZCwgZnMyXSwKKyAgICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMs
IHZzQmFkXSwgW10sIFtmcywgdnNCYWRdLAogICAgICAgICAiYXR0YWNoaW5nIHNoYWRlcnMsIGlu
Y2x1ZGluZyBvbmUgdGhhdCBmYWlsZWQgdG8gY29tcGlsZSwgc2hvdWxkIHN0aWxsIHNob3cgdGhl
IGl0IGluIHRoZSBsaXN0Iik7CiAKIC8vLy8vLy8gQ2hlY2sgbGlua1Byb2dyYW0oKSBhbmQgdXNl
UHJvZ3JhbSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0gICAgZnVuY3Rpb24gY2hl
Y2tMaW5rQW5kVXNlKHNoYWRlcnMsIGV4cGVjdGVkX3N0YXR1cywgZXJybXNnKSB7CisgICAgZnVu
Y3Rpb24gY2hlY2tMaW5rQW5kVXNlKHNoYWRlcnMsIGRlbGV0ZVNoYWRlckFmdGVyQXR0YWNoLCBl
eHBlY3RlZF9zdGF0dXMsIGVycm1zZykgewogICAgICAgICB2YXIgcHJvZyA9IGdsLmNyZWF0ZVBy
b2dyYW0oKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFkZXJzLmxlbmd0aDsgKytp
KQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlcnMubGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nLCBzaGFkZXJzW2ldKTsKKyAgICAgICAgICAg
IGlmIChkZWxldGVTaGFkZXJBZnRlckF0dGFjaCkKKyAgICAgICAgICAgICAgICBnbC5kZWxldGVT
aGFkZXIoc2hhZGVyc1tpXSk7CisgICAgICAgIH0KICAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0
aW9uKHByb2csIDAsICJhVmVydGV4Iik7CiAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihw
cm9nLCAxLCAiYUNvbG9yIik7CiAgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2cpOwpAQCAtMTY2
LDIzICsxNzIsMjIgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAgICAgICAgICBhc3NlcnRNc2coZmFs
c2UsICJ1bmV4cGVjdGVkIGVycm9yIGluIGdldFByb2dyYW1QYXJhbWV0ZXIoKSIpOwogICAgICAg
ICBnbC51c2VQcm9ncmFtKHByb2cpOwogICAgICAgICBpZiAoZXhwZWN0ZWRfc3RhdHVzID09IHRy
dWUpCi0gICAgICAgICAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwg
InVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGQgc3VjY2VlZCIpOworICAgICAgICAgICAgZ2xF
cnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91
bGQgc3VjY2VlZCIpOwogICAgICAgICBpZiAoZXhwZWN0ZWRfc3RhdHVzID09IGZhbHNlKQotICAg
ICAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04s
ICJ1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFU
SU9OIik7CisgICAgICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfT1BFUkFU
SU9OLCAidXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09Q
RVJBVElPTiIpOwogICAgICAgICByZXR1cm4gcHJvZzsKICAgICB9CiAKLSAgICB2YXIgcHJvZ0dv
b2QxID0gY2hlY2tMaW5rQW5kVXNlKFt2cywgZnNdLCB0cnVlLCAidmFsaWQgcHJvZ3JhbSBzaG91
bGQgbGluayIpOwotICAgIHZhciBwcm9nR29vZDIgPSBjaGVja0xpbmtBbmRVc2UoW3ZzLCBmczJd
LCB0cnVlLCAidmFsaWQgcHJvZ3JhbSAjMiBzaG91bGQgbGluayIpOwotICAgIHZhciBwcm9nQmFk
MSA9IGNoZWNrTGlua0FuZFVzZShbdnNdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBubyBmcmFnbWVu
dCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOwotICAgIHZhciBwcm9nQmFkMiA9IGNoZWNr
TGlua0FuZFVzZShbZnNdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBubyB2ZXJ0ZXggc2hhZGVyIHNo
b3VsZCBmYWlsIHRvIGxpbmsiKTsKLSAgICB2YXIgcHJvZ0JhZDMgPSBjaGVja0xpbmtBbmRVc2Uo
W3ZzQmFkLCBmc10sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCB2ZXJ0ZXggc2hhZGVyIHNob3Vs
ZCBmYWlsIHRvIGxpbmsiKTsKLSAgICB2YXIgcHJvZ0JhZDQgPSBjaGVja0xpbmtBbmRVc2UoW3Zz
LCBmc0JhZF0sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxk
IGZhaWwgdG8gbGluayIpOwotICAgIHZhciBwcm9nQmFkNSA9IGNoZWNrTGlua0FuZFVzZShbdnNC
YWQsIGZzQmFkXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIHNoYWRlcnMgc2hvdWxkIGZhaWwg
dG8gbGluayIpOworICAgIHZhciBwcm9nR29vZDEgPSBjaGVja0xpbmtBbmRVc2UoW3ZzLCBmc10s
IGZhbHNlLCB0cnVlLCAidmFsaWQgcHJvZ3JhbSBzaG91bGQgbGluayIpOworICAgIHZhciBwcm9n
R29vZDIgPSBjaGVja0xpbmtBbmRVc2UoW3ZzLCBmczJdLCBmYWxzZSwgdHJ1ZSwgInZhbGlkIHBy
b2dyYW0gIzIgc2hvdWxkIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDEgPSBjaGVja0xpbmtBbmRV
c2UoW3ZzXSwgZmFsc2UsIGZhbHNlLCAicHJvZ3JhbSB3aXRoIG5vIGZyYWdtZW50IHNoYWRlciBz
aG91bGQgZmFpbCB0byBsaW5rIik7CisgICAgdmFyIHByb2dCYWQyID0gY2hlY2tMaW5rQW5kVXNl
KFtmc10sIGZhbHNlLCBmYWxzZSwgInByb2dyYW0gd2l0aCBubyB2ZXJ0ZXggc2hhZGVyIHNob3Vs
ZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0JhZDMgPSBjaGVja0xpbmtBbmRVc2UoW3Zz
QmFkLCBmc10sIGZhbHNlLCBmYWxzZSwgInByb2dyYW0gd2l0aCBiYWQgdmVydGV4IHNoYWRlciBz
aG91bGQgZmFpbCB0byBsaW5rIik7CisgICAgdmFyIHByb2dCYWQ0ID0gY2hlY2tMaW5rQW5kVXNl
KFt2cywgZnNCYWRdLCBmYWxzZSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIGZyYWdtZW50IHNo
YWRlciBzaG91bGQgZmFpbCB0byBsaW5rIik7CisgICAgdmFyIHByb2dCYWQ1ID0gY2hlY2tMaW5r
QW5kVXNlKFt2c0JhZCwgZnNCYWRdLCBmYWxzZSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIHNo
YWRlcnMgc2hvdWxkIGZhaWwgdG8gbGluayIpOwogCiAgICAgZ2wudXNlUHJvZ3JhbShwcm9nR29v
ZDEpOwotICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAotICAgICAg
ICAgICAgICAidXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVy
cm9yIik7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInVzaW5nIGEgdmFs
aWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOwogCiAgICAgdmFyIHZi
dWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZF
UiwgdmJ1Zik7CkBAIC0xOTcsMjIgKzIwMiwyMSBAQCBmdW5jdGlvbiBnbygpIHsKICAgICBnbC5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKICAgICBnbC52ZXJ0ZXhBdHRyaWIzZigxLCAxLjAs
IDAuMCwgMC4wKTsKIAotICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9S
LAotICAgICAgICAgICAgICAic2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50ICMyIik7
CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBlcnJv
cnMgYXQgdGhpcyBwb2ludCAjMiIpOwogCiAgICAgZ2wudXNlUHJvZ3JhbShwcm9nR29vZDEpOwog
ICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKLSAgICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKLSAgICAgICAgICAgICAgImRyYXdpbmcgd2l0aCBh
IHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IiKTsKKyAgICBnbEVy
cm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3Jh
bSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvciIpOwogCiAgICAgZ2wudXNlUHJvZ3JhbShw
cm9nQmFkMSk7Ci0gICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVS
QVRJT04sCi0gICAgICAgICAgICAgICJ1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIGdl
bmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5J
TlZBTElEX09QRVJBVElPTiwgInVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJh
dGUgSU5WQUxJRF9PUEVSQVRJT04iKTsKICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywg
MCwgMyk7Ci0gICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IsCi0gICAg
ICAgICAgICAgICJkcmF3aW5nIHdpdGggYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0
ZSBzb21lIEdMIGVycm9yIFhYWCIpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJS
T1IsICJUcnkgdG8gdXNlIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgbm90IGNoYW5nZSB0aGUg
Y3VycmVudCByZW5kZXJpbmcgc3RhdGUiKTsKIAogICAgIGdsLnVzZVByb2dyYW0ocHJvZ0dvb2Qy
KTsKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisgICAgZ2xFcnJvclNo
b3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImRyYXdpbmcgd2l0aCBhIHZhbGlkIHByb2dyYW0gc2hv
dWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IiKTsKKyAgICBnbC5kZXRhY2hTaGFkZXIocHJvZ0dv
b2QyLCBmczIpOwogICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nR29vZDIsIGZzQmFkKTsKICAgICBn
bC5saW5rUHJvZ3JhbShwcm9nR29vZDIpOwogICAgIGFzc2VydE1zZyhnbC5nZXRQcm9ncmFtUGFy
YW1ldGVyKHByb2dHb29kMiwgZ2wuTElOS19TVEFUVVMpID09IGZhbHNlLApAQCAtMjIwLDE0ICsy
MjQsNjEgQEAgZnVuY3Rpb24gZ28oKSB7CiAKICAgICBnbC51c2VQcm9ncmFtKHByb2dHb29kMSk7
CiAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDQpOwotICAgIGFzc2VydE1zZyhn
bC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SLAotICAgICAgICAgICAgICAiZHJhd2luZyB3aXRo
IGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBl
cnJvciIpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJkcmF3aW5nIHdp
dGggYSB2YWxpZCB3aGVuIGxhc3QgdXNlZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdM
IGVycm9yIik7CisKKyAgICB2YXIgcHJvZ0dvb2QxID0gY2hlY2tMaW5rQW5kVXNlKFt2cywgZnNd
LCB0cnVlLCB0cnVlLCAiZGVsZXRlIHNoYWRlcnMgYWZ0ZXIgYXR0YWNoaW5nIHRoZW0gYW5kIGJl
Zm9yZSBsaW5raW5nIHByb2dyYW0gc2hvdWxkIG5vdCBhZmZlY3QgbGlua1Byb2dyYW0iKTsKKyAg
ICBnbC51c2VQcm9ncmFtKHByb2dHb29kMSk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdM
RVMsIDAsIDQpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJkcmF3aW5n
IHdpdGggYSB2YWxpZCB3aGVuIGxhc3QgdXNlZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBh
IEdMIGVycm9yIik7CisKKy8vLy8vLy8gQ2hlY2sgZGVsZXRlUHJvZ3JhbSgpIGFuZCBkZWxldGVT
aGFkZXIoKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgZ2wudXNlUHJvZ3Jh
bShwcm9nR29vZDEpOworICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ0dvb2QxKTsKKyAgICBnbC5k
cmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNCk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBn
bC5OT19FUlJPUiwgImRlbGV0ZSB0aGUgY3VycmVudCBwcm9ncmFtIHNob3VsZG4ndCBjaGFuZ2Ug
dGhlIGN1cnJlbnQgcmVuZGVyaW5nIHN0YXRlIik7CisKKyAgICBnbC5saW5rUHJvZ3JhbShwcm9n
R29vZDEpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJUaGUgY3VycmVu
dCBwcm9ncmFtIHNob3VsZG4ndCBiZSBkZWxldGVkIik7CisKKyAgICB2YXIgZnMzID0gZ2wuY3Jl
YXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZzMywg
IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5n
IHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOwor
ICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsKKworICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQ
YXJhbWV0ZXIoZnMzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKKyAgICAgICAgICAgICAg
Imdvb2QgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CisKKyAgICBnbC5kZWxldGVT
aGFkZXIoZnMzKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CisgICAgZ2xFcnJvclNob3Vs
ZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiYW4gdW5hdHRhY2hlZCBzaGFkZXIgc2hvdWxkIGJl
IGRlbGV0ZWQgaW1tZWRpYXRlbHkiKTsKKworICAgIGZzMyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5G
UkFHTUVOVF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJjZShmczMsICIjaWZkZWYgR0xfRVNc
bnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsg
dm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKKyAgICBnbC5jb21waWxl
U2hhZGVyKGZzMyk7CisKKyAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzMywg
Z2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCisgICAgICAgICAgICAgICJnb29kIGZyYWdtZW50
IHNoYWRlciBzaG91bGQgY29tcGlsZSIpOworCisgICAgZ2wuZGV0YWNoU2hhZGVyKHByb2dHb29k
MSwgZnMpOworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9nR29vZDEsIGZzMyk7CisKKyAgICBnbC5k
ZWxldGVTaGFkZXIoZnMzKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CisgICAgYXNzZXJ0
TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcihmczMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVl
LAorICAgICAgICAgICAgICAiYW4gYXR0YWNoZWQgc2hhZGVyIHNob3VsZG4ndCBiZSBkZWxldGVk
Iik7CisKKyAgICBnbC51c2VQcm9ncmFtKG51bGwpOworICAgIGdsLmxpbmtQcm9ncmFtKHByb2dH
b29kMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiYSBkZWxl
dGUtbWFya2VkIHByb2dyYW0gc2hvdWxkIGJlIGRlbGV0ZWQgb25jZSBpdCdzIG5vIGxvbmdlciB0
aGUgY3VycmVudCBwcm9ncmFtIik7CisKKyAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CisgICAg
Z2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiYSBkZWxldGUtbWFya2VkIHNo
YWRlciBzaG91bGQgYmUgZGVsZXRlZCBvbmNlIGFsbCBpdHMgYXR0YWNobWVudHMgYXJlIHJlbW92
ZWQiKTsKIH0KIAogZGVidWcoIiIpOwotc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLQogZ28o
KTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogCg==
</data>
<flag name="commit-queue"
          id="52819"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64282</attachid>
            <date>2010-08-12 16:30:05 -0700</date>
            <delta_ts>2010-08-12 19:21:27 -0700</delta_ts>
            <desc>revised patch: no need to initialize RefPtr.</desc>
            <filename>program.patch</filename>
            <type>text/plain</type>
            <size>30836</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTIxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWdyZXNz
aW9uIGluIGxpbmtpbmcgb2YgcHJvZ3JhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODIwCisKKyAgICAgICAgU2hhZGVycyBhbmQgcHJvZ3JhbXMg
c2hvdWxkbid0IGJlIGRlbGV0ZWQgdW50aWwgdGhlaXIgYXR0YWNobWVudHMgYXJlIHJlbW92ZWQs
IHRoZXJlZm9yZSwgd2UgbmVlZCB0byB0cmFjayB0aGUgYXR0YWNoL2RldGFjaC91c2VQcm9ncmFt
LgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOiBUcmFjayB0aGUgb2Jq
ZWN0IGF0dGFjaG1lbnQgY291bnQgYW5kIHdoZXRoZXIgaXQgc2hvdWxkIHJlYWxseSBiZSBkZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpzZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xP
YmplY3QuaDogVHJhY2sgdGhlIG9iamVjdCBhdHRhY2htZW50IGNvdW50IGFuZCB3aGV0aGVyIGl0
IHNob3VsZCByZWFsbHkgYmUgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0
OjpvbkF0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpvbkRldGFjaGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0OjpnZXRBdHRhY2htZW50Q291bnQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6IFRyYWNrIHRoZSBhdHRhY2hl
ZCBzaGFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5oOiBUcmFjayB0aGUgYXR0YWNoZWQgc2hhZGVycy4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOiBUcmFjayB0aGUgYXR0YWNobWVudCBv
ZiBhIHNoYWRlciB0byBhIHByb2dyYW0uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOiBEZXRhY2ggc2hhZGVycy4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKTogVHJhY2sgdGhlIGF0dGFj
aG1lbnQgb2YgYSBzaGFkZXIgdG8gYSBwcm9ncmFtLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KTogQWxzbyBjaGVjayBpZiBvYmpl
Y3QgPT0gMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0pOiBVc2luZyB0aGUgY2FjaGVkIGF0dGFjaGVkIHNoYWRlcnMgaW5zdGVhZCBvZiBxdWVy
eSBmcm9tIGRyaXZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dXNlUHJvZ3JhbSk6IFRyYWNrIHRoZSBhdHRhY2htZW50IG9mIGEgcHJvZ3JhbSB0byB0aGUgY3Vy
cmVudCByZW5kZXJpbmcgcGlwZWxpbmUuCisKIDIwMTAtMDgtMTEgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFdlYkdMT2JqZWN0OjpXZWJHTE9iamVj
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX29iamVjdCgwKQotICAg
ICwgbV9zaG91bGREZWxldGVPYmplY3QodHJ1ZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9hdHRhY2htZW50Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKIH0K
IApAQCAtNDYsMjcgKzQ3LDI2IEBAIFdlYkdMT2JqZWN0Ojp+V2ViR0xPYmplY3QoKQogICAgICAg
ICBtX2NvbnRleHQtPnJlbW92ZU9iamVjdCh0aGlzKTsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6
c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0LCBib29sIHNob3VsZERlbGV0ZU9iamVj
dCkKK3ZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKICAgICBpZiAob2JqZWN0ID09IG1fb2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIGRlbGV0ZU9iamVjdCgpOwogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwotICAgIG1fc2hv
dWxkRGVsZXRlT2JqZWN0ID0gc2hvdWxkRGVsZXRlT2JqZWN0OwogfQogCiB2b2lkIFdlYkdMT2Jq
ZWN0OjpkZWxldGVPYmplY3QoKQogewogICAgIGlmIChtX29iamVjdCkgewotICAgICAgICBpZiAo
bV9zaG91bGREZWxldGVPYmplY3QpCi0gICAgICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAgICAgICAgICAgICBkZWxldGVPYmplY3RJbXBsKG1fb2JqZWN0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgbV9vYmplY3QgPSAwOworICAgICAgICBpZiAobV9jb250ZXh0
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgZGVsZXRlT2JqZWN0SW1wbChtX29iamVjdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIG1f
b2JqZWN0ID0gMDsKKyAgICAgICAgbV9kZWxldGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgbV9zaG91
bGREZWxldGVPYmplY3QgPSB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9i
amVjdC5oCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViR0xPYmplY3QoKTsKIAogICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3Q7IH0KLSAgICB2b2lkIHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0
LCBib29sIHNob3VsZERlbGV0ZU9iamVjdCA9IHRydWUpOworICAgIHZvaWQgc2V0T2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7CiAKICAgICB2b2lkIGRl
dGFjaENvbnRleHQoKQpAQCAtNTgsMjAgKzU4LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdm9pZCBvbkF0dGFjaGVk
KCkgeyArK21fYXR0YWNobWVudENvdW50OyB9CisgICAgdm9pZCBvbkRldGFjaGVkKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2F0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgICAgIC0tbV9hdHRhY2ht
ZW50Q291bnQ7CisgICAgICAgIGlmICghbV9hdHRhY2htZW50Q291bnQgJiYgbV9kZWxldGVkKQor
ICAgICAgICAgICAgbV9vYmplY3QgPSAwOworICAgIH0KKyAgICB1bnNpZ25lZCBnZXRBdHRhY2ht
ZW50Q291bnQoKSB7IHJldHVybiBtX2F0dGFjaG1lbnRDb3VudDsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCiBwcml2YXRlOgogICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3Q7Ci0gICAgLy8gVGhlIHNob3VsZERlbGV0ZU9iamVj
dCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgd3JhcHBlcgotICAgIC8vIG93bnMgdGhlIHVu
ZGVybHlpbmcgcmVzb3VyY2UgYW5kIHNob3VsZCBkZWxldGUgaXQgd2hlbiB0aGUKLSAgICAvLyB3
cmFwcGVyIGlzIHVucmVmZXJlbmNlZCBmb3IgdGhlIGxhc3QgdGltZSBhbmQgZGVsZXRlZC4gSXQK
LSAgICAvLyBpcyBvbmx5IHNldCB0byBmYWxzZSBmb3IgY2VydGFpbiBvYmplY3RzIHJldHVybmVk
IGZyb20gZ2V0Ci0gICAgLy8gcXVlcmllcy4gRklYTUU6IHNob3VsZCBjb25zaWRlciBjYW5vbmlj
YWxpemluZyBhbGwgb2YgdGhlc2UKLSAgICAvLyBvYmplY3RzIGluIHRoZSBmdXR1cmUuCi0gICAg
Ym9vbCBtX3Nob3VsZERlbGV0ZU9iamVjdDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1f
Y29udGV4dDsKKyAgICB1bnNpZ25lZCBtX2F0dGFjaG1lbnRDb3VudDsKKyAgICBib29sIG1fZGVs
ZXRlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDY1MjA2KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSwxNSBAQCBXZWJH
TFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluCiAgICAgc2V0T2JqZWN0KGNvbnRl
eHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKIH0KIAotdm9pZCBX
ZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2
b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0IG9iaikK
IHsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0ob2Jq
ZWN0KTsKKyAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dyYW0o
b2JqKTsKKyAgICBpZiAoIW9iamVjdCgpKSB7CisgICAgICAgIGlmIChtX3ZlcnRleFNoYWRlcikK
KyAgICAgICAgICAgIG1fdmVydGV4U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgICAgIGlmICht
X2ZyYWdtZW50U2hhZGVyKQorICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hl
ZCgpOworICAgIH0KIH0KIAogYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9j
YXRpb25zKCkKQEAgLTk0LDYgKzEwMCw1OCBAQCBib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1Zl
cnRleEF0dHJpYjAoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitXZWJHTFNoYWRlciogV2ViR0xQ
cm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgICAgIHJldHVybiBtX3ZlcnRleFNoYWRlci5nZXQoKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVI6CisgICAgICAgIHJl
dHVybiBtX2ZyYWdtZW50U2hhZGVyLmdldCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKworYm9vbCBXZWJHTFByb2dyYW06OmF0dGFjaFNoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8ICFzaGFkZXItPm9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3dpdGNoIChzaGFkZXItPmdldFR5cGUoKSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgICAgIGlmICht
X3ZlcnRleFNoYWRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV92ZXJ0
ZXhTaGFkZXIgPSBzaGFkZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgaWYgKG1fZnJhZ21lbnRTaGFk
ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fZnJhZ21lbnRTaGFkZXIg
PSBzaGFkZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlciB8fCAhc2hhZGVyLT5vYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAoc2hhZGVyLT5nZXRUeXBl
KCkpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgICAg
ICBpZiAobV92ZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtX3ZlcnRleFNoYWRlciA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgaWYgKG1f
ZnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtX2ZyYWdtZW50U2hhZGVyID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2
aXNpb24gNjUyMDYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgog
CisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC01NCw2ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xpbmtGYWlsdXJlRmxhZ1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlua0ZhaWx1cmU7IH0KICAgICB2b2lkIHNldExpbmtGYWlsdXJl
RmxhZyhib29sIGZhaWxlZCkgeyBtX2xpbmtGYWlsdXJlID0gZmFpbGVkOyB9CiAKKyAgICBXZWJH
TFNoYWRlciogZ2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5
cGUpOworICAgIGJvb2wgYXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKik7CisgICAgYm9vbCBkZXRh
Y2hTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKwogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNjUsNiArNzEsOSBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxpbnQ+IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zOwogCiAgICAgYm9vbCBtX2xpbmtG
YWlsdXJlOworCisgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBtX3ZlcnRleFNoYWRlcjsKKyAgICBS
ZWZQdHI8V2ViR0xTaGFkZXI+IG1fZnJhZ21lbnRTaGFkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCShyZXZpc2lvbiA2NTIwNikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNywxMiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyCiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+
YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25BdHRhY2hlZCgpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTY1MCw3ICs2NTUs
MTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVByb2dyYQogewogICAgIGlm
ICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuOwotICAgIAorICAgIGlmIChwcm9ncmFtLT5jb250
ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIHBy
b2dyYW0tPmRlbGV0ZU9iamVjdCgpOwogfQogCkBAIC03MDUsNyArNzE1LDEyIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIKICAgICBVTlVTRURfUEFSQU0oZWMpOwog
ICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hT
aGFkZXIoc2hhZGVyKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBv
YmplY3RPclplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtODkyLDcgKzkwNyw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVJlbmQKIAogYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKIHsK
LSAgICBpZiAoIW9iamVjdCkgeworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgp
KSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTg4
MiwyMSArMTg5Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSgK
ICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBWZWN0b3I8V2ViR0xTaGFk
ZXIqPiBzaGFkZXJzOwotICAgICAgICBib29sIHN1Y2NlZWQgPSBnZXRBdHRhY2hlZFNoYWRlcnMo
cHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgICAgICBpZiAoc3VjY2VlZCkgewotICAgICAgICAg
ICAgYm9vbCB2U2hhZGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGZTaGFkZXIgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKSAm
JiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpOyArK2lpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNo
YWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
Ci0gICAgICAgICAgICAgICAgICAgIHZTaGFkZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHNoYWRlcnNbaWldLT5nZXRUeXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUikKLSAgICAgICAgICAgICAgICAgICAgZlNoYWRlciA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIXZTaGFkZXIgfHwgIWZTaGFkZXIpCi0gICAgICAgICAg
ICAgICAgc3VjY2VlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghc3VjY2VlZCkg
eworICAgICAgICBpZiAoIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKSB8fCAhcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikpIHsKICAgICAgICAgICAgIHByb2dyYW0tPnNl
dExpbmtGYWlsdXJlRmxhZyh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMjcwMSwxMyArMjcwMiwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKICAgICBpZiAocHJvZ3JhbSAmJiBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhw
cm9ncmFtKSk7CisgICAgaWYgKHByb2dyYW0gJiYgcHJvZ3JhbS0+b2JqZWN0KCkgJiYgIWdldFBy
b2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCBl
YykuZ2V0Qm9vbCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFt
KQorICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZCgpOworICAgICAgICBt
X2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFt
KG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFtKQorICAgICAgICAg
ICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOworICAgIH0KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTIxMykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTEx
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVncmVzc2lvbiBpbiBsaW5raW5nIG9mIHByb2dyYW1z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzgyMAor
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0LWV4cGVjdGVkLnR4dDog
Rml4IHRoZSB0ZXN0cyBzbyBhIHNlY29uZCBzaGFkZXIgb2YgdGhlIHNhbWUgdHlwZSBhdHRhY2hp
bmcgdG8gYSBwcm9ncmFtIHdpbGwgZ2VuZXJhdGUgZXJyb3I7IGFsc28sIGFkZCB0ZXN0cyBmb3Ig
ZGVsZXRlU2hhZGVyL2RlbGV0ZVByb2dyYW0gYmVoYXZpb3IuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0bWw6IERpdHRvLgorCiAyMDEwLTA4LTExICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3By
b2dyYW0tdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY1MjA2KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTIsMTUgKzEyLDE3IEBAIFBBU1MgYmFkIHZlcnRleCBzaGFkZXIgc2hvdWxkIGZhaWwg
dG8gY28KIFBBU1MgZ29vZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGNvbXBpbGUKIFBBU1MgZ29v
ZCBmcmFnbWVudCBzaGFkZXIgIzIgc2hvdWxkIGNvbXBpbGUKIFBBU1MgYmFkIGZyYWdtZW50IHNo
YWRlciBzaG91bGQgZmFpbCB0byBjb21waWxlCi1QQVNTIHNob3VsZCBiZSBubyBlcnJvcnMgYXQg
dGhpcyBwb2ludAotUEFTUyBhdHRhY2hpbmcgYSB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBzdWNjZWVk
Ci1QQVNTIGF0dGFjaGluZyBhbiBhbHJlYWR5IGF0dGFjaGVkIHZlcnRleCBzaGFkZXIgc2hvdWxk
IGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGF0dGFjaGluZyBhIGZyYWdtZW50IHNo
YWRlciBzaG91bGQgc3VjY2VlZAotUEFTUyBhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRhY2hlZCBm
cmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCi1QQVNTIGRl
dGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1Y2NlZWQKLVBBU1MgZGV0YWNoaW5nIGEg
bm90IGFscmVhZHkgYXR0YWNoZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJ
RF9PUEVSQVRJT04KLVBBU1MgZGV0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBzdWNj
ZWVkCi1QQVNTIGRldGFjaGluZyBhIG5vdCBhbHJlYWR5IGF0dGFjaGVkIGZyYWdtZW50IHNoYWRl
ciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBlcnJvcnMgYXQgdGhpcyBwb2lu
dAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogYXR0YWNoaW5n
IGEgdmVydGV4IHNoYWRlciBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNo
ZWQgdmVydGV4IHNoYWRlciBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGF0dGFjaGluZyBhIGZyYWdt
ZW50IHNoYWRlciBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IElOVkFMSURfT1BFUkFUSU9OIDogYXR0YWNoaW5nIGFuIGFscmVhZHkgYXR0YWNoZWQgZnJh
Z21lbnQgc2hhZGVyIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogYXR0YWNoaW5nIHNo
YWRlcnMgb2YgdGhlIHNhbWUgdHlwZSB0byBhIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFM
SURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9P
UEVSQVRJT04gOiBhdHRhY2hpbmcgc2hhZGVycyBvZiB0aGUgc2FtZSB0eXBlIHRvIGEgcHJvZ3Jh
bSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGRldGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxk
IHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJB
VElPTiA6IGRldGFjaGluZyBhIG5vdCBhbHJlYWR5IGF0dGFjaGVkIHZlcnRleCBzaGFkZXIgc2hv
dWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBkZXRhY2hpbmcgYSBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIHN1
Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElP
TiA6IGRldGFjaGluZyBhIG5vdCBhbHJlYWR5IGF0dGFjaGVkIGZyYWdtZW50IHNoYWRlciBzaG91
bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KIFBBU1MgZ2V0QXR0YWNoZWRTaGFkZXJzIHNo
b3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCBieSBkZWZhdWx0CiBQQVNTIGF0dGFjaGluZyBhIHNp
bmdsZSBzaGFkZXIgc2hvdWxkIGdpdmUgdGhlIGV4cGVjdGVkIGxpc3QKIFBBU1MgYXR0YWNoaW5n
IHNvbWUgc2hhZGVycyBzaG91bGQgZ2l2ZSB0aGUgZXhwZWN0ZWQgbGlzdApAQCAtMzIsMjYgKzM0
LDM4IEBAIFBBU1MgYXR0YWNoaW5nIGFuZCBkZXRhY2hpbmcgc29tZSBzaGFkZXIKIFBBU1MgYXR0
YWNoaW5nIGEgc2hhZGVyIHRoYXQgZmFpbGVkIHRvIGNvbXBpbGUgc2hvdWxkIHN0aWxsIHNob3cg
aXQgaW4gdGhlIGxpc3QKIFBBU1MgYXR0YWNoaW5nIHNoYWRlcnMsIGluY2x1ZGluZyBvbmUgdGhh
dCBmYWlsZWQgdG8gY29tcGlsZSwgc2hvdWxkIHN0aWxsIHNob3cgdGhlIGl0IGluIHRoZSBsaXN0
CiBQQVNTIHZhbGlkIHByb2dyYW0gc2hvdWxkIGxpbmsKLVBBU1MgdXNpbmcgYSB2YWxpZCBwcm9n
cmFtIHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkIHN1Y2NlZWQKIFBBU1MgdmFsaWQg
cHJvZ3JhbSAjMiBzaG91bGQgbGluawotUEFTUyB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxk
IHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHVz
aW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGQgc3VjY2VlZAogUEFTUyBwcm9ncmFtIHdpdGggbm8g
ZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKLVBBU1MgdXNpbmcgYW4gaW52YWxp
ZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogdXNpbmcgYW4gaW52YWxp
ZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgogUEFTUyBwcm9ncmFt
IHdpdGggbm8gdmVydGV4IHNoYWRlciBzaG91bGQgZmFpbCB0byBsaW5rCi1QQVNTIHVzaW5nIGFu
IGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IHVzaW5nIGFu
IGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KIFBBU1Mg
cHJvZ3JhbSB3aXRoIGJhZCB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsKLVBBU1Mg
dXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElP
TgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDog
dXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElP
TgogUEFTUyBwcm9ncmFtIHdpdGggYmFkIGZyYWdtZW50IHNoYWRlciBzaG91bGQgZmFpbCB0byBs
aW5rCi1QQVNTIHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJ
RF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX09Q
RVJBVElPTiA6IHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJ
RF9PUEVSQVRJT04KIFBBU1MgcHJvZ3JhbSB3aXRoIGJhZCBzaGFkZXJzIHNob3VsZCBmYWlsIHRv
IGxpbmsKLVBBU1MgdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZB
TElEX09QRVJBVElPTgotUEFTUyB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVy
YXRlIGEgR0wgZXJyb3IKLVBBU1Mgc2hvdWxkIGJlIG5vIGVycm9ycyBhdCB0aGlzIHBvaW50ICMy
Ci1QQVNTIGRyYXdpbmcgd2l0aCBhIHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEg
R0wgZXJyb3IKLVBBU1MgdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJ
TlZBTElEX09QRVJBVElPTgotUEFTUyBkcmF3aW5nIHdpdGggYW4gaW52YWxpZCBwcm9ncmFtIHNo
b3VsZCBnZW5lcmF0ZSBzb21lIEdMIGVycm9yIFhYWAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IElOVkFMSURfT1BFUkFUSU9OIDogdXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNo
b3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogdXNpbmcgYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5l
cmF0ZSBhIEdMIGVycm9yCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQgIzIKK1BBU1MgZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGRyYXdpbmcgd2l0aCBhIHZhbGlkIHByb2dy
YW0gc2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBJTlZBTElEX09QRVJBVElPTiA6IHVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBz
aG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9PUEVSQVRJT04KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IFRyeSB0byB1c2UgYW4gaW52YWxpZCBwcm9ncmFtIHNob3Vs
ZCBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmluZyBzdGF0ZQorUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZHJhd2luZyB3aXRoIGEgdmFsaWQgcHJvZ3Jh
bSBzaG91bGRuJ3QgZ2VuZXJhdGUgYSBHTCBlcnJvcgogUEFTUyBsaW5raW5nIHNob3VsZCBmYWls
IHdpdGggaW4tdXNlIGZvcm1lcmx5IGdvb2QgcHJvZ3JhbSwgd2l0aCBuZXcgYmFkIHNoYWRlciBh
dHRhY2hlZAotUEFTUyBkcmF3aW5nIHdpdGggYSB2YWxpZCB3aGVuIGxhc3QgdXNlZCBwcm9ncmFt
IHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBkcmF3aW5nIHdpdGggYSB2YWxpZCB3aGVuIGxhc3QgdXNlZCBw
cm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yCitQQVNTIGRlbGV0ZSBzaGFkZXJz
IGFmdGVyIGF0dGFjaGluZyB0aGVtIGFuZCBiZWZvcmUgbGlua2luZyBwcm9ncmFtIHNob3VsZCBu
b3QgYWZmZWN0IGxpbmtQcm9ncmFtCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiB1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGRyYXdpbmcgd2l0aCBhIHZhbGlk
IHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IKK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGRlbGV0ZSB0aGUgY3Vy
cmVudCBwcm9ncmFtIHNob3VsZG4ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIHN0YXRl
CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBUaGUgY3VycmVu
dCBwcm9ncmFtIHNob3VsZG4ndCBiZSBkZWxldGVkCitQQVNTIGdvb2QgZnJhZ21lbnQgc2hhZGVy
IHNob3VsZCBjb21waWxlCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJ
RF9WQUxVRSA6IGFuIHVuYXR0YWNoZWQgc2hhZGVyIHNob3VsZCBiZSBkZWxldGVkIGltbWVkaWF0
ZWx5CitQQVNTIGdvb2QgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlCitQQVNTIGFuIGF0
dGFjaGVkIHNoYWRlciBzaG91bGRuJ3QgYmUgZGVsZXRlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUgOiBhIGRlbGV0ZS1tYXJrZWQgcHJvZ3JhbSBzaG91
bGQgYmUgZGVsZXRlZCBvbmNlIGl0J3Mgbm8gbG9uZ2VyIHRoZSBjdXJyZW50IHByb2dyYW0KK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVFIDogYSBkZWxldGUt
bWFya2VkIHNoYWRlciBzaG91bGQgYmUgZGVsZXRlZCBvbmNlIGFsbCBpdHMgYXR0YWNobWVudHMg
YXJlIHJlbW92ZWQKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01Q
TEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10
ZXN0Lmh0bWwJKHJldmlzaW9uIDY1MjA2KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcHJvZ3JhbS10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDcgQEAgZnVu
Y3Rpb24gZ28oKSB7CiAgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcihmc0JhZCwg
Z2wuQ09NUElMRV9TVEFUVVMpID09IGZhbHNlLAogICAgICAgICAgICAgICAiYmFkIGZyYWdtZW50
IHNoYWRlciBzaG91bGQgZmFpbCB0byBjb21waWxlIik7CiAKLSAgICBhc3NlcnRNc2coZ2wuZ2V0
RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKLSAgICAgICAgICAgICAgInNob3VsZCBiZSBubyBlcnJv
cnMgYXQgdGhpcyBwb2ludCIpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1Is
ICJzaG91bGQgYmUgbm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQiKTsKIAogLy8vLy8vLyBDaGVjayBh
dHRhY2hTaGFkZXIoKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCkBAIC04Nyw3ICs4
Niw3IEBAIGZ1bmN0aW9uIGdvKCkgewogICAgICAgICBpZihnbC5nZXRFcnJvcigpICE9IGdsLk5P
X0VSUk9SKQogICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAidW5leHBlY3RlZCBlcnJvciBp
biBhdHRhY2hTaGFkZXIoKSIpOwogICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgc2hhZGVy
KTsKLSAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZXhwZWN0ZWRfZXJyb3JfY29k
ZSwgZXJybXNnKTsKKyAgICAgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBleHBlY3RlZF9lcnJvcl9j
b2RlLCBlcnJtc2cpOwogICAgIH0KIAogICAgIGNoZWNrQXR0YWNoU2hhZGVyKFtdLCB2cywgZ2wu
Tk9fRVJST1IsICJhdHRhY2hpbmcgYSB2ZXJ0ZXggc2hhZGVyIHNob3VsZCBzdWNjZWVkIik7CkBA
IC05Niw2ICs5NSwxMCBAQCBmdW5jdGlvbiBnbygpIHsKICAgICBjaGVja0F0dGFjaFNoYWRlcihb
XSwgZnMsIGdsLk5PX0VSUk9SLCAiYXR0YWNoaW5nIGEgZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBz
dWNjZWVkIik7CiAgICAgY2hlY2tBdHRhY2hTaGFkZXIoW2ZzXSwgZnMsIGdsLklOVkFMSURfT1BF
UkFUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICJhdHRhY2hpbmcgYW4gYWxyZWFkeSBhdHRh
Y2hlZCBmcmFnbWVudCBzaGFkZXIgc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7
CisgICAgY2hlY2tBdHRhY2hTaGFkZXIoW3ZzXSwgdnMyLCBnbC5JTlZBTElEX09QRVJBVElPTiwK
KyAgICAgICAgICAgICAgICAgICAgICAiYXR0YWNoaW5nIHNoYWRlcnMgb2YgdGhlIHNhbWUgdHlw
ZSB0byBhIHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CisgICAg
Y2hlY2tBdHRhY2hTaGFkZXIoW2ZzXSwgZnMyLCBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAiYXR0YWNoaW5nIHNoYWRlcnMgb2YgdGhlIHNhbWUgdHlwZSB0byBh
IHByb2dyYW0gc2hvdWxkIGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CiAKIC8vLy8vLy8g
Q2hlY2sgZGV0YWNoU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAt
MTA2LDcgKzEwOSw3IEBAIGZ1bmN0aW9uIGdvKCkgewogICAgICAgICBpZihnbC5nZXRFcnJvcigp
ICE9IGdsLk5PX0VSUk9SKQogICAgICAgICAgICAgYXNzZXJ0TXNnKGZhbHNlLCAidW5leHBlY3Rl
ZCBlcnJvciBpbiBhdHRhY2hTaGFkZXIoKSIpOwogICAgICAgICBnbC5kZXRhY2hTaGFkZXIocHJv
Zywgc2hhZGVyKTsKLSAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZXhwZWN0ZWRf
ZXJyb3JfY29kZSwgZXJybXNnKTsKKyAgICAgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBleHBlY3Rl
ZF9lcnJvcl9jb2RlLCBlcnJtc2cpOwogICAgIH0KIAogICAgIGNoZWNrRGV0YWNoU2hhZGVyKFt2
c10sIHZzLCBnbC5OT19FUlJPUiwgImRldGFjaGluZyBhIHZlcnRleCBzaGFkZXIgc2hvdWxkIHN1
Y2NlZWQiKTsKQEAgLTEzMiwyOCArMTM1LDMxIEBAIGZ1bmN0aW9uIGdvKCkgewogICAgIH0KICAg
ICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbXSwgW10sIFtdLCAiZ2V0QXR0YWNoZWRTaGFkZXJz
IHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCBieSBkZWZhdWx0Iik7CiAgICAgY2hlY2tHZXRB
dHRhY2hlZFNoYWRlcnMoW2ZzXSwgW10sIFtmc10sICJhdHRhY2hpbmcgYSBzaW5nbGUgc2hhZGVy
IHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0Iik7Ci0gICAgY2hlY2tHZXRBdHRhY2hlZFNo
YWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbXSwgW2ZzLCB2cywgZnMyLCB2czJdLAorICAgIGNo
ZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnNdLCBbXSwgW2ZzLCB2c10sCiAgICAgICAgICJh
dHRhY2hpbmcgc29tZSBzaGFkZXJzIHNob3VsZCBnaXZlIHRoZSBleHBlY3RlZCBsaXN0Iik7CiAg
ICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzXSwgW2ZzXSwgW10sICJhdHRhY2hpbmcgYSBz
aGFkZXIgYW5kIGRldGFjaGluZyBpdCBzaG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0Iik7Ci0gICAg
Y2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbZnMsIHZzLCBmczIs
IHZzMl0sIFtdLAorICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnNdLCBbZnMsIHZz
XSwgW10sCiAgICAgICAgICJhdHRhY2hpbmcgc29tZSBzaGFkZXJzIGFuZCBkZXRhY2hpbmcgdGhl
bSBpbiBzYW1lIG9yZGVyIHNob3VkIGxlYXZlIGFuIGVtcHR5IGxpc3QiKTsKLSAgICBjaGVja0dl
dEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzLCBmczIsIHZzMl0sIFtmcywgdnMyLCB2cywgZnMyXSwg
W10sCisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c10sIFt2cywgZnNdLCBbXSwK
ICAgICAgICAgImF0dGFjaGluZyBzb21lIHNoYWRlcnMgYW5kIGRldGFjaGluZyB0aGVtIGluIHJh
bmRvbSBvcmRlciBzaG91ZCBsZWF2ZSBhbiBlbXB0eSBsaXN0Iik7Ci0gICAgY2hlY2tHZXRBdHRh
Y2hlZFNoYWRlcnMoW2ZzLCB2cywgZnMyLCB2czJdLCBbdnNdLCBbZnMsIGZzMiwgdnMyXSwKKyAg
ICBjaGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnMsIHZzXSwgW3ZzXSwgW2ZzXSwKICAgICAgICAg
ImF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIHNvbWUgc2hhZGVycyBzaG91bGQgbGVhdmUgdGhlIGRp
ZmZlcmVuY2UgbGlzdCIpOwotICAgIGNoZWNrR2V0QXR0YWNoZWRTaGFkZXJzKFtmcywgdnMsIGZz
MiwgdnMyXSwgW2ZzLCB2czJdLCBbdnMsIGZzMl0sCisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRl
cnMoW2ZzLCB2c10sIFtmc10sIFt2c10sCiAgICAgICAgICJhdHRhY2hpbmcgYW5kIGRldGFjaGlu
ZyBzb21lIHNoYWRlcnMgc2hvdWxkIGxlYXZlIHRoZSBkaWZmZXJlbmNlIGxpc3QiKTsKICAgICBj
aGVja0dldEF0dGFjaGVkU2hhZGVycyhbZnNCYWRdLCBbXSwgW2ZzQmFkXSwKICAgICAgICAgImF0
dGFjaGluZyBhIHNoYWRlciB0aGF0IGZhaWxlZCB0byBjb21waWxlIHNob3VsZCBzdGlsbCBzaG93
IGl0IGluIHRoZSBsaXN0Iik7Ci0gICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRlcnMoW2ZzLCB2c0Jh
ZCwgZnMyXSwgW10sIFtmcywgdnNCYWQsIGZzMl0sCisgICAgY2hlY2tHZXRBdHRhY2hlZFNoYWRl
cnMoW2ZzLCB2c0JhZF0sIFtdLCBbZnMsIHZzQmFkXSwKICAgICAgICAgImF0dGFjaGluZyBzaGFk
ZXJzLCBpbmNsdWRpbmcgb25lIHRoYXQgZmFpbGVkIHRvIGNvbXBpbGUsIHNob3VsZCBzdGlsbCBz
aG93IHRoZSBpdCBpbiB0aGUgbGlzdCIpOwogCiAvLy8vLy8vIENoZWNrIGxpbmtQcm9ncmFtKCkg
YW5kIHVzZVByb2dyYW0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAgIGZ1bmN0
aW9uIGNoZWNrTGlua0FuZFVzZShzaGFkZXJzLCBleHBlY3RlZF9zdGF0dXMsIGVycm1zZykgewor
ICAgIGZ1bmN0aW9uIGNoZWNrTGlua0FuZFVzZShzaGFkZXJzLCBkZWxldGVTaGFkZXJBZnRlckF0
dGFjaCwgZXhwZWN0ZWRfc3RhdHVzLCBlcnJtc2cpIHsKICAgICAgICAgdmFyIHByb2cgPSBnbC5j
cmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVycy5sZW5n
dGg7ICsraSkKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFkZXJzLmxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgc2hhZGVyc1tpXSk7CisgICAg
ICAgICAgICBpZiAoZGVsZXRlU2hhZGVyQWZ0ZXJBdHRhY2gpCisgICAgICAgICAgICAgICAgZ2wu
ZGVsZXRlU2hhZGVyKHNoYWRlcnNbaV0pOworICAgICAgICB9CiAgICAgICAgIGdsLmJpbmRBdHRy
aWJMb2NhdGlvbihwcm9nLCAwLCAiYVZlcnRleCIpOwogICAgICAgICBnbC5iaW5kQXR0cmliTG9j
YXRpb24ocHJvZywgMSwgImFDb2xvciIpOwogICAgICAgICBnbC5saW5rUHJvZ3JhbShwcm9nKTsK
QEAgLTE2NiwyMyArMTcyLDIyIEBAIGZ1bmN0aW9uIGdvKCkgewogICAgICAgICAgICAgYXNzZXJ0
TXNnKGZhbHNlLCAidW5leHBlY3RlZCBlcnJvciBpbiBnZXRQcm9ncmFtUGFyYW1ldGVyKCkiKTsK
ICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9nKTsKICAgICAgICAgaWYgKGV4cGVjdGVkX3N0YXR1
cyA9PSB0cnVlKQotICAgICAgICAgICAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9f
RVJST1IsICJ1c2luZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkIHN1Y2NlZWQiKTsKKyAgICAgICAg
ICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJ1c2luZyBhIHZhbGlkIHByb2dy
YW0gc2hvdWxkIHN1Y2NlZWQiKTsKICAgICAgICAgaWYgKGV4cGVjdGVkX3N0YXR1cyA9PSBmYWxz
ZSkKLSAgICAgICAgICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFMSURfT1BF
UkFUSU9OLCAidXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNob3VsZCBnZW5lcmF0ZSBJTlZBTElE
X09QRVJBVElPTiIpOworICAgICAgICAgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElE
X09QRVJBVElPTiwgInVzaW5nIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQgZ2VuZXJhdGUgSU5W
QUxJRF9PUEVSQVRJT04iKTsKICAgICAgICAgcmV0dXJuIHByb2c7CiAgICAgfQogCi0gICAgdmFy
IHByb2dHb29kMSA9IGNoZWNrTGlua0FuZFVzZShbdnMsIGZzXSwgdHJ1ZSwgInZhbGlkIHByb2dy
YW0gc2hvdWxkIGxpbmsiKTsKLSAgICB2YXIgcHJvZ0dvb2QyID0gY2hlY2tMaW5rQW5kVXNlKFt2
cywgZnMyXSwgdHJ1ZSwgInZhbGlkIHByb2dyYW0gIzIgc2hvdWxkIGxpbmsiKTsKLSAgICB2YXIg
cHJvZ0JhZDEgPSBjaGVja0xpbmtBbmRVc2UoW3ZzXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggbm8g
ZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKLSAgICB2YXIgcHJvZ0JhZDIg
PSBjaGVja0xpbmtBbmRVc2UoW2ZzXSwgZmFsc2UsICJwcm9ncmFtIHdpdGggbm8gdmVydGV4IHNo
YWRlciBzaG91bGQgZmFpbCB0byBsaW5rIik7Ci0gICAgdmFyIHByb2dCYWQzID0gY2hlY2tMaW5r
QW5kVXNlKFt2c0JhZCwgZnNdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBiYWQgdmVydGV4IHNoYWRl
ciBzaG91bGQgZmFpbCB0byBsaW5rIik7Ci0gICAgdmFyIHByb2dCYWQ0ID0gY2hlY2tMaW5rQW5k
VXNlKFt2cywgZnNCYWRdLCBmYWxzZSwgInByb2dyYW0gd2l0aCBiYWQgZnJhZ21lbnQgc2hhZGVy
IHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKLSAgICB2YXIgcHJvZ0JhZDUgPSBjaGVja0xpbmtBbmRV
c2UoW3ZzQmFkLCBmc0JhZF0sIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCBzaGFkZXJzIHNob3Vs
ZCBmYWlsIHRvIGxpbmsiKTsKKyAgICB2YXIgcHJvZ0dvb2QxID0gY2hlY2tMaW5rQW5kVXNlKFt2
cywgZnNdLCBmYWxzZSwgdHJ1ZSwgInZhbGlkIHByb2dyYW0gc2hvdWxkIGxpbmsiKTsKKyAgICB2
YXIgcHJvZ0dvb2QyID0gY2hlY2tMaW5rQW5kVXNlKFt2cywgZnMyXSwgZmFsc2UsIHRydWUsICJ2
YWxpZCBwcm9ncmFtICMyIHNob3VsZCBsaW5rIik7CisgICAgdmFyIHByb2dCYWQxID0gY2hlY2tM
aW5rQW5kVXNlKFt2c10sIGZhbHNlLCBmYWxzZSwgInByb2dyYW0gd2l0aCBubyBmcmFnbWVudCBz
aGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZhciBwcm9nQmFkMiA9IGNoZWNrTGlu
a0FuZFVzZShbZnNdLCBmYWxzZSwgZmFsc2UsICJwcm9ncmFtIHdpdGggbm8gdmVydGV4IHNoYWRl
ciBzaG91bGQgZmFpbCB0byBsaW5rIik7CisgICAgdmFyIHByb2dCYWQzID0gY2hlY2tMaW5rQW5k
VXNlKFt2c0JhZCwgZnNdLCBmYWxzZSwgZmFsc2UsICJwcm9ncmFtIHdpdGggYmFkIHZlcnRleCBz
aGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZhciBwcm9nQmFkNCA9IGNoZWNrTGlu
a0FuZFVzZShbdnMsIGZzQmFkXSwgZmFsc2UsIGZhbHNlLCAicHJvZ3JhbSB3aXRoIGJhZCBmcmFn
bWVudCBzaGFkZXIgc2hvdWxkIGZhaWwgdG8gbGluayIpOworICAgIHZhciBwcm9nQmFkNSA9IGNo
ZWNrTGlua0FuZFVzZShbdnNCYWQsIGZzQmFkXSwgZmFsc2UsIGZhbHNlLCAicHJvZ3JhbSB3aXRo
IGJhZCBzaGFkZXJzIHNob3VsZCBmYWlsIHRvIGxpbmsiKTsKIAogICAgIGdsLnVzZVByb2dyYW0o
cHJvZ0dvb2QxKTsKLSAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwK
LSAgICAgICAgICAgICAgInVzaW5nIGEgdmFsaWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJhdGUg
YSBHTCBlcnJvciIpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJ1c2lu
ZyBhIHZhbGlkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IiKTsKIAogICAg
IHZhciB2YnVmID0gZ2wuY3JlYXRlQnVmZmVyKCk7CiAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIHZidWYpOwpAQCAtMTk3LDIyICsyMDIsMjEgQEAgZnVuY3Rpb24gZ28oKSB7CiAg
ICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CiAgICAgZ2wudmVydGV4QXR0cmliM2Yo
MSwgMS4wLCAwLjAsIDAuMCk7CiAKLSAgICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5O
T19FUlJPUiwKLSAgICAgICAgICAgICAgInNob3VsZCBiZSBubyBlcnJvcnMgYXQgdGhpcyBwb2lu
dCAjMiIpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJzaG91bGQgYmUg
bm8gZXJyb3JzIGF0IHRoaXMgcG9pbnQgIzIiKTsKIAogICAgIGdsLnVzZVByb2dyYW0ocHJvZ0dv
b2QxKTsKICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7Ci0gICAgYXNzZXJ0
TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCi0gICAgICAgICAgICAgICJkcmF3aW5n
IHdpdGggYSB2YWxpZCBwcm9ncmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yIik7Cisg
ICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImRyYXdpbmcgd2l0aCBhIHZhbGlk
IHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRlIGEgR0wgZXJyb3IiKTsKIAogICAgIGdsLnVzZVBy
b2dyYW0ocHJvZ0JhZDEpOwotICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpID09IGdsLklOVkFM
SURfT1BFUkFUSU9OLAotICAgICAgICAgICAgICAidXNpbmcgYW4gaW52YWxpZCBwcm9ncmFtIHNo
b3VsZCBnZW5lcmF0ZSBJTlZBTElEX09QRVJBVElPTiIpOworICAgIGdsRXJyb3JTaG91bGRCZShn
bCwgZ2wuSU5WQUxJRF9PUEVSQVRJT04sICJ1c2luZyBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxk
IGdlbmVyYXRlIElOVkFMSURfT1BFUkFUSU9OIik7CiAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklB
TkdMRVMsIDAsIDMpOwotICAgIGFzc2VydE1zZyhnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9S
LAotICAgICAgICAgICAgICAiZHJhd2luZyB3aXRoIGFuIGludmFsaWQgcHJvZ3JhbSBzaG91bGQg
Z2VuZXJhdGUgc29tZSBHTCBlcnJvciBYWFgiKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGds
Lk5PX0VSUk9SLCAiVHJ5IHRvIHVzZSBhbiBpbnZhbGlkIHByb2dyYW0gc2hvdWxkIG5vdCBjaGFu
Z2UgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIHN0YXRlIik7CiAKICAgICBnbC51c2VQcm9ncmFtKHBy
b2dHb29kMik7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworICAgIGds
RXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJkcmF3aW5nIHdpdGggYSB2YWxpZCBwcm9n
cmFtIHNob3VsZG4ndCBnZW5lcmF0ZSBhIEdMIGVycm9yIik7CisgICAgZ2wuZGV0YWNoU2hhZGVy
KHByb2dHb29kMiwgZnMyKTsKICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ0dvb2QyLCBmc0JhZCk7
CiAgICAgZ2wubGlua1Byb2dyYW0ocHJvZ0dvb2QyKTsKICAgICBhc3NlcnRNc2coZ2wuZ2V0UHJv
Z3JhbVBhcmFtZXRlcihwcm9nR29vZDIsIGdsLkxJTktfU1RBVFVTKSA9PSBmYWxzZSwKQEAgLTIy
MCwxNCArMjI0LDYxIEBAIGZ1bmN0aW9uIGdvKCkgewogCiAgICAgZ2wudXNlUHJvZ3JhbShwcm9n
R29vZDEpOwogICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA0KTsKLSAgICBhc3Nl
cnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKLSAgICAgICAgICAgICAgImRyYXdp
bmcgd2l0aCBhIHZhbGlkIHdoZW4gbGFzdCB1c2VkIHByb2dyYW0gc2hvdWxkbid0IGdlbmVyYXRl
IGEgR0wgZXJyb3IiKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZHJh
d2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2VuZXJh
dGUgYSBHTCBlcnJvciIpOworCisgICAgdmFyIHByb2dHb29kMSA9IGNoZWNrTGlua0FuZFVzZShb
dnMsIGZzXSwgdHJ1ZSwgdHJ1ZSwgImRlbGV0ZSBzaGFkZXJzIGFmdGVyIGF0dGFjaGluZyB0aGVt
IGFuZCBiZWZvcmUgbGlua2luZyBwcm9ncmFtIHNob3VsZCBub3QgYWZmZWN0IGxpbmtQcm9ncmFt
Iik7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9nR29vZDEpOworICAgIGdsLmRyYXdBcnJheXMoZ2wu
VFJJQU5HTEVTLCAwLCA0KTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAi
ZHJhd2luZyB3aXRoIGEgdmFsaWQgd2hlbiBsYXN0IHVzZWQgcHJvZ3JhbSBzaG91bGRuJ3QgZ2Vu
ZXJhdGUgYSBHTCBlcnJvciIpOworCisvLy8vLy8vIENoZWNrIGRlbGV0ZVByb2dyYW0oKSBhbmQg
ZGVsZXRlU2hhZGVyKCkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIGdsLnVz
ZVByb2dyYW0ocHJvZ0dvb2QxKTsKKyAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dHb29kMSk7Cisg
ICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDQpOworICAgIGdsRXJyb3JTaG91bGRC
ZShnbCwgZ2wuTk9fRVJST1IsICJkZWxldGUgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzaG91bGRuJ3Qg
Y2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmluZyBzdGF0ZSIpOworCisgICAgZ2wubGlua1Byb2dy
YW0ocHJvZ0dvb2QxKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiVGhl
IGN1cnJlbnQgcHJvZ3JhbSBzaG91bGRuJ3QgYmUgZGVsZXRlZCIpOworCisgICAgdmFyIGZzMyA9
IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOworICAgIGdsLnNoYWRlclNvdXJj
ZShmczMsICIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2VuZGlmXG4g
dmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7
IH0iKTsKKyAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CisKKyAgICBhc3NlcnRNc2coZ2wuZ2V0
U2hhZGVyUGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCisgICAgICAg
ICAgICAgICJnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZSIpOworCisgICAgZ2wu
ZGVsZXRlU2hhZGVyKGZzMyk7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmczMpOworICAgIGdsRXJy
b3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9WQUxVRSwgImFuIHVuYXR0YWNoZWQgc2hhZGVyIHNo
b3VsZCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5Iik7CisKKyAgICBmczMgPSBnbC5jcmVhdGVTaGFk
ZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAiI2lmZGVm
IEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlpbmcgdmVjNCB2
Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CisgICAgZ2wu
Y29tcGlsZVNoYWRlcihmczMpOworCisgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRl
cihmczMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLAorICAgICAgICAgICAgICAiZ29vZCBm
cmFnbWVudCBzaGFkZXIgc2hvdWxkIGNvbXBpbGUiKTsKKworICAgIGdsLmRldGFjaFNoYWRlcihw
cm9nR29vZDEsIGZzKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ0dvb2QxLCBmczMpOworCisg
ICAgZ2wuZGVsZXRlU2hhZGVyKGZzMyk7CisgICAgZ2wuY29tcGlsZVNoYWRlcihmczMpOworICAg
IGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMzLCBnbC5DT01QSUxFX1NUQVRVUykg
PT0gdHJ1ZSwKKyAgICAgICAgICAgICAgImFuIGF0dGFjaGVkIHNoYWRlciBzaG91bGRuJ3QgYmUg
ZGVsZXRlZCIpOworCisgICAgZ2wudXNlUHJvZ3JhbShudWxsKTsKKyAgICBnbC5saW5rUHJvZ3Jh
bShwcm9nR29vZDEpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9WQUxVRSwg
ImEgZGVsZXRlLW1hcmtlZCBwcm9ncmFtIHNob3VsZCBiZSBkZWxldGVkIG9uY2UgaXQncyBubyBs
b25nZXIgdGhlIGN1cnJlbnQgcHJvZ3JhbSIpOworCisgICAgZ2wuY29tcGlsZVNoYWRlcihmczMp
OworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9WQUxVRSwgImEgZGVsZXRlLW1h
cmtlZCBzaGFkZXIgc2hvdWxkIGJlIGRlbGV0ZWQgb25jZSBhbGwgaXRzIGF0dGFjaG1lbnRzIGFy
ZSByZW1vdmVkIik7CiB9CiAKIGRlYnVnKCIiKTsKLXN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Ci0KIGdvKCk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIAo=
</data>
<flag name="review"
          id="52820"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="52821"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>