<?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>118409</bug_id>
          <alias>NPOTT</alias>
          <creation_ts>2013-07-05 02:05:08 -0700</creation_ts>
          <short_desc>Non-power-of-two texture handle optimization</short_desc>
          <delta_ts>2016-03-23 12:21:19 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Przemyslaw Szymanski">p.szymanski3</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>906337</commentid>
    <comment_count>0</comment_count>
    <who name="Przemyslaw Szymanski">p.szymanski3</who>
    <bug_when>2013-07-05 02:05:08 -0700</bug_when>
    <thetext>WebKit sets a black texture (with color: 0,0,0,255) instead of a regular texture if some texture parameters are invalid.
It has to be done because drivers sets the black texture with color 0,0,0,0 and OpenGL ES specification requires 0,0,0,1 (in float) as invalid texture.
But method to handle this case is named as handleNPOTTTextures which in my opinion is wrong. This method handles not only invalid non-power-of-two
textures but also power-of-two with invalid texture parameters. So I propose to change its name to handleInvalidTextures.

Additionally in WebGLRenderingContext there is a variable m_isNPOTStrict that is a negation of OpenGL NPOT extension existing. 
Usage of this variable in my opinion is not easy to understand. I propose to change its name to m_isNPOTTSupport which means
that OpenGL supports NPOT extension and usage of this variable should be more clear then.

And the last one is a little optimization. On modern hardware with OpenGL 4 there can be up to 160 texture units supported. 
handleNPOTTextures is called two times for each draw call (first call sets a black texture and second call sets a regular texture) for each texture unit (so up to 160x2 iterations!)
and checks some conditions. For a number of drawcalls it can cause some performance loss. 
In a perfect case there should be no invalid textures in WebGL application so method handleNPOTTextures should set no
black textures. It is not need to do any additionally iterations if there was not any black texture set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906357</commentid>
    <comment_count>1</comment_count>
      <attachid>206132</attachid>
    <who name="Przemyslaw Szymanski">p.szymanski3</who>
    <bug_when>2013-07-05 04:19:48 -0700</bug_when>
    <thetext>Created attachment 206132
Non power of two texture handle optimization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906358</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-05 04:22:09 -0700</bug_when>
    <thetext>Attachment 206132 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.h&apos;]&quot; exit_code: 1
Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4826:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906361</commentid>
    <comment_count>3</comment_count>
      <attachid>206133</attachid>
    <who name="Przemyslaw Szymanski">p.szymanski3</who>
    <bug_when>2013-07-05 04:27:37 -0700</bug_when>
    <thetext>Created attachment 206133
Non power of two texture handle optimization

update according to failed webkit style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907047</commentid>
    <comment_count>4</comment_count>
      <attachid>206133</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-07-09 02:19:05 -0700</bug_when>
    <thetext>Comment on attachment 206133
Non power of two texture handle optimization

View in context: https://bugs.webkit.org/attachment.cgi?id=206133&amp;action=review

Needs a lot of cleanup, mainly names etc.

&gt; Source/WebCore/ChangeLog:8
&gt; +        This patch optimizes usage of handleNPOTTextures. It is not need to

is -&gt; does

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:547
&gt; +    if (isNPOTTSupport())

hasNPOTSupport

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:1987
&gt; +    bool invalidTex = false;

Tex -&gt; Texture

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2072
&gt; +    bool invalidTex = false;

Ditto

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4803
&gt; +bool WebGLRenderingContext::handleInvalidTextures(const char* functionName, bool prepareToDraw)

What are invalid textures? Maybe this should be prepareNonRenderableTextures?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4806
&gt; +    bool blackTexSet = false;

something like hasBlackTexture?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907074</commentid>
    <comment_count>5</comment_count>
      <attachid>206305</attachid>
    <who name="Przemyslaw Szymanski">p.szymanski3</who>
    <bug_when>2013-07-09 04:27:25 -0700</bug_when>
    <thetext>Created attachment 206305
Non power of two texture handle optimization

update according to the review.
I used NPOTT not NPOT name as shortcut of NonPowerOfTwoTextures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907829</commentid>
    <comment_count>6</comment_count>
    <who name="Przemyslaw Szymanski">p.szymanski3</who>
    <bug_when>2013-07-11 23:35:25 -0700</bug_when>
    <thetext>Noam Rosenthal, could you review this patch again? Thank you</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176887</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-21 17:18:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Noam Rosenthal, could you review this patch again? Thank you

Is this patch still relevant? If so, could you please update the patch to be compatible with the current WebKit tree and we&apos;ll work to get it reviewed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177266</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-22 21:03:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/25307980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177267</commentid>
    <comment_count>9</comment_count>
      <attachid>274725</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-22 21:11:19 -0700</bug_when>
    <thetext>Created attachment 274725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177282</commentid>
    <comment_count>10</comment_count>
      <attachid>274725</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-22 22:47:18 -0700</bug_when>
    <thetext>Comment on attachment 274725
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=274725&amp;action=review

&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4038
&gt; +    return needsToUseBlack2DTexture || needsToUseBlack3DTexture;

This will only return true if the final texture is bad.  If the second-to-last texture is bad but the final texture is good, this will return false.  We need a bool hadInvalidTexture=false; then |= in the loop, then return hadInvalidTexture.  Also, you should add a test that has an invalid texture followed by a valid texture to exercise this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177376</commentid>
    <comment_count>11</comment_count>
      <attachid>274725</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-23 10:14:20 -0700</bug_when>
    <thetext>Comment on attachment 274725
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=274725&amp;action=review

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4038
&gt;&gt; +    return needsToUseBlack2DTexture || needsToUseBlack3DTexture;
&gt; 
&gt; This will only return true if the final texture is bad.  If the second-to-last texture is bad but the final texture is good, this will return false.  We need a bool hadInvalidTexture=false; then |= in the loop, then return hadInvalidTexture.  Also, you should add a test that has an invalid texture followed by a valid texture to exercise this.

Oh, good catch! In fact, this isn&apos;t really right either, because it doesn&apos;t account for the case where a texture is no longer in the &quot;bad&quot; state, and should not be flagged.

I&apos;ve got a better patch for this.

I&apos;ve also created a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177377</commentid>
    <comment_count>12</comment_count>
      <attachid>274755</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-23 10:15:00 -0700</bug_when>
    <thetext>Created attachment 274755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177417</commentid>
    <comment_count>13</comment_count>
      <attachid>274755</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-23 12:21:13 -0700</bug_when>
    <thetext>Comment on attachment 274755
Patch

Clearing flags on attachment: 274755

Committed r198588: &lt;http://trac.webkit.org/changeset/198588&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177418</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-23 12:21:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206132</attachid>
            <date>2013-07-05 04:19:48 -0700</date>
            <delta_ts>2013-07-05 04:24:14 -0700</delta_ts>
            <desc>Non power of two texture handle optimization</desc>
            <filename>npot.patch</filename>
            <type>text/plain</type>
            <size>12610</size>
            <attacher name="Przemyslaw Szymanski">p.szymanski3</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNWU2NmExLi5kMjhiMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTMtMDctMDUgIFByemVteXNsYXcgU3p5bWFuc2tpICA8cC5zenltYW5za2kzQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXZWJHTF0gTm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlIG9wdGlt
aXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4NDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBvcHRpbWl6ZXMgdXNhZ2Ugb2YgaGFuZGxlTlBPVFRleHR1cmVzLiBJdCBpcyBu
b3QgbmVlZCB0bworICAgICAgICBpdGVyYXRlIGZvciBlYWNoIHRleHR1cmUgdW5pdCBpZiB0aGVy
ZSB3YXMgbm90IHNldCBhIGJsYWNrIHRleHR1cmUuCisgICAgICAgIFRoaXMgb3B0aW1pemF0aW9u
IHByb3ZpZGVzIGZldyBtb3JlIGZyYW1lcyBwZXIgc2Vjb25kcyBmb3IgYSBudW1iZXIKKyAgICAg
ICAgb2YgZHJhd2NhbGxzLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgbmFtaW5nIG9mIG1l
dGhvZCBhbmQgdmFyaWFibGUgdG8gYmUgbW9yZSBjbGVhcgorICAgICAgICBiZWNhdXNlIGhhbmRs
ZU5QT1RUVGV4dHVyZSBkb2VzIG5vdCByZWFsbHkgaGFuZGxlcyBhIG5wb3QgdGV4dHVyZXMKKyAg
ICAgICAgYnV0IGhhbmRsZXMgaW52YWxpZCAoYmFkIG1pbi9tYWcgZmlsdGVyIGFuZC9vciB3cmFw
IG1vZGUgc2V0KSB0ZXh0dXJlcy4KKyAgICAgICAgTmFtZSBvZiBOUE9UU3RyaWN0IHZhcmlhYmxl
IHdhcyBhbHNvIGNoYW5nZWQgdG8gTlBPVFRTdXBwb3J0IHdoaWNoCisgICAgICAgIG1lYW5zIHdo
ZXRoZXIgaGFyZHdhcmUgc3VwcG9ydHMgbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcy4KKyAgICAg
ICAgTWV0aG9kIHRvIHZhbGlkYXRlIG5wb3R0IG1pcG1hcCBsZXZlbCB3YXMgYWRkZWQuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0czoKKyAgICAgICAgTGF5b3V0VGVzdHMvd2Vi
Z2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdGV4dHVyZXMvdGV4dHVy
ZS1ucG90Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxp
emVOZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c2V0dXBGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVJbnZhbGlkVGV4dHVyZXMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc05QT1RUU3VwcG9ydCk6CisKIDIwMTMtMDctMDUgIERlbmlz
IE5vbWl5YW1hICA8ZC5ub21peWFtYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBmYXN0
L3RleHQvZm9udC1rZXJuaW5nLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGM5YjExNmUuLmRmMDJi
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtNTQzLDcgKzU0Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCiAgICAgCiAgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1
ZS5yZXNpemUobV9tYXhWZXJ0ZXhBdHRyaWJzKTsKIAotICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKKyAgICAvLyBDcmVhdGUgYmxhY2sgdGV4dHVyZXMgb25seSBpZiBOUE9UIHRleHR1cmVz
IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlCisgICAgaWYgKGlzTlBPVFRTdXBwb3J0KCkp
CiAgICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwpAQCAtNTcyLDEw
ICs1NzMsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQogICAg
IG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7CiAg
ICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKICAgICBpZiAobV9pc0dMRVMyQ29tcGxp
YW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAgICBtX2lz
TlBPVFRTdXBwb3J0ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfbnBvdCIpOwogICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9
ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9u
b25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNOUE9UVFN1cHBvcnQgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2Zf
dHdvIik7CiAgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsK
ICAgICB9CiAgICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwpAQCAtMTMyOCwxMiAr
MTMyOSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwg
dHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9U
KHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxldmVs
ID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQorICAgIGlmICghdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxl
dmVsLCAiY29tcHJlc3NlZFRleEltYWdlMkQiKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGdyYXBo
aWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRk
cmVzcygpKTsKICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpA
QCAtMTM5NSwxMCArMTM5Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNv
cHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2
ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICBpZiAoIXZhbGlkYXRl
TlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgImNvcHlUZXhJbWFnZTJEIikp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291
cmNlU2FmZSgpLCAmcmVhc29uKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2Uy
RCIsIHJlYXNvbik7CkBAIC0xNzIxLDYgKzE3MTYsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q28KICAgICB9CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZU5QT1RU
ZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxl
dmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKGlzTlBPVFRTdXBwb3J0
KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCiB7CiAgICAgUmVmUHRyPFdlYkdMQnVmZmVy
PiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOwpAQCAtMTk4MCwxMyArMTk4NCwxNCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgYwogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcygiZHJhd0FycmF5cyIs
IHRydWUpOworICAgIGJvb2wgaW52YWxpZFRleCA9IGZhbHNlOworICAgIGlmIChpc05QT1RUU3Vw
cG9ydCgpKQorICAgICAgICBpbnZhbGlkVGV4ID0gaGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3
QXJyYXlzIiwgdHJ1ZSk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBj
b3VudCk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCkKICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24o
KTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGhhbmRsZU5QT1RUZXh0
dXJlcygiZHJhd0FycmF5cyIsIGZhbHNlKTsKKyAgICBpZiAoaW52YWxpZFRleCkKKyAgICAgICAg
aGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtMjA2NCwxMyArMjA2OSwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudQogICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lz
ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVu
dHMpOwogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRy
aWIwKG51bUVsZW1lbnRzKTsKICAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQot
ICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoImRyYXdFbGVtZW50cyIsIHRydWUpOworICAgIGJv
b2wgaW52YWxpZFRleCA9IGZhbHNlOworICAgIGlmIChpc05QT1RUU3VwcG9ydCgpKQorICAgICAg
ICBpbnZhbGlkVGV4ID0gaGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3RWxlbWVudHMiLCB0cnVl
KTsKICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkg
JiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVy
dGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcygiZHJhd0VsZW1lbnRzIiwgZmFsc2UpOworICAgIGlm
IChpbnZhbGlkVGV4KQorICAgICAgICBoYW5kbGVJbnZhbGlkVGV4dHVyZXMoImRyYXdFbGVtZW50
cyIsIGZhbHNlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAg
LTM2NjIsNyArMzY2OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
QmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgV2ViR0xUZXh0
dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKICAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIs
IE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwogICAgIEFTU0VSVCh0ZXgpOwotICAgIEFT
U0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCAi
dGV4SW1hZ2UyRCIpKTsKICAgICBpZiAoIXBpeGVscykgewogICAgICAgICAvLyBOb3RlOiBDaHJv
bWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3Vy
Y2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCiAgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1l
bnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRl
cHRoIHRleHR1cmVzCkBAIC00Nzk0LDkgKzQ4MDAsMTAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlSW52YWxpZFRleHR1cmVzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQogewogICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0
ID0gZmFsc2U7CisgICAgYm9vbCBibGFja1RleFNldCA9IGZhbHNlOwogICAgIGZvciAodW5zaWdu
ZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewogICAgICAgICBp
ZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNb
aWldLm1fdGV4dHVyZUJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKSB7CiAgICAgICAg
ICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewpAQCAtNDgxMiwxMCArNDgxOSwx
NCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcgogICAgICAgICAgICAgICAgIFN0cmluZyBtc2co
U3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6bnVtYmVy
KGlpKQogICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0IG1heWJl
IG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRlcmluZyBv
ciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnIik7CiAgICAgICAgICAgICAgICAgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
KSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tUZXhTZXQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmxhY2tUZXhTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1tpaV0ubV90
ZXh0dXJlQmluZGluZy5nZXQoKTsKICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
dGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwpAQCAtNDgyMyw2ICs0ODM0LDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGJvb2wgcHIKICAgICB9CiAgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworICAg
IHJldHVybiBibGFja1RleFNldDsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDc4YmEwNzEuLmZkODViMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCkBAIC0zNTYsNyArMzU2LDcgQEAgcHVibGljOgogICAgIC8vIFF1ZXJ5IHdoZXRoZXIg
aXQgaXMgYnVpbHQgb24gdG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KICAg
ICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0K
ICAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJpY3QuCi0g
ICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RTdHJpY3Q7
IH0KKyAgICBib29sIGlzTlBPVFRTdXBwb3J0KCkgeyByZXR1cm4gbV9pc05QT1RUU3VwcG9ydDsg
fQogICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3Jz
IG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgogICAgIGJvb2wgaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQogICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRh
dGlvbiBpbml0aWFsaXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCkBAIC0zODEsNiAr
MzgxLDkgQEAgcHVibGljOgogCiAgICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqLCBXZWJHTE9iamVjdCopOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIG1p
cG1hcCBsZXZlbCBvZiBucG90IHRleHR1cmUKKyAgICBib29sIHZhbGlkYXRlTlBPVFRleHR1cmVM
ZXZlbChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgbGV2ZWwsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKICAgICAvLyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0
dXJlIGZvcm1hdC4KICAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVt
KTsKIApAQCAtNTA5LDcgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBHQzNEdWludCBtX3N0ZW5jaWxG
dW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwogCiAgICAgYm9vbCBtX2lzR0xFUzJDb21w
bGlhbnQ7Ci0gICAgYm9vbCBtX2lzR0xFUzJOUE9UU3RyaWN0OworICAgIGJvb2wgbV9pc05QT1RU
U3VwcG9ydDsKICAgICBib29sIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsKICAgICBib29sIG1faXNSZXNvdXJjZVNhZmU7CiAgICAgYm9vbCBtX2lzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkOwpAQCAtNTU2LDcgKzU1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleFN1Yklt
YWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1s
RG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgIHZvaWQgaGFuZGxlTlBPVFRleHR1cmVzKGNvbnN0IGNoYXIqLCBib29sKTsK
KyAgICBib29sIGhhbmRsZUludmFsaWRUZXh0dXJlcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGJvb2wgcHJlcGFyZVRvRHJhdyk7CiAKICAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0
dXJlczF4MSgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206133</attachid>
            <date>2013-07-05 04:27:37 -0700</date>
            <delta_ts>2013-07-09 04:23:22 -0700</delta_ts>
            <desc>Non power of two texture handle optimization</desc>
            <filename>npot.patch</filename>
            <type>text/plain</type>
            <size>12593</size>
            <attacher name="Przemyslaw Szymanski">p.szymanski3</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNWU2NmExLi5kMjhiMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTMtMDctMDUgIFByemVteXNsYXcgU3p5bWFuc2tpICA8cC5zenltYW5za2kzQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXZWJHTF0gTm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlIG9wdGlt
aXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4NDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBvcHRpbWl6ZXMgdXNhZ2Ugb2YgaGFuZGxlTlBPVFRleHR1cmVzLiBJdCBpcyBu
b3QgbmVlZCB0bworICAgICAgICBpdGVyYXRlIGZvciBlYWNoIHRleHR1cmUgdW5pdCBpZiB0aGVy
ZSB3YXMgbm90IHNldCBhIGJsYWNrIHRleHR1cmUuCisgICAgICAgIFRoaXMgb3B0aW1pemF0aW9u
IHByb3ZpZGVzIGZldyBtb3JlIGZyYW1lcyBwZXIgc2Vjb25kcyBmb3IgYSBudW1iZXIKKyAgICAg
ICAgb2YgZHJhd2NhbGxzLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgbmFtaW5nIG9mIG1l
dGhvZCBhbmQgdmFyaWFibGUgdG8gYmUgbW9yZSBjbGVhcgorICAgICAgICBiZWNhdXNlIGhhbmRs
ZU5QT1RUVGV4dHVyZSBkb2VzIG5vdCByZWFsbHkgaGFuZGxlcyBhIG5wb3QgdGV4dHVyZXMKKyAg
ICAgICAgYnV0IGhhbmRsZXMgaW52YWxpZCAoYmFkIG1pbi9tYWcgZmlsdGVyIGFuZC9vciB3cmFw
IG1vZGUgc2V0KSB0ZXh0dXJlcy4KKyAgICAgICAgTmFtZSBvZiBOUE9UU3RyaWN0IHZhcmlhYmxl
IHdhcyBhbHNvIGNoYW5nZWQgdG8gTlBPVFRTdXBwb3J0IHdoaWNoCisgICAgICAgIG1lYW5zIHdo
ZXRoZXIgaGFyZHdhcmUgc3VwcG9ydHMgbm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlcy4KKyAgICAg
ICAgTWV0aG9kIHRvIHZhbGlkYXRlIG5wb3R0IG1pcG1hcCBsZXZlbCB3YXMgYWRkZWQuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0czoKKyAgICAgICAgTGF5b3V0VGVzdHMvd2Vi
Z2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdGV4dHVyZXMvdGV4dHVy
ZS1ucG90Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxp
emVOZXdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c2V0dXBGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVJbnZhbGlkVGV4dHVyZXMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc05QT1RUU3VwcG9ydCk6CisKIDIwMTMtMDctMDUgIERlbmlz
IE5vbWl5YW1hICA8ZC5ub21peWFtYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBmYXN0
L3RleHQvZm9udC1rZXJuaW5nLmh0bWwgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGM5YjExNmUuLjI1MjIy
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtNTQzLDcgKzU0Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCiAgICAgCiAgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1
ZS5yZXNpemUobV9tYXhWZXJ0ZXhBdHRyaWJzKTsKIAotICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKKyAgICAvLyBDcmVhdGUgYmxhY2sgdGV4dHVyZXMgb25seSBpZiBOUE9UIHRleHR1cmVz
IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlCisgICAgaWYgKGlzTlBPVFRTdXBwb3J0KCkp
CiAgICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwpAQCAtNTcyLDEw
ICs1NzMsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQogICAg
IG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7CiAg
ICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKICAgICBpZiAobV9pc0dMRVMyQ29tcGxp
YW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAgICBtX2lz
TlBPVFRTdXBwb3J0ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfbnBvdCIpOwogICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9
ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9u
b25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNOUE9UVFN1cHBvcnQgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2Zf
dHdvIik7CiAgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsK
ICAgICB9CiAgICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwpAQCAtMTMyOCwxMiAr
MTMyOSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwg
dHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9U
KHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxldmVs
ID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQorICAgIGlmICghdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxl
dmVsLCAiY29tcHJlc3NlZFRleEltYWdlMkQiKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGdyYXBo
aWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRk
cmVzcygpKTsKICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpA
QCAtMTM5NSwxMCArMTM5Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNv
cHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2
ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICBpZiAoIXZhbGlkYXRl
TlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgImNvcHlUZXhJbWFnZTJEIikp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291
cmNlU2FmZSgpLCAmcmVhc29uKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2Uy
RCIsIHJlYXNvbik7CkBAIC0xNzIxLDYgKzE3MTYsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q28KICAgICB9CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZU5QT1RU
ZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxl
dmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKGlzTlBPVFRTdXBwb3J0
KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCiB7CiAgICAgUmVmUHRyPFdlYkdMQnVmZmVy
PiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOwpAQCAtMTk4MCwxMyArMTk4NCwxNCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgYwogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcygiZHJhd0FycmF5cyIs
IHRydWUpOworICAgIGJvb2wgaW52YWxpZFRleCA9IGZhbHNlOworICAgIGlmIChpc05QT1RUU3Vw
cG9ydCgpKQorICAgICAgICBpbnZhbGlkVGV4ID0gaGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3
QXJyYXlzIiwgdHJ1ZSk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBj
b3VudCk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCkKICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24o
KTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGhhbmRsZU5QT1RUZXh0
dXJlcygiZHJhd0FycmF5cyIsIGZhbHNlKTsKKyAgICBpZiAoaW52YWxpZFRleCkKKyAgICAgICAg
aGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtMjA2NCwxMyArMjA2OSwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudQogICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lz
ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVu
dHMpOwogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRy
aWIwKG51bUVsZW1lbnRzKTsKICAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQot
ICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoImRyYXdFbGVtZW50cyIsIHRydWUpOworICAgIGJv
b2wgaW52YWxpZFRleCA9IGZhbHNlOworICAgIGlmIChpc05QT1RUU3VwcG9ydCgpKQorICAgICAg
ICBpbnZhbGlkVGV4ID0gaGFuZGxlSW52YWxpZFRleHR1cmVzKCJkcmF3RWxlbWVudHMiLCB0cnVl
KTsKICAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkg
JiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVy
dGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcygiZHJhd0VsZW1lbnRzIiwgZmFsc2UpOworICAgIGlm
IChpbnZhbGlkVGV4KQorICAgICAgICBoYW5kbGVJbnZhbGlkVGV4dHVyZXMoImRyYXdFbGVtZW50
cyIsIGZhbHNlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAg
LTM2NjIsNyArMzY2OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
QmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgV2ViR0xUZXh0
dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKICAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIs
IE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwogICAgIEFTU0VSVCh0ZXgpOwotICAgIEFT
U0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCAi
dGV4SW1hZ2UyRCIpKTsKICAgICBpZiAoIXBpeGVscykgewogICAgICAgICAvLyBOb3RlOiBDaHJv
bWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3Vy
Y2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCiAgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1l
bnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRl
cHRoIHRleHR1cmVzCkBAIC00Nzk0LDkgKzQ4MDAsMTAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlSW52YWxpZFRleHR1cmVzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQogewogICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0
ID0gZmFsc2U7CisgICAgYm9vbCBibGFja1RleFNldCA9IGZhbHNlOwogICAgIGZvciAodW5zaWdu
ZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewogICAgICAgICBp
ZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNb
aWldLm1fdGV4dHVyZUJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKSB7CiAgICAgICAg
ICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewpAQCAtNDgxMiwxMCArNDgxOSwx
MyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcgogICAgICAgICAgICAgICAgIFN0cmluZyBtc2co
U3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6bnVtYmVy
KGlpKQogICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0IG1heWJl
IG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRlcmluZyBv
ciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnIik7CiAgICAgICAgICAgICAgICAgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
KSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tUZXhTZXQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX2Js
YWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGJsYWNrVGV4U2V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUJpbmRpbmcuZ2V0
KCk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3Ja
ZXJvKHRleHR1cmUpKTsKQEAgLTQ4MjMsNiArNDgzMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29s
IHByCiAgICAgfQogICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCiAgICAgICAgIG1fY29udGV4dC0+
YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKKyAgICByZXR1cm4gYmxhY2tUZXhT
ZXQ7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNr
VGV4dHVyZXMxeDEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAppbmRleCA3OGJhMDcxLi5mZDg1YjEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzU2LDcg
KzM1Niw3IEBAIHB1YmxpYzoKICAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRv
cCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCiAgICAgYm9vbCBpc0dMRVMyQ29t
cGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxpYW50OyB9CiAgICAgLy8gUXVlcnkgaWYg
dGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0LgotICAgIGJvb2wgaXNHTEVTMk5Q
T1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisgICAgYm9vbCBpc05Q
T1RUU3VwcG9ydCgpIHsgcmV0dXJuIG1faXNOUE9UVFN1cHBvcnQ7IH0KICAgICAvLyBRdWVyeSBp
ZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRz
IGJ1ZmZlciBhY2Nlc3Nlcy4KICAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXM7IH0KICAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaW5pdGlhbGl6ZXMg
dGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgpAQCAtMzgxLDYgKzM4MSw5IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3Qq
KTsKIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBtaXBtYXAgbGV2ZWwgb2YgbnBv
dCB0ZXh0dXJlCisgICAgYm9vbCB2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOworCiAgICAgLy8gQWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQuCiAgICAg
dm9pZCBhZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSk7CiAKQEAgLTUwOSw3ICs1
MTIsNyBAQCBwdWJsaWM6CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3RlbmNp
bEZ1bmNNYXNrQmFjazsKIAogICAgIGJvb2wgbV9pc0dMRVMyQ29tcGxpYW50OwotICAgIGJvb2wg
bV9pc0dMRVMyTlBPVFN0cmljdDsKKyAgICBib29sIG1faXNOUE9UVFN1cHBvcnQ7CiAgICAgYm9v
bCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CiAgICAgYm9vbCBtX2lz
UmVzb3VyY2VTYWZlOwogICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKQEAgLTU1
Niw3ICs1NTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lk
IGhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBjaGFyKiwgYm9vbCk7CisgICAgYm9vbCBoYW5kbGVJ
bnZhbGlkVGV4dHVyZXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0Ry
YXcpOwogCiAgICAgdm9pZCBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKIAo=
</data>
<flag name="review"
          id="227799"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206305</attachid>
            <date>2013-07-09 04:27:25 -0700</date>
            <delta_ts>2016-03-22 21:11:16 -0700</delta_ts>
            <desc>Non power of two texture handle optimization</desc>
            <filename>npot.patch</filename>
            <type>text/plain</type>
            <size>12732</size>
            <attacher name="Przemyslaw Szymanski">p.szymanski3</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2Y2JiNjM3Li43NzgzNWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTMtMDctMDkgIFByemVteXNsYXcgU3p5bWFuc2tpICA8cC5zenltYW5za2kzQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtXZWJHTF0gTm9uLXBvd2VyLW9mLXR3byB0ZXh0dXJlIG9wdGlt
aXphdGlvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg0MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG9wdGltaXplcyB1c2FnZSBvZiBoYW5kbGVOUE9UVGV4dHVyZXMuIEl0IGRvZXMg
bm90IG5lZWQgdG8KKyAgICAgICAgaXRlcmF0ZSBmb3IgZWFjaCB0ZXh0dXJlIHVuaXQgaWYgdGhl
cmUgd2FzIG5vdCBzZXQgYSBibGFjayB0ZXh0dXJlLgorICAgICAgICBUaGlzIG9wdGltaXphdGlv
biBwcm92aWRlcyBmZXcgbW9yZSBmcmFtZXMgcGVyIHNlY29uZHMgZm9yIGEgbnVtYmVyCisgICAg
ICAgIG9mIGRyYXdjYWxscy4KKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIG5hbWluZyBvZiBt
ZXRob2QgYW5kIHZhcmlhYmxlIHRvIGJlIG1vcmUgY2xlYXIKKyAgICAgICAgYmVjYXVzZSBoYW5k
bGVOUE9UVFRleHR1cmUgZG9lcyBub3QgcmVhbGx5IGhhbmRsZXMgYSBucG90IHRleHR1cmVzCisg
ICAgICAgIGJ1dCBoYW5kbGVzIGludmFsaWQgKGJhZCBtaW4vbWFnIGZpbHRlciBhbmQvb3Igd3Jh
cCBtb2RlIHNldCkgdGV4dHVyZXMuCisgICAgICAgIE5hbWUgb2YgTlBPVFN0cmljdCB2YXJpYWJs
ZSB3YXMgYWxzbyBjaGFuZ2VkIHRvIE5QT1RUU3VwcG9ydCB3aGljaAorICAgICAgICBtZWFucyB3
aGV0aGVyIGhhcmR3YXJlIHN1cHBvcnRzIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMuCisgICAg
ICAgIE1ldGhvZCB0byB2YWxpZGF0ZSBucG90dCBtaXBtYXAgbGV2ZWwgd2FzIGFkZGVkLiAKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHM6CisgICAgICAg
IExheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L3RleHR1cmVzL3RleHR1cmUtbnBvdC5odG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZU5vblJlbmRlcmFibGVU
ZXh0dXJlcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhhc05QT1RUU3VwcG9y
dCk6CisKIDIwMTMtMDctMDkgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1
bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBbUGFzc1RoaXNUb0NhbGxiYWNr
XSBleHRlbmRlZCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGM5YjExNmUuLjY2MmQ3NjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcApAQCAtNTQzLDcgKzU0Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0
aWFsaXplTmV3Q29udGV4dCgpCiAgICAgCiAgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUo
bV9tYXhWZXJ0ZXhBdHRyaWJzKTsKIAotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAg
ICAvLyBDcmVhdGUgYmxhY2sgdGV4dHVyZXMgb25seSBpZiBOUE9UIHRleHR1cmVzIGFyZSBzdXBw
b3J0ZWQgYnkgdGhlIGhhcmR3YXJlCisgICAgaWYgKGhhc05QT1RUU3VwcG9ydCgpKQogICAgICAg
ICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKICAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKQEAgLTU3MiwxMCArNTczLDEw
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKCkKICAgICBtX2lzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9zdHJpY3RfYXR0cmlicyIpOwogICAgIG1faXNS
ZXNvdXJjZVNhZmUgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9D
SFJPTUlVTV9yZXNvdXJjZV9zYWZlIik7CiAgICAgaWYgKG1faXNHTEVTMkNvbXBsaWFudCkgewot
ICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX09FU190ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgbV9oYXNOUE9UVFN1
cHBvcnQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4
dHVyZV9ucG90Iik7CiAgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwiKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dl
cl9vZl90d28iKTsKKyAgICAgICAgbV9oYXNOUE9UVFN1cHBvcnQgPSBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7
CiAgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKICAgICB9
CiAgICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwpAQCAtMTMyOCwxMiArMTMyOSw4
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7
CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3Ry
aWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRo
LCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxldmVsID4gMCBu
b3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQor
ICAgIGlmICghdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCAi
Y29tcHJlc3NlZFRleEltYWdlMkQiKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGdyYXBoaWNzQ29u
dGV4dDNEKCktPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygp
KTsKICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwpAQCAtMTM5
NSwxMCArMTM5Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJ
bWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYg
V2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2Uy
RCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICBpZiAoIXZhbGlkYXRlTlBPVFRl
eHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgImNvcHlUZXhJbWFnZTJEIikpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2Fm
ZSgpLCAmcmVhc29uKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsIHJl
YXNvbik7CkBAIC0xNzIxLDYgKzE3MTYsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ28KICAg
ICB9CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZU5QT1RUZXh0dXJl
TGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKGhhc05QT1RUU3VwcG9ydCgpICYm
IGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQogewogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKQEAgLTE5ODAsMTMgKzE5ODQsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVp
IGMKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVs
YXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBP
VFN0cmljdCgpKQotICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoImRyYXdBcnJheXMiLCB0cnVl
KTsKKyAgICBib29sIGludmFsaWRUZXh0dXJlID0gZmFsc2U7CisgICAgaWYgKGhhc05QT1RUU3Vw
cG9ydCgpKQorICAgICAgICBpbnZhbGlkVGV4dHVyZSA9IHByZXBhcmVOb25SZW5kZXJhYmxlVGV4
dHVyZXMoImRyYXdBcnJheXMiLCB0cnVlKTsKICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9k
ZSwgZmlyc3QsIGNvdW50KTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkKQogICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIw
U2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgaGFu
ZGxlTlBPVFRleHR1cmVzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOworICAgIGlmIChpbnZhbGlkVGV4
dHVyZSkKKyAgICAgICAgcHJlcGFyZU5vblJlbmRlcmFibGVUZXh0dXJlcygiZHJhd0FycmF5cyIs
IGZhbHNlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTIw
NjQsMTMgKzIwNjksMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50
cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUKICAgICAgICAgICAgIHZh
bGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRl
ZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CiAgICAgfQotICAgIGlmICgh
aXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKCJkcmF3RWxl
bWVudHMiLCB0cnVlKTsKKyAgICBib29sIGludmFsaWRUZXh0dXJlID0gZmFsc2U7CisgICAgaWYg
KGhhc05QT1RUU3VwcG9ydCgpKQorICAgICAgICBpbnZhbGlkVGV4dHVyZSA9IHByZXBhcmVOb25S
ZW5kZXJhYmxlVGV4dHVyZXMoImRyYXdFbGVtZW50cyIsIHRydWUpOwogICAgIG1fY29udGV4dC0+
ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpKTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2lt
dWxhdGVkKQogICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgaGFuZGxlTlBPVFRl
eHR1cmVzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7CisgICAgaWYgKGludmFsaWRUZXh0dXJlKQor
ICAgICAgICBwcmVwYXJlTm9uUmVuZGVyYWJsZVRleHR1cmVzKCJkcmF3RWxlbWVudHMiLCBmYWxz
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCkBAIC0zNjYyLDcg
KzM2NjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CiAg
ICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKICAgICBBU1NFUlQodGV4KTsKLSAgICBBU1NFUlQoIWxl
dmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlTlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgInRleEltYWdl
MkQiKSk7CiAgICAgaWYgKCFwaXhlbHMpIHsKICAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBP
cGVuR0wgaW1wbGVtZW50YXRpb24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgp
IGlzIHRoZXJlZm9yZSB0cnVlLgogICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25z
LCBpZiB0aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0
dXJlcwpAQCAtNDc5NCw5ICs0ODAwLDEwIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogfQog
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnByZXBhcmVOb25SZW5kZXJhYmxlVGV4dHVyZXMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCiB7CiAgICAgYm9vbCByZXNldEFjdGl2ZVVuaXQg
PSBmYWxzZTsKKyAgICBib29sIGhhc0JsYWNrVGV4dHVyZSA9IGZhbHNlOwogICAgIGZvciAodW5z
aWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewogICAgICAg
ICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUJpbmRpbmcgJiYgbV90ZXh0dXJlVW5p
dHNbaWldLm1fdGV4dHVyZUJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewpAQCAtNDgxMiwxMCArNDgx
OSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcgogICAgICAgICAgICAgICAgIFN0cmluZyBt
c2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6bnVt
YmVyKGlpKQogICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0IG1h
eWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRlcmlu
ZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnIik7CiAgICAgICAgICAgICAgICAgcHJpbnRH
TFdhcm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkK
KyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX2JsYWNrVGV4dHVyZTJELmdl
dCgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgICAgICAgICAgaGFzQmxhY2tUZXh0dXJl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOworICAgICAgICAgICAgICAgICAgICBoYXNC
bGFja1RleHR1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJl
QmluZGluZy5nZXQoKTsKICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0
LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwpAQCAtNDgyMyw2ICs0ODMzLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGJvb2wgcHIKICAgICB9CiAgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKICAgICAgICAg
bV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworICAgIHJldHVy
biBoYXNCbGFja1RleHR1cmU7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA3OGJhMDcxLi4zZmZlZGFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaApAQCAtMzU2LDcgKzM1Niw3IEBAIHB1YmxpYzoKICAgICAvLyBRdWVyeSB3aGV0aGVyIGl0
IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCiAgICAg
Ym9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxpYW50OyB9CiAg
ICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0LgotICAg
IGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9
CisgICAgYm9vbCBoYXNOUE9UVFN1cHBvcnQoKSB7IHJldHVybiBtX2hhc05QT1RUU3VwcG9ydDsg
fQogICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3Jz
IG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgogICAgIGJvb2wgaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQogICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRh
dGlvbiBpbml0aWFsaXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCkBAIC0zODEsNiAr
MzgxLDkgQEAgcHVibGljOgogCiAgICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqLCBXZWJHTE9iamVjdCopOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIG1p
cG1hcCBsZXZlbCBvZiBucG90IHRleHR1cmUKKyAgICBib29sIHZhbGlkYXRlTlBPVFRleHR1cmVM
ZXZlbChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgbGV2ZWwsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKICAgICAvLyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0
dXJlIGZvcm1hdC4KICAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVt
KTsKIApAQCAtNTA5LDcgKzUxMiw3IEBAIHB1YmxpYzoKICAgICBHQzNEdWludCBtX3N0ZW5jaWxG
dW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwogCiAgICAgYm9vbCBtX2lzR0xFUzJDb21w
bGlhbnQ7Ci0gICAgYm9vbCBtX2lzR0xFUzJOUE9UU3RyaWN0OworICAgIGJvb2wgbV9oYXNOUE9U
VFN1cHBvcnQ7CiAgICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXM7CiAgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwogICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNp
bFN1cHBvcnRlZDsKQEAgLTU1Niw3ICs1NTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRt
bERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICB2b2lkIGhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBjaGFyKiwgYm9vbCk7
CisgICAgYm9vbCBwcmVwYXJlTm9uUmVuZGVyYWJsZVRleHR1cmVzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KTsKIAogICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tC
bGFja1RleHR1cmVzMXgxKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274725</attachid>
            <date>2016-03-22 21:11:19 -0700</date>
            <delta_ts>2016-03-23 10:14:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118409-20160322211120.patch</filename>
            <type>text/plain</type>
            <size>9853</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE2LTAzLTIyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gTm9uLXBvd2Vy
LW9mLXR3byB0ZXh0dXJlIG9wdGltaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBieSBQcnplbXlzbGF3IFN6eW1h
bnNraSAgPHAuc3p5bWFuc2tpM0BzYW1zdW5nLmNvbT4KKyAKKyAgICAgICAgVGhpcyBwYXRjaCBv
cHRpbWl6ZXMgdXNhZ2Ugb2YgaGFuZGxlTlBPVFRleHR1cmVzLiBXZSBkbyBub3QgbmVlZCB0bwor
ICAgICAgICBpdGVyYXRlIG92ZXIgZWFjaCB0ZXh0dXJlIHVuaXQgaWYgbm8gYmxhY2sgdGV4dHVy
ZXMgd2VyZSBzZXQuIFRoaXMKKyAgICAgICAgb3B0aW1pemF0aW9uIHByb3ZpZGVzIGEgZmV3IG1v
cmUgZnJhbWVzIHBlciBzZWNvbmRzIGZvciBjZXJ0YWluCisgICAgICAgIGRyYXcgY2FsbHMuCisg
ICAgCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0czoKKyAg
ICAgICAgTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9y
bWFuY2UvdGV4dHVyZXMvdGV4dHVyZS1ucG90Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBVc2UgbmV3IGhlbHBl
ciBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdBcnJheXMpOiBPbmx5IGNoZWNrIHRleHR1cmUgY29t
cGxldGVuZXNzCisgICAgICAgIGlmIGEgYmxhY2sgdGV4dHVyZSB3YXMgdXNlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
REJhc2UpOiBVc2UgbmV3IGhlbHBlciBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cyk6IFJldHVybiBmbGFnIHRvIGluZGljYXRlCisgICAgICAgIGlmIGEgYmxhY2sgZmFsbGJhY2t0
ZXh0dXJlIHdhcyB1c2VkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaDoKKwogMjAxNi0wMy0yMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIHVzZXJTcGFjZU9uVXNlIHBhdHRlcm5zIGFyZSBub3Qg
c3Ryb2tlZCBmb3IgZW1wdHkgb2JqZWN0IGJvdW5kaW5nIGJveCBlbGVtZW50cwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDE5ODU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4
LDEyICsxMjY4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzcwog
ICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3Nl
ZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7Ci0gICAgICAgIGlmIChsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlTlBPVFRleHR1cmVM
ZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgImNvbXByZXNzZWRUZXhJbWFnZTJEIikpCisgICAg
ICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpOwogICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKQEAgLTE2MDQsNiArMTYwMCwxNiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGVWCiAgICAgICAgIG1fY29udGV4
dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAorYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpCit7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4
dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+
IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0KQogewogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVm
ZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsK
QEAgLTE5MTUsMTQgKzE5MjEsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3QXJyYQogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBib29sIGludmFs
aWRUZXh0dXJlID0gZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAg
ICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICAgICAg
aW52YWxpZFRleHR1cmUgPSBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0
cnVlKTsKIAogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwog
CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkK
ICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgaWYgKGludmFsaWRUZXh0dXJlKQogICAg
ICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCBmYWxzZSk7CiAgICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7CiB9CkBAIC0xOTQxLDE0ICsxOTQ4LDE2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW0KICAgICAgICAgICAgIHZhbGlkYXRlSW5k
ZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNl
dCksIG51bUVsZW1lbnRzKTsKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVs
YXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CiAgICAgfQorCisgICAgYm9vbCBpbnZhbGlk
VGV4dHVyZSA9IGZhbHNlOwogICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0cnVlKTsKKyAgICAgICAg
aW52YWxpZFRleHR1cmUgPSBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIs
IHRydWUpOwogCiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOwogCiAgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKICAgICAgICAgcmVzdG9yZVN0YXRl
c0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3Ry
aWN0KCkpCisgICAgaWYgKGludmFsaWRUZXh0dXJlKQogICAgICAgICBjaGVja1RleHR1cmVDb21w
bGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKIH0KQEAgLTI5OTksNyArMzAwOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwgVGV4SW1hZ2UsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwogICAgIEFT
U0VSVCh0ZXgpOwotICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRo
LCBoZWlnaHQsIGxldmVsLCAidGV4SW1hZ2UyRCIpKTsKICAgICBpZiAoIXBpeGVscykgewogICAg
ICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4
dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCiAgICAgICAgIC8v
IEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRo
X3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCkBAIC0zMDY3LDEwICszMDc2LDggQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlKSB7Ci0gICAgICAgIGlm
IChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICBpZiAo
IXZhbGlkYXRlTlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgZnVuY3Rpb25O
YW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAvLyBG
b3IgU291cmNlQXJyYXlCdWZmZXJWaWV3LCBmdW5jdGlvbiB2YWxpZGF0ZVRleEZ1bmNEYXRhKCkg
d291bGQgaGFuZGxlIHdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIFNldHRhYmxlVGV4Rm9ybWF0CiAg
ICAgICAgIC8vIGJ5IGNoZWNraW5nIGlmIHRoZSBBcnJheUJ1ZmZlclZpZXcgaXMgbnVsbCBvciBu
b3QuCiAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9IFNvdXJjZUFycmF5QnVmZmVyVmlldykgewpA
QCAtMzk3OCwxNyArMzk4NSwxOSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6CiAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUs
IGxlbmd0aCkucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29s
IHByZXBhcmVUb0RyYXcpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRv
RHJhdykKIHsKICAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgIGJvb2wgbmVl
ZHNUb1VzZUJsYWNrMkRUZXh0dXJlID0gZmFsc2U7CisgICAgYm9vbCBuZWVkc1RvVXNlQmxhY2sz
RFRleHR1cmUgPSBmYWxzZTsKICAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbGFn
IGV4dGVuc2lvbnMgPSB0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3MoKTsKIAogICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbm9Mb25nZXJVbnJlbmRlcmFibGU7CiAgICAgZm9yICh1bnNpZ25lZCBiYWRUZXh0dXJl
IDogbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMpIHsKICAgICAgICAgQVNTRVJUKGJhZFRleHR1
cmUgPCBtX3RleHR1cmVVbml0cy5zaXplKCkpOwogICAgICAgICBhdXRvJiB0ZXh0dXJlVW5pdCA9
IG1fdGV4dHVyZVVuaXRzW2JhZFRleHR1cmVdOwotICAgICAgICBib29sIG5lZWRzVG9Vc2VCbGFj
azJEVGV4dHVyZSA9IHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcgJiYgdGV4dHVyZVVuaXQu
dGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpOwotICAg
ICAgICBib29sIG5lZWRzVG9Vc2VCbGFjazNEVGV4dHVyZSA9IHRleHR1cmVVbml0LnRleHR1cmVD
dWJlTWFwQmluZGluZyAmJiB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKTsKKyAgICAgICAgbmVlZHNUb1VzZUJsYWNrMkRU
ZXh0dXJlID0gdGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZyAmJiB0ZXh0dXJlVW5pdC50ZXh0
dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucyk7CisgICAgICAg
IG5lZWRzVG9Vc2VCbGFjazNEVGV4dHVyZSA9IHRleHR1cmVVbml0LnRleHR1cmVDdWJlTWFwQmlu
ZGluZyAmJiB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNr
VGV4dHVyZShleHRlbnNpb25zKTsKIAogICAgICAgICBpZiAoIW5lZWRzVG9Vc2VCbGFjazJEVGV4
dHVyZSAmJiAhbmVlZHNUb1VzZUJsYWNrM0RUZXh0dXJlKSB7CiAgICAgICAgICAgICBub0xvbmdl
clVucmVuZGVyYWJsZS5hcHBlbmQoYmFkVGV4dHVyZSk7CkBAIC00MDI1LDYgKzQwMzQsOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4CiAKICAgICBmb3IgKHVuc2ln
bmVkIHJlbmRlcmFibGUgOiBub0xvbmdlclVucmVuZGVyYWJsZSkKICAgICAgICAgbV91bnJlbmRl
cmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKHJlbmRlcmFibGUpOworCisgICAgcmV0dXJuIG5lZWRz
VG9Vc2VCbGFjazJEVGV4dHVyZSB8fCBuZWVkc1RvVXNlQmxhY2szRFRleHR1cmU7CiB9CiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVz
MXgxKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDE5ODU3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MjIsNiArNDIyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCB2YWxpZGF0ZURyYXdBcnJh
eXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwogICAgIGJvb2wgdmFsaWRh
dGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVk
JiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZU5Q
T1RUZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGxldmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwogCiAgICAgLy8gQWRkcyBhIGNvbXBy
ZXNzZWQgdGV4dHVyZSBmb3JtYXQuCiAgICAgdm9pZCBhZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChHQzNEZW51bSk7CkBAIC02MTYsNyArNjE3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3Vy
Y2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKIAotICAgIHZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29s
KTsKKyAgICBib29sIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7
CiAKICAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274755</attachid>
            <date>2016-03-23 10:15:00 -0700</date>
            <delta_ts>2016-03-23 12:21:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118409-20160323101502.patch</filename>
            <type>text/plain</type>
            <size>22276</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTAzLTIzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gTm9uLXBvd2Vy
LW9mLXR3byB0ZXh0dXJlIG9wdGltaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBieSBQcnplbXlzbGF3IFN6eW1h
bnNraSAgPHAuc3p5bWFuc2tpM0BzYW1zdW5nLmNvbT4KKyAKKyAgICAgICAgVGhpcyBwYXRjaCBv
cHRpbWl6ZXMgdXNhZ2Ugb2YgaGFuZGxlTlBPVFRleHR1cmVzLiBXZSBkbyBub3QgbmVlZCB0bwor
ICAgICAgICBpdGVyYXRlIG92ZXIgZWFjaCB0ZXh0dXJlIHVuaXQgaWYgbm8gYmxhY2sgdGV4dHVy
ZXMgd2VyZSBzZXQuIFRoaXMKKyAgICAgICAgb3B0aW1pemF0aW9uIHByb3ZpZGVzIGEgZmV3IG1v
cmUgZnJhbWVzIHBlciBzZWNvbmRzIGZvciBjZXJ0YWluCisgICAgICAgIGRyYXcgY2FsbHMuCisg
ICAgCisgICAgICAgIFRlc3RlZCBieToKKyAgICAgICAgKDEpIEV4aXN0aW5nIHRlc3RzOiB3ZWJn
bC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90ZXh0dXJlcy90ZXh0dXJl
LW5wb3QuaHRtbAorICAgICAgICAoMikgTmV3IHRlc3QgY2FzZTogZmFzdC9jYW52YXMvd2ViZ2wv
dGV4dHVyZS1hbHRlcm5hdGluZy1ucG90Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQpOiBVc2UgbmV3IGhlbHBlciBt
ZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZU5QT1RUZXh0dXJlTGV2ZWwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdBcnJheXMpOiBPbmx5IGNoZWNrIHRleHR1cmUgY29tcGxl
dGVuZXNzCisgICAgICAgIGlmIGEgYmxhY2sgdGV4dHVyZSB3YXMgdXNlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREJh
c2UpOiBVc2UgbmV3IGhlbHBlciBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyk6
IFJldHVybiBmbGFnIHRvIGluZGljYXRlCisgICAgICAgIGlmIGEgYmxhY2sgZmFsbGJhY2t0ZXh0
dXJlIHdhcyB1c2VkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaDoKKwogMjAxNi0wMy0yMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIHVzZXJTcGFjZU9uVXNlIHBhdHRlcm5zIGFyZSBub3Qgc3Ry
b2tlZCBmb3IgZW1wdHkgb2JqZWN0IGJvdW5kaW5nIGJveCBlbGVtZW50cwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAJKHJldmlzaW9uIDE5ODU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY4LDEy
ICsxMjY4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzcwogICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRl
eEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBX
ZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlTlBPVFRleHR1cmVMZXZl
bCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgImNvbXByZXNzZWRUZXhJbWFnZTJEIikpCisgICAgICAg
IHJldHVybjsKICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwogICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxl
bmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKQEAgLTE2MDQsNiArMTYwMCwxNiBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGVWCiAgICAgICAgIG1fY29udGV4dC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Cit7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVy
ZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+IDAg
bm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
RWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQogewogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVy
ID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKQEAg
LTE5MTUsMTQgKzE5MjEsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
QXJyYQogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2lt
dWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBib29sIHVzZXNGYWxs
YmFja1RleHR1cmUgPSBmYWxzZTsKICAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworICAgICAg
ICB1c2VzRmFsbGJhY2tUZXh0dXJlID0gY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJy
YXlzIiwgdHJ1ZSk7CiAKICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKIAogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQpCiAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9u
KCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgIGlmICh1c2VzRmFsbGJhY2tU
ZXh0dXJlKQogICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCBm
YWxzZSk7CiAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiB9CkBAIC0xOTQxLDE0ICsxOTQ4LDE2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW0KICAgICAgICAgICAg
IHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CiAgICAgfQorCisgICAg
Ym9vbCB1c2VzRmFsbGJhY2tUZXh0dXJlID0gZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIs
IHRydWUpOworICAgICAgICB1c2VzRmFsbGJhY2tUZXh0dXJlID0gY2hlY2tUZXh0dXJlQ29tcGxl
dGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0cnVlKTsKIAogICAgIG1fY29udGV4dC0+ZHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
IAogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQp
CiAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgIGlmICh1c2VzRmFsbGJhY2tUZXh0dXJl
KQogICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNl
KTsKICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIH0KQEAgLTI5OTksNyArMzAwOCw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UKICAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OwogICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwgVGV4
SW1hZ2UsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSkpOwogICAgIEFTU0VSVCh0ZXgpOwotICAgIEFTU0VSVCghbGV2ZWwg
fHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBBU1NFUlQodmFs
aWRhdGVOUE9UVGV4dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCAidGV4SW1hZ2UyRCIp
KTsKICAgICBpZiAoIXBpeGVscykgewogICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5H
TCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMg
dGhlcmVmb3JlIHRydWUuCiAgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlm
IHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVz
CkBAIC0zMDY3LDEwICszMDc2LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZnVuY3Rpb25UeXBlICE9
IFRleFN1YkltYWdlKSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBP
VCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3Qg
cG93ZXIgb2YgMiIpOworICAgICAgICBpZiAoIXZhbGlkYXRlTlBPVFRleHR1cmVMZXZlbCh3aWR0
aCwgaGVpZ2h0LCBsZXZlbCwgZnVuY3Rpb25OYW1lKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQogICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZmZXJWaWV3LCBmdW5j
dGlvbiB2YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRoZXIgdG8gdmFsaWRh
dGUgdGhlIFNldHRhYmxlVGV4Rm9ybWF0CiAgICAgICAgIC8vIGJ5IGNoZWNraW5nIGlmIHRoZSBB
cnJheUJ1ZmZlclZpZXcgaXMgbnVsbCBvciBub3QuCiAgICAgICAgIGlmIChzb3VyY2VUeXBlICE9
IFNvdXJjZUFycmF5QnVmZmVyVmlldykgewpAQCAtMzk3OCw5ICszOTg1LDEwIEBAIFdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjoKICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKS5yZWxlYXNlKCkpOwogfQogCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQogewogICAgIGJvb2wgcmVzZXRBY3RpdmVV
bml0ID0gZmFsc2U7CisgICAgYm9vbCB1c2VzQXRMZWFzdE9uZUJsYWNrVGV4dHVyZSA9IGZhbHNl
OwogICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHRl
eHR1cmVFeHRlbnNpb25GbGFncygpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBub0xvbmdlclVu
cmVuZGVyYWJsZTsKQEAgLTM5OTUsNiArNDAwMyw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y2hlY2tUZXgKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAg
ICAgICAgdXNlc0F0TGVhc3RPbmVCbGFja1RleHR1cmUgPSB0cnVlOworCiAgICAgICAgIGlmIChi
YWRUZXh0dXJlICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQpIHsKICAgICAgICAgICAgIG1fY29udGV4
dC0+YWN0aXZlVGV4dHVyZShiYWRUZXh0dXJlICsgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7CkBAIC00MDI1LDYgKzQwMzUs
OCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4CiAKICAgICBmb3Ig
KHVuc2lnbmVkIHJlbmRlcmFibGUgOiBub0xvbmdlclVucmVuZGVyYWJsZSkKICAgICAgICAgbV91
bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKHJlbmRlcmFibGUpOworCisgICAgcmV0dXJu
IHVzZXNBdExlYXN0T25lQmxhY2tUZXh0dXJlOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oCShyZXZpc2lvbiAxOTg1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIyLDYgKzQyMiw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIGJvb2wgdmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBH
QzNEc2l6ZWkgcHJpbWNvdW50KTsKICAgICBib29sIHZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMsIEdDM0Rz
aXplaSBwcmltY291bnQpOworICAgIGJvb2wgdmFsaWRhdGVOUE9UVGV4dHVyZUxldmVsKEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBsZXZlbCwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKTsKIAogICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
LgogICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwpAQCAtNjE2
LDcgKzYxNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2Uq
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKLSAgICB2b2lkIGNoZWNr
VGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisgICAgYm9vbCBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwogCiAgICAgdm9pZCBjcmVhdGVG
YWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4NTg2KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTYtMDMtMjMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgW1dlYkdMXSBOb24tcG93ZXItb2YtdHdvIHRleHR1cmUgb3B0aW1pemF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0MDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL3RleHR1cmUtYWx0ZXJuYXRpbmctbnBvdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtYWx0ZXJuYXRpbmctbnBvdC5odG1sOiBBZGRl
ZC4KKwogMjAxNi0wMy0yMyAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZSBzaG91bGQgbm90IGRpc2FibGUgaW5saW5pbmcgd2hlbiB0aGUgZGVidWdnZXIgaXMg
ZW5hYmxlZApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1hbHRl
cm5hdGluZy1ucG90LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWFsdGVybmF0aW5nLW5wb3QtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1hbHRlcm5h
dGluZy1ucG90LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisg
UEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5v
IGVycm9ycyBmcm9tIHNldHVwLgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRSA6IGdsLnRleElt
YWdlMkRbMF0gd2l0aCBOUE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxkIHJldHVybiBJ
TlZBTElEX1ZBTFVFCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBnbC50ZXhJbWFnZTJEWzFdIHdpdGggUE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxk
IHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVF
IDogZ2wudGV4SW1hZ2UyRFsyXSB3aXRoIE5QT1QgdGV4dHVyZSB3aXRoIGxldmVsID4gMCBzaG91
bGQgcmV0dXJuIElOVkFMSURfVkFMVUUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IGdsLnRleEltYWdlMkRbMF0gd2l0aCBQT1QgdGV4dHVyZSB3aXRoIGxldmVs
ID4gMCBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElO
VkFMSURfVkFMVUUgOiBnbC50ZXhJbWFnZTJEWzFdIHdpdGggUE9UIHRleHR1cmUgd2l0aCBsZXZl
bCA+IDAgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBnbC50ZXhJbWFnZTJEWzJdIHdpdGggUE9UIHRleHR1cmUg
d2l0aCBsZXZlbCA+IDAgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IGdsLnRleEltYWdlMkRbMF0gd2l0aCBOUE9UIHRleHR1cmUgYXQg
bGV2ZWwgMCBzaG91bGQgc3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogZ2wudGV4SW1hZ2UyRFsxXSB3aXRoIFBPVCB0ZXh0dXJlIGF0IGxldmVsIDAg
c2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IGdsLnRleEltYWdlMkRbMl0gd2l0aCBOUE9UIHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQg
c3VjY2VlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZ2wu
dGV4SW1hZ2UyRFswXSB3aXRoIFBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQK
K1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGdsLnRleEltYWdl
MkRbMV0gd2l0aCBOUE9UIHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQgc3VjY2VlZAorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZ2wudGV4SW1hZ2UyRFsyXSB3
aXRoIFBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQKKworY2hlY2sgdXNpbmcg
Y3ViZW1hcAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9WQUxVRSA6IGdsLnRleEltYWdlMkQgd2l0aCBO
UE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFCitQ
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBnbC50ZXhJbWFnZTJE
IHdpdGggUE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX1ZBTFVFIDogZ2wudGV4SW1hZ2UyRCB3
aXRoIE5QT1QgdGV4dHVyZSB3aXRoIGxldmVsID4gMCBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFM
VUUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGdsLnRleElt
YWdlMkQgd2l0aCBQT1QgdGV4dHVyZSB3aXRoIGxldmVsID4gMCBzaG91bGQgc3VjY2VlZAorUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUgOiBnbC50ZXhJbWFn
ZTJEIHdpdGggTlBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCByZXR1cm4gSU5WQUxJ
RF9WQUxVRQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogZ2wu
dGV4SW1hZ2UyRCB3aXRoIFBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCBzdWNjZWVk
CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBnbC50ZXhJbWFn
ZTJEIHdpdGggTlBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGdsLnRleEltYWdlMkQgd2l0aCBQ
T1QgdGV4dHVyZSBhdCBsZXZlbCAwIHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBnbC50ZXhJbWFnZTJEIHdpdGggTlBPVCB0ZXh0dXJl
IGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IGdsLnRleEltYWdlMkQgd2l0aCBQT1QgdGV4dHVyZSBhdCBsZXZlbCAw
IHNob3VsZCBzdWNjZWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBnbC50ZXhJbWFnZTJEIHdpdGggTlBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1
Y2NlZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IGdsLnRl
eEltYWdlMkQgd2l0aCBQT1QgdGV4dHVyZSBhdCBsZXZlbCAwIHNob3VsZCBzdWNjZWVkCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1hbHRlcm5hdGluZy1ucG90Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1hbHRl
cm5hdGluZy1ucG90Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC90ZXh0dXJlLWFsdGVybmF0aW5nLW5wb3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIwNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldl
YkdMIE5vbi1Qb3dlciBvZiAyIHRleHR1cmUgY29uZm9ybWFuY2UgdGVzdC48L3RpdGxlPgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj4gPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImV4YW1wbGUiIHdpZHRoPSI0IiBoZWlnaHQ9IjQiIHN0eWxlPSJ3aWR0
aDogNDBweDsgaGVpZ2h0OiAzMHB4OyI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5
cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK2F0dHJp
YnV0ZSB2ZWMyIHRleENvb3JkMDsKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKK3ZvaWQgbWFpbigp
Cit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgdGV4Q29vcmQgPSB0ZXhDb29y
ZDA7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIv
eC1mcmFnbWVudCI+CisjaWZkZWYgR0xfRVMKK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OworI2Vu
ZGlmCit1bmlmb3JtIHNhbXBsZXJDdWJlIHRleDsKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKK3Zv
aWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUodGV4LCBub3JtYWxp
emUodmVjMyh0ZXhDb29yZCwgMSkpKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3aW5k
b3cuaW50ZXJuYWxzKQorICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0V2ViR0xFcnJv
cnNUb0NvbnNvbGVFbmFibGVkKGZhbHNlKTsKKwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwor
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIik7Cit2YXIgZ2wg
PSB3dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7Cit2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFRl
eHR1cmVkUXVhZChnbCk7CisKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91
bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuIik7CisKKy8vIE1ha2UgMyB0ZXh0dXJlcyBieSB1
c2luZyAzIGFjdGl2ZSB0ZXh0dXJlIHVuaXRzLgordmFyIHRleHR1cmVzID0gW107Citmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgMzsgKytpaSkgeworICAgIHZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJl
KCk7CisgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIGlpKTsKKyAgICBnbC5iaW5k
VGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworICAgIHRleHR1cmVzW2lpXSA9IHRleDsKK30K
K3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisKKy8vIEFsdGVybmF0
ZSBQT1QgYW5kIE5QT1QgdGV4dHVyZXMsIGVuZGluZyB3aXRoIE5QT1QuCisvLworLy8gMS4gQ2hl
Y2sgdGhhdCBhbiBOUE9UIHRleHR1cmUgbm90IG9uIGxldmVsIDAgZ2VuZXJhdGVzIElOVkFMSURf
VkFMVUUgKGFsdGVybmF0aW5nLCBlbmRpbmcgaW4gTlBPVCB0ZXh0dXJlKQorZ2wuYWN0aXZlVGV4
dHVyZShnbC5URVhUVVJFMCArIDApOword3R1LmZpbGxUZXh0dXJlKGdsLCB0ZXh0dXJlc1swXSwg
NSwgMywgWzAsIDE5MiwgMTI4LCAyNTVdLCAxKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5W
QUxJRF9WQUxVRSwgImdsLnRleEltYWdlMkRbMF0gd2l0aCBOUE9UIHRleHR1cmUgd2l0aCBsZXZl
bCA+IDAgc2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIik7CisKK2dsLmFjdGl2ZVRleHR1cmUo
Z2wuVEVYVFVSRTAgKyAxKTsKK3d0dS5maWxsVGV4dHVyZShnbCwgdGV4dHVyZXNbMV0sIDQsIDQs
IFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
LCAiZ2wudGV4SW1hZ2UyRFsxXSB3aXRoIFBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3Vs
ZCBzdWNjZWVkIik7CisKK2dsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyAyKTsKK3d0dS5m
aWxsVGV4dHVyZShnbCwgdGV4dHVyZXNbMl0sIDUsIDMsIFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJnbC50ZXhJbWFnZTJEWzJd
IHdpdGggTlBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCByZXR1cm4gSU5WQUxJRF9W
QUxVRSIpOworCisvLyAyLiBDaGVjayB0aGF0IGFuIE5QT1QgdGV4dHVyZSBub3Qgb24gbGV2ZWwg
MCBnZW5lcmF0ZXMgSU5WQUxJRF9WQUxVRSAoYWx0ZXJuYXRpbmcsIGVuZGluZyBpbiBQT1QgdGV4
dHVyZSkKK2dsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyAwKTsKK3d0dS5maWxsVGV4dHVy
ZShnbCwgdGV4dHVyZXNbMF0sIDQsIDQsIFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7CitnbEVycm9y
U2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wudGV4SW1hZ2UyRFswXSB3aXRoIFBPVCB0ZXh0
dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCBzdWNjZWVkIik7CisKK2dsLmFjdGl2ZVRleHR1cmUo
Z2wuVEVYVFVSRTAgKyAxKTsKK3d0dS5maWxsVGV4dHVyZShnbCwgdGV4dHVyZXNbMV0sIDUsIDMs
IFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURf
VkFMVUUsICJnbC50ZXhJbWFnZTJEWzFdIHdpdGggUE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAg
c2hvdWxkIHJldHVybiBJTlZBTElEX1ZBTFVFIik7CisKK2dsLmFjdGl2ZVRleHR1cmUoZ2wuVEVY
VFVSRTAgKyAyKTsKK3d0dS5maWxsVGV4dHVyZShnbCwgdGV4dHVyZXNbMl0sIDQsIDQsIFswLCAx
OTIsIDEyOCwgMjU1XSwgMSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wu
dGV4SW1hZ2UyRFsyXSB3aXRoIFBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCBzdWNj
ZWVkIik7CisKKy8vIDMuIENoZWNrIHRoYXQgYW4gTlBPVCB0ZXh0dXJlIG9uIGxldmVsIDAgc3Vj
Y2VlZHMgKGFsdGVybmF0aW5nLCBlbmRpbmcgaW4gTlBPVCB0ZXh0dXJlKQorZ2wuYWN0aXZlVGV4
dHVyZShnbC5URVhUVVJFMCArIDApOword3R1LmZpbGxUZXh0dXJlKGdsLCB0ZXh0dXJlc1swXSwg
NSwgMywgWzAsIDE5MiwgMTI4LCAyNTVdKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJS
T1IsICJnbC50ZXhJbWFnZTJEWzBdIHdpdGggTlBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxk
IHN1Y2NlZWQiKTsKKworZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIDEpOword3R1LmZp
bGxUZXh0dXJlKGdsLCB0ZXh0dXJlc1sxXSwgNCwgNCwgWzAsIDE5MiwgMTI4LCAyNTVdKTsKK2ds
RXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJnbC50ZXhJbWFnZTJEWzFdIHdpdGggUE9U
IHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQgc3VjY2VlZCIpOworCitnbC5hY3RpdmVUZXh0dXJl
KGdsLlRFWFRVUkUwICsgMik7Cit3dHUuZmlsbFRleHR1cmUoZ2wsIHRleHR1cmVzWzJdLCA1LCAz
LCBbMCwgMTkyLCAxMjgsIDI1NV0pOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwg
ImdsLnRleEltYWdlMkRbMl0gd2l0aCBOUE9UIHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQgc3Vj
Y2VlZCIpOworCisvLyA0LiBDaGVjayB0aGF0IGFuIE5QT1QgdGV4dHVyZSBvbiBsZXZlbCAwIHN1
Y2NlZWRzIChhbHRlcm5hdGluZywgZW5kaW5nIGluIFBPVCB0ZXh0dXJlKQorZ2wuYWN0aXZlVGV4
dHVyZShnbC5URVhUVVJFMCArIDApOword3R1LmZpbGxUZXh0dXJlKGdsLCB0ZXh0dXJlc1swXSwg
NCwgNCwgWzAsIDE5MiwgMTI4LCAyNTVdKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJS
T1IsICJnbC50ZXhJbWFnZTJEWzBdIHdpdGggUE9UIHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQg
c3VjY2VlZCIpOworCitnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgMSk7Cit3dHUuZmls
bFRleHR1cmUoZ2wsIHRleHR1cmVzWzFdLCA1LCAzLCBbMCwgMTkyLCAxMjgsIDI1NV0pOworZ2xF
cnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgImdsLnRleEltYWdlMkRbMV0gd2l0aCBOUE9U
IHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQgc3VjY2VlZCIpOworCitnbC5hY3RpdmVUZXh0dXJl
KGdsLlRFWFRVUkUwICsgMik7Cit3dHUuZmlsbFRleHR1cmUoZ2wsIHRleHR1cmVzWzJdLCA0LCA0
LCBbMCwgMTkyLCAxMjgsIDI1NV0pOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwg
ImdsLnRleEltYWdlMkRbMl0gd2l0aCBQT1QgdGV4dHVyZSBhdCBsZXZlbCAwIHNob3VsZCBzdWNj
ZWVkIik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJjaGVjayB1c2luZyBjdWJlbWFwIik7Cit2YXIg
cHJvZ3JhbSA9IHd0dS5zZXR1cFByb2dyYW0oCisgICAgZ2wsCisgICAgW3d0dS5sb2FkU2hhZGVy
RnJvbVNjcmlwdChnbCwgJ3ZzaGFkZXInLCBnbC5WRVJURVhfU0hBREVSKSwKKyAgICAgd3R1Lmxv
YWRTaGFkZXJGcm9tU2NyaXB0KGdsLCAnZnNoYWRlcicsIGdsLkZSQUdNRU5UX1NIQURFUildLAor
ICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLCBbMCwgMV0pOworCisvLyBNYWtlIDMgdGV4
dHVyZXMgYnkgdXNpbmcgMyBhY3RpdmUgdGV4dHVyZSB1bml0cy4KK3ZhciBjdWJlVGV4dHVyZXMg
PSBbXTsKK2ZvciAodmFyIGlpID0gMDsgaWkgPCAzOyArK2lpKSB7CisgICAgdmFyIHRleCA9IGds
LmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaWkp
OworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleCk7CisgICAgY3Vi
ZVRleHR1cmVzW2lpXSA9IHRleDsKK30KK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5P
X0VSUk9SIik7CisKKy8vIDUuIENoZWNrIHRoYXQgYW4gTlBPVCB0ZXh0dXJlIG5vdCBvbiBsZXZl
bCAwIGdlbmVyYXRlcyBJTlZBTElEX1ZBTFVFIChhbHRlcm5hdGluZywgZW5kaW5nIGluIE5QT1Qg
dGV4dHVyZSkKK2dsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyAwKTsKK2ZpbGxDdWJlVGV4
dHVyZShnbCwgY3ViZVRleHR1cmVzWzBdLCA1LCAzLCBbMCwgMTkyLCAxMjgsIDI1NV0sIDEpOwor
Z2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiZ2wudGV4SW1hZ2UyRCB3aXRo
IE5QT1QgdGV4dHVyZSB3aXRoIGxldmVsID4gMCBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFMVUUi
KTsKKworZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIDEpOworZmlsbEN1YmVUZXh0dXJl
KGdsLCBjdWJlVGV4dHVyZXNbMV0sIDQsIDQsIFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7CitnbEVy
cm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wudGV4SW1hZ2UyRCB3aXRoIFBPVCB0ZXh0
dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCBzdWNjZWVkIik7CisKK2dsLmFjdGl2ZVRleHR1cmUo
Z2wuVEVYVFVSRTAgKyAyKTsKK2ZpbGxDdWJlVGV4dHVyZShnbCwgY3ViZVRleHR1cmVzWzJdLCA1
LCAzLCBbMCwgMTkyLCAxMjgsIDI1NV0sIDEpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZB
TElEX1ZBTFVFLCAiZ2wudGV4SW1hZ2UyRCB3aXRoIE5QT1QgdGV4dHVyZSB3aXRoIGxldmVsID4g
MCBzaG91bGQgcmV0dXJuIElOVkFMSURfVkFMVUUiKTsKKworLy8gNi4gQ2hlY2sgdGhhdCBhbiBO
UE9UIHRleHR1cmUgbm90IG9uIGxldmVsIDAgZ2VuZXJhdGVzIElOVkFMSURfVkFMVUUgKGFsdGVy
bmF0aW5nLCBlbmRpbmcgaW4gUE9UIHRleHR1cmUpCitnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRV
UkUwICsgMCk7CitmaWxsQ3ViZVRleHR1cmUoZ2wsIGN1YmVUZXh0dXJlc1swXSwgNCwgNCwgWzAs
IDE5MiwgMTI4LCAyNTVdLCAxKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJn
bC50ZXhJbWFnZTJEIHdpdGggUE9UIHRleHR1cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxkIHN1Y2Nl
ZWQiKTsKKworZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIDEpOworZmlsbEN1YmVUZXh0
dXJlKGdsLCBjdWJlVGV4dHVyZXNbMV0sIDUsIDMsIFswLCAxOTIsIDEyOCwgMjU1XSwgMSk7Citn
bEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJnbC50ZXhJbWFnZTJEIHdpdGgg
TlBPVCB0ZXh0dXJlIHdpdGggbGV2ZWwgPiAwIHNob3VsZCByZXR1cm4gSU5WQUxJRF9WQUxVRSIp
OworCitnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgMik7CitmaWxsQ3ViZVRleHR1cmUo
Z2wsIGN1YmVUZXh0dXJlc1syXSwgNCwgNCwgWzAsIDE5MiwgMTI4LCAyNTVdLCAxKTsKK2dsRXJy
b3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJnbC50ZXhJbWFnZTJEIHdpdGggUE9UIHRleHR1
cmUgd2l0aCBsZXZlbCA+IDAgc2hvdWxkIHN1Y2NlZWQiKTsKKworLy8gNy4gQ2hlY2sgdGhhdCBh
biBOUE9UIHRleHR1cmUgb24gbGV2ZWwgMCBzdWNjZWVkcyAoYWx0ZXJuYXRpbmcsIGVuZGluZyBp
biBOUE9UIHRleHR1cmUpCitnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgMCk7CitmaWxs
Q3ViZVRleHR1cmUoZ2wsIGN1YmVUZXh0dXJlc1swXSwgNSwgNSwgWzAsIDE5MiwgMTI4LCAyNTVd
KTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJnbC50ZXhJbWFnZTJEIHdpdGgg
TlBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQiKTsKKworZ2wuYWN0aXZlVGV4
dHVyZShnbC5URVhUVVJFMCArIDEpOworZmlsbEN1YmVUZXh0dXJlKGdsLCBjdWJlVGV4dHVyZXNb
MV0sIDQsIDQsIFswLCAxOTIsIDEyOCwgMjU1XSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5P
X0VSUk9SLCAiZ2wudGV4SW1hZ2UyRCB3aXRoIFBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxk
IHN1Y2NlZWQiKTsKKworZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIDIpOworZmlsbEN1
YmVUZXh0dXJlKGdsLCBjdWJlVGV4dHVyZXNbMl0sIDUsIDUsIFswLCAxOTIsIDEyOCwgMjU1XSk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wudGV4SW1hZ2UyRCB3aXRoIE5Q
T1QgdGV4dHVyZSBhdCBsZXZlbCAwIHNob3VsZCBzdWNjZWVkIik7CisKKy8vIDguIENoZWNrIHRo
YXQgYW4gTlBPVCB0ZXh0dXJlIG9uIGxldmVsIDAgc3VjY2VlZHMgKGFsdGVybmF0aW5nLCBlbmRp
bmcgaW4gUE9UIHRleHR1cmUpCitnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgMCk7Citm
aWxsQ3ViZVRleHR1cmUoZ2wsIGN1YmVUZXh0dXJlc1swXSwgNCwgNCwgWzAsIDE5MiwgMTI4LCAy
NTVdKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJnbC50ZXhJbWFnZTJEIHdp
dGggUE9UIHRleHR1cmUgYXQgbGV2ZWwgMCBzaG91bGQgc3VjY2VlZCIpOworCitnbC5hY3RpdmVU
ZXh0dXJlKGdsLlRFWFRVUkUwICsgMSk7CitmaWxsQ3ViZVRleHR1cmUoZ2wsIGN1YmVUZXh0dXJl
c1sxXSwgNSwgNSwgWzAsIDE5MiwgMTI4LCAyNTVdKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wu
Tk9fRVJST1IsICJnbC50ZXhJbWFnZTJEIHdpdGggTlBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hv
dWxkIHN1Y2NlZWQiKTsKKworZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIDIpOworZmls
bEN1YmVUZXh0dXJlKGdsLCBjdWJlVGV4dHVyZXNbMl0sIDQsIDQsIFswLCAxOTIsIDEyOCwgMjU1
XSk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiZ2wudGV4SW1hZ2UyRCB3aXRo
IFBPVCB0ZXh0dXJlIGF0IGxldmVsIDAgc2hvdWxkIHN1Y2NlZWQiKTsKKworZnVuY3Rpb24gZmls
bEN1YmVUZXh0dXJlKGdsLCB0ZXgsIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfbGV2ZWwpIHsK
KyAgb3B0X2xldmVsID0gb3B0X2xldmVsIHx8IDA7CisgIHZhciBjYW52YXMgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKyAgY2FudmFzLndpZHRoID0gd2lkdGg7CisgIGNhbnZh
cy5oZWlnaHQgPSBoZWlnaHQ7CisgIHZhciBjdHgyZCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcp
OworICBjdHgyZC5maWxsU3R5bGUgPSAicmdiYSgiICsgY29sb3JbMF0gKyAiLCIgKyBjb2xvclsx
XSArICIsIiArIGNvbG9yWzJdICsgIiwiICsgY29sb3JbM10gKyAiKSI7CisgIGN0eDJkLmZpbGxS
ZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFX0NV
QkVfTUFQLCB0ZXgpOworICB2YXIgdGFyZ2V0cyA9IFsKKyAgICBnbC5URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsCisgICAgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLAorICAgIGds
LlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwKKyAgICBnbC5URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ksCisgICAgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLAorICAgIGdsLlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWl07CisgIGZvciAodmFyIHR0ID0gMDsgdHQgPCB0YXJn
ZXRzLmxlbmd0aDsgKyt0dCkgeworICAgIGdsLnRleEltYWdlMkQoCisgICAgICAgIHRhcmdldHNb
dHRdLCBvcHRfbGV2ZWwsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGNhbnZh
cyk7CisgIH0KK307CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>