<?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>223056</bug_id>
          
          <creation_ts>2021-03-10 21:40:10 -0800</creation_ts>
          <short_desc>Optimize canvas repaints</short_desc>
          <delta_ts>2021-03-15 20:08:15 -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>Canvas</component>
          <version>WebKit 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>
          <dependson>223203</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1738353</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-10 21:40:10 -0800</bug_when>
    <thetext>Optimize canvas repaints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738354</commentid>
    <comment_count>1</comment_count>
      <attachid>422900</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-10 21:47:17 -0800</bug_when>
    <thetext>Created attachment 422900
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738725</commentid>
    <comment_count>2</comment_count>
      <attachid>422999</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-11 17:19:19 -0800</bug_when>
    <thetext>Created attachment 422999
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739678</commentid>
    <comment_count>3</comment_count>
      <attachid>423244</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-15 14:50:43 -0700</bug_when>
    <thetext>Created attachment 423244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739679</commentid>
    <comment_count>4</comment_count>
      <attachid>423245</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-15 14:51:36 -0700</bug_when>
    <thetext>Created attachment 423245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739728</commentid>
    <comment_count>5</comment_count>
      <attachid>423245</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-03-15 16:45:25 -0700</bug_when>
    <thetext>Comment on attachment 423245
Patch

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:1322
&gt;          boundingRect.inflate(state().lineWidth / 2);

Should we call inflateStrokeRect() since it handles the miterLimit and lineCap of the stroke?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:2094
&gt; +    if (m_dirtyRect == oldDirtyRect)
&gt; +        canvasBase().didDraw(WTF::nullopt);
&gt; +    else
&gt; +        canvasBase().didDraw(m_dirtyRect);

Maybe

if (m_dirtyRect.contains(oldDirtyRect))
    canvasBase().didDraw(WTF::nullopt);
else {
    m_dirtyRect.unite(dirtyRect);
    canvasBase().didDraw(m_dirtyRect);
}

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:2104
&gt; +    return m_dirtyRect == backingStoreBounds();

Is it okay to check for FloatRect equality like this? Should we use some sort of areEssentiallyEqual()? Or maybe comparing enclosingIntRect() instead?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:2549
&gt; +    if (isEntireBackingStoreDirty())
&gt; +        didDraw(WTF::nullopt);
&gt; +    else if (repaintEntireCanvas)
&gt; +        didDrawEntireCanvas();
&gt; +    else
&gt;          didDraw(textRect);

This code was repeated multiple times in this patch. Can&apos;t this logic be moved to didDraw()? For example, pass &apos;repaintEntireCanvas&apos; to didDraw() and make didDraw() check for isEntireBackingStoreDirty().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739764</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-15 17:36:47 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:2549
&gt; &gt; +    if (isEntireBackingStoreDirty())
&gt; &gt; +        didDraw(WTF::nullopt);
&gt; &gt; +    else if (repaintEntireCanvas)
&gt; &gt; +        didDrawEntireCanvas();
&gt; &gt; +    else
&gt; &gt;          didDraw(textRect);
&gt; 
&gt; This code was repeated multiple times in this patch. Can&apos;t this logic be
&gt; moved to didDraw()? For example, pass &apos;repaintEntireCanvas&apos; to didDraw() and
&gt; make didDraw() check for isEntireBackingStoreDirty().

I need to avoid computing the rect in this case:
   didDraw(path.fastBoundingRect());

which hampers refactoring this (hence my comment in the change log about WTF::function&lt;&gt; approaches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739812</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-03-15 20:07:53 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/274461/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739813</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-15 20:08:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/75460317&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422900</attachid>
            <date>2021-03-10 21:47:17 -0800</date>
            <delta_ts>2021-03-11 17:19:19 -0800</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-223056-20210310214716.patch</filename>
            <type>text/plain</type>
            <size>19645</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBiOWQxZTM0MGYwYjcw
MmIwZGZjNzhmMDE3MTcxOTYxOTg3OTgyMy4uZTg0ZWI3YTkxMzVlZjliOWQxNzUwY2I4NGZiOWQz
YmRmNWUyOTEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTAzLTEwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIGNh
bnZhcyByZXBhaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudGx5IG1hbnkgZHJhdyBvcGVyYXRpb25zIGluIGEgY2FudmFzIHRyaWdnZXIg
YSByZXBhaW50IHZpYSB0aGUgZGlkRHJhdygpCisgICAgICAgIGNvZGUgcGF0aCB3aGljaCBnb2Vz
IHRvIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KCkuIEhUTUxDYW52YXNFbGVtZW50IGRpZCB0
cmFjaworICAgICAgICBhIGRpcnR5IHJlY3QgYW5kIHNob3J0LWNpcmN1aXRlZCByZXBhaW50cyB3
aGljaCB3ZXJlIGFscmVhZHkgZGlydHksIGJ1dCB3ZSBwYWlkCisgICAgICAgIHRoZSBjb3N0IG9m
IGNvbXB1dGluZyB0aGUgZGlydHkgcmVjdCAoZS5nLiBnZXR0aW5nIHRoZSBib3VuZHMgb2YgYSBw
YXRoKS4KKyAgICAgICAgCisgICAgICAgIE9wdGltaXplIHRoaXMgYnkgbW92aW5nIHRoZSBkaXJ0
eSByZWN0IHRyYWNraW5nIGludG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS4KKyAgICAg
ICAgSWYgdGhlIGVudGlyZSBjYW52YXMgaXMgYWxyZWFkeSBkaXJ0eSwgd2UgY2FuIGF2b2lkIGFs
bCB0aGUgd29yayAodGhpcyBpcyBjb21tb24sCisgICAgICAgIHNpbmNlIHBhZ2VzIG9mdGVuIGNs
ZWFyIHRoZSBlbnRpcmUgY2FudmFzIGF0IHRoZSBzdGFydCBvZiBldmVyeSBmcmFtZSkuIE90aGVy
d2lzZSwKKyAgICAgICAgYWNjdW11bGF0ZSBpbnRvIG1fZGlydHlSZWN0LiBtX2RpcnR5UmVjdCBp
cyBjbGVhcmVkIHdoZW4gd2UgcGFpbnQgdGhlIGNhbnZhcy4KKworICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXJBY2N1bXVsYXRlZERpcnR5UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxs
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhd0VudGlyZUNhbnZhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWREcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyQWNjdW11bGF0ZWRE
aXJ0eVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6YmFja2luZ1N0b3JlQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRV
bmNoZWNrZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaDoKKwogMjAyMS0wMy0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIE11bHRpLWNvbHVtbiBzdGF0ZSBwcm9wYWdhdGlvbiBzaG91bGQgZm9sbG93IGNv
bnRhaW5pbmcgYmxvY2sgcnVsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKaW5kZXggYmUwOWIzYjg0Y2Y4N2I3YWY3NDliNGQ4YjZiM2E3Y2Y4YmE5OGYwNi4uODUx
YmU5YzgxZDMwMzBhZTU2NWY1NDhlNDg4NTQ3ZWI1MDEzZGYyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTU3MiwxMCArNTcyLDggQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6ZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIEZs
b2F0UmVjdCByID0gbWFwUmVjdChkaXJ0eVJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOwogICAgICAgICByLmludGVyc2VjdChk
ZXN0UmVjdCk7CiAKLSAgICAgICAgaWYgKCFyLmlzRW1wdHkoKSAmJiAhbV9kaXJ0eVJlY3QuY29u
dGFpbnMocikpIHsKLSAgICAgICAgICAgIG1fZGlydHlSZWN0LnVuaXRlKHIpOwotICAgICAgICAg
ICAgcmVuZGVyZXItPnJlcGFpbnRSZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVj
dCkpOwotICAgICAgICB9CisgICAgICAgIGlmICghci5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShlbmNsb3NpbmdJbnRSZWN0KHIpKTsKICAgICB9CiAg
ICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZChkaXJ0eVJlY3QpOwogfQpAQCAtNjQ0LDgg
KzY0Miw4IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIo
KSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHIpCiB7Ci0gICAgLy8gQ2xlYXIgdGhlIGRpcnR5
IHJlY3QKLSAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIGlmIChtX2NvbnRleHQp
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJBY2N1bXVsYXRlZERpcnR5UmVjdCgpOwogCiAgICAg
aWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgewogICAgICAgICBib29sIHNob3VsZFBh
aW50ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBh
ZGQ3MzIwYWU0ZDczMWVhNzMzNDg1NDI1NWQ0NjE2NjM1ODlhNmNkLi43MzI1YTNlYTc2NzkxNTQ1
N2U2MDFlNmYyZDk5OGJmNDQ3MzUwOWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCkBAIC0xODIsMjUgKzE4MiwyMCBAQCBwcml2YXRlOgogICAgIE5vZGU6Okluc2Vy
dGVkSW50b0FuY2VzdG9yUmVzdWx0IGluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpIGZpbmFsOwog
Ci0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwotCi0gICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsg
ZmFsc2UgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9j
b250ZXh0OworICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUg
aW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiAKICAgICBP
cHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0KKyAgICBib29sIG1faWdub3JlUmVzZXQg
eyBmYWxzZSB9OwogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVk
IHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAg
IG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAgICAgbXV0
YWJsZSBib29sIG1fZGlkQ2xlYXJJbWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgIGJvb2wgbV9oYXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciB7IGZhbHNlIH07
CiAjZW5kaWYKLQogICAgIGJvb2wgbV9pc1NuYXBzaG90dGluZyB7IGZhbHNlIH07Ci0KLSAgICBt
dXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVt
cG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0
byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUpLgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oCmluZGV4IDAwNTZhZWI5Y2U3NzRiYjUyNzg3ZmQ3Njg4ZTRlYWU4MDlhYzU2
NGUuLmVkNWRiZTM3ZjdlYzdiYjk4YzdmZjU0YTM0MGQ2NTE1NGFlOTI2MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKQEAg
LTcxLDEwICs3MSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzT2Zmc2NyZWVuMmQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BhaW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjY3VtdWxhdGVk
RGlydHlSZWN0KCkgeyB9CisKICAgICAvLyBDYWxsZWQgYmVmb3JlIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzIGlmIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzIGlzCiAgICAgLy8g
dXNlZCBmb3IgY29tcG9zaXRpbmcgcHVycG9zZXMuCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
b3JEaXNwbGF5V2l0aFBhaW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSB7IH0KICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBib29sIGhhc0FjdGl2ZUluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjdGl2ZUluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMzdjMTdmMWI2NGUxMWM0
NTFhNjNiOTQ3MzFlOWYzZjYyYzBlMmM3NC4uMTY1NjY0NjNiOGI0YzRmYTI2MDY3YTJlMjQyMjI4
OTA4M2I0ZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTEwNDUsMjYgKzEwNDUsMzMg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsSW50ZXJuYWwoY29uc3Qg
UGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1bGUKICAgICBpZiAoZ3JhZGllbnQgJiYgZ3JhZGllbnQt
PmlzWmVyb1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFwYXRoLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvIHNhdmVkRmlsbFJ1bGUgPSBjLT5maWxsUnVsZSgpOwotICAgICAg
ICBjLT5zZXRGaWxsUnVsZSh0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7Ci0KLSAgICAgICAgaWYg
KGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7Ci0g
ICAgICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAgICBjLT5maWxsUGF0
aChwYXRoKTsKLSAgICAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAgICBk
aWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxD
b21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKLSAgICAgICAgICAgIGNsZWFy
Q2FudmFzKCk7Ci0gICAgICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvIHNhdmVkRmlsbFJ1bGUg
PSBjLT5maWxsUnVsZSgpOworICAgIGMtPnNldEZpbGxSdWxlKHRvV2luZFJ1bGUod2luZGluZ1J1
bGUpKTsKKworICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOworICAgIGlmIChp
c0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgeworICAg
ICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CisgICAgICAgIGMtPmZpbGxQYXRoKHBhdGgpOwor
ICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFz
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBv
c2l0ZU9wZXJhdG9yOjpDb3B5KSB7CisgICAgICAgIGNsZWFyQ2FudmFzKCk7CisgICAgICAgIGMt
PmZpbGxQYXRoKHBhdGgpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgYy0+ZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgaWYgKCFpc0Vu
dGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpIHsKKyAgICAgICAgaWYgKHJlcGFpbnRFbnRpcmVDYW52
YXMpCiAgICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKKyAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZGlkRHJhdyhwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGMtPnNldEZpbGxSdWxlKHNhdmVkRmlsbFJ1bGUpOwogICAgIH0KKyAgICAKKyAg
ICBjLT5zZXRGaWxsUnVsZShzYXZlZEZpbGxSdWxlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpzdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTA4
MCwyMCArMTA4NywyOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9r
ZUludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKGdyYWRpZW50ICYmIGdyYWRpZW50
LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9i
YWxDb21wb3NpdGUpKSB7Ci0gICAgICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7Ci0gICAg
ICAgICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICAgICAgZW5kQ29tcG9zaXRlTGF5
ZXIoKTsKLSAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkg
ewotICAgICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAgICAgICAgICAgIGMtPnN0cm9rZVBhdGgo
cGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBi
b29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxzZTsKKyAgICBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSkpIHsKKyAgICAgICAgYmVnaW5Db21w
b3NpdGVMYXllcigpOworICAgICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICBlbmRD
b21wb3NpdGVMYXllcigpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9y
OjpDb3B5KSB7CisgICAgICAgIGNsZWFyQ2FudmFzKCk7CisgICAgICAgIGMtPnN0cm9rZVBhdGgo
cGF0aCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQor
ICAgICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOworCisgICAgaWYgKCFpc0VudGlyZUJhY2tpbmdT
dG9yZURpcnR5KCkpIHsKKyAgICAgICAgaWYgKHJlcGFpbnRFbnRpcmVDYW52YXMpCiAgICAgICAg
ICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IHBhdGguZmFzdEJvdW5kaW5n
UmVjdCgpOwogICAgICAgICAgICAgaW5mbGF0ZVN0cm9rZVJlY3QoZGlydHlSZWN0KTsKLSAgICAg
ICAgICAgIGMtPnN0cm9rZVBhdGgocGF0aCk7CiAgICAgICAgICAgICBkaWREcmF3KGRpcnR5UmVj
dCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQwLDIzICsxMjU1LDI5IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZmlsbFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
d2lkdGgsIGZsb2F0CiAgICAgaWYgKGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1plcm9TaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpOworICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsK
IAorICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29u
dGFpbnNDYW52YXMocmVjdCkpIHsKICAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAg
IGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRy
dWU7CiAgICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xv
YmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAg
IGMtPmZpbGxSZWN0KHJlY3QpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0
cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRl
T3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgYy0+Zmls
bFJlY3QocmVjdCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2Ug
eworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAg
ICAgYy0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIGRpZERyYXcocmVjdCk7CisKKyAgICBpZiAo
IWlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSkgeworICAgICAgICBpZiAocmVwYWludEVudGly
ZUNhbnZhcykKKyAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGlkRHJhdyhyZWN0KTsKICAgICB9CiB9CiAKQEAgLTEyNzksMjAgKzEz
MDAsMjcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJva2VSZWN0KGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG8KICAgICAgICAgcmV0dXJuOwogCiAgICAg
RmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXBhaW50RW50
aXJlQ2FudmFzID0gZmFsc2U7CiAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3Rh
dGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29tcG9zaXRlTGF5ZXIoKTsK
ICAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBzdGF0ZSgpLmxpbmVXaWR0aCk7CiAgICAgICAg
IGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAg
ICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgp
Lmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewogICAgICAgICBj
bGVhckNhbnZhcygpOwogICAgICAgICBjLT5zdHJva2VSZWN0KHJlY3QsIHN0YXRlKCkubGluZVdp
ZHRoKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OwotICAgICAgICBib3VuZGluZ1JlY3Qu
aW5mbGF0ZShzdGF0ZSgpLmxpbmVXaWR0aCAvIDIpOworICAgICAgICByZXBhaW50RW50aXJlQ2Fu
dmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBzdGF0
ZSgpLmxpbmVXaWR0aCk7Ci0gICAgICAgIGRpZERyYXcoYm91bmRpbmdSZWN0KTsKKworICAgIGlm
ICghaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKSB7CisgICAgICAgIGlmIChyZXBhaW50RW50
aXJlQ2FudmFzKQorICAgICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OworICAgICAg
ICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUoc3RhdGUoKS5saW5lV2lkdGggLyAyKTsKKyAgICAg
ICAgICAgIGRpZERyYXcoYm91bmRpbmdSZWN0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAt
MTU1MSwyMSArMTU3OSwyNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBDYQogCiAgICAgSW1hZ2VQ
YWludGluZ09wdGlvbnMgb3B0aW9ucyA9IHsgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24gfTsK
IAorICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29u
dGFpbnNDYW52YXMobm9ybWFsaXplZERzdFJlY3QpKSB7CiAgICAgICAgIGMtPmRyYXdJbWFnZSgq
aW1hZ2UsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0g
ICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZh
cyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKG9wKSkg
ewogICAgICAgICBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZSgqaW1hZ2UsIG5vcm1hbGl6
ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3ApOwotICAgICAgICBkaWREcmF3RW50aXJl
Q2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxz
ZSBpZiAob3AgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52
YXMoKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKCppbWFnZSwgbm9ybWFsaXplZERzdFJlY3QsIG5v
cm1hbGl6ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygp
OwotICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAg
IH0gZWxzZQogICAgICAgICBjLT5kcmF3SW1hZ2UoKmltYWdlLCBub3JtYWxpemVkRHN0UmVjdCwg
bm9ybWFsaXplZFNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICBkaWREcmF3KG5vcm1hbGl6ZWRE
c3RSZWN0KTsKKworICAgIGlmICghaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKSB7CisgICAg
ICAgIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQorICAgICAgICAgICAgZGlkRHJhd0VudGlyZUNh
bnZhcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaWREcmF3KG5vcm1hbGl6ZWREc3RS
ZWN0KTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoaW1hZ2UtPmlzU1ZHSW1hZ2UoKSkKICAgICAg
ICAgaW1hZ2UtPnNldEltYWdlT2JzZXJ2ZXIob2JzZXJ2ZXIpOwogCkBAIC0xNjAwLDEyICsxNjM0
LDEzIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRy
YXdJbWFnZShDYW52YXNCYXNlJiBzb3VyY2VDYW52CiAKICAgICBzb3VyY2VDYW52YXMubWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKIAorICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZh
cyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVjdCkpIHsKICAgICAg
ICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3QsIHsgc3RhdGUo
KS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7Ci0gICAgICAgIGRpZERy
YXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CiAg
ICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29t
cG9zaXRlKSkgewogICAgICAgICBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZSgqYnVmZmVy
LCBkc3RSZWN0LCBzcmNSZWN0LCBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSk7Ci0gICAgICAgIGRp
ZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7
CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVy
YXRvcjo6Q29weSkgewogICAgICAgICBpZiAoJnNvdXJjZUNhbnZhcyA9PSAmY2FudmFzQmFzZSgp
KSB7CiAgICAgICAgICAgICBpZiAoYXV0byBjb3B5ID0gYnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVy
KHNyY1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgKmMpKSB7CkBAIC0xNjE2LDEw
ICsxNjUxLDE1IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmRyYXdJbWFnZShDYW52YXNCYXNlJiBzb3VyY2VDYW52CiAgICAgICAgICAgICBjbGVhckNh
bnZhcygpOwogICAgICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3Qs
IHNyY1JlY3QsIHsgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQg
fSk7CiAgICAgICAgIH0KLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxz
ZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQogICAg
ICAgICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0
ZSgpLmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKLSAgICAgICAgZGlk
RHJhdyhkc3RSZWN0KTsKKworICAgIGlmICghaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKSB7
CisgICAgICAgIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQorICAgICAgICAgICAgZGlkRHJhd0Vu
dGlyZUNhbnZhcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaWREcmF3KGRzdFJlY3Qp
OwogICAgIH0KIAogICAgIHJldHVybiB7IH07CkBAIC0xNzAwLDE5ICsxNzQwLDI1IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFnZShJbWFn
ZUJpdG1hcCYgaW1hZ2VCaXRtCiAKICAgICBjaGVja09yaWdpbigmaW1hZ2VCaXRtYXApOwogCisg
ICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CiAgICAgaWYgKHJlY3RDb250YWlu
c0NhbnZhcyhkc3RSZWN0KSkgewogICAgICAgICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZlciwg
ZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9i
YWxCbGVuZCB9KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICByZXBh
aW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGlzRnVsbENhbnZhc0NvbXBv
c2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGZ1bGxDYW52YXND
b21wb3NpdGVkRHJhd0ltYWdlKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3QsIHN0YXRlKCkuZ2xv
YmFsQ29tcG9zaXRlKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICBy
ZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KSB7CiAgICAgICAgIGNsZWFyQ2Fu
dmFzKCk7CiAgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNS
ZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwot
ICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmVw
YWludEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlCiAgICAgICAgIGMtPmRyYXdJbWFn
ZUJ1ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9z
aXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwotICAgICAgICBkaWREcmF3KGRzdFJlY3QpOwor
CisgICAgaWYgKCFpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpIHsKKyAgICAgICAgaWYgKHJl
cGFpbnRFbnRpcmVDYW52YXMpCisgICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZERyYXcoZHN0UmVjdCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHsgfTsKQEAgLTIwMDAsMzIgKzIwNDYsNTYgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENh
bnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJu
KFQKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWREcmF3RW50aXJlQ2Fu
dmFzKCkKIHsKLSAgICBkaWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZh
c0Jhc2UoKS5zaXplKCkpLCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXApOworICAgIGRpZERyYXco
YmFja2luZ1N0b3JlQm91bmRzKCksIERpZERyYXdPcHRpb246OkFwcGx5Q2xpcCk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhdyhjb25zdCBGbG9hdFJlY3Qm
IHIsIE9wdGlvblNldDxEaWREcmF3T3B0aW9uPiBvcHRpb25zKQogewogICAgIGlmICghZHJhd2lu
Z0NvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IHI7CisgICAgYXV0
byBkaXJ0eVJlY3QgPSByOwogCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGlkRHJhd09wdGlv
bjo6QXBwbHlUcmFuc2Zvcm0pKQogICAgICAgICBkaXJ0eVJlY3QgPSBzdGF0ZSgpLnRyYW5zZm9y
bS5tYXBSZWN0KGRpcnR5UmVjdCk7CiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhEaWREcmF3
T3B0aW9uOjpBcHBseVNoYWRvdykgJiYgc3RhdGUoKS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKSkg
ewogICAgICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0cmFuc2Zvcm1hdGlv
bgotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOworICAgICAgICBhdXRv
IHNoYWRvd1JlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgp
LnNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzdGF0ZSgpLnNoYWRv
d0JsdXIpOwogICAgICAgICBkaXJ0eVJlY3QudW5pdGUoc2hhZG93UmVjdCk7CiAgICAgfQogCisg
ICAgaWYgKG1fZGlydHlSZWN0LmNvbnRhaW5zKGRpcnR5UmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7CisKICAgICAvLyBGSVhNRTogVGhp
cyBkb2VzIG5vdCBhcHBseSB0aGUgY2xpcCBiZWNhdXNlIHdlIGhhdmUgbm8gd2F5IG9mIHJlYWRp
bmcgdGhlIGNsaXAgb3V0IG9mIHRoZSBHcmFwaGljc0NvbnRleHQuCiAKLSAgICBjYW52YXNCYXNl
KCkuZGlkRHJhdyhkaXJ0eVJlY3QpOworICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KG1fZGlydHlS
ZWN0KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhckFjY3Vt
dWxhdGVkRGlydHlSZWN0KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IHsgfTsKK30KKworRmxvYXRS
ZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmJhY2tpbmdTdG9yZUJvdW5kcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgRmxvYXRTaXplIHsgY2FudmFzQmFz
ZSgpLnNpemUoKSB9IH07Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlydHlS
ZWN0ID09IGJhY2tpbmdTdG9yZUJvdW5kcygpOwogfQogCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzdGF0ZVN0YWNrKCkKQEAgLTI0NTIsMTggKzI1MjIsMjQgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCBmbG8KICAgICAgICAgbG9jYXRpb24gPSBGbG9hdFBvaW50KCk7CiAgICAgfQogCisgICAg
Ym9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CiAgICAgaWYgKGlzRnVsbENhbnZhc0Nv
bXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29t
cG9zaXRlTGF5ZXIoKTsKICAgICAgICAgZm9udFByb3h5LmRyYXdCaWRpVGV4dCgqYywgdGV4dFJ1
biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5KTsKICAg
ICAgICAgZW5kQ29tcG9zaXRlTGF5ZXIoKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygp
OworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHN0
YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KSB7CiAgICAg
ICAgIGNsZWFyQ2FudmFzKCk7CiAgICAgICAgIGZvbnRQcm94eS5kcmF3QmlkaVRleHQoKmMsIHRl
eHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7
Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgeworICAgICAgICBy
ZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgZm9udFByb3h5
LmRyYXdCaWRpVGV4dCgqYywgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxs
YmFja0lmRm9udE5vdFJlYWR5KTsKLSAgICAgICAgZGlkRHJhdyh0ZXh0UmVjdCk7CisKKyAgICBp
ZiAoIWlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSkgeworICAgICAgICBpZiAocmVwYWludEVu
dGlyZUNhbnZhcykKKyAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZGlkRHJhdyh0ZXh0UmVjdCk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmgKaW5kZXggYTM4MmIwZDZlYWVjNzkwMjQzOWViMTkyN2EyODg0ZDE1NTYwZTI5Zi4u
NmMwODI1MTJmODdhYjYyZDUwZmIyOTQwZjA5NDQ2ODgxOGZhMWUyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuaApAQCAtMzIzLDYgKzMyMywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbmVlZHNQcmVwYXJh
dGlvbkZvckRpc3BsYXkoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
KCkgZmluYWw7CiAKKyAgICB2b2lkIGNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKSBmaW5hbDsK
KyAgICBib29sIGlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgYmFja2luZ1N0b3JlQm91bmRzKCkgY29uc3Q7CisKICAgICB2b2lkIHVud2luZFN0YXRlU3Rh
Y2soKTsKICAgICB2b2lkIHJlYWxpemVTYXZlc0xvb3AoKTsKIApAQCAtMzg2LDYgKzM5MCw3IEBA
IHByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE1heFNhdmVDb3VudCA9
IDEwMjQgKiAxNjsKICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKKyAgICBGbG9h
dFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgdW5zaWduZWQgbV91bnJlYWxpemVkU2F2ZUNvdW50IHsg
MCB9OwogICAgIGJvb2wgbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZTsKICAgICBib29s
IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07Cg==
</data>
<flag name="commit-queue"
          id="442125"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422999</attachid>
            <date>2021-03-11 17:19:19 -0800</date>
            <delta_ts>2021-03-15 14:50:40 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>canvas-repaint.patch</filename>
            <type>text/plain</type>
            <size>30890</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMGI5ZDFlMzQwZjAuLmU4NGViN2E5MTM1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDIxLTAzLTEwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgorCisgICAgICAgIE9wdGltaXplIGNhbnZhcyByZXBhaW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMDU2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IG1hbnkgZHJhdyBv
cGVyYXRpb25zIGluIGEgY2FudmFzIHRyaWdnZXIgYSByZXBhaW50IHZpYSB0aGUgZGlkRHJhdygp
CisgICAgICAgIGNvZGUgcGF0aCB3aGljaCBnb2VzIHRvIEhUTUxDYW52YXNFbGVtZW50OjpkaWRE
cmF3KCkuIEhUTUxDYW52YXNFbGVtZW50IGRpZCB0cmFjaworICAgICAgICBhIGRpcnR5IHJlY3Qg
YW5kIHNob3J0LWNpcmN1aXRlZCByZXBhaW50cyB3aGljaCB3ZXJlIGFscmVhZHkgZGlydHksIGJ1
dCB3ZSBwYWlkCisgICAgICAgIHRoZSBjb3N0IG9mIGNvbXB1dGluZyB0aGUgZGlydHkgcmVjdCAo
ZS5nLiBnZXR0aW5nIHRoZSBib3VuZHMgb2YgYSBwYXRoKS4KKyAgICAgICAgCisgICAgICAgIE9w
dGltaXplIHRoaXMgYnkgbW92aW5nIHRoZSBkaXJ0eSByZWN0IHRyYWNraW5nIGludG8gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS4KKyAgICAgICAgSWYgdGhlIGVudGlyZSBjYW52YXMgaXMg
YWxyZWFkeSBkaXJ0eSwgd2UgY2FuIGF2b2lkIGFsbCB0aGUgd29yayAodGhpcyBpcyBjb21tb24s
CisgICAgICAgIHNpbmNlIHBhZ2VzIG9mdGVuIGNsZWFyIHRoZSBlbnRpcmUgY2FudmFzIGF0IHRo
ZSBzdGFydCBvZiBldmVyeSBmcmFtZSkuIE90aGVyd2lzZSwKKyAgICAgICAgYWNjdW11bGF0ZSBp
bnRvIG1fZGlydHlSZWN0LiBtX2RpcnR5UmVjdCBpcyBjbGVhcmVkIHdoZW4gd2UgcGFpbnQgdGhl
IGNhbnZhcy4KKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJBY2N1bXVs
YXRlZERpcnR5UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZmlsbFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlk
RHJhd0VudGlyZUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YmFja2luZ1N0b3JlQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzRW50
aXJlQmFja2luZ1N0b3JlRGlydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKwogMjAyMS0wMy0xMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIE11bHRpLWNvbHVtbiBzdGF0
ZSBwcm9wYWdhdGlvbiBzaG91bGQgZm9sbG93IGNvbnRhaW5pbmcgYmxvY2sgcnVsZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1l
ZGlhU3RyZWFtVHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9D
YW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggMDExYzUyNjAzOTgzLi44NWJj
OTJiOWM5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Q2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC0x
NDksNyArMTQ5LDcgQEAgdm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjazo6U291cmNl
OjpjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmIGNhbnZhcykKICAgICBzZXRTaXplKEludFNpemUo
bV9jYW52YXMtPndpZHRoKCksIG1fY2FudmFzLT5oZWlnaHQoKSkpOwogfQogCi12b2lkIENhbnZh
c0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFz
ZSYgY2FudmFzLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJl
YW1UcmFjazo6U291cmNlOjpjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhcywgT3B0aW9u
YWw8RmxvYXRSZWN0PikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNhbnZhcywgbV9jYW52YXMgPT0g
JmNhbnZhcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaAppbmRleCBkNjk4
M2ZiMjQyYzguLjAzMDJhMzZkN2Y4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJh
Y2suaApAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgICAgICBTb3VyY2UoSFRNTENhbnZh
c0VsZW1lbnQmLCBPcHRpb25hbDxkb3VibGU+JiYpOwogCiAgICAgICAgIC8vIENhbnZhc09ic2Vy
dmVyIEFQSQotICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYs
IE9wdGlvbmFsPEZsb2F0UmVjdD4pIGZpbmFsOwogICAgICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQo
Q2FudmFzQmFzZSYpIGZpbmFsOwogICAgICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNC
YXNlJikgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIv
V2ViWFJXZWJHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSV2Vi
R0xMYXllci5oCmluZGV4IDJlZWYyMWU3YjAyMS4uMjk0NzIxZWE1NzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSV2ViR0xMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJXZWJHTExheWVyLmgKQEAgLTg3LDcgKzg3LDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW50U2l6ZSBjb21wdXRlTmF0aXZlV2ViR0xGcmFtZWJ1
ZmZlclJlc29sdXRpb24oKTsKICAgICBzdGF0aWMgSW50U2l6ZSBjb21wdXRlUmVjb21tZW5kZWRX
ZWJHTEZyYW1lYnVmZmVyUmVzb2x1dGlvbigpOwogCi0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENh
bnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07CisgICAgdm9pZCBjYW52YXND
aGFuZ2VkKENhbnZhc0Jhc2UmLCBPcHRpb25hbDxGbG9hdFJlY3Q+KSBmaW5hbCB7IH07CiAgICAg
dm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKSBmaW5hbDsKICAgICB2b2lkIGNhbnZhc0Rl
c3Ryb3llZChDYW52YXNCYXNlJikgZmluYWwgeyB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmNwcAppbmRleCBmN2ZiMzcyZWY2YjAuLjY0ZjY4MTFkOTI4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCkBAIC00MSw5ICs0MSwxMiBAQCBTdHJpbmcgQ1NTQ2Fu
dmFzVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5nKCIt
d2Via2l0LWNhbnZhcygiLCBtX25hbWUsICcpJyk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6
OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5n
ZWRSZWN0KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxl
bWVudCYsIE9wdGlvbmFsPEZsb2F0UmVjdD4gY2hhbmdlZFJlY3QpCiB7Ci0gICAgSW50UmVjdCBp
bWFnZUNoYW5nZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKKyAgICBpZiAo
IWNoYW5nZWRSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGltYWdlQ2hhbmdl
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2hhbmdlZFJlY3QudmFsdWUoKSk7CiAgICAgZm9yIChh
dXRvIGl0ID0gY2xpZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3Jh
cHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDYW52YXNWYWx1ZS5oCmluZGV4IDgxMTU0NmIzYTJlNy4uZGNhZTg1NWNiMmI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNvbnN0IENTU0NhbnZhc1ZhbHVlJiBvd25lclZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lclZhbHVlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQo
Q2FudmFzQmFzZSYgY2FudmFzQmFzZSwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCkgZmlu
YWwKKyAgICAgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIE9w
dGlvbmFsPEZsb2F0UmVjdD4gY2hhbmdlZFJlY3QpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwogICAgICAgICAg
ICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KGNhbnZhc0Jhc2UpLCBjaGFuZ2VkUmVjdCk7CkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCYs
IGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpOworICAgIHZvaWQgY2FudmFzQ2hhbmdlZChI
VE1MQ2FudmFzRWxlbWVudCYsIE9wdGlvbmFsPEZsb2F0UmVjdD4gY2hhbmdlZFJlY3QpOwogICAg
IHZvaWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpOwogICAgIHZvaWQgY2FudmFz
RGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IGI5OTUyMzM0MDM2OC4uOTU1NWZmMmZjYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTg3ODYsNyArODc4Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNsZWFyQ2FudmFzUHJlcGFyYXRp
b24oSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKICAgICBtX2NhbnZhc2VzTmVlZGluZ0Rpc3Bs
YXlQcmVwYXJhdGlvbi5yZW1vdmUoY2FudmFzKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6Y2FudmFz
Q2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBE
b2N1bWVudDo6Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBPcHRpb25hbDxG
bG9hdFJlY3Q+KQogewogICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkp
IHsKICAgICAgICAgYXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCZj
YW52YXNCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggOWQ0MDE1YTI0ZDIzLi4yNjAwMGRj
YjJhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xNjEwLDcgKzE2MTAsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHByZXBhcmVDYW52YXNlc0ZvckRpc3BsYXlJZk5lZWRlZCgpOwogICAgIHZv
aWQgY2xlYXJDYW52YXNQcmVwYXJhdGlvbihIVE1MQ2FudmFzRWxlbWVudCopOwotICAgIHZvaWQg
Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBPcHRpb25hbDxGbG9hdFJlY3Q+KSBmaW5h
bDsKICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIGZpbmFsIHsgfTsKICAgICB2
b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJikgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Nh
bnZhc0Jhc2UuY3BwCmluZGV4IGVkMDU2MjQ2ZDI1Mi4uY2NiNjFjYTNkOWU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIENhbnZhc0Jhc2U6
OnJlbW92ZU9ic2VydmVyKENhbnZhc09ic2VydmVyJiBvYnNlcnZlcikKICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqdGhpcyk7
CiB9CiAKLXZvaWQgQ2FudmFzQmFzZTo6bm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIENhbnZhc0Jhc2U6Om5vdGlmeU9ic2VydmVyc0NhbnZh
c0NoYW5nZWQoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0KQogewogICAgIGZvciAoYXV0byYgb2Jz
ZXJ2ZXIgOiBtX29ic2VydmVycykKICAgICAgICAgb2JzZXJ2ZXItPmNhbnZhc0NoYW5nZWQoKnRo
aXMsIHJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAppbmRleCA4M2ZjNDY1NjJhYzIuLjU0
NGU1ZDA4YmY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQ2FudmFzT2JzZXJ2ZXJQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52
YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBPcHRpb25hbDxGbG9hdFJlY3Q+IGNoYW5n
ZWRSZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSA9IDA7
CiB9OwpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZE9ic2VydmVyKENh
bnZhc09ic2VydmVyJik7CiAgICAgdm9pZCByZW1vdmVPYnNlcnZlcihDYW52YXNPYnNlcnZlciYp
OwotICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hhbmdlZChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIG5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQoT3B0aW9uYWw8RmxvYXRS
ZWN0Pik7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnNDYW52YXNSZXNpemVkKCk7CiAgICAgdm9p
ZCBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQoKTsgLy8gTXVzdCBiZSBjYWxsZWQgaW4g
ZGVzdHJ1Y3Rpb24gYmVmb3JlIGNsZWFyaW5nIG1fY29udGV4dC4KIApAQCAtOTgsNyArOTgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGV4aXN0aW5nRHJhd2luZ0NvbnRl
eHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdyhPcHRpb25hbDxGbG9hdFJlY3Q+KSA9IDA7
CiAKICAgICB2aXJ0dWFsIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q3VzdG9tUGFpbnRDYW52YXMuaAppbmRleCA3OWVmNzM1ZjU3MmMuLmUwNzRmMjZkNWE2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaApAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZpbmFs
OwogICAgIEdyYXBoaWNzQ29udGV4dCogZXhpc3RpbmdEcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZp
bmFsOwogCi0gICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZGlkRHJhdyhPcHRpb25hbDxGbG9hdFJlY3Q+KSBmaW5hbCB7IH0KIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgZmluYWwgeyBBU1NFUlQobV9kZXN0aW5h
dGlvbkdyYXBoaWNzQ29udGV4dCAmJiBtX2NvcGllZEJ1ZmZlcik7IHJldHVybiBtX2NvcGllZEJ1
ZmZlci0+YmFzZVRyYW5zZm9ybSgpOyB9CiAgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Qg
ZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGJl
MDliM2I4NGNmOC4uNGVhZGNiOWQ5OThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcApAQCAtNTUzLDExICs1NTMsMTYgQEAgSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dEJpdG1hcFJlbmRlcmVyKGNvbnN0
IFMKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Kj4o
bV9jb250ZXh0LmdldCgpKTsKIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlkRHJhdyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdCkKIHsKICAgICBjbGVhckNvcGllZEltYWdlKCk7CisgICAg
CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQo
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEZsb2F0UmVjdCBk
aXJ0eVJlY3QgPSByZWN0OworICAgIGF1dG8gZGlydHlSZWN0ID0gcmVjdC52YWx1ZSgpOwogICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IHJlbmRlckJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBk
ZXN0UmVjdDsKICAgICAgICAgaWYgKGlzPFJlbmRlclJlcGxhY2VkPihyZW5kZXJlcikpCkBAIC01
NzIsMTAgKzU3Nyw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgICAgICBGbG9hdFJlY3QgciA9IG1hcFJlY3QoZGlydHlSZWN0LCBG
bG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RSZWN0
KTsKICAgICAgICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOwogCi0gICAgICAgIGlmICghci5pc0Vt
cHR5KCkgJiYgIW1fZGlydHlSZWN0LmNvbnRhaW5zKHIpKSB7Ci0gICAgICAgICAgICBtX2RpcnR5
UmVjdC51bml0ZShyKTsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50UmVjdGFuZ2xlKGVu
Y2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRSZWN0YW5nbGUoZW5jbG9z
aW5nSW50UmVjdChyKSk7CiAgICAgfQogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQo
ZGlydHlSZWN0KTsKIH0KQEAgLTY0NCw4ICs2NDcsOCBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByKQog
ewotICAgIC8vIENsZWFyIHRoZSBkaXJ0eSByZWN0Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJl
Y3QoKTsKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICBtX2NvbnRleHQtPmNsZWFyQWNjdW11
bGF0ZWREaXJ0eVJlY3QoKTsKIAogICAgIGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
IHsKICAgICAgICAgYm9vbCBzaG91bGRQYWludCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKaW5kZXggYWRkNzMyMGFlNGQ3Li44YmIxN2RmZGM3ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogICAgIC8vIFVzZWQgZm9yIHJlbmRlcmluZwotICAgIHZvaWQgZGlk
RHJhdyhjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRpZERyYXcoT3B0aW9uYWw8
RmxvYXRSZWN0PikgZmluYWw7CiAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmKTsKIApAQCAtMTgyLDI1ICsxODIsMjAgQEAgcHJpdmF0ZToKICAgICBO
b2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNl
cnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFu
Y2VzdG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVl
KSBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKLQotICAgIGJvb2wgbV9pZ25v
cmVSZXNldCB7IGZhbHNlIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+IG1fY29udGV4dDsKKyAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFn
ZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRv
IGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUp
LgogCiAgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJv
b2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwotCisgICAgYm9vbCBtX2ln
bm9yZVJlc2V0IHsgZmFsc2UgfTsKICAgICAvLyBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFu
cyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdl
dCBpdC4KICAgICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9
OwogICAgIG11dGFibGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogI2lm
IEVOQUJMRShXRUJHTCkKICAgICBib29sIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIg
eyBmYWxzZSB9OwogI2VuZGlmCi0KICAgICBib29sIG1faXNTbmFwc2hvdHRpbmcgeyBmYWxzZSB9
OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBU
aGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFn
ZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCAwMDU2YWViOWNlNzcuLmVkNWRiZTM3ZjdlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaApAQCAtNzEsMTAgKzcxLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNP
ZmZzY3JlZW4yZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGNsZWFy
QWNjdW11bGF0ZWREaXJ0eVJlY3QoKSB7IH0KKwogICAgIC8vIENhbGxlZCBiZWZvcmUgcGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMgaWYgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMg
aXMKICAgICAvLyB1c2VkIGZvciBjb21wb3NpdGluZyBwdXJwb3Nlcy4KICAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIHsgfQogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIGJvb2wgaGFzQWN0aXZl
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWN0aXZlSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAzN2Mx
N2YxYjY0ZTEuLmU3NzU1YjUzYzA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTEwNDUs
MjYgKzEwNDUsMzMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsSW50
ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1bGUKICAgICBpZiAoZ3JhZGllbnQg
JiYgZ3JhZGllbnQtPmlzWmVyb1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFw
YXRoLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIHNhdmVkRmlsbFJ1bGUgPSBjLT5maWxsUnVs
ZSgpOwotICAgICAgICBjLT5zZXRGaWxsUnVsZSh0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7Ci0K
LSAgICAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21w
b3NpdGUpKSB7Ci0gICAgICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAg
ICBjLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0g
ICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Rh
dGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKLSAgICAg
ICAgICAgIGNsZWFyQ2FudmFzKCk7Ci0gICAgICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKLSAg
ICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGMtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICAgICAgZGlkRHJhdyhwYXRoLmZhc3RC
b3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGMtPnNldEZpbGxS
dWxlKHNhdmVkRmlsbFJ1bGUpOwotICAgIH0KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gc2F2ZWRGaWxsUnVsZSA9IGMtPmZpbGxSdWxlKCk7Cisg
ICAgYy0+c2V0RmlsbFJ1bGUodG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOworCisgICAgYm9vbCBy
ZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CisgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0
ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CisgICAgICAgIGJlZ2luQ29tcG9zaXRl
TGF5ZXIoKTsKKyAgICAgICAgYy0+ZmlsbFBhdGgocGF0aCk7CisgICAgICAgIGVuZENvbXBvc2l0
ZUxheWVyKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxz
ZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkp
IHsKKyAgICAgICAgY2xlYXJDYW52YXMoKTsKKyAgICAgICAgYy0+ZmlsbFBhdGgocGF0aCk7Cisg
ICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBj
LT5maWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0
eSgpKQorICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWlu
dEVudGlyZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UK
KyAgICAgICAgZGlkRHJhdyhwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisKKyAgICBjLT5zZXRG
aWxsUnVsZShzYXZlZEZpbGxSdWxlKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTA4MCwyMiArMTA4
NywzMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9rZUludGVybmFs
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1plcm9T
aXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3Np
dGUpKSB7Ci0gICAgICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAgICBj
LT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICAgICAgZW5kQ29tcG9zaXRlTGF5ZXIoKTsKLSAg
ICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0
ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewotICAgICAg
ICAgICAgY2xlYXJDYW52YXMoKTsKLSAgICAgICAgICAgIGMtPnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0g
ICAgICAgICAgICBpbmZsYXRlU3Ryb2tlUmVjdChkaXJ0eVJlY3QpOwotICAgICAgICAgICAgYy0+
c3Ryb2tlUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGRpZERyYXcoZGlydHlSZWN0KTsKLSAgICAg
ICAgfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9v
bCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CisgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBv
c2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CisgICAgICAgIGJlZ2luQ29tcG9z
aXRlTGF5ZXIoKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICAgICAgZW5kQ29t
cG9zaXRlTGF5ZXIoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6
Q29weSkgeworICAgICAgICBjbGVhckNhbnZhcygpOworICAgICAgICBjLT5zdHJva2VQYXRoKHBh
dGgpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKKworICAgIGlmIChpc0VudGlyZUJhY2tpbmdTdG9y
ZURpcnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlIGlmIChy
ZXBhaW50RW50aXJlQ2FudmFzKQorICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gZGlydHlSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7
CisgICAgICAgIGluZmxhdGVTdHJva2VSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGRpZERyYXco
ZGlydHlSZWN0KTsKICAgICB9CiB9CiAKQEAgLTEyNDIsMjIgKzEyNTcsMjggQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQKIAogICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CiAgICAgaWYgKHJlY3RD
b250YWluc0NhbnZhcyhyZWN0KSkgewogICAgICAgICBjLT5maWxsUmVjdChyZWN0KTsKLSAgICAg
ICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0g
dHJ1ZTsKICAgICB9IGVsc2UgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5n
bG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29tcG9zaXRlTGF5ZXIoKTsKICAgICAg
ICAgYy0+ZmlsbFJlY3QocmVjdCk7CiAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAg
ICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9
IHRydWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3Np
dGVPcGVyYXRvcjo6Q29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAgICBjLT5m
aWxsUmVjdChyZWN0KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxz
ZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQogICAg
ICAgICBjLT5maWxsUmVjdChyZWN0KTsKKworICAgIGlmIChpc0VudGlyZUJhY2tpbmdTdG9yZURp
cnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlIGlmIChyZXBh
aW50RW50aXJlQ2FudmFzKQorICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgZWxz
ZQogICAgICAgICBkaWREcmF3KHJlY3QpOwotICAgIH0KIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQpCkBAIC0xMjc5LDE5ICsxMzAwLDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0
aCwgZmxvCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOworICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlm
IChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewog
ICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgIGMtPnN0cm9rZVJlY3QocmVj
dCwgc3RhdGUoKS5saW5lV2lkdGgpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAg
ICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMg
PSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9z
aXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgYy0+
c3Ryb2tlUmVjdChyZWN0LCBzdGF0ZSgpLmxpbmVXaWR0aCk7CisgICAgICAgIHJlcGFpbnRFbnRp
cmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBjLT5zdHJva2VSZWN0KHJlY3Qs
IHN0YXRlKCkubGluZVdpZHRoKTsKKworICAgIGlmIChpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5
KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlIGlmIChyZXBhaW50
RW50aXJlQ2FudmFzKQogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IHJlY3Q7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICAgICAgYm91bmRpbmdSZWN0Lmlu
ZmxhdGUoc3RhdGUoKS5saW5lV2lkdGggLyAyKTsKLSAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0
LCBzdGF0ZSgpLmxpbmVXaWR0aCk7CiAgICAgICAgIGRpZERyYXcoYm91bmRpbmdSZWN0KTsKICAg
ICB9CiB9CkBAIC0xNTUxLDIxICsxNTc5LDI3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFnZShEb2N1bWVudCYgZG9jdW1lbnQsIENhCiAK
ICAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zID0geyBvcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbiB9OwogCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CiAgICAg
aWYgKHJlY3RDb250YWluc0NhbnZhcyhub3JtYWxpemVkRHN0UmVjdCkpIHsKICAgICAgICAgYy0+
ZHJhd0ltYWdlKCppbWFnZSwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1hbGl6ZWRTcmNSZWN0LCBv
cHRpb25zKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICByZXBhaW50
RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0
ZU1vZGUob3ApKSB7CiAgICAgICAgIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKCppbWFn
ZSwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1hbGl6ZWRTcmNSZWN0LCBvcCk7Ci0gICAgICAgIGRp
ZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7
CiAgICAgfSBlbHNlIGlmIChvcCA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewogICAgICAg
ICBjbGVhckNhbnZhcygpOwogICAgICAgICBjLT5kcmF3SW1hZ2UoKmltYWdlLCBub3JtYWxpemVk
RHN0UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICBkaWREcmF3RW50
aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9
IHRydWU7CisgICAgfSBlbHNlCiAgICAgICAgIGMtPmRyYXdJbWFnZSgqaW1hZ2UsIG5vcm1hbGl6
ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3B0aW9ucyk7CisKKyAgICBpZiAoaXNFbnRp
cmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7Cisg
ICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNh
bnZhcygpOworICAgIGVsc2UKICAgICAgICAgZGlkRHJhdyhub3JtYWxpemVkRHN0UmVjdCk7Ci0g
ICAgfQotICAgIAorCiAgICAgaWYgKGltYWdlLT5pc1NWR0ltYWdlKCkpCiAgICAgICAgIGltYWdl
LT5zZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKIApAQCAtMTYwMCwxMiArMTYzNCwxMyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2Uo
Q2FudmFzQmFzZSYgc291cmNlQ2FudgogCiAgICAgc291cmNlQ2FudmFzLm1ha2VSZW5kZXJpbmdS
ZXN1bHRzQXZhaWxhYmxlKCk7CiAKKyAgICBib29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxz
ZTsKICAgICBpZiAocmVjdENvbnRhaW5zQ2FudmFzKGRzdFJlY3QpKSB7CiAgICAgICAgIGMtPmRy
YXdJbWFnZUJ1ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCB7IHN0YXRlKCkuZ2xvYmFs
Q29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwotICAgICAgICBkaWREcmF3RW50aXJl
Q2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxz
ZSBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSkp
IHsKICAgICAgICAgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoKmJ1ZmZlciwgZHN0UmVj
dCwgc3JjUmVjdCwgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpOwotICAgICAgICBkaWREcmF3RW50
aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0g
ZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNv
cHkpIHsKICAgICAgICAgaWYgKCZzb3VyY2VDYW52YXMgPT0gJmNhbnZhc0Jhc2UoKSkgewogICAg
ICAgICAgICAgaWYgKGF1dG8gY29weSA9IGJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsICpjKSkgewpAQCAtMTYxNiwxMSArMTY1MSwx
NiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3
SW1hZ2UoQ2FudmFzQmFzZSYgc291cmNlQ2FudgogICAgICAgICAgICAgY2xlYXJDYW52YXMoKTsK
ICAgICAgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNSZWN0
LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwogICAg
ICAgICB9Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgeworICAg
ICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgYy0+
ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3QsIHsgc3RhdGUoKS5nbG9i
YWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7CisKKyAgICBpZiAoaXNFbnRpcmVC
YWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAg
ZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZh
cygpOworICAgIGVsc2UKICAgICAgICAgZGlkRHJhdyhkc3RSZWN0KTsKLSAgICB9CiAKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtMTcwMCwyMCArMTc0MCwyNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoSW1hZ2VCaXRtYXAmIGltYWdl
Qml0bQogCiAgICAgY2hlY2tPcmlnaW4oJmltYWdlQml0bWFwKTsKIAorICAgIGJvb2wgcmVwYWlu
dEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVj
dCkpIHsKICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNyY1Jl
Y3QsIHsgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7Ci0g
ICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZh
cyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRl
KCkuZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJ
bWFnZSgqYnVmZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSk7
Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNh
bnZhcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBD
b21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAg
ICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgp
Lmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKLSAgICAgICAgZGlkRHJh
d0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52
YXMgPSB0cnVlOworICAgIH0gZWxzZQogICAgICAgICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZl
ciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5n
bG9iYWxCbGVuZCB9KTsKKworICAgIGlmIChpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisg
ICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlIGlmIChyZXBhaW50RW50aXJl
Q2FudmFzKQorICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgZWxzZQogICAgICAg
ICBkaWREcmF3KGRzdFJlY3QpOwotICAgIH0KIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0yMDAw
LDMyICsyMDQ2LDUyIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihUCiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhd0VudGlyZUNhbnZhcygpCiB7Ci0gICAgZGlkRHJh
dyhGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBjYW52YXNCYXNlKCkuc2l6ZSgpKSwgRGlk
RHJhd09wdGlvbjo6QXBwbHlDbGlwKTsKKyAgICBkaWREcmF3KGJhY2tpbmdTdG9yZUJvdW5kcygp
LCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXApOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmRpZERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCBPcHRpb25TZXQ8RGlkRHJh
d09wdGlvbj4gb3B0aW9ucykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlk
RHJhdyhPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QsIE9wdGlvblNldDxEaWREcmF3T3B0aW9uPiBv
cHRpb25zKQogewogICAgIGlmICghZHJhd2luZ0NvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQorCisgICAgaWYgKCFyZWN0
KSB7CisgICAgICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRpcnR5UmVjdCA9IHJlY3QudmFsdWUoKTsKKyAg
ICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRS
ZWN0IGRpcnR5UmVjdCA9IHI7CisgICAgaWYgKCFzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zv
cm0pCisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKERpZERyYXdP
cHRpb246OkFwcGx5VHJhbnNmb3JtKSkKICAgICAgICAgZGlydHlSZWN0ID0gc3RhdGUoKS50cmFu
c2Zvcm0ubWFwUmVjdChkaXJ0eVJlY3QpOwogCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoRGlk
RHJhd09wdGlvbjo6QXBwbHlTaGFkb3cpICYmIHN0YXRlKCkuc2hhZG93Q29sb3IuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgLy8gVGhlIHNoYWRvdyBnZXRzIGFwcGxpZWQgYWZ0ZXIgdHJhbnNmb3Jt
YXRpb24KLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QoZGlydHlSZWN0KTsKKyAgICAgICAg
YXV0byBzaGFkb3dSZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc3Rh
dGUoKS5zaGFkb3dPZmZzZXQpOwogICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc3RhdGUoKS5z
aGFkb3dCbHVyKTsKICAgICAgICAgZGlydHlSZWN0LnVuaXRlKHNoYWRvd1JlY3QpOwogICAgIH0K
IAorICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7CisKICAgICAvLyBGSVhNRTogVGhp
cyBkb2VzIG5vdCBhcHBseSB0aGUgY2xpcCBiZWNhdXNlIHdlIGhhdmUgbm8gd2F5IG9mIHJlYWRp
bmcgdGhlIGNsaXAgb3V0IG9mIHRoZSBHcmFwaGljc0NvbnRleHQuCiAKLSAgICBjYW52YXNCYXNl
KCkuZGlkRHJhdyhkaXJ0eVJlY3QpOworICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KG1fZGlydHlS
ZWN0KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhckFjY3Vt
dWxhdGVkRGlydHlSZWN0KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IHsgfTsKK30KKworYm9vbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kaXJ0eVJlY3QgPT0gYmFja2luZ1N0b3JlQm91bmRzKCk7
CiB9CiAKIGNvbnN0IFZlY3RvcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZSwg
MT4mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0YXRlU3RhY2soKQpAQCAtMjA0NCw3
ICsyMTEwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtX3JlY29yZGlu
Z0NvbnRleHQtPmRpc3BsYXlMaXN0KCk7CiAgICAgaWYgKCFkaXNwbGF5TGlzdC5pc0VtcHR5KCkp
IHsKICAgICAgICAgRGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKCpjYW52YXNCYXNlKCku
ZHJhd2luZ0NvbnRleHQoKSwgZGlzcGxheUxpc3QpOwotICAgICAgICByZXBsYXllci5yZXBsYXko
eyBGbG9hdFBvaW50Ojp6ZXJvKCksIGNhbnZhc0Jhc2UoKS5zaXplKCkgfSk7CisgICAgICAgIHJl
cGxheWVyLnJlcGxheShiYWNraW5nU3RvcmVCb3VuZHMoKSk7CiAgICAgICAgIGRpc3BsYXlMaXN0
LmNsZWFyKCk7CiAgICAgfQogfQpAQCAtMjE4OSw3ICsyMjU1LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBk
eCwgZmxvYXQKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICBidWZmZXIt
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRh
dGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAotICAgIGRpZERyYXcoZGVz
dFJlY3QsIHsgfSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAorICAgIGRp
ZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsgLy8gaWdub3JlIHRyYW5zZm9ybSwg
c2hhZG93IGFuZCBjbGlwCiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aW5mbGF0ZVN0cm9rZVJlY3QoRmxvYXRSZWN0JiByZWN0KSBjb25zdApAQCAtMjQ1MiwxOSArMjUx
OCwyNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVj
a2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGZsbwogICAgICAgICBsb2NhdGlvbiA9IEZsb2F0
UG9pbnQoKTsKICAgICB9CiAKKyAgICBib29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxzZTsK
ICAgICBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0
ZSkpIHsKICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwogICAgICAgICBmb250UHJveHku
ZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxi
YWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAgICAg
ICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0
cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRl
T3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgZm9udFBy
b3h5LmRyYXdCaWRpVGV4dCgqYywgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VG
YWxsYmFja0lmRm9udE5vdFJlYWR5KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwot
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0g
ZWxzZQogICAgICAgICBmb250UHJveHkuZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2NhdGlv
biwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOworCisgICAgaWYgKGlz
RW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSkKKyAgICAgICAgZGlkRHJhdyhXVEY6Om51bGxvcHQp
OworICAgIGVsc2UgaWYgKHJlcGFpbnRFbnRpcmVDYW52YXMpCisgICAgICAgIGRpZERyYXdFbnRp
cmVDYW52YXMoKTsKKyAgICBlbHNlCiAgICAgICAgIGRpZERyYXcodGV4dFJlY3QpOwotICAgIH0K
IH0KIAogUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjptZWFz
dXJlVGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRl
eCBhMzgyYjBkNmVhZWMuLjQwZDVkYTU3MDA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMzE2
LDEzICszMTYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQXBwbHlTaGFkb3cgPSAxIDw8IDEsCiAg
ICAgICAgIEFwcGx5Q2xpcCA9IDEgPDwgMiwKICAgICB9OwotICAgIHZvaWQgZGlkRHJhdyhjb25z
dCBGbG9hdFJlY3QmLCBPcHRpb25TZXQ8RGlkRHJhd09wdGlvbj4gPSB7IERpZERyYXdPcHRpb246
OkFwcGx5VHJhbnNmb3JtLCBEaWREcmF3T3B0aW9uOjpBcHBseVNoYWRvdywgRGlkRHJhd09wdGlv
bjo6QXBwbHlDbGlwIH0pOworICAgIHZvaWQgZGlkRHJhdyhPcHRpb25hbDxGbG9hdFJlY3Q+LCBP
cHRpb25TZXQ8RGlkRHJhd09wdGlvbj4gPSB7IERpZERyYXdPcHRpb246OkFwcGx5VHJhbnNmb3Jt
LCBEaWREcmF3T3B0aW9uOjpBcHBseVNoYWRvdywgRGlkRHJhd09wdGlvbjo6QXBwbHlDbGlwIH0p
OwogICAgIHZvaWQgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogCiAgICAgdm9pZCBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpIG92ZXJyaWRlOwogICAgIGJvb2wgbmVlZHNQcmVwYXJhdGlv
bkZvckRpc3BsYXkoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkg
ZmluYWw7CiAKKyAgICB2b2lkIGNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKSBmaW5hbDsKKyAg
ICBib29sIGlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qg
YmFja2luZ1N0b3JlQm91bmRzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCBGbG9h
dFNpemUgeyBjYW52YXNCYXNlKCkuc2l6ZSgpIH0gfTsgfQorCiAgICAgdm9pZCB1bndpbmRTdGF0
ZVN0YWNrKCk7CiAgICAgdm9pZCByZWFsaXplU2F2ZXNMb29wKCk7CiAKQEAgLTM4Niw2ICszOTAs
NyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBNYXhTYXZlQ291
bnQgPSAxMDI0ICogMTY7CiAgICAgVmVjdG9yPFN0YXRlLCAxPiBtX3N0YXRlU3RhY2s7CisgICAg
RmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIHVuc2lnbmVkIG1fdW5yZWFsaXplZFNhdmVDb3Vu
dCB7IDAgfTsKICAgICBib29sIG1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGU7CiAgICAg
Ym9vbCBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApp
bmRleCAyYmQ2ZTRjNDg4NDcuLjE1YTMzMTdlZmJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAgLTQ3
NSw3ICs0NzUsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNN
ZW1vcnkoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dAogICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+Y2FudmFzTWVtb3J5Q2hhbmdlZChpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZp
ZXIoKSwgbm9kZS0+bWVtb3J5Q29zdCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiBj
YW52YXNCYXNlLCBPcHRpb25hbDxGbG9hdFJlY3Q+KQogewogICAgIGF1dG8qIGNvbnRleHQgPSBj
YW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmgKaW5kZXggNTBiMzM2Yzg5YjY2Li40ZGE2ODZhMDg3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKQEAgLTkx
LDkgKzkxLDkgQEAgcHVibGljOgogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdF
QkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVyCi0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENh
bnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2Fu
dmFzQmFzZSYpIHsgfQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKTsKKyAg
ICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIE9wdGlvbmFsPEZsb2F0UmVjdD4pIGZp
bmFsOworICAgIHZvaWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgZmluYWwgeyB9CisgICAg
dm9pZCBjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423244</attachid>
            <date>2021-03-15 14:50:43 -0700</date>
            <delta_ts>2021-03-15 14:51:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223056-20210315145042.patch</filename>
            <type>text/plain</type>
            <size>22323</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjcxNWUwMTQ3ODYxNjM5
YjkxZTVkYzEwNTczNDhhM2QxMmQ4ZTU3ZS4uODJkZTRjMmRlYjFmYTJlZWYyODRhMmVlNDZiMDVh
Njk4ZjA0YjljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTAzLTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIGNh
bnZhcyByZXBhaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudGx5IG1hbnkgZHJhdyBvcGVyYXRpb25zIGluIGEgY2FudmFzIHRyaWdnZXIg
YSByZXBhaW50IHZpYSB0aGUgZGlkRHJhdygpCisgICAgICAgIGNvZGUgcGF0aCB3aGljaCBnb2Vz
IHRvIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KCkuIEhUTUxDYW52YXNFbGVtZW50IGRpZCB0
cmFjaworICAgICAgICBhIGRpcnR5IHJlY3QgYW5kIHNob3J0LWNpcmN1aXRlZCByZXBhaW50cyB3
aGljaCB3ZXJlIGFscmVhZHkgZGlydHksIGJ1dCB3ZSBwYWlkCisgICAgICAgIHRoZSBjb3N0IG9m
IGNvbXB1dGluZyB0aGUgZGlydHkgcmVjdCAoZS5nLiBnZXR0aW5nIHRoZSBib3VuZHMgb2YgYSBw
YXRoKSwgYW5kIG9mCisgICAgICAgIHRoZSBoYXNoIGxvb2t1cCBpbiBEb2N1bWVudDo6cHJlcGFy
ZUNhbnZhc2VzRm9yRGlzcGxheUlmTmVlZGVkKCkgZXZlcnkgdGltZS4KKyAgICAgICAgCisgICAg
ICAgIE9wdGltaXplIHRoaXMgYnkgbW92aW5nIHRoZSBkaXJ0eSByZWN0IHRyYWNraW5nIGludG8g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS4KKyAgICAgICAgSWYgdGhlIGVudGlyZSBjYW52
YXMgaXMgYWxyZWFkeSBkaXJ0eSwgd2UgY2FuIGF2b2lkIGFsbCB0aGUgd29yayAodGhpcyBpcyBj
b21tb24sCisgICAgICAgIHNpbmNlIHBhZ2VzIG9mdGVuIGNsZWFyIHRoZSBlbnRpcmUgY2FudmFz
IGF0IHRoZSBzdGFydCBvZiBldmVyeSBmcmFtZSkuIE90aGVyd2lzZSwKKyAgICAgICAgYWNjdW11
bGF0ZSBpbnRvIG1fZGlydHlSZWN0LiBtX2RpcnR5UmVjdCBpcyBjbGVhcmVkIHdoZW4gd2UgcGFp
bnQgdGhlIGNhbnZhcy4KKworICAgICAgICBJdCB3b3VsZCBiZSBuaWNlIHRvIHNoYXJlIG1vcmUg
b2YgdGhlIGRpZERyYXcoKSBjb2RlIGluIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UKKyAg
ICAgICAgZnVuY3Rpb25zLCBidXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGhlIGRp
cnR5IHJlY3Qgb25seSBpZiBpdCdzIHVzZWQsIGFuZAorICAgICAgICBhIFdURjo6ZnVuY3Rpb24o
KS1iYXNlZCBhcHByb2FjaCBiZW5jaG1hcmtlZCBhcyBzbG93ZXIuCisKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWlu
dCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
ZmlsbEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnN0cm9rZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJBY2N1bXVsYXRlZERpcnR5UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0VudGly
ZUJhY2tpbmdTdG9yZURpcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpiYWNraW5nU3RvcmVCb3VuZHMg
Y29uc3QpOgorCiAyMDIxLTAzLTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIENoYW5nZSBjYW52YXNDaGFuZ2VkKCkgdG8gdGFrZSBhIE9wdGlvbmFs
PEZsb2F0UmVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5k
ZXggYzQwYjRkZmRiNjVmMmVjZjE5NDc0YzI0ODE1MGYyNTIwYzgyMjRhMi4uMDZmZjUxNTJhODQ1
Y2EwOTM5NzgxZTI3YTYyZGYzNGFiMTQzZmRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKQEAgLTU3NywxMCArNTc3LDggQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6ZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiByZWN0KQogICAgICAgICBG
bG9hdFJlY3QgciA9IG1hcFJlY3QoZGlydHlSZWN0LCBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RSZWN0KTsKICAgICAgICAgci5pbnRlcnNlY3Qo
ZGVzdFJlY3QpOwogCi0gICAgICAgIGlmICghci5pc0VtcHR5KCkgJiYgIW1fZGlydHlSZWN0LmNv
bnRhaW5zKHIpKSB7Ci0gICAgICAgICAgICBtX2RpcnR5UmVjdC51bml0ZShyKTsKLSAgICAgICAg
ICAgIHJlbmRlcmVyLT5yZXBhaW50UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJl
Y3QpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXIuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmVuZGVyZXItPnJlcGFpbnRSZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChyKSk7CiAgICAgfQog
ICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQoZGlydHlSZWN0KTsKIH0KQEAgLTY0OSw4
ICs2NDcsOCBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVy
KCkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByKQogewotICAgIC8vIENsZWFyIHRoZSBkaXJ0
eSByZWN0Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBpZiAobV9jb250ZXh0
KQorICAgICAgICBtX2NvbnRleHQtPmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKTsKIAogICAg
IGlmICghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKICAgICAgICAgYm9vbCBzaG91bGRQ
YWludCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXgg
MGRiZjAzMDRmOGQ4YTJlMzRlYzMzOThkNTA3MTU0MjYyOThkNDMyMy4uMDQyMzI2OGQ2NTBiOWYw
ZTVkNTdjNDg3MTBjOGRhZmM3MjJjOTQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaApAQCAtMTgyLDI1ICsxODIsMjAgQEAgcHJpdmF0ZToKICAgICBOb2RlOjpJbnNl
cnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBmaW5hbDsK
IAotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKLQotICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7
IGZhbHNlIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1f
Y29udGV4dDsKKyAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklY
TUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhl
IGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUpLgogCiAgICAg
T3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwotCisgICAgYm9vbCBtX2lnbm9yZVJlc2V0
IHsgZmFsc2UgfTsKICAgICAvLyBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmll
ZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KICAg
ICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogICAgIG11
dGFibGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShX
RUJHTCkKICAgICBib29sIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgeyBmYWxzZSB9
OwogI2VuZGlmCi0KICAgICBib29sIG1faXNTbmFwc2hvdHRpbmcgeyBmYWxzZSB9OwotCi0gICAg
bXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRl
bXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIg
dG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaAppbmRleCAwMDU2YWViOWNlNzc0YmI1Mjc4N2ZkNzY4OGU0ZWFlODA5YWM1
NjRlLi5lZDVkYmUzN2Y3ZWM3YmI5OGM3ZmY1NGEzNDBkNjUxNTRhZTkyNjM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCkBA
IC03MSwxMCArNzEsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc09mZnNjcmVlbjJk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQYWludCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBY2N1bXVsYXRl
ZERpcnR5UmVjdCgpIHsgfQorCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyBpZiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyBpcwogICAgIC8v
IHVzZWQgZm9yIGNvbXBvc2l0aW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpIHt9CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkgeyB9CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY3RpdmVJbnNwZWN0b3JDYW52
YXNDYWxsVHJhY2VyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg4ODk3MjkwMDA1NTNm
N2U1MGIxMzU4YmZkYTI2ZDRlYzRlYzcwMjQuLjljNDAyZDExZDI2YzZlNTViYmZjZWEzNDY5ODFl
YjI5YWM1NDU2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xMDQ1LDI2ICsxMDQ1LDMz
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZmlsbEludGVybmFsKGNvbnN0
IFBhdGgmIHBhdGgsIENhbnZhc0ZpbGxSdWxlCiAgICAgaWYgKGdyYWRpZW50ICYmIGdyYWRpZW50
LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgYXV0byBzYXZlZEZpbGxSdWxlID0gYy0+ZmlsbFJ1bGUoKTsKLSAgICAg
ICAgYy0+c2V0RmlsbFJ1bGUodG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOwotCi0gICAgICAgIGlm
IChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewot
ICAgICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwotICAgICAgICAgICAgYy0+ZmlsbFBh
dGgocGF0aCk7Ci0gICAgICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAgICAgICAgICAg
ZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFs
Q29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KSB7Ci0gICAgICAgICAgICBjbGVh
ckNhbnZhcygpOwotICAgICAgICAgICAgYy0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgICAgICBk
aWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjLT5m
aWxsUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGRpZERyYXcocGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjLT5zZXRGaWxsUnVsZShzYXZlZEZp
bGxSdWxlKTsKLSAgICB9CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHNhdmVkRmlsbFJ1bGUgPSBjLT5maWxsUnVsZSgpOworICAgIGMtPnNldEZp
bGxSdWxlKHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKworICAgIGJvb2wgcmVwYWludEVudGly
ZUNhbnZhcyA9IGZhbHNlOworICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRl
KCkuZ2xvYmFsQ29tcG9zaXRlKSkgeworICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7Cisg
ICAgICAgIGMtPmZpbGxQYXRoKHBhdGgpOworICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwor
ICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHN0YXRl
KCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KSB7CisgICAgICAg
IGNsZWFyQ2FudmFzKCk7CisgICAgICAgIGMtPmZpbGxQYXRoKHBhdGgpOworICAgICAgICByZXBh
aW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgYy0+ZmlsbFBhdGgo
cGF0aCk7CisgICAgCisgICAgaWYgKGlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSkKKyAgICAg
ICAgZGlkRHJhdyhXVEY6Om51bGxvcHQpOworICAgIGVsc2UgaWYgKHJlcGFpbnRFbnRpcmVDYW52
YXMpCisgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICBlbHNlCisgICAgICAgIGRp
ZERyYXcocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworCisgICAgYy0+c2V0RmlsbFJ1bGUoc2F2
ZWRGaWxsUnVsZSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ry
b2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTEwODAsMjIgKzEwODcsMzAgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJva2VJbnRlcm5hbChjb25zdCBQYXRo
JiBwYXRoKQogICAgIGlmIChncmFkaWVudCAmJiBncmFkaWVudC0+aXNaZXJvU2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChp
c0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewotICAg
ICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwotICAgICAgICAgICAgYy0+c3Ryb2tlUGF0
aChwYXRoKTsKLSAgICAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAgICBk
aWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxD
b21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKLSAgICAgICAgICAgIGNsZWFy
Q2FudmFzKCk7Ci0gICAgICAgICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICAgICAg
ZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRmxv
YXRSZWN0IGRpcnR5UmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwotICAgICAgICAgICAg
aW5mbGF0ZVN0cm9rZVJlY3QoZGlydHlSZWN0KTsKLSAgICAgICAgICAgIGMtPnN0cm9rZVBhdGgo
cGF0aCk7Ci0gICAgICAgICAgICBkaWREcmF3KGRpcnR5UmVjdCk7Ci0gICAgICAgIH0KKyAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcmVwYWludEVu
dGlyZUNhbnZhcyA9IGZhbHNlOworICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0
YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgeworICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7
CisgICAgICAgIGMtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgICAgIGVuZENvbXBvc2l0ZUxheWVy
KCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAo
c3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKKyAg
ICAgICAgY2xlYXJDYW52YXMoKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICAg
ICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIGMtPnN0
cm9rZVBhdGgocGF0aCk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQor
ICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGly
ZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UgeworICAg
ICAgICBhdXRvIGRpcnR5UmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOworICAgICAgICBp
bmZsYXRlU3Ryb2tlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICBkaWREcmF3KGRpcnR5UmVjdCk7
CiAgICAgfQogfQogCkBAIC0xMjQyLDIyICsxMjU3LDI4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZmlsbFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZs
b2F0CiAKICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAorICAgIGJv
b2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29udGFpbnNDYW52
YXMocmVjdCkpIHsKICAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIGRpZERyYXdF
bnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CiAgICAg
fSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9z
aXRlKSkgewogICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgIGMtPmZpbGxS
ZWN0KHJlY3QpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAgICAgICBkaWREcmF3
RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAg
IH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6
OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgYy0+ZmlsbFJlY3QocmVj
dCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgeworICAgICAg
ICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgYy0+Zmls
bFJlY3QocmVjdCk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAg
ICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNh
bnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UKICAgICAgICAg
ZGlkRHJhdyhyZWN0KTsKLSAgICB9CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0KQpAQCAtMTI3OSwxOSArMTMwMCwyNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnN0cm9rZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsbwogICAg
ICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBib29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxzZTsKICAgICBpZiAoaXNGdWxsQ2Fu
dmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSkpIHsKICAgICAgICAgYmVn
aW5Db21wb3NpdGVMYXllcigpOwogICAgICAgICBjLT5zdHJva2VSZWN0KHJlY3QsIHN0YXRlKCku
bGluZVdpZHRoKTsKICAgICAgICAgZW5kQ29tcG9zaXRlTGF5ZXIoKTsKLSAgICAgICAgZGlkRHJh
d0VudGlyZUNhbnZhcygpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAg
ICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9y
OjpDb3B5KSB7CiAgICAgICAgIGNsZWFyQ2FudmFzKCk7CiAgICAgICAgIGMtPnN0cm9rZVJlY3Qo
cmVjdCwgc3RhdGUoKS5saW5lV2lkdGgpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0g
dHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBzdGF0ZSgpLmxp
bmVXaWR0aCk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAg
ICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZh
cykKICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGJvdW5kaW5nUmVjdCA9IHJlY3Q7CiAgICAgICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHN0YXRl
KCkubGluZVdpZHRoIC8gMik7Ci0gICAgICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgc3RhdGUoKS5s
aW5lV2lkdGgpOwogICAgICAgICBkaWREcmF3KGJvdW5kaW5nUmVjdCk7CiAgICAgfQogfQpAQCAt
MTU1MSwyMSArMTU3OSwyNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBDYQogCiAgICAgSW1hZ2VQ
YWludGluZ09wdGlvbnMgb3B0aW9ucyA9IHsgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24gfTsK
IAorICAgIGJvb2wgcmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29u
dGFpbnNDYW52YXMobm9ybWFsaXplZERzdFJlY3QpKSB7CiAgICAgICAgIGMtPmRyYXdJbWFnZSgq
aW1hZ2UsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0g
ICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZh
cyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKG9wKSkg
ewogICAgICAgICBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZSgqaW1hZ2UsIG5vcm1hbGl6
ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3ApOwotICAgICAgICBkaWREcmF3RW50aXJl
Q2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxz
ZSBpZiAob3AgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52
YXMoKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKCppbWFnZSwgbm9ybWFsaXplZERzdFJlY3QsIG5v
cm1hbGl6ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygp
OwotICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAg
IH0gZWxzZQogICAgICAgICBjLT5kcmF3SW1hZ2UoKmltYWdlLCBub3JtYWxpemVkRHN0UmVjdCwg
bm9ybWFsaXplZFNyY1JlY3QsIG9wdGlvbnMpOworCisgICAgaWYgKGlzRW50aXJlQmFja2luZ1N0
b3JlRGlydHkoKSkKKyAgICAgICAgZGlkRHJhdyhXVEY6Om51bGxvcHQpOworICAgIGVsc2UgaWYg
KHJlcGFpbnRFbnRpcmVDYW52YXMpCisgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAg
ICBlbHNlCiAgICAgICAgIGRpZERyYXcobm9ybWFsaXplZERzdFJlY3QpOwotICAgIH0KLSAgICAK
KwogICAgIGlmIChpbWFnZS0+aXNTVkdJbWFnZSgpKQogICAgICAgICBpbWFnZS0+c2V0SW1hZ2VP
YnNlcnZlcihvYnNlcnZlcik7CiAKQEAgLTE2MDAsMTIgKzE2MzQsMTMgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKENhbnZhc0Jhc2Um
IHNvdXJjZUNhbnYKIAogICAgIHNvdXJjZUNhbnZhcy5tYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWls
YWJsZSgpOwogCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CiAgICAgaWYg
KHJlY3RDb250YWluc0NhbnZhcyhkc3RSZWN0KSkgewogICAgICAgICBjLT5kcmF3SW1hZ2VCdWZm
ZXIoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSwg
c3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwor
ICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGlzRnVs
bENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAg
IGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3Qs
IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygp
OworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHN0
YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KSB7CiAgICAg
ICAgIGlmICgmc291cmNlQ2FudmFzID09ICZjYW52YXNCYXNlKCkpIHsKICAgICAgICAgICAgIGlm
IChhdXRvIGNvcHkgPSBidWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoc3JjUmVjdCwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCLCAqYykpIHsKQEAgLTE2MTYsMTEgKzE2NTEsMTYgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKENhbnZh
c0Jhc2UmIHNvdXJjZUNhbnYKICAgICAgICAgICAgIGNsZWFyQ2FudmFzKCk7CiAgICAgICAgICAg
ICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgp
Lmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKICAgICAgICAgfQotICAg
ICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYWlu
dEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlCiAgICAgICAgIGMtPmRyYXdJbWFnZUJ1
ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRl
LCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOworCisgICAgaWYgKGlzRW50aXJlQmFja2luZ1N0b3Jl
RGlydHkoKSkKKyAgICAgICAgZGlkRHJhdyhXVEY6Om51bGxvcHQpOworICAgIGVsc2UgaWYgKHJl
cGFpbnRFbnRpcmVDYW52YXMpCisgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICBl
bHNlCiAgICAgICAgIGRpZERyYXcoZHN0UmVjdCk7Ci0gICAgfQogCiAgICAgcmV0dXJuIHsgfTsK
IH0KQEAgLTE2NTAsNyArMTY5MCwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCYgdmlkZQogI2lmIFVT
RShDRykKICAgICBpZiAoYXV0byBpbWFnZSA9IHZpZGVvLm5hdGl2ZUltYWdlRm9yQ3VycmVudFRp
bWUoKSkgewogICAgICAgICBjLT5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBGbG9hdFNpemUodmlk
ZW8udmlkZW9XaWR0aCgpLCB2aWRlby52aWRlb0hlaWdodCgpKSwgZHN0UmVjdCwgc3JjUmVjdCk7
Ci0gICAgICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVjdCkpCisKKyAgICAgICAgaWYg
KGlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkoKSkKKyAgICAgICAgICAgIGRpZERyYXcoV1RGOjpu
dWxsb3B0KTsKKyAgICAgICAgZWxzZSBpZiAocmVjdENvbnRhaW5zQ2FudmFzKGRzdFJlY3QpKQog
ICAgICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBkaWREcmF3KGRzdFJlY3QpOwpAQCAtMTY2Niw3ICsxNzA5LDExIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFnZShIVE1MVmlkZW9F
bGVtZW50JiB2aWRlCiAgICAgYy0+dHJhbnNsYXRlKC1zcmNSZWN0LmxvY2F0aW9uKCkpOwogICAg
IHZpZGVvLnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCpjLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBzaXplKHZpZGVvKSkpOwogICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwotICAgIGRpZERy
YXcoZHN0UmVjdCk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAg
ICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZQorICAgICAgICBkaWREcmF3KGRz
dFJlY3QpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE3MDAsMjAgKzE3NDcsMjYgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKElt
YWdlQml0bWFwJiBpbWFnZUJpdG0KIAogICAgIGNoZWNrT3JpZ2luKCZpbWFnZUJpdG1hcCk7CiAK
KyAgICBib29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxzZTsKICAgICBpZiAocmVjdENvbnRh
aW5zQ2FudmFzKGRzdFJlY3QpKSB7CiAgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcigqYnVmZmVy
LCBkc3RSZWN0LCBzcmNSZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmds
b2JhbEJsZW5kIH0pOwotICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJl
cGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoaXNGdWxsQ2FudmFzQ29t
cG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSkpIHsKICAgICAgICAgZnVsbENhbnZh
c0NvbXBvc2l0ZWREcmF3SW1hZ2UoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgc3RhdGUoKS5n
bG9iYWxDb21wb3NpdGUpOwotICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAg
IHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9i
YWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJD
YW52YXMoKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNy
Y1JlY3QsIHsgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7
Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgeworICAgICAgICBy
ZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgYy0+ZHJhd0lt
YWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3QsIHsgc3RhdGUoKS5nbG9iYWxDb21w
b3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5n
U3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBp
ZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwor
ICAgIGVsc2UKICAgICAgICAgZGlkRHJhdyhkc3RSZWN0KTsKLSAgICB9CiAKICAgICByZXR1cm4g
eyB9OwogfQpAQCAtMjAwMywyOSArMjA1Niw1MiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRpZERyYXdFbnRpcmVDYW52YXMoKQogICAgIGRpZERyYXcoYmFja2luZ1N0b3Jl
Qm91bmRzKCksIERpZERyYXdPcHRpb246OkFwcGx5Q2xpcCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmIHIsIE9wdGlvblNl
dDxEaWREcmF3T3B0aW9uPiBvcHRpb25zKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpkaWREcmF3KE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCwgT3B0aW9uU2V0PERpZERyYXdP
cHRpb24+IG9wdGlvbnMpCiB7CiAgICAgaWYgKCFkcmF3aW5nQ29udGV4dCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCisKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgY2FudmFzQmFzZSgpLmRpZERyYXcoV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZGlydHlSZWN0ID0gcmVjdC52YWx1
ZSgpOworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gcjsKKyAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJs
ZVRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMo
RGlkRHJhd09wdGlvbjo6QXBwbHlUcmFuc2Zvcm0pKQogICAgICAgICBkaXJ0eVJlY3QgPSBzdGF0
ZSgpLnRyYW5zZm9ybS5tYXBSZWN0KGRpcnR5UmVjdCk7CiAKICAgICBpZiAob3B0aW9ucy5jb250
YWlucyhEaWREcmF3T3B0aW9uOjpBcHBseVNoYWRvdykgJiYgc3RhdGUoKS5zaGFkb3dDb2xvci5p
c1Zpc2libGUoKSkgewogICAgICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0
cmFuc2Zvcm1hdGlvbgotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOwor
ICAgICAgICBhdXRvIHNoYWRvd1JlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgICAgIHNoYWRvd1JlY3Qu
bW92ZShzdGF0ZSgpLnNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShz
dGF0ZSgpLnNoYWRvd0JsdXIpOwogICAgICAgICBkaXJ0eVJlY3QudW5pdGUoc2hhZG93UmVjdCk7
CiAgICAgfQogCisgICAgYXV0byBvbGREaXJ0eVJlY3QgPSBtX2RpcnR5UmVjdDsKKyAgICBtX2Rp
cnR5UmVjdC51bml0ZShkaXJ0eVJlY3QpOworCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qg
YXBwbHkgdGhlIGNsaXAgYmVjYXVzZSB3ZSBoYXZlIG5vIHdheSBvZiByZWFkaW5nIHRoZSBjbGlw
IG91dCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIGlmIChtX2RpcnR5UmVjdCA9PSBvbGRE
aXJ0eVJlY3QpCisgICAgICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KFdURjo6bnVsbG9wdCk7Cisg
ICAgZWxzZQorICAgICAgICBjYW52YXNCYXNlKCkuZGlkRHJhdyhtX2RpcnR5UmVjdCk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJBY2N1bXVsYXRlZERpcnR5
UmVjdCgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSB7IH07Cit9CiAKLSAgICBjYW52YXNCYXNlKCku
ZGlkRHJhdyhkaXJ0eVJlY3QpOworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpp
c0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kaXJ0eVJl
Y3QgPT0gYmFja2luZ1N0b3JlQm91bmRzKCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZSwgMT4mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnN0YXRlU3RhY2soKQpAQCAtMjE4OSw3ICsyMjY1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICBidWZmZXItPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRhdGEs
IHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAotICAgIGRpZERyYXcoZGVzdFJl
Y3QsIHsgfSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAorICAgIGRpZERy
YXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hh
ZG93IGFuZCBjbGlwCiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aW5m
bGF0ZVN0cm9rZVJlY3QoRmxvYXRSZWN0JiByZWN0KSBjb25zdApAQCAtMjQ1MiwxOSArMjUyOCwy
NSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2Vk
KGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGZsbwogICAgICAgICBsb2NhdGlvbiA9IEZsb2F0UG9p
bnQoKTsKICAgICB9CiAKKyAgICBib29sIHJlcGFpbnRFbnRpcmVDYW52YXMgPSBmYWxzZTsKICAg
ICBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSkp
IHsKICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwogICAgICAgICBmb250UHJveHkuZHJh
d0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNr
SWZGb250Tm90UmVhZHkpOwogICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwotICAgICAgICBk
aWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVl
OwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3Bl
cmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgZm9udFByb3h5
LmRyYXdCaWRpVGV4dCgqYywgdGV4dFJ1biwgbG9jYXRpb24sIEZvbnRDYXNjYWRlOjpVc2VGYWxs
YmFja0lmRm9udE5vdFJlYWR5KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAg
IH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxz
ZQogICAgICAgICBmb250UHJveHkuZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2NhdGlvbiwg
Rm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOworCisgICAgaWYgKGlzRW50
aXJlQmFja2luZ1N0b3JlRGlydHkoKSkKKyAgICAgICAgZGlkRHJhdyhXVEY6Om51bGxvcHQpOwor
ICAgIGVsc2UgaWYgKHJlcGFpbnRFbnRpcmVDYW52YXMpCisgICAgICAgIGRpZERyYXdFbnRpcmVD
YW52YXMoKTsKKyAgICBlbHNlCiAgICAgICAgIGRpZERyYXcodGV4dFJlY3QpOwotICAgIH0KIH0K
IAogUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjptZWFzdXJl
VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCA0
NTg4MzZjNGU3MTYxNGM2M2Y2MTZmMTFmY2UxNGNiNzQwYmU2ZjBlLi40MGQ1ZGE1NzAwN2MxYjU2
MzFkZDNjYjgyYTJkNTI5YmQzNDMwYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zMTYsMTUg
KzMxNiwxNyBAQCBwcml2YXRlOgogICAgICAgICBBcHBseVNoYWRvdyA9IDEgPDwgMSwKICAgICAg
ICAgQXBwbHlDbGlwID0gMSA8PCAyLAogICAgIH07Ci0gICAgdm9pZCBkaWREcmF3KGNvbnN0IEZs
b2F0UmVjdCYsIE9wdGlvblNldDxEaWREcmF3T3B0aW9uPiA9IHsgRGlkRHJhd09wdGlvbjo6QXBw
bHlUcmFuc2Zvcm0sIERpZERyYXdPcHRpb246OkFwcGx5U2hhZG93LCBEaWREcmF3T3B0aW9uOjpB
cHBseUNsaXAgfSk7CisgICAgdm9pZCBkaWREcmF3KE9wdGlvbmFsPEZsb2F0UmVjdD4sIE9wdGlv
blNldDxEaWREcmF3T3B0aW9uPiA9IHsgRGlkRHJhd09wdGlvbjo6QXBwbHlUcmFuc2Zvcm0sIERp
ZERyYXdPcHRpb246OkFwcGx5U2hhZG93LCBEaWREcmF3T3B0aW9uOjpBcHBseUNsaXAgfSk7CiAg
ICAgdm9pZCBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGJhY2tp
bmdTdG9yZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgRmxvYXRTaXpl
IHsgY2FudmFzQmFzZSgpLnNpemUoKSB9IH07IH0KIAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKSBvdmVycmlkZTsKICAgICBib29sIG5lZWRzUHJlcGFyYXRpb25Gb3JE
aXNwbGF5KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFs
OwogCisgICAgdm9pZCBjbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KCkgZmluYWw7CisgICAgYm9v
bCBpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGJhY2tp
bmdTdG9yZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgRmxvYXRTaXpl
IHsgY2FudmFzQmFzZSgpLnNpemUoKSB9IH07IH0KKwogICAgIHZvaWQgdW53aW5kU3RhdGVTdGFj
aygpOwogICAgIHZvaWQgcmVhbGl6ZVNhdmVzTG9vcCgpOwogCkBAIC0zODgsNiArMzkwLDcgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgTWF4U2F2ZUNvdW50ID0g
MTAyNCAqIDE2OwogICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOworICAgIEZsb2F0
UmVjdCBtX2RpcnR5UmVjdDsKICAgICB1bnNpZ25lZCBtX3VucmVhbGl6ZWRTYXZlQ291bnQgeyAw
IH07CiAgICAgYm9vbCBtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlOwogICAgIGJvb2wg
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2UgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423245</attachid>
            <date>2021-03-15 14:51:36 -0700</date>
            <delta_ts>2021-03-15 16:45:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223056-20210315145135.patch</filename>
            <type>text/plain</type>
            <size>22412</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjcxNWUwMTQ3ODYxNjM5
YjkxZTVkYzEwNTczNDhhM2QxMmQ4ZTU3ZS4uMjNmZjBkZDA2YjBlMzRhMWExNjg1MTQ3NTU4NDA5
Mjc1ZmIyZjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIxLTAzLTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIGNh
bnZhcyByZXBhaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudGx5IG1hbnkgZHJhdyBvcGVyYXRpb25zIGluIGEgY2FudmFzIHRyaWdnZXIg
YSByZXBhaW50IHZpYSB0aGUgZGlkRHJhdygpCisgICAgICAgIGNvZGUgcGF0aCB3aGljaCBnb2Vz
IHRvIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KCkuIEhUTUxDYW52YXNFbGVtZW50IGRpZCB0
cmFjaworICAgICAgICBhIGRpcnR5IHJlY3QgYW5kIHNob3J0LWNpcmN1aXRlZCByZXBhaW50cyB3
aGljaCB3ZXJlIGFscmVhZHkgZGlydHksIGJ1dCB3ZSBwYWlkCisgICAgICAgIHRoZSBjb3N0IG9m
IGNvbXB1dGluZyB0aGUgZGlydHkgcmVjdCAoZS5nLiBnZXR0aW5nIHRoZSBib3VuZHMgb2YgYSBw
YXRoKSwgYW5kIG9mCisgICAgICAgIHRoZSBoYXNoIGxvb2t1cCBpbiBEb2N1bWVudDo6cHJlcGFy
ZUNhbnZhc2VzRm9yRGlzcGxheUlmTmVlZGVkKCkgZXZlcnkgdGltZS4KKyAgICAgICAgCisgICAg
ICAgIE9wdGltaXplIHRoaXMgYnkgbW92aW5nIHRoZSBkaXJ0eSByZWN0IHRyYWNraW5nIGludG8g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS4KKyAgICAgICAgSWYgdGhlIGVudGlyZSBjYW52
YXMgaXMgYWxyZWFkeSBkaXJ0eSwgd2UgY2FuIGF2b2lkIGFsbCB0aGUgd29yayAodGhpcyBpcyBj
b21tb24sCisgICAgICAgIHNpbmNlIHBhZ2VzIG9mdGVuIGNsZWFyIHRoZSBlbnRpcmUgY2FudmFz
IGF0IHRoZSBzdGFydCBvZiBldmVyeSBmcmFtZSkuIE90aGVyd2lzZSwKKyAgICAgICAgYWNjdW11
bGF0ZSBpbnRvIG1fZGlydHlSZWN0LiBtX2RpcnR5UmVjdCBpcyBjbGVhcmVkIHdoZW4gd2UgcGFp
bnQgdGhlIGNhbnZhcy4KKworICAgICAgICBJdCB3b3VsZCBiZSBuaWNlIHRvIHNoYXJlIG1vcmUg
b2YgdGhlIGRpZERyYXcoKSBjb2RlIGluIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UKKyAg
ICAgICAgZnVuY3Rpb25zLCBidXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGhlIGRp
cnR5IHJlY3Qgb25seSBpZiBpdCdzIHVzZWQsIGFuZAorICAgICAgICBhIFdURjo6ZnVuY3Rpb24o
KS1iYXNlZCBhcHByb2FjaCBiZW5jaG1hcmtlZCBhcyBzbG93ZXIuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpcyBhbiB1cC10by0xMCUgcHJvZ3Jlc3Npb24gb24gc29tZSBjYW52YXMgc3VidGVzdHMg
aW4gTW90aW9uTWFyay4KKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmRpZERyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KToKKyAgICAgICAgKiBodG1sL0hUTUxD
YW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJB
Y2N1bXVsYXRlZERpcnR5UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tlSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZmlsbFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpk
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzRW50aXJlQmFja2luZ1N0b3JlRGlydHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmRyYXdUZXh0VW5jaGVja2VkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmJhY2tpbmdTdG9yZUJvdW5kcyBjb25zdCk6CisKIDIwMjEtMDMtMTUgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIGNh
bnZhc0NoYW5nZWQoKSB0byB0YWtlIGEgT3B0aW9uYWw8RmxvYXRSZWN0PgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBjNDBiNGRmZGI2NWYyZWNmMTk0NzRj
MjQ4MTUwZjI1MjBjODIyNGEyLi4wNmZmNTE1MmE4NDVjYTA5Mzk3ODFlMjdhNjJkZjM0YWIxNDNm
ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtNTc3
LDEwICs1NzcsOCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0IE9wdGlv
bmFsPEZsb2F0UmVjdD4mIHJlY3QpCiAgICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVjdChkaXJ0
eVJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwg
ZGVzdFJlY3QpOwogICAgICAgICByLmludGVyc2VjdChkZXN0UmVjdCk7CiAKLSAgICAgICAgaWYg
KCFyLmlzRW1wdHkoKSAmJiAhbV9kaXJ0eVJlY3QuY29udGFpbnMocikpIHsKLSAgICAgICAgICAg
IG1fZGlydHlSZWN0LnVuaXRlKHIpOwotICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRSZWN0
YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCkpOwotICAgICAgICB9CisgICAgICAg
IGlmICghci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludFJlY3Rhbmds
ZShlbmNsb3NpbmdJbnRSZWN0KHIpKTsKICAgICB9CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFz
Q2hhbmdlZChkaXJ0eVJlY3QpOwogfQpAQCAtNjQ5LDggKzY0Nyw4IEBAIGJvb2wgSFRNTENhbnZh
c0VsZW1lbnQ6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAogCiB2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIHIpCiB7Ci0gICAgLy8gQ2xlYXIgdGhlIGRpcnR5IHJlY3QKLSAgICBtX2RpcnR5UmVjdCA9
IEZsb2F0UmVjdCgpOworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJBY2N1bXVsYXRlZERpcnR5UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlz
YWJsZWQoKSkgewogICAgICAgICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCAwZGJmMDMwNGY4ZDhhMmUzNGVjMzM5OGQ1
MDcxNTQyNjI5OGQ0MzIzLi4wNDIzMjY4ZDY1MGI5ZjBlNWQ1N2M0ODcxMGM4ZGFmYzcyMmM5NDMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xODIsMjUgKzE4
MiwyMCBAQCBwcml2YXRlOgogICAgIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGlu
c2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsK
ICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUm
IG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fZGlydHlS
ZWN0OwotCi0gICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OworICAgIG11dGFibGUgUmVm
UHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9y
IHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAo
YW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiAKICAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNw
bGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFs
c2UgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2Nv
bnRleHQ7Ci0KKyAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogICAgIC8vIG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBX
ZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0
ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1fZGlkQ2xlYXJJbWFn
ZUJ1ZmZlciB7IGZhbHNlIH07CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGJvb2wgbV9oYXNSZWxl
dmFudFdlYkdMRXZlbnRMaXN0ZW5lciB7IGZhbHNlIH07CiAjZW5kaWYKLQogICAgIGJvb2wgbV9p
c1NuYXBzaG90dGluZyB7IGZhbHNlIH07Ci0KLSAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9j
b3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhh
dCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2Fu
dmFzVmFsdWUpLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDAwNTZh
ZWI5Y2U3NzRiYjUyNzg3ZmQ3Njg4ZTRlYWU4MDlhYzU2NGUuLmVkNWRiZTM3ZjdlYzdiYjk4Yzdm
ZjU0YTM0MGQ2NTE1NGFlOTI2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTcxLDEwICs3MSwxMiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzT2Zmc2NyZWVuMmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1BhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KCkgeyB9CisKICAgICAv
LyBDYWxsZWQgYmVmb3JlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzIGlmIHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzIGlzCiAgICAgLy8gdXNlZCBmb3IgY29tcG9zaXRpbmcgcHVy
cG9zZXMuCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5V2l0aFBhaW50KCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkge30KKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7IH0KICAgICB2
aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAKICAgICBib29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKaW5kZXggODg4OTcyOTAwMDU1M2Y3ZTUwYjEzNThiZmRhMjZkNGVjNGVjNzAy
NC4uOWM0MDJkMTFkMjZjNmU1NWJiZmNlYTM0Njk4MWViMjlhYzU0NTYyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKQEAgLTEwNDUsMjYgKzEwNDUsMzMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpmaWxsSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1
bGUKICAgICBpZiAoZ3JhZGllbnQgJiYgZ3JhZGllbnQtPmlzWmVyb1NpemUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIHNhdmVk
RmlsbFJ1bGUgPSBjLT5maWxsUnVsZSgpOwotICAgICAgICBjLT5zZXRGaWxsUnVsZSh0b1dpbmRS
dWxlKHdpbmRpbmdSdWxlKSk7Ci0KLSAgICAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1v
ZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7Ci0gICAgICAgICAgICBiZWdpbkNvbXBvc2l0
ZUxheWVyKCk7Ci0gICAgICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGVu
ZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3Bl
cmF0b3I6OkNvcHkpIHsKLSAgICAgICAgICAgIGNsZWFyQ2FudmFzKCk7Ci0gICAgICAgICAgICBj
LT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGMtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICAg
ICAgZGlkRHJhdyhwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGMtPnNldEZpbGxSdWxlKHNhdmVkRmlsbFJ1bGUpOwotICAgIH0KKyAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2F2ZWRGaWxsUnVs
ZSA9IGMtPmZpbGxSdWxlKCk7CisgICAgYy0+c2V0RmlsbFJ1bGUodG9XaW5kUnVsZSh3aW5kaW5n
UnVsZSkpOworCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CisgICAgaWYg
KGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7Cisg
ICAgICAgIGJlZ2luQ29tcG9zaXRlTGF5ZXIoKTsKKyAgICAgICAgYy0+ZmlsbFBhdGgocGF0aCk7
CisgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52
YXMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29t
cG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKKyAgICAgICAgY2xlYXJDYW52YXMoKTsKKyAgICAgICAg
Yy0+ZmlsbFBhdGgocGF0aCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwor
ICAgIH0gZWxzZQorICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBpZiAoaXNF
bnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7
CisgICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGly
ZUNhbnZhcygpOworICAgIGVsc2UKKyAgICAgICAgZGlkRHJhdyhwYXRoLmZhc3RCb3VuZGluZ1Jl
Y3QoKSk7CisKKyAgICBjLT5zZXRGaWxsUnVsZShzYXZlZEZpbGxSdWxlKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBw
YXRoKQpAQCAtMTA4MCwyMiArMTA4NywzMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnN0cm9rZUludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKGdyYWRpZW50
ICYmIGdyYWRpZW50LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
cGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUo
c3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7Ci0gICAgICAgICAgICBiZWdpbkNvbXBvc2l0ZUxh
eWVyKCk7Ci0gICAgICAgICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICAgICAgZW5k
Q29tcG9zaXRlTGF5ZXIoKTsKLSAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVy
YXRvcjo6Q29weSkgewotICAgICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAgICAgICAgICAgIGMt
PnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gcGF0aC5m
YXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgICAgICAgICBpbmZsYXRlU3Ryb2tlUmVjdChkaXJ0eVJl
Y3QpOwotICAgICAgICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKLSAgICAgICAgICAgIGRpZERy
YXcoZGlydHlSZWN0KTsKLSAgICAgICAgfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0gZmFsc2U7CisgICAg
aWYgKGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7
CisgICAgICAgIGJlZ2luQ29tcG9zaXRlTGF5ZXIoKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aChw
YXRoKTsKKyAgICAgICAgZW5kQ29tcG9zaXRlTGF5ZXIoKTsKKyAgICAgICAgcmVwYWludEVudGly
ZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9
PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgeworICAgICAgICBjbGVhckNhbnZhcygpOworICAg
ICAgICBjLT5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0g
dHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKKworICAgIGlm
IChpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxs
b3B0KTsKKyAgICBlbHNlIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQorICAgICAgICBkaWREcmF3
RW50aXJlQ2FudmFzKCk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gZGlydHlSZWN0ID0gcGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgICAgIGluZmxhdGVTdHJva2VSZWN0KGRpcnR5UmVj
dCk7CisgICAgICAgIGRpZERyYXcoZGlydHlSZWN0KTsKICAgICB9CiB9CiAKQEAgLTEyNDIsMjIg
KzEyNTcsMjggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpmaWxsUmVjdChm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQKIAogICAgIEZsb2F0UmVjdCByZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCisgICAgYm9vbCByZXBhaW50RW50aXJlQ2FudmFzID0g
ZmFsc2U7CiAgICAgaWYgKHJlY3RDb250YWluc0NhbnZhcyhyZWN0KSkgewogICAgICAgICBjLT5m
aWxsUmVjdChyZWN0KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgICAgICBy
ZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGlzRnVsbENhbnZhc0Nv
bXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7CiAgICAgICAgIGJlZ2luQ29t
cG9zaXRlTGF5ZXIoKTsKICAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCk7CiAgICAgICAgIGVuZENv
bXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAg
cmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2Jh
bENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewogICAgICAgICBjbGVhckNh
bnZhcygpOwogICAgICAgICBjLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgZGlkRHJhd0VudGly
ZUNhbnZhcygpOwotICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0
cnVlOworICAgIH0gZWxzZQogICAgICAgICBjLT5maWxsUmVjdChyZWN0KTsKKworICAgIGlmIChp
c0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0
KTsKKyAgICBlbHNlIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQorICAgICAgICBkaWREcmF3RW50
aXJlQ2FudmFzKCk7CisgICAgZWxzZQogICAgICAgICBkaWREcmF3KHJlY3QpOwotICAgIH0KIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJva2VSZWN0KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCkBAIC0xMjc5LDE5ICsxMzAwLDI2
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2tlUmVjdChmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0
UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGJvb2wgcmVwYWludEVudGlyZUNh
bnZhcyA9IGZhbHNlOwogICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCku
Z2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CiAgICAg
ICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgc3RhdGUoKS5saW5lV2lkdGgpOwogICAgICAgICBlbmRD
b21wb3NpdGVMYXllcigpOwotICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAg
IHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9i
YWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgY2xlYXJD
YW52YXMoKTsKICAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBzdGF0ZSgpLmxpbmVXaWR0aCk7
CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAg
ICBjLT5zdHJva2VSZWN0KHJlY3QsIHN0YXRlKCkubGluZVdpZHRoKTsKKworICAgIGlmIChpc0Vu
dGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0KTsK
KyAgICBlbHNlIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQogICAgICAgICBkaWREcmF3RW50aXJl
Q2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9
IHJlY3Q7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcmVjdDsKICAg
ICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUoc3RhdGUoKS5saW5lV2lkdGggLyAyKTsKLSAgICAg
ICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBzdGF0ZSgpLmxpbmVXaWR0aCk7CiAgICAgICAgIGRpZERy
YXcoYm91bmRpbmdSZWN0KTsKICAgICB9CiB9CkBAIC0xNTUxLDIxICsxNTc5LDI3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFnZShEb2N1
bWVudCYgZG9jdW1lbnQsIENhCiAKICAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zID0g
eyBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiB9OwogCisgICAgYm9vbCByZXBhaW50RW50aXJl
Q2FudmFzID0gZmFsc2U7CiAgICAgaWYgKHJlY3RDb250YWluc0NhbnZhcyhub3JtYWxpemVkRHN0
UmVjdCkpIHsKICAgICAgICAgYy0+ZHJhd0ltYWdlKCppbWFnZSwgbm9ybWFsaXplZERzdFJlY3Qs
IG5vcm1hbGl6ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZh
cygpOworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYg
KGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUob3ApKSB7CiAgICAgICAgIGZ1bGxDYW52YXNDb21w
b3NpdGVkRHJhd0ltYWdlKCppbWFnZSwgbm9ybWFsaXplZERzdFJlY3QsIG5vcm1hbGl6ZWRTcmNS
ZWN0LCBvcCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWlu
dEVudGlyZUNhbnZhcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChvcCA9PSBDb21wb3NpdGVPcGVy
YXRvcjo6Q29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAgICBjLT5kcmF3SW1h
Z2UoKmltYWdlLCBub3JtYWxpemVkRHN0UmVjdCwgbm9ybWFsaXplZFNyY1JlY3QsIG9wdGlvbnMp
OwotICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKKyAgICAgICAg
cmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlCiAgICAgICAgIGMtPmRyYXdJ
bWFnZSgqaW1hZ2UsIG5vcm1hbGl6ZWREc3RSZWN0LCBub3JtYWxpemVkU3JjUmVjdCwgb3B0aW9u
cyk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWRE
cmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAg
ICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UKICAgICAgICAgZGlkRHJhdyhu
b3JtYWxpemVkRHN0UmVjdCk7Ci0gICAgfQotICAgIAorCiAgICAgaWYgKGltYWdlLT5pc1NWR0lt
YWdlKCkpCiAgICAgICAgIGltYWdlLT5zZXRJbWFnZU9ic2VydmVyKG9ic2VydmVyKTsKIApAQCAt
MTYwMCwxMiArMTYzNCwxMyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoQ2FudmFzQmFzZSYgc291cmNlQ2FudgogCiAgICAgc291cmNl
Q2FudmFzLm1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CiAKKyAgICBib29sIHJlcGFp
bnRFbnRpcmVDYW52YXMgPSBmYWxzZTsKICAgICBpZiAocmVjdENvbnRhaW5zQ2FudmFzKGRzdFJl
Y3QpKSB7CiAgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcigqYnVmZmVyLCBkc3RSZWN0LCBzcmNS
ZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwot
ICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52
YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0
ZSgpLmdsb2JhbENvbXBvc2l0ZSkpIHsKICAgICAgICAgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3
SW1hZ2UoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUp
OwotICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIHJlcGFpbnRFbnRpcmVD
YW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgPT0g
Q29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgaWYgKCZzb3VyY2VDYW52YXMgPT0g
JmNhbnZhc0Jhc2UoKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gY29weSA9IGJ1ZmZlci0+Y29w
eVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsICpjKSkg
ewpAQCAtMTYxNiwxMSArMTY1MSwxNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoQ2FudmFzQmFzZSYgc291cmNlQ2FudgogICAgICAg
ICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcigqYnVm
ZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCB7IHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgp
Lmdsb2JhbEJsZW5kIH0pOwogICAgICAgICB9Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMo
KTsKLSAgICB9IGVsc2UgeworICAgICAgICByZXBhaW50RW50aXJlQ2FudmFzID0gdHJ1ZTsKKyAg
ICB9IGVsc2UKICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNy
Y1JlY3QsIHsgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7
CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQorICAgICAgICBkaWREcmF3
KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGlyZUNhbnZhcykKKyAgICAg
ICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UKICAgICAgICAgZGlkRHJhdyhkc3RS
ZWN0KTsKLSAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTY1MCw3ICsxNjkwLDEwIEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFn
ZShIVE1MVmlkZW9FbGVtZW50JiB2aWRlCiAjaWYgVVNFKENHKQogICAgIGlmIChhdXRvIGltYWdl
ID0gdmlkZW8ubmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpKSB7CiAgICAgICAgIGMtPmRyYXdO
YXRpdmVJbWFnZSgqaW1hZ2UsIEZsb2F0U2l6ZSh2aWRlby52aWRlb1dpZHRoKCksIHZpZGVvLnZp
ZGVvSGVpZ2h0KCkpLCBkc3RSZWN0LCBzcmNSZWN0KTsKLSAgICAgICAgaWYgKHJlY3RDb250YWlu
c0NhbnZhcyhkc3RSZWN0KSkKKworICAgICAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0
eSgpKQorICAgICAgICAgICAgZGlkRHJhdyhXVEY6Om51bGxvcHQpOworICAgICAgICBlbHNlIGlm
IChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVjdCkpCiAgICAgICAgICAgICBkaWREcmF3RW50aXJl
Q2FudmFzKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRpZERyYXcoZHN0UmVjdCk7CkBA
IC0xNjY2LDcgKzE3MDksMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQmIHZpZGUKICAgICBjLT50cmFu
c2xhdGUoLXNyY1JlY3QubG9jYXRpb24oKSk7CiAgICAgdmlkZW8ucGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoKmMsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUodmlkZW8pKSk7CiAgICAg
c3RhdGVTYXZlci5yZXN0b3JlKCk7Ci0gICAgZGlkRHJhdyhkc3RSZWN0KTsKKworICAgIGlmIChp
c0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisgICAgICAgIGRpZERyYXcoV1RGOjpudWxsb3B0
KTsKKyAgICBlbHNlCisgICAgICAgIGRpZERyYXcoZHN0UmVjdCk7CiAKICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTcwMCwyMCArMTc0NywyNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoSW1hZ2VCaXRtYXAmIGltYWdlQml0bQogCiAg
ICAgY2hlY2tPcmlnaW4oJmltYWdlQml0bWFwKTsKIAorICAgIGJvb2wgcmVwYWludEVudGlyZUNh
bnZhcyA9IGZhbHNlOwogICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVjdCkpIHsKICAg
ICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpidWZmZXIsIGRzdFJlY3QsIHNyY1JlY3QsIHsgc3Rh
dGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7Ci0gICAgICAgIGRp
ZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7
CiAgICAgfSBlbHNlIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFs
Q29tcG9zaXRlKSkgewogICAgICAgICBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZSgqYnVm
ZmVyLCBkc3RSZWN0LCBzcmNSZWN0LCBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSk7Ci0gICAgICAg
IGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRy
dWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVP
cGVyYXRvcjo6Q29weSkgewogICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAgICBjLT5kcmF3
SW1hZ2VCdWZmZXIoKmJ1ZmZlciwgZHN0UmVjdCwgc3JjUmVjdCwgeyBzdGF0ZSgpLmdsb2JhbENv
bXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKLSAgICAgICAgZGlkRHJhd0VudGlyZUNh
bnZhcygpOwotICAgIH0gZWxzZSB7CisgICAgICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVl
OworICAgIH0gZWxzZQogICAgICAgICBjLT5kcmF3SW1hZ2VCdWZmZXIoKmJ1ZmZlciwgZHN0UmVj
dCwgc3JjUmVjdCwgeyBzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVu
ZCB9KTsKKworICAgIGlmIChpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkpCisgICAgICAgIGRp
ZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlIGlmIChyZXBhaW50RW50aXJlQ2FudmFzKQor
ICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgZWxzZQogICAgICAgICBkaWREcmF3
KGRzdFJlY3QpOwotICAgIH0KIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0yMDAzLDI5ICsyMDU2
LDUyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlkRHJhd0VudGlyZUNh
bnZhcygpCiAgICAgZGlkRHJhdyhiYWNraW5nU3RvcmVCb3VuZHMoKSwgRGlkRHJhd09wdGlvbjo6
QXBwbHlDbGlwKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaWRE
cmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgT3B0aW9uU2V0PERpZERyYXdPcHRpb24+IG9wdGlvbnMp
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpZERyYXcoT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0LCBPcHRpb25TZXQ8RGlkRHJhd09wdGlvbj4gb3B0aW9ucykKIHsKICAgICBp
ZiAoIWRyYXdpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCku
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKworICAgIGlmICghcmVjdCkgeworICAgICAgICBjYW52
YXNCYXNlKCkuZGlkRHJhdyhXVEY6Om51bGxvcHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byBkaXJ0eVJlY3QgPSByZWN0LnZhbHVlKCk7CisgICAgaWYgKGRpcnR5UmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBy
OworICAgIGlmICghc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQorICAgICAgICByZXR1
cm47CiAKICAgICBpZiAob3B0aW9ucy5jb250YWlucyhEaWREcmF3T3B0aW9uOjpBcHBseVRyYW5z
Zm9ybSkpCiAgICAgICAgIGRpcnR5UmVjdCA9IHN0YXRlKCkudHJhbnNmb3JtLm1hcFJlY3QoZGly
dHlSZWN0KTsKIAogICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKERpZERyYXdPcHRpb246OkFwcGx5
U2hhZG93KSAmJiBzdGF0ZSgpLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIC8v
IFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgIEZs
b2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8gc2hhZG93UmVjdCA9
IGRpcnR5UmVjdDsKICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKHN0YXRlKCkuc2hhZG93T2Zmc2V0
KTsKICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHN0YXRlKCkuc2hhZG93Qmx1cik7CiAgICAg
ICAgIGRpcnR5UmVjdC51bml0ZShzaGFkb3dSZWN0KTsKICAgICB9CiAKKyAgICBhdXRvIG9sZERp
cnR5UmVjdCA9IG1fZGlydHlSZWN0OworICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7
CisKICAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBhcHBseSB0aGUgY2xpcCBiZWNhdXNlIHdl
IGhhdmUgbm8gd2F5IG9mIHJlYWRpbmcgdGhlIGNsaXAgb3V0IG9mIHRoZSBHcmFwaGljc0NvbnRl
eHQuCisgICAgaWYgKG1fZGlydHlSZWN0ID09IG9sZERpcnR5UmVjdCkKKyAgICAgICAgY2FudmFz
QmFzZSgpLmRpZERyYXcoV1RGOjpudWxsb3B0KTsKKyAgICBlbHNlCisgICAgICAgIGNhbnZhc0Jh
c2UoKS5kaWREcmF3KG1fZGlydHlSZWN0KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KCkKK3sKKyAgICBtX2RpcnR5UmVj
dCA9IHsgfTsKK30KIAotICAgIGNhbnZhc0Jhc2UoKS5kaWREcmF3KGRpcnR5UmVjdCk7Citib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzRW50aXJlQmFja2luZ1N0b3JlRGlydHko
KSBjb25zdAoreworICAgIHJldHVybiBtX2RpcnR5UmVjdCA9PSBiYWNraW5nU3RvcmVCb3VuZHMo
KTsKIH0KIAogY29uc3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRl
LCAxPiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCkBAIC0yMTg5
LDcgKzIyNjUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogICAgIGlmICghc291cmNlUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVz
dE9mZnNldCkpOwogCi0gICAgZGlkRHJhdyhkZXN0UmVjdCwgeyB9KTsgLy8gaWdub3JlIHRyYW5z
Zm9ybSwgc2hhZG93IGFuZCBjbGlwCisgICAgZGlkRHJhdyhGbG9hdFJlY3QgeyBkZXN0UmVjdCB9
LCB7IH0pOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppbmZsYXRlU3Ryb2tlUmVjdChGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CkBAIC0yNDUyLDE5ICsyNTI4LDI1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwg
ZmxvCiAgICAgICAgIGxvY2F0aW9uID0gRmxvYXRQb2ludCgpOwogICAgIH0KIAorICAgIGJvb2wg
cmVwYWludEVudGlyZUNhbnZhcyA9IGZhbHNlOwogICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3Np
dGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNvbXBvc2l0
ZUxheWVyKCk7CiAgICAgICAgIGZvbnRQcm94eS5kcmF3QmlkaVRleHQoKmMsIHRleHRSdW4sIGxv
Y2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAgICAgICAg
IGVuZENvbXBvc2l0ZUxheWVyKCk7Ci0gICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAg
ICAgICAgcmVwYWludEVudGlyZUNhbnZhcyA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSgp
Lmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSkgewogICAgICAgICBj
bGVhckNhbnZhcygpOwogICAgICAgICBmb250UHJveHkuZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVu
LCBsb2NhdGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwotICAg
ICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYWlu
dEVudGlyZUNhbnZhcyA9IHRydWU7CisgICAgfSBlbHNlCiAgICAgICAgIGZvbnRQcm94eS5kcmF3
QmlkaVRleHQoKmMsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJ
ZkZvbnROb3RSZWFkeSk7CisKKyAgICBpZiAoaXNFbnRpcmVCYWNraW5nU3RvcmVEaXJ0eSgpKQor
ICAgICAgICBkaWREcmF3KFdURjo6bnVsbG9wdCk7CisgICAgZWxzZSBpZiAocmVwYWludEVudGly
ZUNhbnZhcykKKyAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOworICAgIGVsc2UKICAgICAg
ICAgZGlkRHJhdyh0ZXh0UmVjdCk7Ci0gICAgfQogfQogCiBSZWY8VGV4dE1ldHJpY3M+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5n
JiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDQ1ODgzNmM0ZTcxNjE0YzYzZjYxNmYxMWZj
ZTE0Y2I3NDBiZTZmMGUuLjQwZDVkYTU3MDA3YzFiNTYzMWRkM2NiODJhMmQ1MjliZDM0MzBiMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTMxNiwxNSArMzE2LDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEFwcGx5U2hhZG93ID0gMSA8PCAxLAogICAgICAgICBBcHBseUNsaXAgPSAxIDw8IDIsCiAg
ICAgfTsKLSAgICB2b2lkIGRpZERyYXcoY29uc3QgRmxvYXRSZWN0JiwgT3B0aW9uU2V0PERpZERy
YXdPcHRpb24+ID0geyBEaWREcmF3T3B0aW9uOjpBcHBseVRyYW5zZm9ybSwgRGlkRHJhd09wdGlv
bjo6QXBwbHlTaGFkb3csIERpZERyYXdPcHRpb246OkFwcGx5Q2xpcCB9KTsKKyAgICB2b2lkIGRp
ZERyYXcoT3B0aW9uYWw8RmxvYXRSZWN0PiwgT3B0aW9uU2V0PERpZERyYXdPcHRpb24+ID0geyBE
aWREcmF3T3B0aW9uOjpBcHBseVRyYW5zZm9ybSwgRGlkRHJhd09wdGlvbjo6QXBwbHlTaGFkb3cs
IERpZERyYXdPcHRpb246OkFwcGx5Q2xpcCB9KTsKICAgICB2b2lkIGRpZERyYXdFbnRpcmVDYW52
YXMoKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYmFja2luZ1N0b3JlQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCBGbG9hdFNpemUgeyBjYW52YXNCYXNlKCkuc2l6ZSgpIH0g
fTsgfQogCiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIG92ZXJyaWRl
OwogICAgIGJvb2wgbmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSBjb25zdCBmaW5hbDsKICAg
ICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgZmluYWw7CiAKKyAgICB2b2lkIGNsZWFyQWNjdW11
bGF0ZWREaXJ0eVJlY3QoKSBmaW5hbDsKKyAgICBib29sIGlzRW50aXJlQmFja2luZ1N0b3JlRGly
dHkoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgYmFja2luZ1N0b3JlQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCBGbG9hdFNpemUgeyBjYW52YXNCYXNlKCkuc2l6ZSgpIH0g
fTsgfQorCiAgICAgdm9pZCB1bndpbmRTdGF0ZVN0YWNrKCk7CiAgICAgdm9pZCByZWFsaXplU2F2
ZXNMb29wKCk7CiAKQEAgLTM4OCw2ICszOTAsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBNYXhTYXZlQ291bnQgPSAxMDI0ICogMTY7CiAgICAgVmVjdG9yPFN0
YXRlLCAxPiBtX3N0YXRlU3RhY2s7CisgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIHVu
c2lnbmVkIG1fdW5yZWFsaXplZFNhdmVDb3VudCB7IDAgfTsKICAgICBib29sIG1fdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGU7CiAgICAgYm9vbCBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcg
eyBmYWxzZSB9Owo=
</data>
<flag name="review"
          id="442578"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
          </attachment>
      

    </bug>

</bugzilla>