<?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>70656</bug_id>
          
          <creation_ts>2011-10-21 15:35:43 -0700</creation_ts>
          <short_desc>[chromium] Make accelerated drawing work with threaded compositing</short_desc>
          <delta_ts>2011-10-24 13:47:50 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488726</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-10-21 15:35:43 -0700</bug_when>
    <thetext>Accelerated drawing is incompatible with threaded compositing due to accessing the compositor context in the wrong thread. The compositor thread can only be used in LayerTextureUpdater::updateTextureRect().

LayerTextureUpdaterSkPicture, the subclass of LayerTextureUpdater used in the accelerated drawing path caches the compositor thread and uses it in the destructor to delete a bunch of GPU resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489357</commentid>
    <comment_count>1</comment_count>
      <attachid>112195</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-10-24 09:14:41 -0700</bug_when>
    <thetext>Created attachment 112195
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489411</commentid>
    <comment_count>2</comment_count>
      <attachid>112195</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-24 10:23:10 -0700</bug_when>
    <thetext>Comment on attachment 112195
proposed patch

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

R=me

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:57
&gt; +    SkCanvas* Initialize(GraphicsContext3D*, TextureAllocator*, ManagedTexture*);

lowercase &apos;initialize&apos; please

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:79
&gt; +SkCanvas* FrameBuffer::Initialize(GraphicsContext3D* context, TextureAllocator* allocator, ManagedTexture* texture)

the function name should be lowercase

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:203
&gt; +    FrameBuffer buffer;
&gt; +    SkCanvas* canvas = buffer.Initialize(context, allocator, texture);

This means we&apos;ll create a new FBO every time we upload a tile, right? That sounds like a good plan to start but we&apos;ll probably want to cache this somehow in the future, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489427</commentid>
    <comment_count>3</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 10:37:19 -0700</bug_when>
    <thetext>Maybe this makes a good case for making an FBO allocator inside one of the texture managers? E.g &quot;give me an FBO of such and such size.&quot; As part of such a patch, we could make CCRenderSurfaces use them too, which might clean up some of the mess there...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489435</commentid>
    <comment_count>4</comment_count>
      <attachid>112211</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-10-24 10:43:05 -0700</bug_when>
    <thetext>Created attachment 112211
proposed patch

Initialize() -&gt; initialize()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489440</commentid>
    <comment_count>5</comment_count>
      <attachid>112195</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-10-24 10:48:51 -0700</bug_when>
    <thetext>Comment on attachment 112195
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:57
&gt;&gt; +    SkCanvas* Initialize(GraphicsContext3D*, TextureAllocator*, ManagedTexture*);
&gt; 
&gt; lowercase &apos;initialize&apos; please

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:79
&gt;&gt; +SkCanvas* FrameBuffer::Initialize(GraphicsContext3D* context, TextureAllocator* allocator, ManagedTexture* texture)
&gt; 
&gt; the function name should be lowercase

done

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:203
&gt;&gt; +    SkCanvas* canvas = buffer.Initialize(context, allocator, texture);
&gt; 
&gt; This means we&apos;ll create a new FBO every time we upload a tile, right? That sounds like a good plan to start but we&apos;ll probably want to cache this somehow in the future, correct?

I think FBO should rather be managed by skia. It manages/reuses the stencil buffer already. We should just be able to specify a texture and skia should create the rest.

Anyhow I doubt caching the FBO will help performance. We are not allocating the color and stencil buffer for each tile upload, just an FBO, which should not be expensive. I will revisit this if it shows up in profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489449</commentid>
    <comment_count>6</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-24 11:01:24 -0700</bug_when>
    <thetext>At least on older GPUs, recreating FBOs makes drivers cry. They try to hand out frame buffers from an area called &quot;tiled memory&quot; but that is a fixed resource. The more you thrash FBOs the more you create allocation pressure on the underlying tiled allocator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489459</commentid>
    <comment_count>7</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-10-24 11:12:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; At least on older GPUs, recreating FBOs makes drivers cry. They try to hand out frame buffers from an area called &quot;tiled memory&quot; but that is a fixed resource. The more you thrash FBOs the more you create allocation pressure on the underlying tiled allocator.

I am surprised to hear this. AFAIK an FBO is just a logical container of buffers. So it should not need any buffer memory.

Anyways I will talk to bsalomon@ to check if it makes sense for skia to manage FBO IDs. Otherwise we should think about an FBO allocator as you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489470</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-24 11:29:30 -0700</bug_when>
    <thetext>I think it&apos;s fine to start out correct but possibly slow for this code. We can tune later and without this patch it&apos;s just impossible to maintain this path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489492</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-10-24 11:50:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; At least on older GPUs, recreating FBOs makes drivers cry. They try to hand out frame buffers from an area called &quot;tiled memory&quot; but that is a fixed resource. The more you thrash FBOs the more you create allocation pressure on the underlying tiled allocator.
&gt; 
&gt; I am surprised to hear this. AFAIK an FBO is just a logical container of buffers. So it should not need any buffer memory.
&gt; 
&gt; Anyways I will talk to bsalomon@ to check if it makes sense for skia to manage FBO IDs. Otherwise we should think about an FBO allocator as you suggest.

I think it makes sense to give skia a texture id and internally it can decide how to wrap it in a fbo. Skia may want to attach a stencil (or not) and should hide all that from the outside world. I agree with James, though, that this work can be deferred until after the patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489592</commentid>
    <comment_count>10</comment_count>
      <attachid>112211</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 13:47:44 -0700</bug_when>
    <thetext>Comment on attachment 112211
proposed patch

Clearing flags on attachment: 112211

Committed r98277: &lt;http://trac.webkit.org/changeset/98277&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489593</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 13:47:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112195</attachid>
            <date>2011-10-24 09:14:41 -0700</date>
            <delta_ts>2011-10-24 10:48:51 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>70656.patch</filename>
            <type>text/plain</type>
            <size>14797</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTAtMjQgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNYWtl
IGFjY2VsZXJhdGVkIGRyYXdpbmcgd29yayB3aXRoIHRocmVhZGVkIGNvbXBvc2l0aW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDY1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0
IHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgbm90IHVzZWQgb3V0c2lkZSBMYXllclRleHR1cmVV
cGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCgpLgorICAgICAgICBDcmVhdGVkIGEgRnJhbWVCdWZm
ZXIgY2xhc3MgdGhhdCB3cmFwcyBza2lhIGdwdSBjYW52YXMgYW5kIG1hbmFnZXMgR0wgcmVzb3Vy
Y2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjpJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6
CisKIDIwMTEtMTAtMjQgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBBZGRpbmcgYSBuZXcgc3R5bGUgcnVs
ZSBicmVha3MgdGhpbmdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE1
ICsxMjAsMTIgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KAogCiB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0jaWYgVVNFKFNLSUEpICYmIFVTRShBQ0NFTEVSQVRFRF9E
UkFXSU5HKQotICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lhQ29udGV4dCgpIHdpbGwgY3Jhc2gg
aWYgY2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCi0gICAgLy8gbW9kZS4gVGhpcyB0aHVzIGRlcGVu
ZHMgb24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1cm5pbmcgb2ZmCi0gICAgLy8gYWNj
ZWxlcmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9tIGNyYXNoaW5nLgorI2lmIFVTRShT
S0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewogICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3Jl
YXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0jZW5kaWYgLy8gVVNFKFNLSUEpICYmIFVTRShBQ0NFTEVSQVRFRF9EUkFX
SU5HKQorI2VuZGlmIC8vIFVTRShTS0lBKQogCiAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1
Yik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNw
cAkocmV2aXNpb24gOTc3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNiArNDYsNjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFNLSUEpCitu
YW1lc3BhY2UgeworCitjbGFzcyBGcmFtZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgRnJhbWVCdWZm
ZXIoKTsKKyAgICB+RnJhbWVCdWZmZXIoKTsKKworICAgIFNrQ2FudmFzKiBJbml0aWFsaXplKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7CisK
K3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZmJvOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Cit9OworCitG
cmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIoKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2Zi
bygwKQoreworfQorCitGcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKK3sKKyAgICBtX2NhbnZh
cy5jbGVhcigpOworCisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKG1fZmJvKTsKK30KKworU2tDYW52YXMqIEZyYW1lQnVmZmVyOjpJbml0aWFsaXpl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3Ip
OworCisgICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAgIEdyQ29udGV4dCogZ3JD
b250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUg
PSB0ZXh0dXJlLT5zaXplKCk7CisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7
CisgICAgdGFyZ2V0RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0g
a1RleHR1cmVSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOworICAgIHRhcmdldERl
c2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdC
aXQ7CisgICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7CisgICAgdGFy
Z2V0RGVzYy5mSGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKKyAgICB0YXJnZXREZXNjLmZD
b25maWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgdGFyZ2V0RGVzYy5mU3RlbmNp
bEJpdHMgPSA4OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRl
eHR1cmVJZCgpOworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87
CisgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVy
ZSo+KGdyQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7CisgICAg
U2tBdXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwg
dGFyZ2V0LmdldCgpKSk7CisgICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2
aWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisKIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcikKICAgICA6IG1fcGFpbnRlcihwYWludGVyKQogewpAQCAtMTAxLDcgKzE2MSw3
IEBAIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGUKICAgICBtX3RleFN1
YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CiB9CiAKLSNpZiBVU0UoU0tJ
QSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RSQVdJTkcpCisjaWYgVVNFKFNLSUEpCiBQYXNzUmVmUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWlu
dGVyKSk7CkBAIC0xMDksMTYgKzE2OSwxMSBAQCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmU+CiAKIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRl
cikKICAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKLSAgICAsIG1fY29u
dGV4dCgwKQotICAgICwgbV9jcmVhdGVGcmFtZUJ1ZmZlcihmYWxzZSkKLSAgICAsIG1fZmJvKDAp
Ci0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewogfQogCiBMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlOjp+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpCiB7Ci0gICAgZGVs
ZXRlRnJhbWVCdWZmZXIoKTsKIH0KIAogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpAQCAtMTI5LDE0ICsxODQsNiBAQCBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQKIAogdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQ
aWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQogewotICAgIC8vIE5lZWQgdG8g
cmVjcmVhdGUgRkJPIGlmIHRpbGUtc2l6ZSBjaGFuZ2VkLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBj
YW5ub3QgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBk
b2VzIG5vdCBydW4gaW4gY29tcG9zaXRvciB0aHJlYWQKLSAgICAvLyBhbmQgaGVuY2UgZG9lcyBu
b3QgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRvciBjb250ZXh0LgotICAgIGlmIChtX2J1ZmZlclNp
emUgIT0gdGlsZVNpemUpIHsKLSAgICAgICAgbV9jcmVhdGVGcmFtZUJ1ZmZlciA9IHRydWU7Ci0g
ICAgICAgIG1fYnVmZmVyU2l6ZSA9IHRpbGVTaXplOwotICAgIH0KLQogICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwgY29u
dGVudFJlY3QuaGVpZ2h0KCkpOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250
ZXh0KGNhbnZhcyk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKQEAgLTE0NCwxMTYgKzE5MSwyOCBAQCB2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmU6OnByZXBhCiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwogfQogCi12
b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb21wb3NpdG9yQ29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBBU1NFUlQo
IW1fY29udGV4dCB8fCBtX2NvbnRleHQgPT0gY29tcG9zaXRvckNvbnRleHQpOwotICAgIG1fY29u
dGV4dCA9IGNvbXBvc2l0b3JDb250ZXh0OwotCi0gICAgaWYgKG1fY3JlYXRlRnJhbWVCdWZmZXIp
IHsKLSAgICAgICAgZGVsZXRlRnJhbWVCdWZmZXIoKTsKLSAgICAgICAgY3JlYXRlRnJhbWVCdWZm
ZXIoKTsKLSAgICAgICAgbV9jcmVhdGVGcmFtZUJ1ZmZlciA9IGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIW1fZmJvKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBCaW5kIHRleHR1cmUuCi0gICAg
Y29udGV4dCgpLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dCgpLCBh
bGxvY2F0b3IpOwotICAgIEFTU0VSVChjb250ZXh0KCktPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQ09NUExFVEUpOwotCiAgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgotICAgIGNvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBHckNvbnRleHQqIHNraWFDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAvLyBOb3RpZnkgU0tJQSB0byBz
eW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KLSAgICBza2lhQ29udGV4dC0+cmVzZXRDb250ZXh0
KCk7Ci0gICAgbV9jYW52YXMtPnNhdmUoKTsKLSAgICBtX2NhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0
KGRlc3RSZWN0KSk7Ci0gICAgLy8gVHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3Qg
dG8gdGhhdCBvZiBkZXN0UmVjdC4KLSAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5l
ZCByZWxhdGl2ZSB0byBzb3VyY2VSZWN0LgotICAgIG1fY2FudmFzLT50cmFuc2xhdGUoY29udGVu
dFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVj
dC55KCkpOwotICAgIG1fY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOwotICAgIG1fY2Fu
dmFzLT5yZXN0b3JlKCk7Ci0gICAgLy8gRmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRo
ZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJlLgotICAgIHNraWFDb250ZXh0
LT5mbHVzaCgpOworICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKIAot
ICAgIC8vIFVuYmluZCB0ZXh0dXJlLgotICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKLSAg
ICBjb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwotfQorICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8gZHJhdyBv
bi4KKyAgICBGcmFtZUJ1ZmZlciBidWZmZXI7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGJ1ZmZl
ci5Jbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7CiAKLXZvaWQgTGF5ZXJU
ZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZGVsZXRlRnJhbWVCdWZmZXIoKQotewotICAgIG1fY2Fu
dmFzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAg
Y29udGV4dCgpLT5kZWxldGVSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7Ci0gICAgfQotICAgIGlmIChtX2Zibykgewot
ICAgICAgICBjb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKLSAgICAgICAgbV9m
Ym8gPSAwOwotICAgIH0KLX0KLQotYm9vbCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpj
cmVhdGVGcmFtZUJ1ZmZlcigpCi17Ci0gICAgQVNTRVJUKCFtX2Zibyk7Ci0gICAgQVNTRVJUKCFt
X2J1ZmZlclNpemUuaXNFbXB0eSgpKTsKLQotICAgIC8vIFNLSUEgb25seSBuZWVkcyBjb2xvciBh
bmQgc3RlbmNpbCBidWZmZXJzLCBub3QgZGVwdGggYnVmZmVyLgotICAgIC8vIEJ1dCBpdCBpcyB2
ZXJ5IHVuY29tbW9uIGZvciBjYXJkcyB0byBzdXBwb3J0IGNvbG9yICsgc3RlbmNpbCBGQk8gY29u
ZmlnLgotICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBjb25maWcgaXMgY29sb3IgKyBwYWNrZWQtZGVw
dGgtc3RlbmNpbC4KLSAgICAvLyBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBwb3Nz
aWJsZSBGQk8gY29uZmlncywgd2Ugb25seSB0cnkgdGhlCi0gICAgLy8gbW9zdCBjb21tb24gb25l
IGhlcmUuCi0gICAgLy8gRklYTUU6IERlbGVnYXRlIHRoZSB0YXNrIG9mIGNyZWF0aW5nIGZyYW1l
LWJ1ZmZlciB0byBTS0lBLgotICAgIC8vIEl0IGhhcyBhbGwgbmVjZXNzYXJ5IGNvZGUgdG8gaXRl
cmF0ZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBjb25maWdzCi0gICAgLy8gYW5kIGNob29zZSB0aGUg
b25lIG1vc3Qgc3VpdGFibGUgZm9yIGl0cyBwdXJwb3Nlcy4KLSAgICBFeHRlbnNpb25zM0QqIGV4
dGVuc2lvbnMgPSBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoIWV4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBiaW5kIGEgZnJhbWUtYnVmZmVy
LW9iamVjdC4KLSAgICBtX2ZibyA9IGNvbnRleHQoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAg
ICBpZiAoIW1fZmJvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29udGV4dCgpLT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSAg
ICAvLyBXZSBqdXN0IG5lZWQgdG8gY3JlYXRlIGEgc3RlbmNpbCBidWZmZXIgZm9yIEZCTy4KLSAg
ICAvLyBUaGUgY29sb3IgYnVmZmVyICh0ZXh0dXJlKSB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRpbGVz
LgotICAgIC8vIFNLSUEgZG9lcyBub3QgbmVlZCBkZXB0aCBidWZmZXIuCi0gICAgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSBjb250ZXh0KCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIGlmICgh
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgZGVsZXRlRnJhbWVCdWZmZXIoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjb250ZXh0KCktPmJpbmRSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgIGNvbnRleHQoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIG1fYnVmZmVyU2l6
ZS53aWR0aCgpLCBtX2J1ZmZlclNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0KLSAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52
YXMuCi0gICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7
Ci0gICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7Ci0gICAgdGFyZ2V0RGVzYy5y
ZXNldCgpOwotICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1JlbmRlclRhcmdldF9HclBs
YXRmb3JtU3VyZmFjZVR5cGU7Ci0gICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBr
Tm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKLSAgICB0YXJnZXREZXNjLmZXaWR0
aCA9IG1fYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIHRhcmdldERlc2MuZkhlaWdodCA9IG1fYnVm
ZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICB0YXJnZXREZXNjLmZDb25maWcgPSBrUkdCQV84ODg4X0dy
UGl4ZWxDb25maWc7Ci0gICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJpdHMgPSA4OwotICAgIHRhcmdl
dERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87Ci0gICAgU2tBdXRvVFVucmVmPEdy
UmVuZGVyVGFyZ2V0PiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JSZW5kZXJUYXJnZXQqPihza2lhQ29u
dGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7Ci0gICAgU2tBdXRvVFVu
cmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKHNraWFDb250ZXh0LCB0YXJnZXQu
Z2V0KCkpKTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0
KCkpKTsKKyAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOworICAgIC8vIFRy
YW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3QuCisg
ICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNlUmVj
dC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3Qu
eCgpICsgZGVzdFJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCku
eSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOworICAgIGNhbnZhcy0+ZHJhd1Bp
Y3R1cmUobV9waWN0dXJlKTsKIAotICAgIGNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgLy8g
Rmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJz
IG9uIHRoZSB0ZXh0dXJlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOwogfQot
I2VuZGlmIC8vIFVTRShTS0lBKSAmJiBVU0UoQUNDRUxFUkFURURfRFJBV0lORykKKyNlbmRpZiAv
LyBVU0UoU0tJQSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmgJKHJldmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Ug
bV90ZXhTdWJJbWFnZTsKIH07CiAKLSNpZiBVU0UoU0tJQSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RS
QVdJTkcpCisjaWYgVVNFKFNLSUEpCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IGNyZWF0ZShQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CkBAIC05MiwyMCArOTIsMTAgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZGVsZXRlRnJhbWVCdWZm
ZXIoKTsKLSAgICBib29sIGNyZWF0ZUZyYW1lQnVmZmVyKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBtX2NvbnRleHQ7Ci0KLSAgICBib29sIG1fY3JlYXRlRnJhbWVCdWZmZXI7IC8vIE5lZWQg
dG8gY3JlYXRlIEZCTyBpZiB0cnVlLgorICAKICAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBS
ZWNvcmRpbmcgY2FudmFzLgotICAgIEludFNpemUgbV9idWZmZXJTaXplOyAvLyBGcmFtZSBidWZm
ZXIgc2l6ZS4KLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOyAvLyBGcmFtZSBidWZmZXIgaWQu
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKLSAgICBPd25QdHI8
U2tDYW52YXM+IG1fY2FudmFzOyAvLyBHUFUgYWNjZWxlcmF0ZWQgY2FudmFzLgogfTsKLSNlbmRp
ZiAvLyBVU0UoU0tJQSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RSQVdJTkcpCisjZW5kaWYgLy8gVVNF
KFNLSUEpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJl
dmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBA
QCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgIGlmIChtX3NldHRp
bmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpIHsKLSAgICAgICAgLy8gQWNjZWxlcmF0ZWQgUGFp
bnRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KLSAg
ICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKICAgICAgICAgLy8g
VGhlIEhVRCBkb2VzIG5vdCB3b3JrIGluIHRocmVhZGVkIG1vZGUuIFR1cm4gaXQgb2ZmLgogICAg
ICAgICBtX3NldHRpbmdzLnNob3dGUFNDb3VudGVyID0gZmFsc2U7CiAgICAgICAgIG1fc2V0dGlu
Z3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZmFsc2U7Cg==
</data>
<flag name="review"
          id="110215"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="110234"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112211</attachid>
            <date>2011-10-24 10:43:05 -0700</date>
            <delta_ts>2011-10-24 13:47:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>70656.patch</filename>
            <type>text/plain</type>
            <size>14797</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTAtMjQgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNYWtl
IGFjY2VsZXJhdGVkIGRyYXdpbmcgd29yayB3aXRoIHRocmVhZGVkIGNvbXBvc2l0aW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDY1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0
IHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgbm90IHVzZWQgb3V0c2lkZSBMYXllclRleHR1cmVV
cGRhdGVyOjp1cGRhdGVUZXh0dXJlUmVjdCgpLgorICAgICAgICBDcmVhdGVkIGEgRnJhbWVCdWZm
ZXIgY2xhc3MgdGhhdCB3cmFwcyBza2lhIGdwdSBjYW52YXMgYW5kIG1hbmFnZXMgR0wgcmVzb3Vy
Y2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
QnVmZmVyOjpGcmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVCdWZmZXI6OkZyYW1lQnVmZmVyOjp+RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVCdWZmZXI6OkZyYW1lQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6
CisKIDIwMTEtMTAtMjQgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBBZGRpbmcgYSBuZXcgc3R5bGUgcnVs
ZSBicmVha3MgdGhpbmdzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDE1
ICsxMjAsMTIgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KAogCiB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0jaWYgVVNFKFNLSUEpICYmIFVTRShBQ0NFTEVSQVRFRF9E
UkFXSU5HKQotICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lhQ29udGV4dCgpIHdpbGwgY3Jhc2gg
aWYgY2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCi0gICAgLy8gbW9kZS4gVGhpcyB0aHVzIGRlcGVu
ZHMgb24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1cm5pbmcgb2ZmCi0gICAgLy8gYWNj
ZWxlcmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9tIGNyYXNoaW5nLgorI2lmIFVTRShT
S0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewogICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3Jl
YXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0jZW5kaWYgLy8gVVNFKFNLSUEpICYmIFVTRShBQ0NFTEVSQVRFRF9EUkFX
SU5HKQorI2VuZGlmIC8vIFVTRShTS0lBKQogCiAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9kZWxlZ2F0ZSksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1
Yik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNw
cAkocmV2aXNpb24gOTc3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNiArNDYsNjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFNLSUEpCitu
YW1lc3BhY2UgeworCitjbGFzcyBGcmFtZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgRnJhbWVCdWZm
ZXIoKTsKKyAgICB+RnJhbWVCdWZmZXIoKTsKKworICAgIFNrQ2FudmFzKiBpbml0aWFsaXplKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKik7CisK
K3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZmJvOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7Cit9OworCitG
cmFtZUJ1ZmZlcjo6RnJhbWVCdWZmZXIoKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2Zi
bygwKQoreworfQorCitGcmFtZUJ1ZmZlcjo6fkZyYW1lQnVmZmVyKCkKK3sKKyAgICBtX2NhbnZh
cy5jbGVhcigpOworCisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKG1fZmJvKTsKK30KKworU2tDYW52YXMqIEZyYW1lQnVmZmVyOjppbml0aWFsaXpl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9mYm8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LCBhbGxvY2F0b3Ip
OworCisgICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAgIEdyQ29udGV4dCogZ3JD
b250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUg
PSB0ZXh0dXJlLT5zaXplKCk7CisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7
CisgICAgdGFyZ2V0RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0g
a1RleHR1cmVSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOworICAgIHRhcmdldERl
c2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdC
aXQ7CisgICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBjYW52YXNTaXplLndpZHRoKCk7CisgICAgdGFy
Z2V0RGVzYy5mSGVpZ2h0ID0gY2FudmFzU2l6ZS5oZWlnaHQoKTsKKyAgICB0YXJnZXREZXNjLmZD
b25maWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgdGFyZ2V0RGVzYy5mU3RlbmNp
bEJpdHMgPSA4OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtVGV4dHVyZSA9IHRleHR1cmUtPnRl
eHR1cmVJZCgpOworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87
CisgICAgU2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyVGV4dHVy
ZSo+KGdyQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7CisgICAg
U2tBdXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwg
dGFyZ2V0LmdldCgpKSk7CisgICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZGV2
aWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCisjZW5kaWYgLy8gVVNFKFNLSUEpCisKIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6
OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gcGFpbnRlcikKICAgICA6IG1fcGFpbnRlcihwYWludGVyKQogewpAQCAtMTAxLDcgKzE2MSw3
IEBAIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGUKICAgICBtX3RleFN1
YkltYWdlLnVwbG9hZChsb2NrZXIucGl4ZWxzKCksIGNvbnRlbnRSZWN0KCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CiB9CiAKLSNpZiBVU0UoU0tJ
QSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RSQVdJTkcpCisjaWYgVVNFKFNLSUEpCiBQYXNzUmVmUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OmNyZWF0ZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQogewog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWlu
dGVyKSk7CkBAIC0xMDksMTYgKzE2OSwxMSBAQCBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmU+CiAKIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRl
cikKICAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKLSAgICAsIG1fY29u
dGV4dCgwKQotICAgICwgbV9jcmVhdGVGcmFtZUJ1ZmZlcihmYWxzZSkKLSAgICAsIG1fZmJvKDAp
Ci0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewogfQogCiBMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlOjp+TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpCiB7Ci0gICAgZGVs
ZXRlRnJhbWVCdWZmZXIoKTsKIH0KIAogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpAQCAtMTI5LDE0ICsxODQsNiBAQCBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQKIAogdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQ
aWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKQogewotICAgIC8vIE5lZWQgdG8g
cmVjcmVhdGUgRkJPIGlmIHRpbGUtc2l6ZSBjaGFuZ2VkLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBj
YW5ub3QgY3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBk
b2VzIG5vdCBydW4gaW4gY29tcG9zaXRvciB0aHJlYWQKLSAgICAvLyBhbmQgaGVuY2UgZG9lcyBu
b3QgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRvciBjb250ZXh0LgotICAgIGlmIChtX2J1ZmZlclNp
emUgIT0gdGlsZVNpemUpIHsKLSAgICAgICAgbV9jcmVhdGVGcmFtZUJ1ZmZlciA9IHRydWU7Ci0g
ICAgICAgIG1fYnVmZmVyU2l6ZSA9IHRpbGVTaXplOwotICAgIH0KLQogICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwgY29u
dGVudFJlY3QuaGVpZ2h0KCkpOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250
ZXh0KGNhbnZhcyk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKQEAgLTE0NCwxMTYgKzE5MSwyOCBAQCB2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmU6OnByZXBhCiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwogfQogCi12
b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb21wb3NpdG9yQ29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBBU1NFUlQo
IW1fY29udGV4dCB8fCBtX2NvbnRleHQgPT0gY29tcG9zaXRvckNvbnRleHQpOwotICAgIG1fY29u
dGV4dCA9IGNvbXBvc2l0b3JDb250ZXh0OwotCi0gICAgaWYgKG1fY3JlYXRlRnJhbWVCdWZmZXIp
IHsKLSAgICAgICAgZGVsZXRlRnJhbWVCdWZmZXIoKTsKLSAgICAgICAgY3JlYXRlRnJhbWVCdWZm
ZXIoKTsKLSAgICAgICAgbV9jcmVhdGVGcmFtZUJ1ZmZlciA9IGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIW1fZmJvKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBCaW5kIHRleHR1cmUuCi0gICAg
Y29udGV4dCgpLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgdGV4dHVyZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dCgpLCBh
bGxvY2F0b3IpOwotICAgIEFTU0VSVChjb250ZXh0KCktPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQ09NUExFVEUpOwotCiAgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29y
cmVjdCBHTCBjb250ZXh0LgotICAgIGNvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBHckNvbnRleHQqIHNraWFDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAvLyBOb3RpZnkgU0tJQSB0byBz
eW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KLSAgICBza2lhQ29udGV4dC0+cmVzZXRDb250ZXh0
KCk7Ci0gICAgbV9jYW52YXMtPnNhdmUoKTsKLSAgICBtX2NhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0
KGRlc3RSZWN0KSk7Ci0gICAgLy8gVHJhbnNsYXRlIHRoZSBvcmlnaW4gb2YgY29udGVudFJlY3Qg
dG8gdGhhdCBvZiBkZXN0UmVjdC4KLSAgICAvLyBOb3RlIHRoYXQgZGVzdFJlY3QgaXMgZGVmaW5l
ZCByZWxhdGl2ZSB0byBzb3VyY2VSZWN0LgotICAgIG1fY2FudmFzLT50cmFuc2xhdGUoY29udGVu
dFJlY3QoKS54KCkgLSBzb3VyY2VSZWN0LngoKSArIGRlc3RSZWN0LngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVj
dC55KCkpOwotICAgIG1fY2FudmFzLT5kcmF3UGljdHVyZShtX3BpY3R1cmUpOwotICAgIG1fY2Fu
dmFzLT5yZXN0b3JlKCk7Ci0gICAgLy8gRmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRo
ZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJlLgotICAgIHNraWFDb250ZXh0
LT5mbHVzaCgpOworICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5yZXNldENvbnRleHQoKTsKIAot
ICAgIC8vIFVuYmluZCB0ZXh0dXJlLgotICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKLSAg
ICBjb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApOwotfQorICAgIC8vIENyZWF0ZSBhbiBhY2NlbGVyYXRlZCBjYW52YXMgdG8gZHJhdyBv
bi4KKyAgICBGcmFtZUJ1ZmZlciBidWZmZXI7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGJ1ZmZl
ci5pbml0aWFsaXplKGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSk7CiAKLXZvaWQgTGF5ZXJU
ZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZGVsZXRlRnJhbWVCdWZmZXIoKQotewotICAgIG1fY2Fu
dmFzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAg
Y29udGV4dCgpLT5kZWxldGVSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7Ci0gICAgfQotICAgIGlmIChtX2Zibykgewot
ICAgICAgICBjb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKLSAgICAgICAgbV9m
Ym8gPSAwOwotICAgIH0KLX0KLQotYm9vbCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpj
cmVhdGVGcmFtZUJ1ZmZlcigpCi17Ci0gICAgQVNTRVJUKCFtX2Zibyk7Ci0gICAgQVNTRVJUKCFt
X2J1ZmZlclNpemUuaXNFbXB0eSgpKTsKLQotICAgIC8vIFNLSUEgb25seSBuZWVkcyBjb2xvciBh
bmQgc3RlbmNpbCBidWZmZXJzLCBub3QgZGVwdGggYnVmZmVyLgotICAgIC8vIEJ1dCBpdCBpcyB2
ZXJ5IHVuY29tbW9uIGZvciBjYXJkcyB0byBzdXBwb3J0IGNvbG9yICsgc3RlbmNpbCBGQk8gY29u
ZmlnLgotICAgIC8vIFRoZSBtb3N0IGNvbW1vbiBjb25maWcgaXMgY29sb3IgKyBwYWNrZWQtZGVw
dGgtc3RlbmNpbC4KLSAgICAvLyBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBwb3Nz
aWJsZSBGQk8gY29uZmlncywgd2Ugb25seSB0cnkgdGhlCi0gICAgLy8gbW9zdCBjb21tb24gb25l
IGhlcmUuCi0gICAgLy8gRklYTUU6IERlbGVnYXRlIHRoZSB0YXNrIG9mIGNyZWF0aW5nIGZyYW1l
LWJ1ZmZlciB0byBTS0lBLgotICAgIC8vIEl0IGhhcyBhbGwgbmVjZXNzYXJ5IGNvZGUgdG8gaXRl
cmF0ZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBjb25maWdzCi0gICAgLy8gYW5kIGNob29zZSB0aGUg
b25lIG1vc3Qgc3VpdGFibGUgZm9yIGl0cyBwdXJwb3Nlcy4KLSAgICBFeHRlbnNpb25zM0QqIGV4
dGVuc2lvbnMgPSBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoIWV4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBiaW5kIGEgZnJhbWUtYnVmZmVy
LW9iamVjdC4KLSAgICBtX2ZibyA9IGNvbnRleHQoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAg
ICBpZiAoIW1fZmJvKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29udGV4dCgpLT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0KLSAg
ICAvLyBXZSBqdXN0IG5lZWQgdG8gY3JlYXRlIGEgc3RlbmNpbCBidWZmZXIgZm9yIEZCTy4KLSAg
ICAvLyBUaGUgY29sb3IgYnVmZmVyICh0ZXh0dXJlKSB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRpbGVz
LgotICAgIC8vIFNLSUEgZG9lcyBub3QgbmVlZCBkZXB0aCBidWZmZXIuCi0gICAgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSBjb250ZXh0KCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIGlmICgh
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgZGVsZXRlRnJhbWVCdWZmZXIoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjb250ZXh0KCktPmJpbmRSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgIGNvbnRleHQoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIG1fYnVmZmVyU2l6
ZS53aWR0aCgpLCBtX2J1ZmZlclNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0KLSAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBjYW52
YXMuCi0gICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7
Ci0gICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7Ci0gICAgdGFyZ2V0RGVzYy5y
ZXNldCgpOwotICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1JlbmRlclRhcmdldF9HclBs
YXRmb3JtU3VyZmFjZVR5cGU7Ci0gICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0RmxhZ3MgPSBr
Tm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKLSAgICB0YXJnZXREZXNjLmZXaWR0
aCA9IG1fYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIHRhcmdldERlc2MuZkhlaWdodCA9IG1fYnVm
ZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICB0YXJnZXREZXNjLmZDb25maWcgPSBrUkdCQV84ODg4X0dy
UGl4ZWxDb25maWc7Ci0gICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJpdHMgPSA4OwotICAgIHRhcmdl
dERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87Ci0gICAgU2tBdXRvVFVucmVmPEdy
UmVuZGVyVGFyZ2V0PiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JSZW5kZXJUYXJnZXQqPihza2lhQ29u
dGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7Ci0gICAgU2tBdXRvVFVu
cmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3IFNrR3B1RGV2aWNlKHNraWFDb250ZXh0LCB0YXJnZXQu
Z2V0KCkpKTsKLSAgICBtX2NhbnZhcyA9IGFkb3B0UHRyKG5ldyBTa0NhbnZhcyhkZXZpY2UuZ2V0
KCkpKTsKKyAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChkZXN0UmVjdCkpOworICAgIC8vIFRy
YW5zbGF0ZSB0aGUgb3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2YgZGVzdFJlY3QuCisg
ICAgLy8gTm90ZSB0aGF0IGRlc3RSZWN0IGlzIGRlZmluZWQgcmVsYXRpdmUgdG8gc291cmNlUmVj
dC4KKyAgICBjYW52YXMtPnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3Qu
eCgpICsgZGVzdFJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCku
eSgpIC0gc291cmNlUmVjdC55KCkgKyBkZXN0UmVjdC55KCkpOworICAgIGNhbnZhcy0+ZHJhd1Bp
Y3R1cmUobV9waWN0dXJlKTsKIAotICAgIGNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgLy8g
Rmx1c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJz
IG9uIHRoZSB0ZXh0dXJlLgorICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgpOwogfQot
I2VuZGlmIC8vIFVTRShTS0lBKSAmJiBVU0UoQUNDRUxFUkFURURfRFJBV0lORykKKyNlbmRpZiAv
LyBVU0UoU0tJQSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmgJKHJldmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Ug
bV90ZXhTdWJJbWFnZTsKIH07CiAKLSNpZiBVU0UoU0tJQSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RS
QVdJTkcpCisjaWYgVVNFKFNLSUEpCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU+IGNyZWF0ZShQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CkBAIC05MiwyMCArOTIsMTAgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZGVsZXRlRnJhbWVCdWZm
ZXIoKTsKLSAgICBib29sIGNyZWF0ZUZyYW1lQnVmZmVyKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBtX2NvbnRleHQ7Ci0KLSAgICBib29sIG1fY3JlYXRlRnJhbWVCdWZmZXI7IC8vIE5lZWQg
dG8gY3JlYXRlIEZCTyBpZiB0cnVlLgorICAKICAgICBTa1BpY3R1cmUgbV9waWN0dXJlOyAvLyBS
ZWNvcmRpbmcgY2FudmFzLgotICAgIEludFNpemUgbV9idWZmZXJTaXplOyAvLyBGcmFtZSBidWZm
ZXIgc2l6ZS4KLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOyAvLyBGcmFtZSBidWZmZXIgaWQu
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKLSAgICBPd25QdHI8
U2tDYW52YXM+IG1fY2FudmFzOyAvLyBHUFUgYWNjZWxlcmF0ZWQgY2FudmFzLgogfTsKLSNlbmRp
ZiAvLyBVU0UoU0tJQSkgJiYgVVNFKEFDQ0VMRVJBVEVEX0RSQVdJTkcpCisjZW5kaWYgLy8gVVNF
KFNLSUEpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAJKHJl
dmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBA
QCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgIGlmIChtX3NldHRp
bmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpIHsKLSAgICAgICAgLy8gQWNjZWxlcmF0ZWQgUGFp
bnRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KLSAg
ICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKICAgICAgICAgLy8g
VGhlIEhVRCBkb2VzIG5vdCB3b3JrIGluIHRocmVhZGVkIG1vZGUuIFR1cm4gaXQgb2ZmLgogICAg
ICAgICBtX3NldHRpbmdzLnNob3dGUFNDb3VudGVyID0gZmFsc2U7CiAgICAgICAgIG1fc2V0dGlu
Z3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZmFsc2U7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>