<?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>210397</bug_id>
          
          <creation_ts>2020-04-11 20:58:20 -0700</creation_ts>
          <short_desc>[LFC][TFC] Cleanup class/struct/variable names in TableGrid/TableFormattingContext</short_desc>
          <delta_ts>2020-04-12 08:47:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640632</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-04-11 20:58:20 -0700</bug_when>
    <thetext>This is in preparation for the column span distribution work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640633</commentid>
    <comment_count>1</comment_count>
      <attachid>396204</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-04-11 21:00:37 -0700</bug_when>
    <thetext>Created attachment 396204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640674</commentid>
    <comment_count>2</comment_count>
      <attachid>396204</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-12 08:24:18 -0700</bug_when>
    <thetext>Comment on attachment 396204
Patch

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

&gt; Source/WebCore/layout/tableformatting/TableGrid.h:92
&gt; -    class ColumnsContext {
&gt; +    class Columns {

nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640677</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-12 08:46:56 -0700</bug_when>
    <thetext>Committed r259978: &lt;https://trac.webkit.org/changeset/259978&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396204.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640678</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-12 08:47:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/61675513&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396204</attachid>
            <date>2020-04-11 21:00:37 -0700</date>
            <delta_ts>2020-04-12 08:46:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210397-20200411210036.patch</filename>
            <type>text/plain</type>
            <size>34547</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM0OGFkOGE2MDdjY2Y4
NmIyZGQwZmQ1YTNhYTFiNGY1NGNhMTBiYS4uZTVhMWMwZTk3OGUwYzc1ODc1NWI4ZTQ0NDc3ZDFi
MDQzMzFhYTJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTA0LTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBDbGVhbnVw
IGNsYXNzL3N0cnVjdC92YXJpYWJsZSBuYW1lcyBpbiBUYWJsZUdyaWQvVGFibGVGb3JtYXR0aW5n
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEwMzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIGNvbHVtbiBzcGFubmVyIHdvcmsuCisKKyAg
ICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbkZsb3dDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OnBvc2l0aW9uVGFibGVDZWxscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldENvbXB1dGVkR2VvbWV0cnlGb3JS
b3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
c2V0Q29tcHV0ZWRHZW9tZXRyeUZvclNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZW5zdXJlVGFibGVHcmlkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVByZWZlcnJlZFdp
ZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFIb3Jpem9udGFsU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojp1c2VBc0NvbnRl
bnRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRUYWJsZUNlbGxCb3gpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxh
eW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVHcmlkOjpDb2x1bW46OkNvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlR3JpZDo6Q29sdW1uOjpoYXNGaXhlZFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDb2x1bW5zOjphZGRDb2x1bW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNvbHVtbnM6OmFkZEFub255bW91c0NvbHVtbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Um93czo6YWRkUm93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpSb3c6OlJvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q2VsbDo6Q2VsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRhYmxlR3JpZDo6U2xvdDo6U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlR3JpZDo6c2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3Jp
ZDo6YXBwZW5kQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6aW5z
ZXJ0Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6cmVtb3ZlQ2Vs
bCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6d2lkdGhDb25zdHJhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uc0NvbnRleHQ6
OmFkZENvbHVtbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3Jp
ZDo6Q2VsbEluZm86OkNlbGxJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGFibGVHcmlkOjpTbG90SW5mbzo6U2xvdEluZm8pOiBEZWxldGVkLgorICAgICAgICAqIGxh
eW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlR3JpZDo6dG90YWxIb3Jpem9udGFsU3BhY2luZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6aGFzQ29tcHV0ZWRXaWR0aENvbnN0cmFpbnRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDb2x1bW46OmJveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uczo6bGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uczo6bGlzdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uczo6c2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uczo6
bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlk
OjpSb3c6OmxvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
YWJsZUdyaWQ6OlJvdzo6Ym94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVHcmlkOjpSb3dzOjpsaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlk
OjpSb3dzOjpyb3dMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVH
cmlkOjpSb3dzOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVH
cmlkOjpDZWxsOjpzdGFydENvbHVtbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRhYmxlR3JpZDo6Q2VsbDo6ZW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVHcmlkOjpDZWxsOjpzdGFydFJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q2VsbDo6ZW5kUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxsOjpjb2x1bW5TcGFuIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxsOjpyb3dTcGFuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxsOjpwb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q2VsbDo6c2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q2VsbDo6Ym94IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpjb2x1bW5zIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpjb2x1bW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVHcmlkOjpyb3dzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVHcmlkOjpyb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVH
cmlkOjpjZWxscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q2VsbElu
Zm86OnN0YXJ0Q29sdW1uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGFibGVHcmlkOjpDZWxsSW5mbzo6ZW5kQ29sdW1uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxsSW5mbzo6c3RhcnRSb3cgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OkNlbGxJbmZv
OjplbmRSb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJs
ZUdyaWQ6OkNlbGxJbmZvOjpjb2x1bW5TcGFuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVHcmlkOjpDZWxsSW5mbzo6cm93U3BhbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uOjpjb2x1bW5C
b3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUdyaWQ6
OkNvbHVtbnNDb250ZXh0Ojpjb2x1bW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVHcmlkOjpDb2x1bW5zQ29udGV4dDo6Y29sdW1ucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlR3JpZDo6Q29sdW1uc0NvbnRleHQ6Omxv
Z2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlR3JpZDo6Y29sdW1uc0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpUYWJsZUdyaWQ6OmNvbHVtbnNDb250ZXh0KTogRGVsZXRlZC4KKwogMjAyMC0w
NC0wMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxk
IGZpeDogSFRNTEZvcm1FbGVtZW50IHNob3VsZCB1c2UgV2Vha1B0ciB0byBrZWVwIHRyYWNrIG9m
IGl0cyBGb3JtTmFtZWRJdGVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFi
bGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBh
ZWRmZDQ0OTU5OTc2OTg2ZjBkYWRhMjVjYjEwMDBiMzU3NzY1MTU4Li5iMjUyZGY2NDc0NGRkYmFj
NWRhZGJjNWJhMDYxZWQ3YjE0ZjQ2ZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTY0LDE0ICs2NCwxNCBAQCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUYWJsZUZvcm1h
dHRpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0Nvbgogdm9pZCBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9u
dGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKQogewogICAgIGF1dG8m
IGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKLSAgICBhdXRvJiBjb2x1bW5z
Q29udGV4dCA9IGdyaWQuY29sdW1uc0NvbnRleHQoKTsKKyAgICBhdXRvJiBjb2x1bW5zID0gZ3Jp
ZC5jb2x1bW5zKCk7CiAKICAgICBjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNw
YWNlKGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwogICAgIC8vIDEuIFBvc2l0
aW9uIGVhY2ggY29sdW1uLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGRlYWwgd2l0
aCBjb2xsYXBzaW5nIGJvcmRlcnMgZXRjLgogICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNpbmcgPSBn
cmlkLmhvcml6b250YWxTcGFjaW5nKCk7CiAgICAgYXV0byBjb2x1bW5Mb2dpY2FsTGVmdCA9IGhv
cml6b250YWxTcGFjaW5nOwotICAgIGZvciAoYXV0byYgY29sdW1uIDogY29sdW1uc0NvbnRleHQu
Y29sdW1ucygpKSB7CisgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBjb2x1bW5zLmxpc3QoKSkgewog
ICAgICAgICBjb2x1bW4uc2V0TG9naWNhbExlZnQoY29sdW1uTG9naWNhbExlZnQpOwogICAgICAg
ICBjb2x1bW5Mb2dpY2FsTGVmdCArPSAoY29sdW1uLmxvZ2ljYWxXaWR0aCgpICsgaG9yaXpvbnRh
bFNwYWNpbmcpOwogICAgIH0KQEAgLTgwLDE1ICs4MCwxNSBAQCB2b2lkIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRh
dGlvbgogICAgIGF1dG8mIGNlbGxMaXN0ID0gZ3JpZC5jZWxscygpOwogICAgIEFTU0VSVCghY2Vs
bExpc3QuaXNFbXB0eSgpKTsKICAgICBmb3IgKGF1dG8mIGNlbGwgOiBjZWxsTGlzdCkgewotICAg
ICAgICBhdXRvJiBjZWxsTGF5b3V0Qm94ID0gY2VsbC0+dGFibGVDZWxsQm94OwotICAgICAgICBs
YXlvdXRUYWJsZUNlbGxCb3goKmNlbGwsIGludmFsaWRhdGlvblN0YXRlLCBob3Jpem9udGFsQ29u
c3RyYWludHMpOworICAgICAgICBhdXRvJiBjZWxsQm94ID0gY2VsbC0+Ym94KCk7CisgICAgICAg
IGxheW91dENlbGwoKmNlbGwsIGludmFsaWRhdGlvblN0YXRlLCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOwogICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNvbHVtbiBhbmQgcm93IHNw
YW5uaW5nIGFuZCB0aGlzIHJlcXVpcmVzIGEgMiBwYXNzIGxheW91dC4KLSAgICAgICAgYXV0byYg
cm93ID0gZ3JpZC5yb3dzKCkuYXQoY2VsbC0+c3RhcnRSb3coKSk7Ci0gICAgICAgIHJvdy5zZXRM
b2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KHJvdy5sb2dpY2FsSGVpZ2h0KCksIGdlb21ldHJ5Rm9yQm94
KGNlbGxMYXlvdXRCb3gpLm1hcmdpbkJveEhlaWdodCgpKSk7CisgICAgICAgIGF1dG8mIHJvdyA9
IGdyaWQucm93cygpLmxpc3QoKS5hdChjZWxsLT5zdGFydFJvdygpKTsKKyAgICAgICAgcm93LnNl
dExvZ2ljYWxIZWlnaHQoc3RkOjptYXgocm93LmxvZ2ljYWxIZWlnaHQoKSwgZ2VvbWV0cnlGb3JC
b3goY2VsbEJveCkubWFyZ2luQm94SGVpZ2h0KCkpKTsKICAgICB9CiAgICAgLy8gVGhpcyBpcyBh
ZnRlciB0aGUgc2Vjb25kIHBhc3Mgd2hlbiBjZWxsIGhlaWdodHMgYXJlIGZ1bGx5IGNvbXB1dGVk
LgogICAgIGF1dG8gcm93TG9naWNhbFRvcCA9IGdyaWQudmVydGljYWxTcGFjaW5nKCk7Ci0gICAg
Zm9yIChhdXRvJiByb3cgOiBncmlkLnJvd3MoKSkgeworICAgIGZvciAoYXV0byYgcm93IDogZ3Jp
ZC5yb3dzKCkubGlzdCgpKSB7CiAgICAgICAgIHJvdy5zZXRMb2dpY2FsVG9wKHJvd0xvZ2ljYWxU
b3ApOwogICAgICAgICByb3dMb2dpY2FsVG9wICs9IChyb3cubG9naWNhbEhlaWdodCgpICsgZ3Jp
ZC52ZXJ0aWNhbFNwYWNpbmcoKSk7CiAgICAgfQpAQCAtOTksMTkgKzk5LDE5IEBAIHZvaWQgVGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0
ZSYgaW52YWxpZGF0aW9uCiAgICAgc2V0Q29tcHV0ZWRHZW9tZXRyeUZvclJvd3MoKTsKIH0KIAot
dm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJsZUNlbGxCb3goY29uc3QgVGFi
bGVHcmlkOjpDZWxsSW5mbyYgY2VsbCwgSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0
YXRlLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykK
K3ZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6
OkNlbGwmIGNlbGwsIEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7Ci0gICAgYXV0
byYgY2VsbExheW91dEJveCA9IGNlbGwudGFibGVDZWxsQm94OwotICAgIGNvbXB1dGVCb3JkZXJB
bmRQYWRkaW5nKGNlbGxMYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgYXV0
byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CisgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoY2Vs
bEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICAvLyBNYXJnaW5zIGRvIG5vdCBhcHBs
eSB0byBpbnRlcm5hbCB0YWJsZSBlbGVtZW50cy4KLSAgICBhdXRvJiBjZWxsRGlzcGxheUJveCA9
IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goY2VsbExheW91dEJveCk7CisgICAgYXV0byYg
Y2VsbERpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGxCb3gpOwog
ICAgIGNlbGxEaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKICAgICBjZWxsRGlz
cGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJnaW4oeyB9KTsKICAgICAvLyBEb24ndCBr
bm93IHRoZSBhY3R1YWwgcG9zaXRpb24geWV0LgogICAgIGNlbGxEaXNwbGF5Qm94LnNldFRvcExl
ZnQoeyB9KTsKICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IFsmXSB7CiAgICAgICAgIGF1dG8mIGdy
aWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKLSAgICAgICAgYXV0byYgY29sdW1u
TGlzdCA9IGdyaWQuY29sdW1uc0NvbnRleHQoKS5jb2x1bW5zKCk7CisgICAgICAgIGF1dG8mIGNv
bHVtbkxpc3QgPSBncmlkLmNvbHVtbnMoKS5saXN0KCk7CiAgICAgICAgIGF1dG8gbG9naWNhbFdp
ZHRoID0gTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIGZvciAoYXV0byBjb2x1bW5JbmRleCA9IGNl
bGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uSW5kZXggPCBjZWxsLmVuZENvbHVtbigpOyArK2NvbHVt
bkluZGV4KQogICAgICAgICAgICAgbG9naWNhbFdpZHRoICs9IGNvbHVtbkxpc3QuYXQoY29sdW1u
SW5kZXgpLmxvZ2ljYWxXaWR0aCgpOwpAQCAtMTIxLDI2ICsxMjEsMjYgQEAgdm9pZCBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJsZUNlbGxCb3goY29uc3QgVGFibGVHcmlkOjpDZWxs
SW5mbyYgY2VsbCwKICAgICB9KCk7CiAgICAgY2VsbERpc3BsYXlCb3guc2V0Q29udGVudEJveFdp
ZHRoKGNvbnRlbnRXaWR0aCk7CiAKLSAgICBBU1NFUlQoY2VsbExheW91dEJveC5lc3RhYmxpc2hl
c0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgaWYgKGlzPENvbnRhaW5lckJveD4oY2Vs
bExheW91dEJveCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94PihjZWxsTGF5b3V0Qm94KS5oYXNJ
bkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkgewotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4
dFJvb3QgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGNlbGxMYXlvdXRCb3gpOworICAgIEFTU0VS
VChjZWxsQm94LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBpZiAo
aXM8Q29udGFpbmVyQm94PihjZWxsQm94KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGNlbGxC
b3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKSB7CisgICAgICAgIGF1dG8mIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCA9IGRvd25jYXN0PENvbnRhaW5lckJveD4oY2VsbEJveCk7CiAgICAgICAg
IGF1dG8gZm9ybWF0dGluZ0NvbnRleHRGb3JDZWxsQ29udGVudCA9IExheW91dENvbnRleHQ6OmNy
ZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgbGF5b3V0U3RhdGUo
KSk7CiAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQgPSBH
ZW9tZXRyeTo6aG9yaXpvbnRhbENvbnN0cmFpbnRzRm9ySW5GbG93KGNlbGxEaXNwbGF5Qm94KTsK
ICAgICAgICAgYXV0byB2ZXJ0aWNhbENvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQgPSBHZW9tZXRy
eTo6dmVydGljYWxDb25zdHJhaW50c0ZvckluRmxvdyhjZWxsRGlzcGxheUJveCk7CiAgICAgICAg
IGZvcm1hdHRpbmdDb250ZXh0Rm9yQ2VsbENvbnRlbnQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52
YWxpZGF0aW9uU3RhdGUsIGhvcml6b250YWxDb25zdHJhaW50c0ZvckNlbGxDb250ZW50LCB2ZXJ0
aWNhbENvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQpOwogICAgIH0KICAgICBjZWxsRGlzcGxheUJv
eC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOwotICAgIGNlbGxEaXNwbGF5Qm94LnNl
dENvbnRlbnRCb3hIZWlnaHQoZ2VvbWV0cnkoKS50YWJsZUNlbGxIZWlnaHRBbmRNYXJnaW4oY2Vs
bExheW91dEJveCkuY29udGVudEhlaWdodCk7CisgICAgY2VsbERpc3BsYXlCb3guc2V0Q29udGVu
dEJveEhlaWdodChnZW9tZXRyeSgpLnRhYmxlQ2VsbEhlaWdodEFuZE1hcmdpbihjZWxsQm94KS5j
b250ZW50SGVpZ2h0KTsKICAgICAvLyBGSVhNRTogQ2hlY2sgd2hhdCB0byBkbyB3aXRoIG91dC1v
Zi1mbG93IGNvbnRlbnQuCiB9CiAKIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6cG9zaXRp
b25UYWJsZUNlbGxzKCkKIHsKICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFi
bGVHcmlkKCk7Ci0gICAgYXV0byYgcm93TGlzdCA9IGdyaWQucm93cygpOwotICAgIGF1dG8mIGNv
bHVtbkxpc3QgPSBncmlkLmNvbHVtbnNDb250ZXh0KCkuY29sdW1ucygpOworICAgIGF1dG8mIHJv
d0xpc3QgPSBncmlkLnJvd3MoKS5saXN0KCk7CisgICAgYXV0byYgY29sdW1uTGlzdCA9IGdyaWQu
Y29sdW1ucygpLmxpc3QoKTsKICAgICBmb3IgKGF1dG8mIGNlbGwgOiBncmlkLmNlbGxzKCkpIHsK
LSAgICAgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5
Qm94KGNlbGwtPnRhYmxlQ2VsbEJveCk7CisgICAgICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0g
Zm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChjZWxsLT5ib3goKSk7CiAgICAgICAgIGNlbGxE
aXNwbGF5Qm94LnNldFRvcChyb3dMaXN0LmF0KGNlbGwtPnN0YXJ0Um93KCkpLmxvZ2ljYWxUb3Ao
KSk7CiAgICAgICAgIGNlbGxEaXNwbGF5Qm94LnNldExlZnQoY29sdW1uTGlzdC5hdChjZWxsLT5z
dGFydENvbHVtbigpKS5sb2dpY2FsTGVmdCgpKTsKICAgICB9CkBAIC0xNDksMTAgKzE0OSw5IEBA
IHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6cG9zaXRpb25UYWJsZUNlbGxzKCkKIHZvaWQg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0Q29tcHV0ZWRHZW9tZXRyeUZvclJvd3MoKQogewog
ICAgIGF1dG8mIGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKLSAgICBhdXRv
IHJvd1dpZHRoID0gZ3JpZC5jb2x1bW5zQ29udGV4dCgpLmxvZ2ljYWxXaWR0aCgpICsgMiAqIGdy
aWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKKyAgICBhdXRvIHJvd1dpZHRoID0gZ3JpZC5jb2x1bW5z
KCkubG9naWNhbFdpZHRoKCkgKyAyICogZ3JpZC5ob3Jpem9udGFsU3BhY2luZygpOwogCi0gICAg
YXV0byYgcm93TGlzdCA9IGdyaWQucm93cygpOwotICAgIGZvciAoYXV0byYgcm93IDogcm93TGlz
dCkgeworICAgIGZvciAoYXV0byYgcm93IDogZ3JpZC5yb3dzKCkubGlzdCgpKSB7CiAgICAgICAg
IGF1dG8mIHJvd0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KHJvdy5i
b3goKSk7CiAgICAgICAgIGluaXRpYWxpemVEaXNwbGF5Qm94VG9CbGFuayhyb3dEaXNwbGF5Qm94
KTsKICAgICAgICAgcm93RGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KHJvdy5sb2dpY2Fs
SGVpZ2h0KCkpOwpAQCAtMTY0LDE0ICsxNjMsMTQgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpzZXRDb21wdXRlZEdlb21ldHJ5Rm9yUm93cygpCiB2b2lkIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldENvbXB1dGVkR2VvbWV0cnlGb3JTZWN0aW9ucygpCiB7CiAgICAgYXV0byYgZ3Jp
ZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwotICAgIGF1dG8gc2VjdGlvbldpZHRo
ID0gZ3JpZC5jb2x1bW5zQ29udGV4dCgpLmxvZ2ljYWxXaWR0aCgpICsgMiAqIGdyaWQuaG9yaXpv
bnRhbFNwYWNpbmcoKTsKKyAgICBhdXRvIHNlY3Rpb25XaWR0aCA9IGdyaWQuY29sdW1ucygpLmxv
Z2ljYWxXaWR0aCgpICsgMiAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKIAogICAgIGZvciAo
YXV0byYgc2VjdGlvbiA6IGNoaWxkcmVuT2ZUeXBlPEJveD4ocm9vdCgpKSkgewogICAgICAgICBh
dXRvJiBzZWN0aW9uRGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goc2Vj
dGlvbik7CiAgICAgICAgIGluaXRpYWxpemVEaXNwbGF5Qm94VG9CbGFuayhzZWN0aW9uRGlzcGxh
eUJveCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaXplIHRhYmxlIHNlY3Rpb25zIHByb3Blcmx5Lgog
ICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRo
KTsKLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChncmlkLnJv
d3MoKS5sYXN0KCkubG9naWNhbEJvdHRvbSgpICsgZ3JpZC52ZXJ0aWNhbFNwYWNpbmcoKSk7Cisg
ICAgICAgIHNlY3Rpb25EaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQoZ3JpZC5yb3dzKCku
bGlzdCgpLmxhc3QoKS5sb2dpY2FsQm90dG9tKCkgKyBncmlkLnZlcnRpY2FsU3BhY2luZygpKTsK
ICAgICB9CiB9CiAKQEAgLTIxMSwxMyArMjEwLDEzIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29u
dGV4dDo6ZW5zdXJlVGFibGVHcmlkKCkKICAgICAgICAgY29sZ3JvdXAgPSBjb2xncm91cENhbmRp
ZGF0ZTsKIAogICAgIGlmIChjb2xncm91cCkgewotICAgICAgICBhdXRvJiBjb2x1bW5zQ29udGV4
dCA9IHRhYmxlR3JpZC5jb2x1bW5zQ29udGV4dCgpOworICAgICAgICBhdXRvJiBjb2x1bW5zID0g
dGFibGVHcmlkLmNvbHVtbnMoKTsKICAgICAgICAgZm9yIChhdXRvKiBjb2x1bW4gPSBkb3duY2Fz
dDxDb250YWluZXJCb3g+KCpjb2xncm91cCkuZmlyc3RDaGlsZCgpOyBjb2x1bW47IGNvbHVtbiA9
IGNvbHVtbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgQVNTRVJUKGNvbHVtbi0+aXNU
YWJsZUNvbHVtbigpKTsKICAgICAgICAgICAgIGF1dG8gY29sdW1uU3BhbkNvdW50ID0gY29sdW1u
LT5jb2x1bW5TcGFuKCk7CiAgICAgICAgICAgICBBU1NFUlQoY29sdW1uU3BhbkNvdW50ID4gMCk7
CiAgICAgICAgICAgICB3aGlsZSAoY29sdW1uU3BhbkNvdW50LS0pCi0gICAgICAgICAgICAgICAg
Y29sdW1uc0NvbnRleHQuYWRkQ29sdW1uKGNvbHVtbik7CisgICAgICAgICAgICAgICAgY29sdW1u
cy5hZGRDb2x1bW4oKmNvbHVtbik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI0NCwzNCArMjQz
LDM0IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRo
Rm9yQ29sdW1ucygpCiAgICAgLy8gICAgSWYgdGhlIHNwZWNpZmllZCAnd2lkdGgnIChXKSBvZiB0
aGUgY2VsbCBpcyBncmVhdGVyIHRoYW4gTUNXLCBXIGlzIHRoZSBtaW5pbXVtIGNlbGwgd2lkdGgu
IEEgdmFsdWUgb2YgJ2F1dG8nIG1lYW5zIHRoYXQgTUNXIGlzIHRoZSBtaW5pbXVtIGNlbGwgd2lk
dGguCiAgICAgLy8gICAgQWxzbywgY2FsY3VsYXRlIHRoZSAibWF4aW11bSIgY2VsbCB3aWR0aCBv
ZiBlYWNoIGNlbGw6IGZvcm1hdHRpbmcgdGhlIGNvbnRlbnQgd2l0aG91dCBicmVha2luZyBsaW5l
cyBvdGhlciB0aGFuIHdoZXJlIGV4cGxpY2l0IGxpbmUgYnJlYWtzIG9jY3VyLgogICAgIGZvciAo
YXV0byYgY2VsbCA6IGdyaWQuY2VsbHMoKSkgewotICAgICAgICBhdXRvJiB0YWJsZUNlbGxCb3gg
PSBjZWxsLT50YWJsZUNlbGxCb3g7Ci0gICAgICAgIEFTU0VSVCh0YWJsZUNlbGxCb3guZXN0YWJs
aXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgYXV0byYgY2VsbEJveCA9IGNlbGwt
PmJveCgpOworICAgICAgICBBU1NFUlQoY2VsbEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250
ZXh0KCkpOwogCi0gICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGggPSBmb3JtYXR0aW5nU3RhdGUu
aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveCh0YWJsZUNlbGxCb3gpOworICAgICAgICBh
dXRvIGludHJpbnNpY1dpZHRoID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHNGb3JCb3goY2VsbEJveCk7CiAgICAgICAgIGlmICghaW50cmluc2ljV2lkdGgpIHsKICAg
ICAgICAgICAgIGludHJpbnNpY1dpZHRoID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07
Ci0gICAgICAgICAgICBpZiAoaXM8Q29udGFpbmVyQm94Pih0YWJsZUNlbGxCb3gpICYmIGRvd25j
YXN0PENvbnRhaW5lckJveD4odGFibGVDZWxsQm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQo
KSkKLSAgICAgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IExheW91dENvbnRleHQ6OmNyZWF0
ZUZvcm1hdHRpbmdDb250ZXh0KGRvd25jYXN0PENvbnRhaW5lckJveD4odGFibGVDZWxsQm94KSwg
bGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAg
ICAgICAgICAgaW50cmluc2ljV2lkdGggPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lk
dGgodGFibGVDZWxsQm94LCAqaW50cmluc2ljV2lkdGgpOwotICAgICAgICAgICAgYXV0byBib3Jk
ZXIgPSBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHRhYmxlQ2VsbEJveCk7Ci0gICAgICAgICAg
ICBhdXRvIHBhZGRpbmcgPSAqZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcodGFibGVDZWxsQm94
LCB7IH0pOworICAgICAgICAgICAgaWYgKGlzPENvbnRhaW5lckJveD4oY2VsbEJveCkgJiYgZG93
bmNhc3Q8Q29udGFpbmVyQm94PihjZWxsQm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkK
KyAgICAgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZv
cm1hdHRpbmdDb250ZXh0KGRvd25jYXN0PENvbnRhaW5lckJveD4oY2VsbEJveCksIGxheW91dFN0
YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICAgICAgICAg
IGludHJpbnNpY1dpZHRoID0gZ2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRoKGNlbGxC
b3gsICppbnRyaW5zaWNXaWR0aCk7CisgICAgICAgICAgICBhdXRvIGJvcmRlciA9IGdlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIoY2VsbEJveCk7CisgICAgICAgICAgICBhdXRvIHBhZGRpbmcgPSAq
Z2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcoY2VsbEJveCwgeyB9KTsKIAogICAgICAgICAgICAg
aW50cmluc2ljV2lkdGgtPmV4cGFuZChib3JkZXIuaG9yaXpvbnRhbC53aWR0aCgpICsgcGFkZGlu
Zy5ob3Jpem9udGFsLndpZHRoKCkpOwotICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3godGFibGVDZWxsQm94LCAqaW50cmluc2ljV2lk
dGgpOworICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHNGb3JCb3goY2VsbEJveCwgKmludHJpbnNpY1dpZHRoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gY29sdW1uU3BhbiA9IGNlbGwtPnNpemUud2lkdGgoKTsKKyAgICAgICAgYXV0byBj
b2x1bW5TcGFuID0gY2VsbC0+c2l6ZSgpLndpZHRoKCk7CiAgICAgICAgIGF1dG8gc2xvdEludHJp
bnNpY1dpZHRoID0gRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
eyBpbnRyaW5zaWNXaWR0aC0+bWluaW11bSAvIGNvbHVtblNwYW4sIGludHJpbnNpY1dpZHRoLT5t
YXhpbXVtIC8gY29sdW1uU3BhbiB9OwotICAgICAgICBhdXRvIGluaXRpYWxQb3NpdGlvbiA9IGNl
bGwtPnBvc2l0aW9uOworICAgICAgICBhdXRvIGluaXRpYWxQb3NpdGlvbiA9IGNlbGwtPnBvc2l0
aW9uKCk7CiAgICAgICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGNvbHVtblNwYW47ICsraSkKICAg
ICAgICAgICAgIGdyaWQuc2xvdCh7IGluaXRpYWxQb3NpdGlvbi54KCkgKyBpLCBpbml0aWFsUG9z
aXRpb24ueSgpIH0pLT53aWR0aENvbnN0cmFpbnRzID0gc2xvdEludHJpbnNpY1dpZHRoOwogICAg
IH0KICAgICAvLyAyLiBGb3IgZWFjaCBjb2x1bW4sIGRldGVybWluZSBhIG1heGltdW0gYW5kIG1p
bmltdW0gY29sdW1uIHdpZHRoIGZyb20gdGhlIGNlbGxzIHRoYXQgc3BhbiBvbmx5IHRoYXQgY29s
dW1uLgogICAgIC8vICAgIFRoZSBtaW5pbXVtIGlzIHRoYXQgcmVxdWlyZWQgYnkgdGhlIGNlbGwg
d2l0aCB0aGUgbGFyZ2VzdCBtaW5pbXVtIGNlbGwgd2lkdGggKG9yIHRoZSBjb2x1bW4gJ3dpZHRo
Jywgd2hpY2hldmVyIGlzIGxhcmdlcikuCiAgICAgLy8gICAgVGhlIG1heGltdW0gaXMgdGhhdCBy
ZXF1aXJlZCBieSB0aGUgY2VsbCB3aXRoIHRoZSBsYXJnZXN0IG1heGltdW0gY2VsbCB3aWR0aCAo
b3IgdGhlIGNvbHVtbiAnd2lkdGgnLCB3aGljaGV2ZXIgaXMgbGFyZ2VyKS4KLSAgICBhdXRvJiBj
b2x1bW5zID0gZ3JpZC5jb2x1bW5zQ29udGV4dCgpLmNvbHVtbnMoKTsKKyAgICBhdXRvJiBjb2x1
bW5MaXN0ID0gZ3JpZC5jb2x1bW5zKCkubGlzdCgpOwogICAgIGludCBudW1iZXJPZlJvd3MgPSBn
cmlkLnJvd3MoKS5zaXplKCk7Ci0gICAgaW50IG51bWJlck9mQ29sdW1ucyA9IGNvbHVtbnMuc2l6
ZSgpOworICAgIGludCBudW1iZXJPZkNvbHVtbnMgPSBjb2x1bW5MaXN0LnNpemUoKTsKICAgICBm
b3IgKGludCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgbnVtYmVyT2ZDb2x1bW5zOyAr
K2NvbHVtbkluZGV4KSB7CiAgICAgICAgIGF1dG8gY29sdW1uSW50cmluc2ljV2lkdGhzID0gRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwogICAgICAgICBm
b3IgKGludCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgbnVtYmVyT2ZSb3dzOyArK3Jvd0luZGV4
KSB7CkBAIC0yODAsMTMgKzI3OSwxMyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKQogICAgICAgICAgICAgY29sdW1uSW50cmlu
c2ljV2lkdGhzLm1heGltdW0gPSBzdGQ6Om1heChzbG90LT53aWR0aENvbnN0cmFpbnRzLm1heGlt
dW0sIGNvbHVtbkludHJpbnNpY1dpZHRocy5tYXhpbXVtKTsKICAgICAgICAgfQogICAgICAgICAv
LyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjb250ZW50IGRyaXZlbiBtaW4vbWF4IHdpZHRocywgY2hl
Y2sgaWYgPGNvbD4gc2V0cyBhIHByZWZlcnJlZCB3aWR0aCBvbiB0aGlzIGNvbHVtbi4KLSAgICAg
ICAgaWYgKGF1dG8qIGNvbHVtbkJveCA9IGNvbHVtbnNbY29sdW1uSW5kZXhdLmNvbHVtbkJveCgp
KSB7CisgICAgICAgIGlmIChhdXRvKiBjb2x1bW5Cb3ggPSBjb2x1bW5MaXN0W2NvbHVtbkluZGV4
XS5ib3goKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gY29sdW1uUHJlZmVycmVkV2lkdGggPSBn
ZW9tZXRyeSgpLmNvbXB1dGVkQ29sdW1uV2lkdGgoKmNvbHVtbkJveCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBMZXQncyBzdGF5IGF0IGxlYXN0IGFzIHdpZGUgYXMgdGhlIHByZWZlcnJlZCB3aWR0
aC4KICAgICAgICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0aHMubWluaW11bSA9IHN0ZDo6
bWF4KGNvbHVtbkludHJpbnNpY1dpZHRocy5taW5pbXVtLCAqY29sdW1uUHJlZmVycmVkV2lkdGgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNvbHVtbnNbY29sdW1uSW5kZXhd
LnNldFdpZHRoQ29uc3RyYWludHMoY29sdW1uSW50cmluc2ljV2lkdGhzKTsKKyAgICAgICAgY29s
dW1uTGlzdFtjb2x1bW5JbmRleF0uc2V0V2lkdGhDb25zdHJhaW50cyhjb2x1bW5JbnRyaW5zaWNX
aWR0aHMpOwogICAgIH0KIH0KIApAQCAtMzA0LDE3ICszMDMsMTcgQEAgdm9pZCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNwYWNlKExh
eW91dFVuaXQKICAgICAvLyBDQVBNSU4sIGFuZCBNSU4uIEhvd2V2ZXIsIGlmIGVpdGhlciBDQVBN
SU4gb3IgdGhlIG1heGltdW0gd2lkdGggcmVxdWlyZWQgYnkgdGhlIGNvbHVtbnMgcGx1cyBjZWxs
IHNwYWNpbmcgb3IgYm9yZGVycyAoTUFYKSBpcwogICAgIC8vIGxlc3MgdGhhbiB0aGF0IG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrLCB1c2UgbWF4KE1BWCwgQ0FQTUlOKS4KICAgICBhdXRvIGRpc3Ry
aWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZSA9IFsmXShhdXRvIGV4dHJhSG9yaXpvbnRhbFNwYWNl
KSB7Ci0gICAgICAgIGF1dG8mIGNvbHVtbnMgPSBncmlkLmNvbHVtbnNDb250ZXh0KCkuY29sdW1u
cygpOwotICAgICAgICBBU1NFUlQoIWNvbHVtbnMuaXNFbXB0eSgpKTsKKyAgICAgICAgYXV0byYg
Y29sdW1uTGlzdCA9IGdyaWQuY29sdW1ucygpLmxpc3QoKTsKKyAgICAgICAgQVNTRVJUKCFjb2x1
bW5MaXN0LmlzRW1wdHkoKSk7CiAKICAgICAgICAgYXV0byB0YWJsZU1pbmltdW1Db250ZW50V2lk
dGggPSB0YWJsZVdpZHRoQ29uc3RyYWludHMubWluaW11bSAtIGdyaWQudG90YWxIb3Jpem9udGFs
U3BhY2luZygpOwogICAgICAgICBhdXRvIGFkanVzdGFibGVkSG9yaXpvbnRhbFNwYWNlID0gdGFi
bGVNaW5pbXVtQ29udGVudFdpZHRoOwotICAgICAgICBhdXRvIG51bWJlck9mQ29sdW1ucyA9IGNv
bHVtbnMuc2l6ZSgpOworICAgICAgICBhdXRvIG51bWJlck9mQ29sdW1ucyA9IGNvbHVtbkxpc3Qu
c2l6ZSgpOwogICAgICAgICAvLyBGaXhlZCB3aWR0aCBjb2x1bW5zIGRvbid0IHBhcnRpY2lwYXRl
IGluIGF2YWlsYWJsZSBzcGFjZSBkaXN0cmlidXRpb24uCi0gICAgICAgIGZvciAoYXV0byYgY29s
dW1uIDogY29sdW1ucykgeworICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IGNvbHVtbkxpc3Qp
IHsKICAgICAgICAgICAgIGlmICghY29sdW1uLmhhc0ZpeGVkV2lkdGgoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8gY29sdW1uRml4ZWRXaWR0aCA9ICpjb2x1
bW4uY29sdW1uQm94KCktPmNvbHVtbldpZHRoKCk7CisgICAgICAgICAgICBhdXRvIGNvbHVtbkZp
eGVkV2lkdGggPSAqY29sdW1uLmJveCgpLT5jb2x1bW5XaWR0aCgpOwogICAgICAgICAgICAgY29s
dW1uLnNldExvZ2ljYWxXaWR0aChjb2x1bW5GaXhlZFdpZHRoKTsKIAogICAgICAgICAgICAgLS1u
dW1iZXJPZkNvbHVtbnM7CkBAIC0zMjQsNyArMzIzLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhSG9yaXpvbnRhbFNwYWNlKExheW91dFVu
aXQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyBqdXN0
IGRpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlIGVxdWFseSBhbW9uZyB0aGUgY29sdW1ucyB1c2lu
ZyB0aGUgbWluaW11bSB3aWR0aC4KICAgICAgICAgQVNTRVJUKGFkanVzdGFibGVkSG9yaXpvbnRh
bFNwYWNlID4gMCk7Ci0gICAgICAgIGZvciAoYXV0byYgY29sdW1uIDogY29sdW1ucykgeworICAg
ICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IGNvbHVtbkxpc3QpIHsKICAgICAgICAgICAgIGlmIChj
b2x1bW4uaGFzRml4ZWRXaWR0aCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgYXV0byBjb2x1bW5FeHRyYVNwYWNlID0gZXh0cmFIb3Jpem9udGFsU3BhY2UgLyBhZGp1
c3RhYmxlZEhvcml6b250YWxTcGFjZSAqIGNvbHVtbi53aWR0aENvbnN0cmFpbnRzKCkubWluaW11
bTsKQEAgLTM0OSwxMCArMzQ4LDEwIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUFuZERpc3RyaWJ1dGVFeHRyYUhvcml6b250YWxTcGFjZShMYXlvdXRVbml0CiAKIHZvaWQg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6dXNlQXNDb250ZW50TG9naWNhbFdpZHRoKFdpZHRoQ29u
c3RyYWludHNUeXBlIHR5cGUpCiB7Ci0gICAgYXV0byYgY29sdW1ucyA9IGZvcm1hdHRpbmdTdGF0
ZSgpLnRhYmxlR3JpZCgpLmNvbHVtbnNDb250ZXh0KCkuY29sdW1ucygpOwotICAgIEFTU0VSVCgh
Y29sdW1ucy5pc0VtcHR5KCkpOworICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBmb3JtYXR0aW5nU3Rh
dGUoKS50YWJsZUdyaWQoKS5jb2x1bW5zKCkubGlzdCgpOworICAgIEFTU0VSVCghY29sdW1uTGlz
dC5pc0VtcHR5KCkpOwogCi0gICAgZm9yIChhdXRvJiBjb2x1bW4gOiBjb2x1bW5zKQorICAgIGZv
ciAoYXV0byYgY29sdW1uIDogY29sdW1uTGlzdCkKICAgICAgICAgY29sdW1uLnNldExvZ2ljYWxX
aWR0aCh0eXBlID09IFdpZHRoQ29uc3RyYWludHNUeXBlOjpNaW5pbXVtID8gY29sdW1uLndpZHRo
Q29uc3RyYWludHMoKS5taW5pbXVtIDogY29sdW1uLndpZHRoQ29uc3RyYWludHMoKS5tYXhpbXVt
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVm
b3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBlMjExNjA0MjkyYzBhY2M2
YWYzMjA0YTgwNjNhMmI3NDc3Zjg5OWY1Li45NTBmM2VlNzg2ZTg5NjJlMDVlYThjMzg1MzM3OWYw
MTk2MTM2NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0
aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNTksNyArNTksNyBA
QCBwcml2YXRlOgogICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5
KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkoKnRoaXMpOyB9CiAKICAgICBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRl
OwotICAgIHZvaWQgbGF5b3V0VGFibGVDZWxsQm94KGNvbnN0IFRhYmxlR3JpZDo6Q2VsbEluZm8m
LCBJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOworICAg
IHZvaWQgbGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmLCBJbnZhbGlkYXRpb25TdGF0
ZSYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAgIHZvaWQgcG9zaXRpb25UYWJs
ZUNlbGxzKCk7CiAgICAgdm9pZCBzZXRDb21wdXRlZEdlb21ldHJ5Rm9yUm93cygpOwogICAgIHZv
aWQgc2V0Q29tcHV0ZWRHZW9tZXRyeUZvclNlY3Rpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5jcHAKaW5kZXggODAxODg3OTgy
MjE0NDlkM2Y1ODM5MjEzOTBiMTI4ZTgyZjk1NzhiYi4uYmFmMTZmYTczY2UyNjZlMjIxMWI4YWY2
ZTc0YjM4NTEzMDhjN2RkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJs
ZWZvcm1hdHRpbmcvVGFibGVHcmlkLmNwcApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgTGF5
b3V0IHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUYWJsZUdyaWQpOwogCiBUYWJsZUdy
aWQ6OkNvbHVtbjo6Q29sdW1uKGNvbnN0IEJveCogY29sdW1uQm94KQotICAgIDogbV9jb2x1bW5C
b3gobWFrZVdlYWtQdHIoY29sdW1uQm94KSkKKyAgICA6IG1fbGF5b3V0Qm94KG1ha2VXZWFrUHRy
KGNvbHVtbkJveCkpCiB7CiB9CiAKQEAgLTg1LDI3ICs4NSwzNyBAQCBMYXlvdXRVbml0IFRhYmxl
R3JpZDo6Q29sdW1uOjpsb2dpY2FsTGVmdCgpIGNvbnN0CiBib29sIFRhYmxlR3JpZDo6Q29sdW1u
OjpoYXNGaXhlZFdpZHRoKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IGNvdmVy
cyB0aGUgPGNvbD4gYXR0cmlidXRlIGNhc2UuCi0gICAgcmV0dXJuIGNvbHVtbkJveCgpICYmIGNv
bHVtbkJveCgpLT5jb2x1bW5XaWR0aCgpOworICAgIHJldHVybiBib3goKSAmJiBib3goKS0+Y29s
dW1uV2lkdGgoKTsKIH0KIAotdm9pZCBUYWJsZUdyaWQ6OkNvbHVtbnNDb250ZXh0OjphZGRDb2x1
bW4oY29uc3QgQm94KiBjb2x1bW5Cb3gpCit2b2lkIFRhYmxlR3JpZDo6Q29sdW1uczo6YWRkQ29s
dW1uKGNvbnN0IEJveCYgY29sdW1uQm94KQogewotICAgIG1fY29sdW1ucy5hcHBlbmQoeyBjb2x1
bW5Cb3ggfSk7CisgICAgbV9jb2x1bW5MaXN0LmFwcGVuZCh7ICZjb2x1bW5Cb3ggfSk7Cit9CisK
K3ZvaWQgVGFibGVHcmlkOjpDb2x1bW5zOjphZGRBbm9ueW1vdXNDb2x1bW4oKQoreworICAgIG1f
Y29sdW1uTGlzdC5hcHBlbmQoeyBudWxscHRyIH0pOworfQorCit2b2lkIFRhYmxlR3JpZDo6Um93
czo6YWRkUm93KGNvbnN0IEJveCYgcm93Qm94KQoreworICAgIG1fcm93TGlzdC5hcHBlbmQoeyBy
b3dCb3ggfSk7CiB9CiAKIFRhYmxlR3JpZDo6Um93OjpSb3coY29uc3QgQm94JiByb3dCb3gpCi0g
ICAgOiBtX2xheW91dEJveChyb3dCb3gpCisgICAgOiBtX2xheW91dEJveChtYWtlV2Vha1B0cihy
b3dCb3gpKQogewogfQogCi1UYWJsZUdyaWQ6OkNlbGxJbmZvOjpDZWxsSW5mbyhjb25zdCBCb3gm
IHRhYmxlQ2VsbEJveCwgU2xvdFBvc2l0aW9uIHBvc2l0aW9uLCBDZWxsU2l6ZSBzaXplKQotICAg
IDogdGFibGVDZWxsQm94KHRhYmxlQ2VsbEJveCkKLSAgICAsIHBvc2l0aW9uKHBvc2l0aW9uKQot
ICAgICwgc2l6ZShzaXplKQorVGFibGVHcmlkOjpDZWxsOjpDZWxsKGNvbnN0IEJveCYgY2VsbEJv
eCwgU2xvdFBvc2l0aW9uIHBvc2l0aW9uLCBDZWxsU2l6ZSBzaXplKQorICAgIDogbV9sYXlvdXRC
b3gobWFrZVdlYWtQdHIoY2VsbEJveCkpCisgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAg
ICwgbV9zaXplKHNpemUpCiB7CiB9CiAKLVRhYmxlR3JpZDo6U2xvdEluZm86OlNsb3RJbmZvKENl
bGxJbmZvJiBjZWxsKQorVGFibGVHcmlkOjpTbG90OjpTbG90KENlbGwmIGNlbGwpCiAgICAgOiBj
ZWxsKG1ha2VXZWFrUHRyKGNlbGwpKQogewogfQpAQCAtMTE0LDIxICsxMjQsMjEgQEAgVGFibGVH
cmlkOjpUYWJsZUdyaWQoKQogewogfQogCi1UYWJsZUdyaWQ6OlNsb3RJbmZvKiBUYWJsZUdyaWQ6
OnNsb3QoU2xvdFBvc2l0aW9uIHBvc2l0aW9uKQorVGFibGVHcmlkOjpTbG90KiBUYWJsZUdyaWQ6
OnNsb3QoU2xvdFBvc2l0aW9uIHBvc2l0aW9uKQogewogICAgIHJldHVybiBtX3Nsb3RNYXAuZ2V0
KHBvc2l0aW9uKTsKIH0KIAotdm9pZCBUYWJsZUdyaWQ6OmFwcGVuZENlbGwoY29uc3QgQm94JiB0
YWJsZUNlbGxCb3gpCit2b2lkIFRhYmxlR3JpZDo6YXBwZW5kQ2VsbChjb25zdCBCb3gmIGNlbGxC
b3gpCiB7Ci0gICAgaW50IHJvd1NwYW4gPSB0YWJsZUNlbGxCb3gucm93U3BhbigpOwotICAgIGlu
dCBjb2x1bW5TcGFuID0gdGFibGVDZWxsQm94LmNvbHVtblNwYW4oKTsKLSAgICBhdXRvIGlzSW5O
ZXdSb3cgPSAhdGFibGVDZWxsQm94LnByZXZpb3VzU2libGluZygpOworICAgIGludCByb3dTcGFu
ID0gY2VsbEJveC5yb3dTcGFuKCk7CisgICAgaW50IGNvbHVtblNwYW4gPSBjZWxsQm94LmNvbHVt
blNwYW4oKTsKKyAgICBhdXRvIGlzSW5OZXdSb3cgPSAhY2VsbEJveC5wcmV2aW91c1NpYmxpbmco
KTsKICAgICBhdXRvIGluaXRpYWxTbG90UG9zaXRpb24gPSBTbG90UG9zaXRpb24geyB9OwogCi0g
ICAgaWYgKCFtX2NlbGxMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiBsYXN0Q2VsbCA9
IG1fY2VsbExpc3QubGFzdCgpOwotICAgICAgICBhdXRvIGxhc3RTbG90UG9zaXRpb24gPSBsYXN0
Q2VsbC0+cG9zaXRpb247CisgICAgaWYgKCFtX2NlbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBh
dXRvJiBsYXN0Q2VsbCA9IG1fY2VsbHMubGFzdCgpOworICAgICAgICBhdXRvIGxhc3RTbG90UG9z
aXRpb24gPSBsYXN0Q2VsbC0+cG9zaXRpb24oKTsKICAgICAgICAgLy8gRmlyc3QgdGFibGUgY2Vs
bCBpbiB0aGlzIHJvdz8KICAgICAgICAgaWYgKGlzSW5OZXdSb3cpCiAgICAgICAgICAgICBpbml0
aWFsU2xvdFBvc2l0aW9uID0gU2xvdFBvc2l0aW9uIHsgMCwgbGFzdFNsb3RQb3NpdGlvbi55KCkg
KyAxIH07CkBAIC0xNDIsMzUgKzE1MiwzNSBAQCB2b2lkIFRhYmxlR3JpZDo6YXBwZW5kQ2VsbChj
b25zdCBCb3gmIHRhYmxlQ2VsbEJveCkKICAgICAgICAgICAgIGluaXRpYWxTbG90UG9zaXRpb24u
bW92ZSgxLCAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBhdXRvIGNlbGxJbmZvID0gbWFrZVVu
aXF1ZTxDZWxsSW5mbz4odGFibGVDZWxsQm94LCBpbml0aWFsU2xvdFBvc2l0aW9uLCBDZWxsU2l6
ZSB7IGNvbHVtblNwYW4sIHJvd1NwYW4gfSk7CisgICAgYXV0byBjZWxsID0gbWFrZVVuaXF1ZTxD
ZWxsPihjZWxsQm94LCBpbml0aWFsU2xvdFBvc2l0aW9uLCBDZWxsU2l6ZSB7IGNvbHVtblNwYW4s
IHJvd1NwYW4gfSk7CiAgICAgLy8gUm93IGFuZCBjb2x1bW4gc3Bhbm5lcnMgY3JlYXRlIGFkZGl0
aW9uYWwgc2xvdHMuCiAgICAgZm9yIChpbnQgcm93ID0gMTsgcm93IDw9IHJvd1NwYW47ICsrcm93
KSB7CiAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDE7IGNvbHVtbiA8PSBjb2x1bW5TcGFuOyAr
K2NvbHVtbikgewogICAgICAgICAgICAgYXV0byBwb3NpdGlvbiA9IFNsb3RQb3NpdGlvbiB7IGlu
aXRpYWxTbG90UG9zaXRpb24ueCgpICsgY29sdW1uIC0gMSwgaW5pdGlhbFNsb3RQb3NpdGlvbi55
KCkgKyByb3cgLSAxIH07CiAgICAgICAgICAgICBBU1NFUlQoIW1fc2xvdE1hcC5jb250YWlucyhw
b3NpdGlvbikpOwotICAgICAgICAgICAgbV9zbG90TWFwLmFkZChwb3NpdGlvbiwgbWFrZVVuaXF1
ZTxTbG90SW5mbz4oKmNlbGxJbmZvKSk7CisgICAgICAgICAgICBtX3Nsb3RNYXAuYWRkKHBvc2l0
aW9uLCBtYWtlVW5pcXVlPFNsb3Q+KCpjZWxsKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8g
SW5pdGlhbGl6ZSBjb2x1bW5zL3Jvd3MgaWYgbmVlZGVkLgotICAgIGF1dG8gbWlzc2luZ051bWJl
ck9mQ29sdW1ucyA9IHN0ZDo6bWF4PGludD4oMCwgaW5pdGlhbFNsb3RQb3NpdGlvbi54KCkgKyBj
b2x1bW5TcGFuIC0gbV9jb2x1bW5zQ29udGV4dC5jb2x1bW5zKCkuc2l6ZSgpKTsgCisgICAgYXV0
byBtaXNzaW5nTnVtYmVyT2ZDb2x1bW5zID0gc3RkOjptYXg8aW50PigwLCBpbml0aWFsU2xvdFBv
c2l0aW9uLngoKSArIGNvbHVtblNwYW4gLSBtX2NvbHVtbnMuc2l6ZSgpKTsgCiAgICAgZm9yIChh
dXRvIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1pc3NpbmdOdW1iZXJPZkNvbHVtbnM7ICsrY29sdW1u
KQotICAgICAgICBtX2NvbHVtbnNDb250ZXh0LmFkZENvbHVtbigpOworICAgICAgICBtX2NvbHVt
bnMuYWRkQW5vbnltb3VzQ29sdW1uKCk7CiAKICAgICBpZiAoaXNJbk5ld1JvdykKLSAgICAgICAg
bV9yb3dzLmFwcGVuZCh7IHRhYmxlQ2VsbEJveC5wYXJlbnQoKSB9KTsKKyAgICAgICAgbV9yb3dz
LmFkZFJvdyhjZWxsQm94LnBhcmVudCgpKTsKIAotICAgIG1fY2VsbExpc3QuYWRkKFdURk1vdmUo
Y2VsbEluZm8pKTsKKyAgICBtX2NlbGxzLmFkZChXVEZNb3ZlKGNlbGwpKTsKIH0KIAotdm9pZCBU
YWJsZUdyaWQ6Omluc2VydENlbGwoY29uc3QgQm94JiB0YWJsZUNlbGxCb3gsIGNvbnN0IEJveCYg
YmVmb3JlKQordm9pZCBUYWJsZUdyaWQ6Omluc2VydENlbGwoY29uc3QgQm94JiBjZWxsQm94LCBj
b25zdCBCb3gmIGJlZm9yZSkKIHsKLSAgICBVTlVTRURfUEFSQU0odGFibGVDZWxsQm94KTsKKyAg
ICBVTlVTRURfUEFSQU0oY2VsbEJveCk7CiAgICAgVU5VU0VEX1BBUkFNKGJlZm9yZSk7CiB9CiAK
LXZvaWQgVGFibGVHcmlkOjpyZW1vdmVDZWxsKGNvbnN0IEJveCYgdGFibGVDZWxsQm94KQordm9p
ZCBUYWJsZUdyaWQ6OnJlbW92ZUNlbGwoY29uc3QgQm94JiBjZWxsQm94KQogewotICAgIFVOVVNF
RF9QQVJBTSh0YWJsZUNlbGxCb3gpOworICAgIFVOVVNFRF9QQVJBTShjZWxsQm94KTsKIH0KIAog
Rm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgVGFibGVHcmlkOjp3
aWR0aENvbnN0cmFpbnRzKCkKQEAgLTE4MCw3ICsxOTAsNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUdyaWQ6OndpZHRoQ29uc3RyYWludHMoKQog
ICAgICAgICByZXR1cm4gKm1faW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKIAogICAgIG1faW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIHsgfTsKLSAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IG1fY29sdW1uc0NvbnRl
eHQuY29sdW1ucygpKQorICAgIGZvciAoYXV0byYgY29sdW1uIDogbV9jb2x1bW5zLmxpc3QoKSkK
ICAgICAgICAgKm1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cyArPSBjb2x1bW4ud2lkdGhDb25z
dHJhaW50cygpOwogICAgIG1faW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+ZXhwYW5kKHRvdGFs
SG9yaXpvbnRhbFNwYWNpbmcoKSk7CiAgICAgcmV0dXJuICptX2ludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5n
L1RhYmxlR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUdyaWQuaAppbmRleCBiN2U2MjA3MWVlOGFmMzNiYjkzYzc4M2Q5NGMwOTRiYmRjM2U0MTNlLi5l
ZGVjYWViOWFlMmY5ZDAxZjlkZGU4MDNkZGZlYjVkMTU3ZTI0NTIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlR3JpZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVHcmlkLmgKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CiAKQEAgLTQ5LDM5ICs1MCwxOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEhvcml6
b250YWxTcGFjaW5nKExheW91dFVuaXQgaG9yaXpvbnRhbFNwYWNpbmcpIHsgbV9ob3Jpem9udGFs
U3BhY2luZyA9IGhvcml6b250YWxTcGFjaW5nOyB9CiAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFs
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNwYWNpbmc7IH0KLSAgICBMYXlv
dXRVbml0IHRvdGFsSG9yaXpvbnRhbFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiAoY29sdW1uc0Nv
bnRleHQoKS5jb2x1bW5zKCkuc2l6ZSgpICsgMSkgKiBob3Jpem9udGFsU3BhY2luZygpOyB9Cisg
ICAgTGF5b3V0VW5pdCB0b3RhbEhvcml6b250YWxTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gKGNv
bHVtbnMoKS5zaXplKCkgKyAxKSAqIGhvcml6b250YWxTcGFjaW5nKCk7IH0KIAogICAgIHZvaWQg
c2V0VmVydGljYWxTcGFjaW5nKExheW91dFVuaXQgdmVydGljYWxTcGFjaW5nKSB7IG1fdmVydGlj
YWxTcGFjaW5nID0gdmVydGljYWxTcGFjaW5nOyB9CiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbFNw
YWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU3BhY2luZzsgfQogCi0gICAgdXNpbmcg
U2xvdFBvc2l0aW9uID0gSW50UG9pbnQ7Ci0KLSAgICAvLyBDZWxsIHJlcHJlc2VudHMgYSA8dGQ+
IG9yIDx0aD4uIEl0IGNhbiBzcGFuIG11bHRpcGxlIHNsb3RzIGluIHRoZSBncmlkLgotICAgIHVz
aW5nIENlbGxTaXplID0gSW50U2l6ZTsKLSAgICBzdHJ1Y3QgQ2VsbEluZm8gOiBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8Q2VsbEluZm8+IHsKLSAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxM
T0NBVEVEOwotICAgICAgICBDZWxsSW5mbyhjb25zdCBCb3gmIHRhYmxlQ2VsbEJveCwgU2xvdFBv
c2l0aW9uLCBDZWxsU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IHN0YXJ0Q29sdW1uKCkgY29uc3Qg
eyByZXR1cm4gcG9zaXRpb24ueCgpOyB9Ci0gICAgICAgIHNpemVfdCBlbmRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBwb3NpdGlvbi54KCkgKyBzaXplLndpZHRoKCk7IH0KLQotICAgICAgICBzaXpl
X3Qgc3RhcnRSb3coKSBjb25zdCB7IHJldHVybiBwb3NpdGlvbi55KCk7IH0KLSAgICAgICAgc2l6
ZV90IGVuZFJvdygpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uLnkoKSArIHNpemUuaGVpZ2h0KCk7
IH0KLQotICAgICAgICBzaXplX3QgY29sdW1uU3BhbigpIGNvbnN0IHsgcmV0dXJuIHNpemUud2lk
dGgoKTsgfQotICAgICAgICBzaXplX3Qgcm93U3BhbigpIGNvbnN0IHsgcmV0dXJuIHNpemUuaGVp
Z2h0KCk7IH0KLQotICAgICAgICBjb25zdCBCb3gmIHRhYmxlQ2VsbEJveDsKLSAgICAgICAgU2xv
dFBvc2l0aW9uIHBvc2l0aW9uOwotICAgICAgICBDZWxsU2l6ZSBzaXplOwotICAgIH07Ci0gICAg
dXNpbmcgQ2VsbExpc3QgPSBXVEY6Okxpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxDZWxsSW5m
bz4+OwotICAgIENlbGxMaXN0JiBjZWxscygpIHsgcmV0dXJuIG1fY2VsbExpc3Q7IH0KKyAgICBi
b29sIGhhc0NvbXB1dGVkV2lkdGhDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5oYXNWYWx1ZSgpOyB9CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6
OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgd2lkdGhDb25zdHJhaW50cygpOwogCiAgICAgLy8g
Q29sdW1uIHJlcHJlc2VudHMgYSB2ZXJ0aWNhbCBzZXQgb2Ygc2xvdHMgaW4gdGhlIGdyaWQuIEEg
Y29sdW1uIGhhcyBtaW4vbWF4IGFuZCBmaW5hbCB3aWR0aC4KLSAgICBjbGFzcyBDb2x1bW5zQ29u
dGV4dDsKICAgICBjbGFzcyBDb2x1bW4gewogICAgIHB1YmxpYzoKKyAgICAgICAgQ29sdW1uKGNv
bnN0IEJveCopOworCiAgICAgICAgIHZvaWQgc2V0V2lkdGhDb25zdHJhaW50cyhGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7CiAgICAgICAgIEZvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHdpZHRoQ29uc3RyYWludHMoKSBjb25z
dDsKIApAQCAtOTMsMTYgKzc0LDEzIEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIGhhc0ZpeGVk
V2lkdGgoKSBjb25zdDsKIAotICAgICAgICBjb25zdCBCb3gqIGNvbHVtbkJveCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29sdW1uQm94LmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJveCogYm94KCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRCb3guZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBDb2x1bW5zQ29udGV4dDsKLSAgICAgICAgQ29sdW1uKGNvbnN0IEJveCog
Y29sdW1uQm94KTsKLQogICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyBtX3dpZHRoQ29uc3RyYWludHM7CiAgICAgICAgIExheW91dFVuaXQgbV9jb21w
dXRlZExvZ2ljYWxXaWR0aDsKICAgICAgICAgTGF5b3V0VW5pdCBtX2NvbXB1dGVkTG9naWNhbExl
ZnQ7Ci0gICAgICAgIFdlYWtQdHI8Y29uc3QgQm94PiBtX2NvbHVtbkJveDsKKyAgICAgICAgV2Vh
a1B0cjxjb25zdCBCb3g+IG1fbGF5b3V0Qm94OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAg
ICAgYm9vbCBtX2hhc1dpZHRoQ29uc3RyYWludHMgeyBmYWxzZSB9OwpAQCAtMTExLDY1ICs4OSwx
MTEgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfTsKIAotICAgIGNsYXNzIENvbHVtbnNDb250ZXh0
IHsKKyAgICBjbGFzcyBDb2x1bW5zIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIENvbHVt
bkxpc3QgPSBWZWN0b3I8Q29sdW1uPjsKLSAgICAgICAgQ29sdW1uTGlzdCYgY29sdW1ucygpIHsg
cmV0dXJuIG1fY29sdW1uczsgfQotICAgICAgICBjb25zdCBDb2x1bW5MaXN0JiBjb2x1bW5zKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2x1bW5zOyB9Ci0gICAgICAgIHZvaWQgYWRkQ29sdW1uKGNvbnN0
IEJveCogY29sdW1uQm94ID0gbnVsbHB0cik7CisgICAgICAgIENvbHVtbkxpc3QmIGxpc3QoKSB7
IHJldHVybiBtX2NvbHVtbkxpc3Q7IH0KKyAgICAgICAgY29uc3QgQ29sdW1uTGlzdCYgbGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uTGlzdDsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uTGlzdC5zaXplKCk7IH0KIAotICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNvbHVtbnMoKS5sYXN0KCkubG9naWNhbFJp
Z2h0KCkgLSBjb2x1bW5zKCkuZmlyc3QoKS5sb2dpY2FsTGVmdCgpOyB9CisgICAgICAgIHZvaWQg
YWRkQ29sdW1uKGNvbnN0IEJveCYpOworICAgICAgICB2b2lkIGFkZEFub255bW91c0NvbHVtbigp
OwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFRhYmxlR3JpZDsKKyAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbkxpc3Qu
bGFzdCgpLmxvZ2ljYWxSaWdodCgpIC0gbV9jb2x1bW5MaXN0LmZpcnN0KCkubG9naWNhbExlZnQo
KTsgfQogCi0gICAgICAgIENvbHVtbkxpc3QgbV9jb2x1bW5zOworICAgIHByaXZhdGU6CisgICAg
ICAgIENvbHVtbkxpc3QgbV9jb2x1bW5MaXN0OwogICAgIH07Ci0gICAgY29uc3QgQ29sdW1uc0Nv
bnRleHQmIGNvbHVtbnNDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zQ29udGV4dDsg
fQotICAgIENvbHVtbnNDb250ZXh0JiBjb2x1bW5zQ29udGV4dCgpIHsgcmV0dXJuIG1fY29sdW1u
c0NvbnRleHQ7IH0KIAotICAgIHN0cnVjdCBSb3cgeworICAgIGNsYXNzIFJvdyB7CiAgICAgcHVi
bGljOgogICAgICAgICBSb3coY29uc3QgQm94Jik7CiAKLSAgICAgICAgY29uc3QgQm94JiBib3go
KSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveDsgfQotCiAgICAgICAgIHZvaWQgc2V0TG9naWNh
bFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsVG9wID0gbG9naWNhbFRvcDsg
fQogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxUb3A7IH0KKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbG9naWNhbFRvcCgpICsgbG9naWNhbEhlaWdodCgpOyB9CiAKICAgICAgICAgdm9pZCBzZXRM
b2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0OyB9CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbEhlaWdodDsgfQogCi0gICAgICAgIExheW91dFVuaXQgbG9n
aWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQo
KTsgfQorICAgICAgICBjb25zdCBCb3gmIGJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJv
eC5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTGF5b3V0VW5pdCBtX2xvZ2ljYWxU
b3A7CiAgICAgICAgIExheW91dFVuaXQgbV9sb2dpY2FsSGVpZ2h0OwotICAgICAgICBjb25zdCBC
b3gmIG1fbGF5b3V0Qm94OworICAgICAgICBXZWFrUHRyPGNvbnN0IEJveD4gbV9sYXlvdXRCb3g7
CiAgICAgfTsKLSAgICB1c2luZyBSb3dMaXN0ID0gV1RGOjpWZWN0b3I8Um93PjsKLSAgICBSb3dM
aXN0JiByb3dzKCkgeyByZXR1cm4gbV9yb3dzOyB9CiAKLSAgICBzdHJ1Y3QgU2xvdEluZm8gewor
ICAgIGNsYXNzIFJvd3MgeworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgUm93TGlzdCA9IFZl
Y3RvcjxSb3c+OworICAgICAgICBSb3dMaXN0JiBsaXN0KCkgeyByZXR1cm4gbV9yb3dMaXN0OyB9
CisgICAgICAgIGNvbnN0IFJvd0xpc3QmIHJvd0xpc3QoKSBjb25zdCB7IHJldHVybiBtX3Jvd0xp
c3Q7IH0KKworICAgICAgICB2b2lkIGFkZFJvdyhjb25zdCBCb3gmKTsKKworICAgICAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm93TGlzdC5zaXplKCk7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFJvd0xpc3QgbV9yb3dMaXN0OworICAgIH07CisKKyAgICB1c2luZyBTbG90
UG9zaXRpb24gPSBJbnRQb2ludDsKKyAgICB1c2luZyBDZWxsU2l6ZSA9IEludFNpemU7CisgICAg
Ly8gQ2VsbCByZXByZXNlbnRzIGEgPHRkPiBvciA8dGg+LiBJdCBjYW4gc3BhbiBtdWx0aXBsZSBz
bG90cyBpbiB0aGUgZ3JpZC4KKyAgICBjbGFzcyBDZWxsIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PENlbGw+IHsKKyAgICAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTkxJTkUoQ2VsbCk7Cisg
ICAgcHVibGljOgorICAgICAgICBDZWxsKGNvbnN0IEJveCYsIFNsb3RQb3NpdGlvbiwgQ2VsbFNp
emUpOworCisgICAgICAgIHNpemVfdCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb24ueCgpOyB9CisgICAgICAgIHNpemVfdCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpOyB9CisKKyAgICAgICAgc2l6ZV90IHN0YXJ0
Um93KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi55KCk7IH0KKyAgICAgICAgc2l6ZV90IGVu
ZFJvdygpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpOyB9
CisKKyAgICAgICAgc2l6ZV90IGNvbHVtblNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lk
dGgoKTsgfQorICAgICAgICBzaXplX3Qgcm93U3BhbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5o
ZWlnaHQoKTsgfQorCisgICAgICAgIFNsb3RQb3NpdGlvbiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KKyAgICAgICAgQ2VsbFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorCisgICAgICAgIGNvbnN0IEJveCYgYm94KCkgY29uc3QgeyByZXR1cm4gKm1f
bGF5b3V0Qm94LmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBXZWFrUHRyPGNvbnN0
IEJveD4gbV9sYXlvdXRCb3g7CisgICAgICAgIFNsb3RQb3NpdGlvbiBtX3Bvc2l0aW9uOworICAg
ICAgICBDZWxsU2l6ZSBtX3NpemU7CisgICAgfTsKKworICAgIHN0cnVjdCBTbG90IHsKICAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBTbG90SW5mbygpID0g
ZGVmYXVsdDsKLSAgICAgICAgU2xvdEluZm8oQ2VsbEluZm8mKTsKKyAgICAgICAgU2xvdCgpID0g
ZGVmYXVsdDsKKyAgICAgICAgU2xvdChDZWxsJik7CiAKLSAgICAgICAgV2Vha1B0cjxDZWxsSW5m
bz4gY2VsbDsKKyAgICAgICAgV2Vha1B0cjxDZWxsPiBjZWxsOwogICAgICAgICBGb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB3aWR0aENvbnN0cmFpbnRzOwogICAg
IH07Ci0gICAgU2xvdEluZm8qIHNsb3QoU2xvdFBvc2l0aW9uKTsKIAotICAgIGJvb2wgaGFzQ29t
cHV0ZWRXaWR0aENvbnN0cmFpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzLmhhc1ZhbHVlKCk7IH0KLSAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyB3aWR0aENvbnN0cmFpbnRzKCk7CisgICAgY29uc3QgQ29sdW1ucyYg
Y29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uczsgfQorICAgIENvbHVtbnMmIGNvbHVt
bnMoKSB7IHJldHVybiBtX2NvbHVtbnM7IH0KKworICAgIGNvbnN0IFJvd3MmIHJvd3MoKSBjb25z
dCB7IHJldHVybiBtX3Jvd3M7IH0KKyAgICBSb3dzJiByb3dzKCkgeyByZXR1cm4gbV9yb3dzOyB9
CisKKyAgICB1c2luZyBDZWxscyA9IFdURjo6TGlzdEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENl
bGw+PjsKKyAgICBDZWxscyYgY2VsbHMoKSB7IHJldHVybiBtX2NlbGxzOyB9CisKKyAgICBTbG90
KiBzbG90KFNsb3RQb3NpdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgdXNpbmcgU2xvdE1hcCA9IFdU
Rjo6SGFzaE1hcDxTbG90UG9zaXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxTbG90SW5mbz4+OworICAg
IHVzaW5nIFNsb3RNYXAgPSBXVEY6Okhhc2hNYXA8U2xvdFBvc2l0aW9uLCBzdGQ6OnVuaXF1ZV9w
dHI8U2xvdD4+OwogCisgICAgQ29sdW1ucyBtX2NvbHVtbnM7CisgICAgUm93cyBtX3Jvd3M7Cisg
ICAgQ2VsbHMgbV9jZWxsczsKICAgICBTbG90TWFwIG1fc2xvdE1hcDsKLSAgICBDZWxsTGlzdCBt
X2NlbGxMaXN0OwotICAgIENvbHVtbnNDb250ZXh0IG1fY29sdW1uc0NvbnRleHQ7Ci0gICAgUm93
TGlzdCBtX3Jvd3M7CisKICAgICBMYXlvdXRVbml0IG1faG9yaXpvbnRhbFNwYWNpbmc7CiAgICAg
TGF5b3V0VW5pdCBtX3ZlcnRpY2FsU3BhY2luZzsKICAgICBPcHRpb25hbDxGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cz4gbV9pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>