<?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>116221</bug_id>
          
          <creation_ts>2013-05-16 05:46:27 -0700</creation_ts>
          <short_desc>[GTK] Move GTK port off legacy clipboard</short_desc>
          <delta_ts>2013-05-18 02:12:28 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>115980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>889778</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-16 05:46:27 -0700</bug_when>
    <thetext>See bug #115980</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890529</commentid>
    <comment_count>1</comment_count>
      <attachid>202121</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-17 11:18:24 -0700</bug_when>
    <thetext>Created attachment 202121
Patch

I&apos;ve tried to keep the patch as smaller as possible, I&apos;ve in mind some other refactorings for the gtk pasteboard that I&apos;ll do in follow up patches when this one lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890534</commentid>
    <comment_count>2</comment_count>
      <attachid>202123</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-17 11:24:03 -0700</bug_when>
    <thetext>Created attachment 202123
Rebased to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890538</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-17 11:26:11 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890546</commentid>
    <comment_count>4</comment_count>
      <attachid>202123</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-05-17 11:39:01 -0700</bug_when>
    <thetext>Comment on attachment 202123
Rebased to current git master

Looks reasonable to me as long as all editing and drag and drop tests pass. Glad to see this happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890860</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-05-18 02:12:28 -0700</bug_when>
    <thetext>Committed r150334: &lt;http://trac.webkit.org/changeset/150334&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202121</attachid>
            <date>2013-05-17 11:18:24 -0700</date>
            <delta_ts>2013-05-17 11:24:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gtk-clipboard.diff</filename>
            <type>text/plain</type>
            <size>42966</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNzIzYTEwLi5mZDJjNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTMtMDUtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RLIHBvcnQgb2ZmIGxlZ2FjeSBjbGlwYm9hcmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjIyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lcmdlIGNsaXBi
b2FyZCBtZXRob2RzIGludG8gUGFzdGVib2FyZEd0ayB0aGF0IG5vdyB3cmFwcyBhCisgICAgICAg
IERhdGFPYmplY3RHdGsuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBSZW1vdmUg
Q2xpcGJvYXJkR3RrLmguCisgICAgICAgICogZG9tL0NsaXBib2FyZC5oOiBSZW1vdmUgR1RLIGZy
b20gdGhlIGxpc3Qgb2YgcG9ydHMgdXNpbmcgbGVnYWN5CisgICAgICAgIGNsaXBib2FyZC4KKyAg
ICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCk6IFVzZQorICAgICAgICBDbGlw
Ym9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKCkuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVi
b2FyZC5oOgorICAgICAgICAoUGFzdGVib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dlbmVyYWxDbGlw
Ym9hcmQpOiBVc2UKKyAgICAgICAgQ2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0RyYWdEYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVhdGUpOiBDcmVhdGUg
YSBuZXcgUGFzdGVib2FyZCBmb3IgYSBnaXZlbgorICAgICAgICBHdGtDbGlwYm9hcmQgb3IgRGF0
YU9iamVjdEd0ay4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSk6IENyZWF0ZSBhIFBhc3RlYm9hcmQKKyAgICAgICAgZm9yIHRoZSBHREtfU0VMRUNU
SU9OX0NMSVBCT0FSRCBjbGlwYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpj
cmVhdGVQcml2YXRlKTogQ3JlYXRlIGEgUGFzdGVib2FyZCB3aXRob3V0CisgICAgICAgIGEgR3Rr
Q2xpcGJvYXJkIGFzc29jaWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JEcmFnQW5kRHJvcCk6IENyZWF0ZSBhIFBhc3RlYm9hcmQKKyAgICAgICAgZm9yIGRyYWcg
YW5kIGRyb3Agb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNsaXBib2Fy
ZCk6IFJldHVybiBhIHN0YXRpYyBQYXN0ZWJvYXJkIGZvciB0aGUKKyAgICAgICAgR0RLX1NFTEVD
VElPTl9DTElQQk9BUkQgY2xpcGJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6cHJpbWFyeUNsaXBi
b2FyZCk6IFJldHVybiBhIHN0YXRpYyBQYXN0ZWJvYXJkIGZvciB0aGUKKyAgICAgICAgR0RLX1NF
TEVDVElPTl9QUklNQVJZIGNsaXBib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKTogUmV0dXJuCisgICAgICAgIHNlbGVjdGlvbkNsaXBib2FyZCgp
IG9yIHByaW1hcnlDbGlwYm9hcmQoKSBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgICAgICBwcmlt
YXJ5IHNlbGVjdGlvbiBjbGlwYm9hcmQgaXMgdGhlIGFjdGl2ZSBvbmUgb3Igbm90LgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp+UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpk
YXRhT2JqZWN0KTogUmV0dXJuIHRoZSB3cmFwcGVkIERhdGFPYmplY3RHdGsuCisgICAgICAgIChX
ZWJDb3JlOjpkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSk6IENvcGllZCBmcm9t
CisgICAgICAgIENsaXBib2FyZEd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Ojp3cml0ZVN0cmluZyk6IEFkYXB0ZWQgdG8gdXBhdGUgdGhlIHdyYXBwZWQKKyAgICAgICAgRGF0
YU9iamVjdEd0ayBhbmQgdGhlIEd0a0NsaXBib2FyZCBpZiBuZWVkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZVBhc3RlYm9hcmQpOiBDb3B5IHRoZSB3cmFwcGVkCisgICAgICAgIERhdGFPYmplY3RHdGsg
ZnJvbSB0aGUgRGF0YU9iamVjdEd0ayBvZiB0aGUgZ2l2ZW4gUGFzdGVib2FyZCBhbmQKKyAgICAg
ICAgdXBzYXRlIHRoZSBHdGtDbGlwYm9hcmQgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6Y2xlYXIpOiBDb3BpZWQgZnJvbSBDbGlwYm9hcmRHdGsuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKTogQ2hlY2sgaWYgY3VycmVu
dAorICAgICAgICBHdGtDbGlwYm9hcmQgc3VwcG9ydHMgc21hcnQgcmVwbGFjZS4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KTogQWRhcHRlZCB0byB1c2UgdGhlCisgICAgICAg
IHdyYXBwZWQgRGF0YU9iamVjdEd0ayByZWFkaW5nIGZyb20gdGhlIGN1cnJlbnQgR3RrQ2xpcGJv
YXJkIGlmCisgICAgICAgIHByZXNlbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpw
bGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEp
OiBDb3BpZWQgZnJvbSBDbGlwYm9hcmRHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6dHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMpOiBEaXR0by4KKwogMjAxMy0wNS0xNCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIFdlYkNv
cmUgdG8gdGhlIGNtYWtlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzg1YzQyYi4uZDVhMDA1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA1LTE3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IEdUSyBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpzdGFydERyYWcpOiBHZXQgdGhlIERhdGFP
YmplY3RHdGsgZnJvbSB0aGUKKyAgICAgICAgUGFzdGVib2FyZCBhc3NvY2lhdGVkIHRvIHRoZSBn
aXZlbiBDbGlwYm9hcmQuCisKIDIwMTMtMDUtMTYgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIERvY3VtZW50YXRpb24gZm9yIFdFQktJVF9E
RUJVRyBsb2dnaW5nIGNoYW5uZWxzIGlzIG91dCBvZiBkYXRlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTcwZTQ1
OS4uYzA2N2MyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA1LTE3ICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBN
b3ZlIEdUSyBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyMjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcDogUmVtb3ZlIENsaXBib2FyZEd0ay5oCisgICAgICAgIGluY2x1ZGUuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6IEdldCB0aGUgRGF0
YU9iamVjdEd0ayBmcm9tIHRoZQorICAgICAgICBQYXN0ZWJvYXJkIGFzc29jaWF0ZWQgdG8gdGhl
IGdpdmVuIENsaXBib2FyZC4KKwogMjAxMy0wNS0xNiAgWm9sdGFuIEFydmFpICA8emFydmFpQGlu
Zi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbV2luXSBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVy
IHIxNTAxNjEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2ZTJhOWY1Li5mZjVl
ODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYyMDcsNyArNjIwNyw2IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Fz
eW5jRmlsZVN5c3RlbUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3lu
Y0ZpbGVTeXN0ZW1HdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DbGlwYm9hcmQuaAppbmRleCA4MjE0MzA3Li41MjY5NWIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2Fy
ZC5oCkBAIC0zNCw3ICszNCw3IEBACiAvLyBUaGlzIERPTSBvYmplY3Qgbm93IHdvcmtzIGJ5IGNh
bGxpbmcgdGhyb3VnaCB0byBjbGFzc2VzIGluIHRoZSBwbGF0Zm9ybSBsYXllci4KIC8vIFNwZWNp
ZmljYWxseSwgdGhlIGNsYXNzIGN1cnJlbnRseSBuYW1lZCBQYXN0ZWJvYXJkLiBUaGUgbGVnYWN5
IHN0eWxlIGluc3RlYWQKIC8vIHVzZXMgdGhpcyBhcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLgot
I2RlZmluZSBXVEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MgKFBM
QVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXSU4pKQorI2RlZmluZSBX
VEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MgKFBMQVRGT1JNKEJM
QUNLQkVSUlkpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oV0lOKSkKIAogI2lmIFVTRShMRUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJ
UEJPQVJEX0NMQVNTKQogI2RlZmluZSBMRUdBQ1lfVklSVFVBTCB2aXJ0dWFsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAppbmRleCBjZmQ2Yzg4Li4xMDE3NmY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKIAotI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgpAQCAtOTYsNyArOTYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRn
ZQogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0Ns
aXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKENsaXBi
b2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwgQ2xpcGJvYXJkOjpEcmFnQW5k
RHJvcCwgbV9mcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERy
b3AoKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZy
YW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IDUyM2E0ZTYuLmYwMDVhNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTMzLDggKzMzLDggQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKEdUSykKLS8vIEZJWE1F
OiBXaHkgZG9lcyB0aGlzIGluY2x1ZGUgbmVlZCB0byBiZSBpbiB0aGlzIGhlYWRlcj8KLSNpbmNs
dWRlIDxQYXN0ZWJvYXJkSGVscGVyLmg+CisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKK3R5cGVkZWYg
c3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXJkOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCkBAIC05NCw2ICs5NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBnZXRT
dHJpbmdTZWxlY3Rpb24oRnJhbWUqLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UGFzdGVib2FyZD4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4pOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShHdGtDbGlwYm9hcmQqKTsKKyAgICBQ
YXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSBjb25zdDsKKyNlbmRpZgorCiAg
ICAgLy8gRGVwcmVjYXRlZC4gVXNlIGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSBpbnN0ZWFkLgogICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBnZW5lcmFsUGFzdGVib2FyZCgpOwogCkBAIC0xNTQsNiArMTYw
LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGFzdGVib2FyZCgpOwogCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFBhc3RlYm9hcmQoUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPik7CisgICAg
UGFzdGVib2FyZChHdGtDbGlwYm9hcmQqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBtX3Bhc3RlYm9hcmROYW1lOwogICAgIGxvbmcg
bV9jaGFuZ2VDb3VudDsKQEAgLTE3MSw2ICsxODIsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c2VsZWN0aW9uTW9kZTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFJlZlB0cjxE
YXRhT2JqZWN0R3RrPiBtX2RhdGFPYmplY3Q7CisgICAgR3RrQ2xpcGJvYXJkKiBtX2d0a0NsaXBi
b2FyZDsKKyNlbmRpZgorCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCmluZGV4IGRkMGEzNzIuLmQ3OTVj
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCkBA
IC0xNSwzMjQgKzE1LDQyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZp
bGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRh
VHlwZVRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCi0gICAgQ2xpcGJvYXJkRGF0
YVR5cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAotICAgIENsaXBib2FyZERh
dGFUeXBlSW1hZ2UsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCi19OwotCisvLyBGSVhN
RTogdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcC4KIFBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9h
cmRHdGs6OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJhbWUpOwot
fQotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCi17Ci0g
ICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3Jt
RGF0YSgpLCBEcmFnQW5kRHJvcCwgZnJhbWUpOwotfQotCi1DbGlwYm9hcmRHdGs6OkNsaXBib2Fy
ZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlKQot
ICAgICwgbV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQp
KQotICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsK
LX0KLQotQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBl
IGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIGNs
aXBib2FyZFR5cGUpCi0gICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKLSAgICAsIG1fY2xp
cGJvYXJkKDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1DbGlwYm9hcmRHdGs6On5D
bGlwYm9hcmRHdGsoKQotewotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1h
Z2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQotc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGRh
dGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3VHlwZSkK
LXsKLSAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKLQotICAgIC8v
IFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHR5cGUgPT0g
IlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5
cGVUZXh0OwotICAgIGlmICh0eXBlID09ICJVUkwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVVUkw7Ci0KLSAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFueSB0cmFp
bGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKLSAgICAvLyBVbmljb2RlLCB3aGljaCBlbmNh
cHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4i
IHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0
YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBl
TWFya3VwOwotICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlz
dCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQotICAgICAgICByZXR1cm4g
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OwotCi0gICAgLy8gTm90IGEga25vd24gdHlwZSwgc28g
anVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCi0gICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVW5rbm93bjsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RU
eXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUklMaXN0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXA6Ci0gICAgICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJNYXJrdXAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJUZXh0KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZToKLSAgICAgICAg
bV9kYXRhT2JqZWN0LT5jbGVhckltYWdlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9h
cmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFy
QWxsRGF0YSgpCi17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gV2UgZG8gbm90IGNsZWFyIGZpbGVuYW1lcy4gQWNjb3JkaW5nIHRvIHRoZSBzcGVj
OiAiVGhlIGNsZWFyRGF0YSgpIG1ldGhvZAotICAgIC8vIGRvZXMgbm90IGFmZmVjdCB3aGV0aGVy
IGFueSBmaWxlcyB3ZXJlIGluY2x1ZGVkIGluIHRoZSBkcmFnLCBzbyB0aGUgdHlwZXMKLSAgICAv
LyBhdHRyaWJ1dGUncyBsaXN0IG1pZ2h0IHN0aWxsIG5vdCBiZSBlbXB0eSBhZnRlciBjYWxsaW5n
IGNsZWFyRGF0YSgpIChpdCB3b3VsZCAKLSAgICAvLyBzdGlsbCBjb250YWluIHRoZSAiRmlsZXMi
IHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZykuIgotICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLVN0cmluZyBDbGlw
Ym9hcmRHdGs6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKSBjb25zdAotewotICAg
IGlmICghY2FuUmVhZERhdGEoKSB8fCAhbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJv
YXJkKTsKLQotICAgIENsaXBib2FyZERhdGFUeXBlIHR5cGUgPSBkYXRhT2JqZWN0VHlwZUZyb21I
VE1MQ2xpcGJvYXJkVHlwZSh0eXBlU3RyaW5nKTsKLSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmRE
YXRhVHlwZVVSSUxpc3QpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVyaUxpc3QoKTsK
LSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+dXJsKCk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJr
dXApCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPm1hcmt1cCgpOwotICAgIGlmICh0eXBl
ID09IENsaXBib2FyZERhdGFUeXBlVGV4dCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+
dGV4dCgpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBDbGlwYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZShwb2xpY3kpOwogfQogCi1ib29sIENsaXBib2FyZEd0azo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAg
ICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVj
dFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0g
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwp
IHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOwotICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJr
dXApIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7Ci0gICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRl
eHQpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOwotICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotTGlzdEhhc2hT
ZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIWNhblJl
YWRUeXBlcygpKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gICAg
aWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICBM
aXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzOwotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQo
KSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICAgICAgdHlwZXMuYWRk
KCJUZXh0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dCIpOwotICAgIH0KLQotICAgIGlmICht
X2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAgICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIp
OwotCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVz
LmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICB0eXBlcy5hZGQoIlVSTCIpOwotICAgIH0K
LQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQotICAgICAgICB0eXBlcy5h
ZGQoIkZpbGVzIik7Ci0KLSAgICByZXR1cm4gdHlwZXM7Ci19Ci0KLVBhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZEd0azo6ZmlsZXMoKSBjb25zdAotewotICAgIGlmICghY2FuUmVhZERhdGEo
KSkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0gICAgUmVmUHRyPEZpbGVM
aXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLSAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgZmlsZUxpc3Qt
PmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzW2ldLCBGaWxlOjpBbGxDb250ZW50VHlwZXMp
KTsKLSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwotfQotCi12b2lkIENsaXBib2FyZEd0
azo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGxvY2F0
aW9uKQotewotICAgIHNldERyYWdJbWFnZShpbWFnZSwgMCwgbG9jYXRpb24pOwotfQotCi12b2lk
IENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiBlbGVtZW50LCBjb25zdCBJ
bnRQb2ludCYgbG9jYXRpb24pCi17Ci0gICAgc2V0RHJhZ0ltYWdlKDAsIGVsZW1lbnQsIGxvY2F0
aW9uKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSog
aW1hZ2UsIE5vZGUqIGVsZW1lbnQsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBp
ZiAoIWNhblNldERyYWdJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kcmFn
SW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9k
cmFnSW1hZ2UgPSBpbWFnZTsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0lt
YWdlLT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2RyYWdMb2MgPSBsb2NhdGlvbjsKLSAgICBt
X2RyYWdJbWFnZUVsZW1lbnQgPSBlbGVtZW50OwotfQotCi1EcmFnSW1hZ2VSZWYgQ2xpcGJvYXJk
R3RrOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdAorRHJhZ0ltYWdl
UmVmIENsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBsb2NhdGlvbikgY29uc3QK
IHsKICAgICBsb2NhdGlvbiA9IG1fZHJhZ0xvYzsKIAogICAgIGlmIChtX2RyYWdJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2Uo
KSk7Ci0gICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVudCAmJiBtX2ZyYW1lKQotICAgICAgICByZXR1
cm4gbV9mcmFtZS0+bm9kZUltYWdlKG1fZHJhZ0ltYWdlRWxlbWVudC5nZXQoKSk7CiAKLSAgICBy
ZXR1cm4gMDsgLy8gV2UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBh
IGRyYWcgaW1hZ2UsIHVzZSB0aGUgZGVmYXVsdCBpY29uLgotfQotCi1zdGF0aWMgQ2FjaGVkSW1h
Z2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgLy8gQXR0ZW1wdCB0
byBwdWxsIENhY2hlZEltYWdlIGZyb20gZWxlbWVudAotICAgIEFTU0VSVChlbGVtZW50KTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
IXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVy
ZXIpOwotICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAhaW1hZ2UtPmNhY2hlZEltYWdl
KCktPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJs
LCBsYWJlbCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKGVsZW1l
bnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwotCi0gICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1h
Z2UtPmlzTG9hZGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVu
ZGVyZXIoKSktPmdldEdka1BpeGJ1ZigpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9kYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOwotfQotCi12
b2lkIENsaXBib2FyZEd0azo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBGcmFtZSopCi17Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCBsYWJlbCk7
Ci0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
LX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUmFuZ2UoUmFuZ2UqIHJhbmdlLCBGcmFtZSog
ZnJhbWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlKTsKLQotICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4
dChmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkpOwotICAgIG1fZGF0
YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgQ2xpcGJv
YXJkR3RrOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgbV9kYXRh
T2JqZWN0LT5zZXRUZXh0KHRleHQpOworICAgIGlmIChtX2RyYWdJbWFnZUVsZW1lbnQpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9kcmFnSW1hZ2VFbGVtZW50LT5kb2N1bWVudCgp
OworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAg
ICAgICByZXR1cm4gZnJhbWUtPm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOwor
ICAgIH0KIAotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBi
b2FyZCk7CisgICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlv
biB0byBjcmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KIH0KIAotYm9v
bCBDbGlwYm9hcmRHdGs6Omhhc0RhdGEoKQordm9pZCBDbGlwYm9hcmQ6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAg
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2Fy
ZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLQotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc1Rl
eHQoKSB8fCBtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpCi0gICAgICAgIHx8IG1fZGF0YU9iamVj
dC0+aGFzVVJJTGlzdCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzSW1hZ2UoKTsKKyAgICBtX3Bhc3Rl
Ym9hcmQtPndyaXRlSW1hZ2UoZWxlbWVudC0+dG9Ob2RlKCksIHVybCwgbGFiZWwpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVlOWQ2M2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRHdGtfaAotI2RlZmluZSBDbGlwYm9h
cmRHdGtfaAotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJDbGlw
Ym9hcmQuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICBjbGFzcyBDYWNoZWRJbWFnZTsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQ
YXN0ZWJvYXJkSGVscGVyOwotCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2
ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotICAgIC8vIENyZWF0ZWQgZnJv
bSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQgYnkgdGhlIGRvbQotICAgIGNsYXNzIENs
aXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCB7
Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGsocG9saWN5
LCBjbGlwYm9hcmQsIGZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBQ
YXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QsIENsaXBib2FyZFR5cGUgY2xpcGJv
YXJkVHlwZSwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGRhdGFPYmplY3QsIGNsaXBib2FyZFR5cGUs
IGZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+Q2xpcGJvYXJkR3RrKCk7Ci0K
LSAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgY2xl
YXJBbGxEYXRhKCk7Ci0gICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0K
LSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7Ci0gICAg
ICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKLSAg
ICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9p
bnQmKTsKLQotICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50
UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJh
bWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKLQotICAgICAgICBQYXNzUmVmUHRyPERhdGFP
YmplY3RHdGs+IGRhdGFPYmplY3QoKSB7IHJldHVybiBtX2RhdGFPYmplY3Q7IH0KLSAgICAgICAg
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiBtX2NsaXBib2FyZDsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSwgR3Rr
Q2xpcGJvYXJkKiwgRnJhbWUqKTsKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vz
c1BvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiwgQ2xpcGJvYXJkVHlwZSwgRnJhbWUq
KTsKLQotICAgICAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gbV9kYXRhT2JqZWN0OwotICAgICAg
ICBHdGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOwotICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAg
ICB9OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EcmFnRGF0YUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFH
dGsuY3BwCmluZGV4IDAyYTQ3NDkuLjc5N2M3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApAQCAtMTcsOCArMTcsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNp
bmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcAppbmRleCAxYTBiY2JkLi5lM2ExZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC0yMSwyNCArMjEsMTggQEAKICNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNsaXBi
b2FyZEd0ay5oIgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
I2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTQ3LDUzICs0MSwxNTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpCitlbnVtIENsaXBib2FyZERhdGFUeXBlIHsKKyAgICBDbGlwYm9hcmRE
YXRhVHlwZVRleHQsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCisgICAgQ2xpcGJvYXJk
RGF0YVR5cGVVUklMaXN0LAorICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAorICAgIENsaXBib2Fy
ZERhdGFUeXBlSW1hZ2UsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCit9OworCitQYXNz
T3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZShHdGtDbGlwYm9hcmQqIGd0a0Ns
aXBib2FyZCkKIHsKLSAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IG5ldyBQYXN0
ZWJvYXJkKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKGd0a0NsaXBib2Fy
ZCkpOworfQorCitQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZShQYXNz
UmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQYXN0ZWJvYXJkKGRhdGFPYmplY3QpKTsKK30KKworUGFzc093blB0cjxQYXN0ZWJvYXJk
PiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQoreworICAgIHJldHVybiBjcmVh
dGUoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKTsKK30KKworUGFz
c093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVQcml2YXRlKCkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlKERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKTsKK30KKworUGFzc093blB0cjxQ
YXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcCgpCit7CisgICAgcmV0
dXJuIGNyZWF0ZShEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSk7Cit9CisKK1Bhc3NPd25QdHI8UGFz
dGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQoreworICAgIHJldHVybiBjcmVhdGUoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkp
OworfQorCitzdGF0aWMgUGFzdGVib2FyZCogc2VsZWN0aW9uQ2xpcGJvYXJkKCkKK3sKKyAgICBz
dGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZShndGtfY2xp
cGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpLmxlYWtQdHIoKTsKICAgICByZXR1
cm4gcGFzdGVib2FyZDsKIH0KIAotUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCitzdGF0aWMgUGFz
dGVib2FyZCogcHJpbWFyeUNsaXBib2FyZCgpCiB7CisgICAgc3RhdGljIFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQgPSBQYXN0ZWJvYXJkOjpjcmVhdGUoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVD
VElPTl9QUklNQVJZKSkubGVha1B0cigpOworICAgIHJldHVybiBwYXN0ZWJvYXJkOwogfQogCi12
b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29s
IGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQpCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAg
cmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnVzZVBy
aW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSA/IHByaW1hcnlDbGlwYm9hcmQoKSA6IHNlbGVjdGlv
bkNsaXBib2FyZCgpOworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKFBhc3NSZWZQdHI8RGF0
YU9iamVjdEd0az4gZGF0YU9iamVjdCkKKyAgICA6IG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQor
ICAgICwgbV9ndGtDbGlwYm9hcmQoMCkKK3sKKyAgICBBU1NFUlQobV9kYXRhT2JqZWN0KTsKK30K
KworUGFzdGVib2FyZDo6UGFzdGVib2FyZChHdGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCkKKyAg
ICA6IG1fZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoZ3RrQ2xpcGJvYXJk
KSkKKyAgICAsIG1fZ3RrQ2xpcGJvYXJkKGd0a0NsaXBib2FyZCkKIHsKLSAgICBQYXN0ZWJvYXJk
SGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xp
cGJvYXJkKGZyYW1lKTsKKyAgICBBU1NFUlQobV9kYXRhT2JqZWN0KTsKK30KIAotICAgIERhdGFP
YmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJv
YXJkKTsKLSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOworUGFzdGVib2FyZDo6flBhc3RlYm9h
cmQoKQoreworfQorCitQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IFBhc3RlYm9hcmQ6OmRhdGFP
YmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGFPYmplY3Q7Cit9CiAKLSAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9
PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsK
LSAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7Ci0g
ICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwgY2FuU21hcnRDb3B5
T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9h
cmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOworc3RhdGljIENsaXBib2FyZERhdGFU
eXBlIGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3
VHlwZSkKK3sKKyAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKKwor
ICAgIC8vIFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5CisgICAgaWYgKHR5
cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVUZXh0OworICAgIGlmICh0eXBlID09ICJVUkwiKQorICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVVUkw7CisKKyAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFu
eSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKKyAgICAvLyBVbmljb2RlLCB3aGlj
aCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCisgICAgaWYgKHR5cGUgPT0gInRleHQv
cGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVGV4dDsKKyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0
eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlTWFya3VwOworICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91
cmktbGlzdCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQorICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OworCisgICAgLy8gTm90IGEga25vd24gdHlw
ZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCisgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVW5rbm93bjsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjp3cml0ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBzd2l0
Y2ggKGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7CisgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
TDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlTWFya3VwOgorICAgICAgICBtX2Rh
dGFPYmplY3QtPnNldE1hcmt1cChkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChk
YXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUlt
YWdlOgorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUs
IEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKK3sKKyAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyQWxsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6
ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJv
YXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUt
PmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChj
cmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFs
c2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQ
YXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRv
Tm90SW5jbHVkZVNtYXJ0UGFzdGUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5U
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9w
dGlvbikKIHsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0
X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJ
UEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6
Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAg
ICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHRl
eHQpOwogCi0gICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKLSAgICBQYXN0ZWJvYXJkSGVs
cGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNs
aXBib2FyZCwKLSAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2Up
ID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVy
OjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIChzbWFydFJlcGxhY2VPcHRpb24gPT0gQ2Fu
U21hcnRSZXBsYWNlKSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFz
dGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CiB9CiAKIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogCi0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVy
ID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7
CisgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJM
KHVybCwgbGFiZWwpOwogCi0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxs
KCk7Ci0KLSAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCBsYWJlbCk7Ci0gICAgaGVscGVyLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7CisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJk
KQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAogc3RhdGljIEtVUkwg
Z2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCkBAIC0xMjcsNTMgKzIyNSw5OCBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgdGl0bGUpCiAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBHdGtDbGlwYm9hcmQq
IGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3Rr
KiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0g
ICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7
CiAKICAgICBLVVJMIHVybCA9IGdldFVSTEZvckltYWdlTm9kZShub2RlKTsKICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOwor
ICAgICAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAotICAgICAgICBkYXRh
T2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHRvRWxlbWVudChub2RlKSwgSW5jbHVkZU5v
ZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3Vw
KGNyZWF0ZU1hcmt1cCh0b0VsZW1lbnQobm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxs
VVJMcykpOwogICAgIH0KIAogICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdS
ZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhi
dWYuZ2V0KCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKIAot
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVib2FyZCYgc291cmNlUGFzdGVib2FyZCkKIHsKLSAgICBH
dGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCA9IHN0YXRpY19jYXN0PENsaXBib2FyZEd0ayo+KGNs
aXBib2FyZCktPmNsaXBib2FyZCgpOwotICAgIGlmIChndGtDbGlwYm9hcmQpCi0gICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMoZ3RrQ2xpcGJvYXJkKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gc291cmNl
RGF0YU9iamVjdCA9IHNvdXJjZVBhc3RlYm9hcmQuZGF0YU9iamVjdCgpOworICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJBbGwoKTsKKworICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNUZXh0KCkp
CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChzb3VyY2VEYXRhT2JqZWN0LT50ZXh0KCkp
OworICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKKyAgICAgICAgbV9kYXRh
T2JqZWN0LT5zZXRNYXJrdXAoc291cmNlRGF0YU9iamVjdC0+bWFya3VwKCkpOworICAgIGlmIChz
b3VyY2VEYXRhT2JqZWN0LT5oYXNVUkwoKSkKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwo
c291cmNlRGF0YU9iamVjdC0+dXJsKCksIHNvdXJjZURhdGFPYmplY3QtPnVybExhYmVsKCkpOwor
ICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpCisgICAgICAgIG1fZGF0YU9i
amVjdC0+c2V0VVJJTGlzdChzb3VyY2VEYXRhT2JqZWN0LT51cmlMaXN0KCkpOworICAgIGlmIChz
b3VyY2VEYXRhT2JqZWN0LT5oYXNJbWFnZSgpKQorICAgICAgICBtX2RhdGFPYmplY3QtPnNldElt
YWdlKHNvdXJjZURhdGFPYmplY3QtPmltYWdlKCkpOworCisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJk
KQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjpjbGVhcigpCiB7Ci0gICAgZ3RrX2NsaXBib2FyZF9jbGVhcihndGtfY2xpcGJvYXJkX2dl
dF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NM
SVBCT0FSRCkpOworICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMuIEFjY29yZGluZyB0
byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKKyAgICAvLyBkb2VzIG5vdCBhZmZl
Y3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5
cGVzCisgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0
ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQKKyAgICAvLyBzdGlsbCBjb250YWluIHRo
ZSAiRmlsZXMiIHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZyku
IgorICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKKworICAgIGlm
IChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7Cit9
CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHN3
aXRjaCAoZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSkpIHsKKyAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
VVJMOgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyVVJJTGlzdCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlTWFya3VwOgorICAgICAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyTWFya3VwKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVUZXh0OgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyVGV4dCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSW1hZ2U6CisgICAgICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJJbWFnZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlVW5rbm93bjoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29u
dGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVw
bGFjZSgpCiB7Ci0gICAgcmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZSgKLSAgICAgICAg
Z3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwg
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKTsKKyAgICByZXR1cm4gbV9ndGtDbGlwYm9hcmQgJiYg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29u
dGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKG1fZ3RrQ2xpcGJvYXJkKTsKK30KKwordm9pZCBQYXN0
ZWJvYXJkOjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYgaG90U3Bv
dCkKK3sKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1
bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICBQYXN0ZWJv
YXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50
Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgaGVscGVyLT5nZXRDbGlwYm9h
cmRDb250ZW50cyhjbGlwYm9hcmQpOworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogCiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsK
IAotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewotICAgICAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUt
PmRvY3VtZW50KCksIGRhdGFPYmplY3QtPm1hcmt1cCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50KTsKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewor
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1fZGF0YU9iamVjdC0+bWFya3VwKCksICIi
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgICAgICBpZiAoZnJhZ21l
bnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KQEAgLTE4
MSw5ICszMjQsOSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRv
Y3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUAogICAgIGlmICghYWxsb3dQbGFp
blRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc1RleHQo
KSkgeworICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewogICAgICAgICBjaG9zZVBs
YWluVGV4dCA9IHRydWU7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgZGF0YU9iamVjdC0+dGV4
dCgpKTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBtX2RhdGFPYmplY3QtPnRleHQoKSk7CiAg
ICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7CiAgICAgfQpAQCAtMTkzLDEyICszMzYsOSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUAog
CiBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBQYXN0
ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJy
ZW50Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KLSAgICBoZWxwZXItPmdldENs
aXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQo
KTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJv
YXJkKTsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0KCk7CiB9CiAKIGJvb2wgUGFzdGVi
b2FyZDo6aXNTZWxlY3Rpb25Nb2RlKCkgY29uc3QKQEAgLTIxMSw0ICszNTEsNjggQEAgdm9pZCBQ
YXN0ZWJvYXJkOjpzZXRTZWxlY3Rpb25Nb2RlKGJvb2wgc2VsZWN0aW9uTW9kZSkKICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5zZXRVc2VQcmltYXJ5U2Vs
ZWN0aW9uQ2xpcGJvYXJkKHNlbGVjdGlvbk1vZGUpOwogfQogCitib29sIFBhc3RlYm9hcmQ6Omhh
c0RhdGEoKQoreworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhl
bHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9n
dGtDbGlwYm9hcmQpOworCisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpIHx8IG1f
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwg
bV9kYXRhT2JqZWN0LT5oYXNJbWFnZSgpOworfQorCitMaXN0SGFzaFNldDxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnR5cGVzKCkKK3sKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRl
bnRzKG1fZ3RrQ2xpcGJvYXJkKTsKKworICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXM7Cisg
ICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAgICAgIHR5cGVzLmFkZCgidGV4
dC9wbGFpbiIpOworICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsKKyAgICAgICAgdHlwZXMuYWRk
KCJ0ZXh0Iik7CisgICAgfQorCisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCisg
ICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5o
YXNVUklMaXN0KCkpIHsKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAg
ICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgfQorCisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFz
RmlsZW5hbWVzKCkpCisgICAgICAgIHR5cGVzLmFkZCgiRmlsZXMiKTsKKworICAgIHJldHVybiB0
eXBlczsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKQoreworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9ndGtD
bGlwYm9hcmQpOworCisgICAgc3dpdGNoIChkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJk
VHlwZSh0eXBlKSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgorICAgICAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7CisgICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZVVSTDoKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsKCk7CisgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+bWFy
a3VwKCk7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6CisgICAgICAgIHJldHVybiBt
X2RhdGFPYmplY3QtPnRleHQoKTsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSW1hZ2U6Cisg
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6
cmVhZEZpbGVuYW1lcygpCit7CisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQorICAgICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250
ZW50cyhtX2d0a0NsaXBib2FyZCk7CisKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
cmFnQ2xpZW50R3RrLmNwcAppbmRleCA5MjgwMGQ5Li5lMzliNDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcApAQCAtMTksNyAr
MTksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIK
IAotI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2lu
Y2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGFzdGVib2Fy
ZEhlbHBlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIndlYmtpdHdl
YmZyYW1lcHJpdmF0ZS5oIgpAQCAtNzUsMTAgKzc2LDggQEAgRHJhZ1NvdXJjZUFjdGlvbiBEcmFn
Q2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JikKIAog
dm9pZCBEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2Fy
ZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCiB7Ci0gICAgQ2xpcGJv
YXJkR3RrKiBjbGlwYm9hcmRHdGsgPSByZWludGVycHJldF9jYXN0PENsaXBib2FyZEd0ayo+KGNs
aXBib2FyZCk7Ci0KICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFt
ZV9nZXRfd2ViX3ZpZXcoa2l0KGZyYW1lKSk7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRh
dGFPYmplY3QgPSBjbGlwYm9hcmRHdGstPmRhdGFPYmplY3QoKTsKKyAgICBSZWZQdHI8RGF0YU9i
amVjdEd0az4gZGF0YU9iamVjdCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3Qo
KTsKICAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBhZG9wdEdSZWYoUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdEZvckRh
dGFPYmplY3QoZGF0YU9iamVjdC5nZXQoKSkpOwogICAgIEdPd25QdHI8R2RrRXZlbnQ+IGN1cnJl
bnRFdmVudChndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBkY2Yz
MzZjLi4zODk3MjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ2xpcGJvYXJkR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRVdGlsaXRpZXNH
dGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0RyYWdEYXRhLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCmluZGV4IGQ4
MDhlZDQuLjQwNmYwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC0z
MCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldl
YlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvQ2xpcGJvYXJkR3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdE
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENh
aXJvLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjEsNyArNjMsNyBAQCB2b2lk
IFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJ
bnRQb2ludCYgY2xpZW50UG9zaQogICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3Rr
PiBkYXRhT2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxDbGlwYm9hcmRHdGsqPihjbGlwYm9hcmQp
LT5kYXRhT2JqZWN0KCk7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBj
bGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CiAgICAgRHJhZ0RhdGEgZHJhZ0Rh
dGEoZGF0YU9iamVjdC5nZXQoKSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBjbGlw
Ym9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U3RhcnREcmFnKGRyYWdEYXRhLCBoYW5kbGUpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202123</attachid>
            <date>2013-05-17 11:24:03 -0700</date>
            <delta_ts>2013-05-17 11:39:01 -0700</delta_ts>
            <desc>Rebased to current git master</desc>
            <filename>gtk-clipboard2.diff</filename>
            <type>text/plain</type>
            <size>43024</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YjIyZjgyLi45YjE3NDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTMtMDUtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RLIHBvcnQgb2ZmIGxlZ2FjeSBjbGlwYm9hcmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjIyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lcmdlIGNsaXBi
b2FyZCBtZXRob2RzIGludG8gUGFzdGVib2FyZEd0ayB0aGF0IG5vdyB3cmFwcyBhCisgICAgICAg
IERhdGFPYmplY3RHdGsuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBSZW1vdmUg
Q2xpcGJvYXJkR3RrLmguCisgICAgICAgICogZG9tL0NsaXBib2FyZC5oOiBSZW1vdmUgR1RLIGZy
b20gdGhlIGxpc3Qgb2YgcG9ydHMgdXNpbmcgbGVnYWN5CisgICAgICAgIGNsaXBib2FyZC4KKyAg
ICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCk6IFVzZQorICAgICAgICBDbGlw
Ym9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKCkuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVi
b2FyZC5oOgorICAgICAgICAoUGFzdGVib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dlbmVyYWxDbGlw
Ym9hcmQpOiBVc2UKKyAgICAgICAgQ2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0RyYWdEYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVhdGUpOiBDcmVhdGUg
YSBuZXcgUGFzdGVib2FyZCBmb3IgYSBnaXZlbgorICAgICAgICBHdGtDbGlwYm9hcmQgb3IgRGF0
YU9iamVjdEd0ay4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSk6IENyZWF0ZSBhIFBhc3RlYm9hcmQKKyAgICAgICAgZm9yIHRoZSBHREtfU0VMRUNU
SU9OX0NMSVBCT0FSRCBjbGlwYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpj
cmVhdGVQcml2YXRlKTogQ3JlYXRlIGEgUGFzdGVib2FyZCB3aXRob3V0CisgICAgICAgIGEgR3Rr
Q2xpcGJvYXJkIGFzc29jaWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JEcmFnQW5kRHJvcCk6IENyZWF0ZSBhIFBhc3RlYm9hcmQKKyAgICAgICAgZm9yIGRyYWcg
YW5kIGRyb3Agb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNsaXBib2Fy
ZCk6IFJldHVybiBhIHN0YXRpYyBQYXN0ZWJvYXJkIGZvciB0aGUKKyAgICAgICAgR0RLX1NFTEVD
VElPTl9DTElQQk9BUkQgY2xpcGJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6cHJpbWFyeUNsaXBi
b2FyZCk6IFJldHVybiBhIHN0YXRpYyBQYXN0ZWJvYXJkIGZvciB0aGUKKyAgICAgICAgR0RLX1NF
TEVDVElPTl9QUklNQVJZIGNsaXBib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKTogUmV0dXJuCisgICAgICAgIHNlbGVjdGlvbkNsaXBib2FyZCgp
IG9yIHByaW1hcnlDbGlwYm9hcmQoKSBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgICAgICBwcmlt
YXJ5IHNlbGVjdGlvbiBjbGlwYm9hcmQgaXMgdGhlIGFjdGl2ZSBvbmUgb3Igbm90LgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp+UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpk
YXRhT2JqZWN0KTogUmV0dXJuIHRoZSB3cmFwcGVkIERhdGFPYmplY3RHdGsuCisgICAgICAgIChX
ZWJDb3JlOjpkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSk6IENvcGllZCBmcm9t
CisgICAgICAgIENsaXBib2FyZEd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Ojp3cml0ZVN0cmluZyk6IEFkYXB0ZWQgdG8gdXBhdGUgdGhlIHdyYXBwZWQKKyAgICAgICAgRGF0
YU9iamVjdEd0ayBhbmQgdGhlIEd0a0NsaXBib2FyZCBpZiBuZWVkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZVBhc3RlYm9hcmQpOiBDb3B5IHRoZSB3cmFwcGVkCisgICAgICAgIERhdGFPYmplY3RHdGsg
ZnJvbSB0aGUgRGF0YU9iamVjdEd0ayBvZiB0aGUgZ2l2ZW4gUGFzdGVib2FyZCBhbmQKKyAgICAg
ICAgdXBzYXRlIHRoZSBHdGtDbGlwYm9hcmQgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6Y2xlYXIpOiBDb3BpZWQgZnJvbSBDbGlwYm9hcmRHdGsuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKTogQ2hlY2sgaWYgY3VycmVu
dAorICAgICAgICBHdGtDbGlwYm9hcmQgc3VwcG9ydHMgc21hcnQgcmVwbGFjZS4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KTogQWRhcHRlZCB0byB1c2UgdGhlCisgICAgICAg
IHdyYXBwZWQgRGF0YU9iamVjdEd0ayByZWFkaW5nIGZyb20gdGhlIGN1cnJlbnQgR3RrQ2xpcGJv
YXJkIGlmCisgICAgICAgIHByZXNlbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpw
bGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEp
OiBDb3BpZWQgZnJvbSBDbGlwYm9hcmRHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6dHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMpOiBEaXR0by4KKwogMjAxMy0wNS0xNyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNp
c2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkIFtFbmFibGVkQXRSdW50aW1lXSBleHRlbmRl
ZCBhdHRyaWJ1dGUgc3VwcG9ydCBmb3IgZ2xvYmFsIGNvbnN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNjQ3MzIwNi4uNDc4YjFjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC02MjA1LDcgKzYyMDUsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggZjYz
MGRkZS4uZDJhMmY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtMzQsNyArMzQsNyBAQAog
Ly8gVGhpcyBET00gb2JqZWN0IG5vdyB3b3JrcyBieSBjYWxsaW5nIHRocm91Z2ggdG8gY2xhc3Nl
cyBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIuCiAvLyBTcGVjaWZpY2FsbHksIHRoZSBjbGFzcyBjdXJy
ZW50bHkgbmFtZWQgUGFzdGVib2FyZC4gVGhlIGxlZ2FjeSBzdHlsZSBpbnN0ZWFkCiAvLyB1c2Vz
IHRoaXMgYXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcy4KLSNkZWZpbmUgV1RGX1VTRV9MRUdBQ1lf
U1RZTEVfQUJTVFJBQ1RfQ0xJUEJPQVJEX0NMQVNTIChQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdJTikpCisjZGVmaW5lIFdURl9VU0VfTEVHQUNZX1NUWUxFX0FCU1RSQUNUX0NMSVBCT0FSRF9D
TEFTUyAoUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oV0lOKSkKIAogI2lmIFVTRShMRUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJ
UEJPQVJEX0NMQVNTKQogI2RlZmluZSBMRUdBQ1lfVklSVFVBTCB2aXJ0dWFsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAppbmRleCBjZmQ2Yzg4Li4xMDE3NmY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKIAotI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgpAQCAtOTYsNyArOTYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRn
ZQogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0Ns
aXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKENsaXBi
b2FyZFdyaXRhYmxlLCBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSwgQ2xpcGJvYXJkOjpEcmFnQW5k
RHJvcCwgbV9mcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERy
b3AoKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZy
YW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IDUyM2E0ZTYuLmYwMDVhNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTMzLDggKzMzLDggQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKEdUSykKLS8vIEZJWE1F
OiBXaHkgZG9lcyB0aGlzIGluY2x1ZGUgbmVlZCB0byBiZSBpbiB0aGlzIGhlYWRlcj8KLSNpbmNs
dWRlIDxQYXN0ZWJvYXJkSGVscGVyLmg+CisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKK3R5cGVkZWYg
c3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXJkOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCkBAIC05NCw2ICs5NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBnZXRT
dHJpbmdTZWxlY3Rpb24oRnJhbWUqLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UGFzdGVib2FyZD4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4pOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShHdGtDbGlwYm9hcmQqKTsKKyAgICBQ
YXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSBjb25zdDsKKyNlbmRpZgorCiAg
ICAgLy8gRGVwcmVjYXRlZC4gVXNlIGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSBpbnN0ZWFkLgogICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBnZW5lcmFsUGFzdGVib2FyZCgpOwogCkBAIC0xNTQsNiArMTYw
LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGFzdGVib2FyZCgpOwogCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFBhc3RlYm9hcmQoUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPik7CisgICAg
UGFzdGVib2FyZChHdGtDbGlwYm9hcmQqKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBtX3Bhc3RlYm9hcmROYW1lOwogICAgIGxvbmcg
bV9jaGFuZ2VDb3VudDsKQEAgLTE3MSw2ICsxODIsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c2VsZWN0aW9uTW9kZTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFJlZlB0cjxE
YXRhT2JqZWN0R3RrPiBtX2RhdGFPYmplY3Q7CisgICAgR3RrQ2xpcGJvYXJkKiBtX2d0a0NsaXBi
b2FyZDsKKyNlbmRpZgorCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCmluZGV4IGRkMGEzNzIuLmQ3OTVj
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCkBA
IC0xNSwzMjQgKzE1LDQyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZp
bGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRh
VHlwZVRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCi0gICAgQ2xpcGJvYXJkRGF0
YVR5cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAotICAgIENsaXBib2FyZERh
dGFUeXBlSW1hZ2UsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCi19OwotCisvLyBGSVhN
RTogdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcC4KIFBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9h
cmRHdGs6OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJhbWUpOwot
fQotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCi17Ci0g
ICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3Jt
RGF0YSgpLCBEcmFnQW5kRHJvcCwgZnJhbWUpOwotfQotCi1DbGlwYm9hcmRHdGs6OkNsaXBib2Fy
ZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlKQot
ICAgICwgbV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQp
KQotICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsK
LX0KLQotQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBl
IGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIGNs
aXBib2FyZFR5cGUpCi0gICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKLSAgICAsIG1fY2xp
cGJvYXJkKDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1DbGlwYm9hcmRHdGs6On5D
bGlwYm9hcmRHdGsoKQotewotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1h
Z2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQotc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGRh
dGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3VHlwZSkK
LXsKLSAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKLQotICAgIC8v
IFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHR5cGUgPT0g
IlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5
cGVUZXh0OwotICAgIGlmICh0eXBlID09ICJVUkwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVVUkw7Ci0KLSAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFueSB0cmFp
bGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKLSAgICAvLyBVbmljb2RlLCB3aGljaCBlbmNh
cHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4i
IHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0
YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBl
TWFya3VwOwotICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlz
dCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQotICAgICAgICByZXR1cm4g
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OwotCi0gICAgLy8gTm90IGEga25vd24gdHlwZSwgc28g
anVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCi0gICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVW5rbm93bjsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RU
eXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUklMaXN0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXA6Ci0gICAgICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJNYXJrdXAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJUZXh0KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZToKLSAgICAgICAg
bV9kYXRhT2JqZWN0LT5jbGVhckltYWdlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9h
cmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFy
QWxsRGF0YSgpCi17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gV2UgZG8gbm90IGNsZWFyIGZpbGVuYW1lcy4gQWNjb3JkaW5nIHRvIHRoZSBzcGVj
OiAiVGhlIGNsZWFyRGF0YSgpIG1ldGhvZAotICAgIC8vIGRvZXMgbm90IGFmZmVjdCB3aGV0aGVy
IGFueSBmaWxlcyB3ZXJlIGluY2x1ZGVkIGluIHRoZSBkcmFnLCBzbyB0aGUgdHlwZXMKLSAgICAv
LyBhdHRyaWJ1dGUncyBsaXN0IG1pZ2h0IHN0aWxsIG5vdCBiZSBlbXB0eSBhZnRlciBjYWxsaW5n
IGNsZWFyRGF0YSgpIChpdCB3b3VsZCAKLSAgICAvLyBzdGlsbCBjb250YWluIHRoZSAiRmlsZXMi
IHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZykuIgotICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLVN0cmluZyBDbGlw
Ym9hcmRHdGs6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKSBjb25zdAotewotICAg
IGlmICghY2FuUmVhZERhdGEoKSB8fCAhbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJv
YXJkKTsKLQotICAgIENsaXBib2FyZERhdGFUeXBlIHR5cGUgPSBkYXRhT2JqZWN0VHlwZUZyb21I
VE1MQ2xpcGJvYXJkVHlwZSh0eXBlU3RyaW5nKTsKLSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmRE
YXRhVHlwZVVSSUxpc3QpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVyaUxpc3QoKTsK
LSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+dXJsKCk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJr
dXApCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPm1hcmt1cCgpOwotICAgIGlmICh0eXBl
ID09IENsaXBib2FyZERhdGFUeXBlVGV4dCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+
dGV4dCgpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBDbGlwYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZShwb2xpY3kpOwogfQogCi1ib29sIENsaXBib2FyZEd0azo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAg
ICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVj
dFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0g
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwp
IHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOwotICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJr
dXApIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7Ci0gICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRl
eHQpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOwotICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotTGlzdEhhc2hT
ZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIWNhblJl
YWRUeXBlcygpKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gICAg
aWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICBM
aXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzOwotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQo
KSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICAgICAgdHlwZXMuYWRk
KCJUZXh0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dCIpOwotICAgIH0KLQotICAgIGlmICht
X2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAgICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIp
OwotCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVz
LmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICB0eXBlcy5hZGQoIlVSTCIpOwotICAgIH0K
LQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQotICAgICAgICB0eXBlcy5h
ZGQoIkZpbGVzIik7Ci0KLSAgICByZXR1cm4gdHlwZXM7Ci19Ci0KLVBhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZEd0azo6ZmlsZXMoKSBjb25zdAotewotICAgIGlmICghY2FuUmVhZERhdGEo
KSkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0gICAgUmVmUHRyPEZpbGVM
aXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLSAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7IGkrKykKLSAgICAgICAgZmlsZUxpc3Qt
PmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzW2ldLCBGaWxlOjpBbGxDb250ZW50VHlwZXMp
KTsKLSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwotfQotCi12b2lkIENsaXBib2FyZEd0
azo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGxvY2F0
aW9uKQotewotICAgIHNldERyYWdJbWFnZShpbWFnZSwgMCwgbG9jYXRpb24pOwotfQotCi12b2lk
IENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiBlbGVtZW50LCBjb25zdCBJ
bnRQb2ludCYgbG9jYXRpb24pCi17Ci0gICAgc2V0RHJhZ0ltYWdlKDAsIGVsZW1lbnQsIGxvY2F0
aW9uKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSog
aW1hZ2UsIE5vZGUqIGVsZW1lbnQsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBp
ZiAoIWNhblNldERyYWdJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kcmFn
SW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9k
cmFnSW1hZ2UgPSBpbWFnZTsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0lt
YWdlLT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2RyYWdMb2MgPSBsb2NhdGlvbjsKLSAgICBt
X2RyYWdJbWFnZUVsZW1lbnQgPSBlbGVtZW50OwotfQotCi1EcmFnSW1hZ2VSZWYgQ2xpcGJvYXJk
R3RrOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdAorRHJhZ0ltYWdl
UmVmIENsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBsb2NhdGlvbikgY29uc3QK
IHsKICAgICBsb2NhdGlvbiA9IG1fZHJhZ0xvYzsKIAogICAgIGlmIChtX2RyYWdJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2Uo
KSk7Ci0gICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVudCAmJiBtX2ZyYW1lKQotICAgICAgICByZXR1
cm4gbV9mcmFtZS0+bm9kZUltYWdlKG1fZHJhZ0ltYWdlRWxlbWVudC5nZXQoKSk7CiAKLSAgICBy
ZXR1cm4gMDsgLy8gV2UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBh
IGRyYWcgaW1hZ2UsIHVzZSB0aGUgZGVmYXVsdCBpY29uLgotfQotCi1zdGF0aWMgQ2FjaGVkSW1h
Z2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgLy8gQXR0ZW1wdCB0
byBwdWxsIENhY2hlZEltYWdlIGZyb20gZWxlbWVudAotICAgIEFTU0VSVChlbGVtZW50KTsKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
IXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVy
ZXIpOwotICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAhaW1hZ2UtPmNhY2hlZEltYWdl
KCktPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJs
LCBsYWJlbCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKGVsZW1l
bnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwotCi0gICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1h
Z2UtPmlzTG9hZGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVu
ZGVyZXIoKSktPmdldEdka1BpeGJ1ZigpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9kYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOwotfQotCi12
b2lkIENsaXBib2FyZEd0azo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBGcmFtZSopCi17Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCBsYWJlbCk7
Ci0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
LX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUmFuZ2UoUmFuZ2UqIHJhbmdlLCBGcmFtZSog
ZnJhbWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlKTsKLQotICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4
dChmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkpOwotICAgIG1fZGF0
YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLQotICAgIGlmIChtX2NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgQ2xpcGJv
YXJkR3RrOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgbV9kYXRh
T2JqZWN0LT5zZXRUZXh0KHRleHQpOworICAgIGlmIChtX2RyYWdJbWFnZUVsZW1lbnQpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9kcmFnSW1hZ2VFbGVtZW50LT5kb2N1bWVudCgp
OworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAg
ICAgICByZXR1cm4gZnJhbWUtPm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOwor
ICAgIH0KIAotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBi
b2FyZCk7CisgICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlv
biB0byBjcmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KIH0KIAotYm9v
bCBDbGlwYm9hcmRHdGs6Omhhc0RhdGEoKQordm9pZCBDbGlwYm9hcmQ6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAg
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2Fy
ZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLQotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc1Rl
eHQoKSB8fCBtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpCi0gICAgICAgIHx8IG1fZGF0YU9iamVj
dC0+aGFzVVJJTGlzdCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzSW1hZ2UoKTsKKyAgICBtX3Bhc3Rl
Ym9hcmQtPndyaXRlSW1hZ2UoZWxlbWVudC0+dG9Ob2RlKCksIHVybCwgbGFiZWwpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVlOWQ2M2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRHdGtfaAotI2RlZmluZSBDbGlwYm9h
cmRHdGtfaAotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJDbGlw
Ym9hcmQuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICBjbGFzcyBDYWNoZWRJbWFnZTsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQ
YXN0ZWJvYXJkSGVscGVyOwotCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2
ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotICAgIC8vIENyZWF0ZWQgZnJv
bSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQgYnkgdGhlIGRvbQotICAgIGNsYXNzIENs
aXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCB7
Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGsocG9saWN5
LCBjbGlwYm9hcmQsIGZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBQ
YXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QsIENsaXBib2FyZFR5cGUgY2xpcGJv
YXJkVHlwZSwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGRhdGFPYmplY3QsIGNsaXBib2FyZFR5cGUs
IGZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+Q2xpcGJvYXJkR3RrKCk7Ci0K
LSAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgY2xl
YXJBbGxEYXRhKCk7Ci0gICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0K
LSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7Ci0gICAg
ICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKLSAg
ICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9p
bnQmKTsKLQotICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50
UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJh
bWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKLQotICAgICAgICBQYXNzUmVmUHRyPERhdGFP
YmplY3RHdGs+IGRhdGFPYmplY3QoKSB7IHJldHVybiBtX2RhdGFPYmplY3Q7IH0KLSAgICAgICAg
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiBtX2NsaXBib2FyZDsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSwgR3Rr
Q2xpcGJvYXJkKiwgRnJhbWUqKTsKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vz
c1BvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiwgQ2xpcGJvYXJkVHlwZSwgRnJhbWUq
KTsKLQotICAgICAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gbV9kYXRhT2JqZWN0OwotICAgICAg
ICBHdGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOwotICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAg
ICB9OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EcmFnRGF0YUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFH
dGsuY3BwCmluZGV4IDAyYTQ3NDkuLjc5N2M3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApAQCAtMTcsOCArMTcsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNp
bmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcAppbmRleCAxYTBiY2JkLi5lM2ExZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC0yMSwyNCArMjEsMTggQEAKICNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNsaXBi
b2FyZEd0ay5oIgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
I2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTQ3LDUzICs0MSwxNTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpCitlbnVtIENsaXBib2FyZERhdGFUeXBlIHsKKyAgICBDbGlwYm9hcmRE
YXRhVHlwZVRleHQsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCisgICAgQ2xpcGJvYXJk
RGF0YVR5cGVVUklMaXN0LAorICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAorICAgIENsaXBib2Fy
ZERhdGFUeXBlSW1hZ2UsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCit9OworCitQYXNz
T3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZShHdGtDbGlwYm9hcmQqIGd0a0Ns
aXBib2FyZCkKIHsKLSAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IG5ldyBQYXN0
ZWJvYXJkKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKGd0a0NsaXBib2Fy
ZCkpOworfQorCitQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZShQYXNz
UmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQYXN0ZWJvYXJkKGRhdGFPYmplY3QpKTsKK30KKworUGFzc093blB0cjxQYXN0ZWJvYXJk
PiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQoreworICAgIHJldHVybiBjcmVh
dGUoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKTsKK30KKworUGFz
c093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVQcml2YXRlKCkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlKERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKTsKK30KKworUGFzc093blB0cjxQ
YXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcCgpCit7CisgICAgcmV0
dXJuIGNyZWF0ZShEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSk7Cit9CisKK1Bhc3NPd25QdHI8UGFz
dGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQoreworICAgIHJldHVybiBjcmVhdGUoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkp
OworfQorCitzdGF0aWMgUGFzdGVib2FyZCogc2VsZWN0aW9uQ2xpcGJvYXJkKCkKK3sKKyAgICBz
dGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZShndGtfY2xp
cGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpLmxlYWtQdHIoKTsKICAgICByZXR1
cm4gcGFzdGVib2FyZDsKIH0KIAotUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCitzdGF0aWMgUGFz
dGVib2FyZCogcHJpbWFyeUNsaXBib2FyZCgpCiB7CisgICAgc3RhdGljIFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQgPSBQYXN0ZWJvYXJkOjpjcmVhdGUoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVD
VElPTl9QUklNQVJZKSkubGVha1B0cigpOworICAgIHJldHVybiBwYXN0ZWJvYXJkOwogfQogCi12
b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29s
IGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQpCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAg
cmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnVzZVBy
aW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSA/IHByaW1hcnlDbGlwYm9hcmQoKSA6IHNlbGVjdGlv
bkNsaXBib2FyZCgpOworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKFBhc3NSZWZQdHI8RGF0
YU9iamVjdEd0az4gZGF0YU9iamVjdCkKKyAgICA6IG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQor
ICAgICwgbV9ndGtDbGlwYm9hcmQoMCkKK3sKKyAgICBBU1NFUlQobV9kYXRhT2JqZWN0KTsKK30K
KworUGFzdGVib2FyZDo6UGFzdGVib2FyZChHdGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCkKKyAg
ICA6IG1fZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoZ3RrQ2xpcGJvYXJk
KSkKKyAgICAsIG1fZ3RrQ2xpcGJvYXJkKGd0a0NsaXBib2FyZCkKIHsKLSAgICBQYXN0ZWJvYXJk
SGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xp
cGJvYXJkKGZyYW1lKTsKKyAgICBBU1NFUlQobV9kYXRhT2JqZWN0KTsKK30KIAotICAgIERhdGFP
YmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJv
YXJkKTsKLSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOworUGFzdGVib2FyZDo6flBhc3RlYm9h
cmQoKQoreworfQorCitQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IFBhc3RlYm9hcmQ6OmRhdGFP
YmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGFPYmplY3Q7Cit9CiAKLSAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9
PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsK
LSAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7Ci0g
ICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwgY2FuU21hcnRDb3B5
T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9h
cmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOworc3RhdGljIENsaXBib2FyZERhdGFU
eXBlIGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3
VHlwZSkKK3sKKyAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKKwor
ICAgIC8vIFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5CisgICAgaWYgKHR5
cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVUZXh0OworICAgIGlmICh0eXBlID09ICJVUkwiKQorICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVVUkw7CisKKyAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFu
eSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKKyAgICAvLyBVbmljb2RlLCB3aGlj
aCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCisgICAgaWYgKHR5cGUgPT0gInRleHQv
cGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVGV4dDsKKyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0
eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlTWFya3VwOworICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91
cmktbGlzdCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQorICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OworCisgICAgLy8gTm90IGEga25vd24gdHlw
ZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCisgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVW5rbm93bjsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjp3cml0ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBzd2l0
Y2ggKGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7CisgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
TDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlTWFya3VwOgorICAgICAgICBtX2Rh
dGFPYmplY3QtPnNldE1hcmt1cChkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChk
YXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUlt
YWdlOgorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUs
IEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKK3sKKyAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyQWxsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6
ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJv
YXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUt
PmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChj
cmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFs
c2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQ
YXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRv
Tm90SW5jbHVkZVNtYXJ0UGFzdGUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5U
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9w
dGlvbikKIHsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0
X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJ
UEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6
Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAg
ICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHRl
eHQpOwogCi0gICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKLSAgICBQYXN0ZWJvYXJkSGVs
cGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNs
aXBib2FyZCwKLSAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2Up
ID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVy
OjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIChzbWFydFJlcGxhY2VPcHRpb24gPT0gQ2Fu
U21hcnRSZXBsYWNlKSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFz
dGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CiB9CiAKIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogCi0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVy
ID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7
CisgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJM
KHVybCwgbGFiZWwpOwogCi0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxs
KCk7Ci0KLSAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCBsYWJlbCk7Ci0gICAgaGVscGVyLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7CisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJk
KQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAogc3RhdGljIEtVUkwg
Z2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCkBAIC0xMjcsNTMgKzIyNSw5OCBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgdGl0bGUpCiAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOwogICAgIEFTU0VSVChpbWFnZSk7CiAKLSAgICBHdGtDbGlwYm9hcmQq
IGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3Rr
KiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0g
ICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7
CiAKICAgICBLVVJMIHVybCA9IGdldFVSTEZvckltYWdlTm9kZShub2RlKTsKICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOwor
ICAgICAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAotICAgICAgICBkYXRh
T2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHRvRWxlbWVudChub2RlKSwgSW5jbHVkZU5v
ZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3Vw
KGNyZWF0ZU1hcmt1cCh0b0VsZW1lbnQobm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxs
VVJMcykpOwogICAgIH0KIAogICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdS
ZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhi
dWYuZ2V0KCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKIAot
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVib2FyZCYgc291cmNlUGFzdGVib2FyZCkKIHsKLSAgICBH
dGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCA9IHN0YXRpY19jYXN0PENsaXBib2FyZEd0ayo+KGNs
aXBib2FyZCktPmNsaXBib2FyZCgpOwotICAgIGlmIChndGtDbGlwYm9hcmQpCi0gICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMoZ3RrQ2xpcGJvYXJkKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gc291cmNl
RGF0YU9iamVjdCA9IHNvdXJjZVBhc3RlYm9hcmQuZGF0YU9iamVjdCgpOworICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJBbGwoKTsKKworICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNUZXh0KCkp
CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChzb3VyY2VEYXRhT2JqZWN0LT50ZXh0KCkp
OworICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKKyAgICAgICAgbV9kYXRh
T2JqZWN0LT5zZXRNYXJrdXAoc291cmNlRGF0YU9iamVjdC0+bWFya3VwKCkpOworICAgIGlmIChz
b3VyY2VEYXRhT2JqZWN0LT5oYXNVUkwoKSkKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwo
c291cmNlRGF0YU9iamVjdC0+dXJsKCksIHNvdXJjZURhdGFPYmplY3QtPnVybExhYmVsKCkpOwor
ICAgIGlmIChzb3VyY2VEYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpCisgICAgICAgIG1fZGF0YU9i
amVjdC0+c2V0VVJJTGlzdChzb3VyY2VEYXRhT2JqZWN0LT51cmlMaXN0KCkpOworICAgIGlmIChz
b3VyY2VEYXRhT2JqZWN0LT5oYXNJbWFnZSgpKQorICAgICAgICBtX2RhdGFPYmplY3QtPnNldElt
YWdlKHNvdXJjZURhdGFPYmplY3QtPmltYWdlKCkpOworCisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJk
KQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjpjbGVhcigpCiB7Ci0gICAgZ3RrX2NsaXBib2FyZF9jbGVhcihndGtfY2xpcGJvYXJkX2dl
dF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NM
SVBCT0FSRCkpOworICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMuIEFjY29yZGluZyB0
byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKKyAgICAvLyBkb2VzIG5vdCBhZmZl
Y3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5
cGVzCisgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0
ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQKKyAgICAvLyBzdGlsbCBjb250YWluIHRo
ZSAiRmlsZXMiIHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZyku
IgorICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKKworICAgIGlm
IChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7Cit9
CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHN3
aXRjaCAoZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSkpIHsKKyAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
VVJMOgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyVVJJTGlzdCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlTWFya3VwOgorICAgICAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyTWFya3VwKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVUZXh0OgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyVGV4dCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSW1hZ2U6CisgICAgICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJJbWFnZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlVW5rbm93bjoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29u
dGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVw
bGFjZSgpCiB7Ci0gICAgcmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZSgKLSAgICAgICAg
Z3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwg
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKTsKKyAgICByZXR1cm4gbV9ndGtDbGlwYm9hcmQgJiYg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29u
dGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKG1fZ3RrQ2xpcGJvYXJkKTsKK30KKwordm9pZCBQYXN0
ZWJvYXJkOjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYgaG90U3Bv
dCkKK3sKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1
bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICBQYXN0ZWJv
YXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50
Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgaGVscGVyLT5nZXRDbGlwYm9h
cmRDb250ZW50cyhjbGlwYm9hcmQpOworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogCiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsK
IAotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewotICAgICAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUt
PmRvY3VtZW50KCksIGRhdGFPYmplY3QtPm1hcmt1cCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50KTsKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewor
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1fZGF0YU9iamVjdC0+bWFya3VwKCksICIi
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgICAgICBpZiAoZnJhZ21l
bnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KQEAgLTE4
MSw5ICszMjQsOSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRv
Y3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUAogICAgIGlmICghYWxsb3dQbGFp
blRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc1RleHQo
KSkgeworICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewogICAgICAgICBjaG9zZVBs
YWluVGV4dCA9IHRydWU7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgZGF0YU9iamVjdC0+dGV4
dCgpKTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBtX2RhdGFPYmplY3QtPnRleHQoKSk7CiAg
ICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7CiAgICAgfQpAQCAtMTkzLDEyICszMzYsOSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUAog
CiBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBQYXN0
ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJy
ZW50Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KLSAgICBoZWxwZXItPmdldENs
aXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQo
KTsKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJv
YXJkKTsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0KCk7CiB9CiAKIGJvb2wgUGFzdGVi
b2FyZDo6aXNTZWxlY3Rpb25Nb2RlKCkgY29uc3QKQEAgLTIxMSw0ICszNTEsNjggQEAgdm9pZCBQ
YXN0ZWJvYXJkOjpzZXRTZWxlY3Rpb25Nb2RlKGJvb2wgc2VsZWN0aW9uTW9kZSkKICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5zZXRVc2VQcmltYXJ5U2Vs
ZWN0aW9uQ2xpcGJvYXJkKHNlbGVjdGlvbk1vZGUpOwogfQogCitib29sIFBhc3RlYm9hcmQ6Omhh
c0RhdGEoKQoreworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhl
bHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9n
dGtDbGlwYm9hcmQpOworCisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpIHx8IG1f
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwg
bV9kYXRhT2JqZWN0LT5oYXNJbWFnZSgpOworfQorCitMaXN0SGFzaFNldDxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnR5cGVzKCkKK3sKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRl
bnRzKG1fZ3RrQ2xpcGJvYXJkKTsKKworICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXM7Cisg
ICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAgICAgIHR5cGVzLmFkZCgidGV4
dC9wbGFpbiIpOworICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsKKyAgICAgICAgdHlwZXMuYWRk
KCJ0ZXh0Iik7CisgICAgfQorCisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCisg
ICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5o
YXNVUklMaXN0KCkpIHsKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAg
ICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgfQorCisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFz
RmlsZW5hbWVzKCkpCisgICAgICAgIHR5cGVzLmFkZCgiRmlsZXMiKTsKKworICAgIHJldHVybiB0
eXBlczsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKQoreworICAgIGlmIChtX2d0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9ndGtD
bGlwYm9hcmQpOworCisgICAgc3dpdGNoIChkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJk
VHlwZSh0eXBlKSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgorICAgICAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7CisgICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZVVSTDoKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsKCk7CisgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+bWFy
a3VwKCk7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6CisgICAgICAgIHJldHVybiBt
X2RhdGFPYmplY3QtPnRleHQoKTsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSW1hZ2U6Cisg
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6
cmVhZEZpbGVuYW1lcygpCit7CisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQorICAgICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250
ZW50cyhtX2d0a0NsaXBib2FyZCk7CisKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGVmZGMzMzcuLmIxOTBlY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wNS0xNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEsgcG9y
dCBvZmYgbGVnYWN5IGNsaXBib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE2MjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6c3RhcnREcmFnKTogR2V0IHRoZSBEYXRhT2JqZWN0R3Rr
IGZyb20gdGhlCisgICAgICAgIFBhc3RlYm9hcmQgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gQ2xp
cGJvYXJkLgorCiAyMDEzLTA1LTE3ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4gUmVt
b3ZlIGFzc2VydGlvbiB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnltb3JlIHNpbmNlIHRoZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNw
cAppbmRleCA5MjgwMGQ5Li5lMzliNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcApAQCAtMTksNyArMTksNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIKIAotI2luY2x1ZGUgIkNs
aXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIkNsaXBib2Fy
ZFV0aWxpdGllc0d0ay5oIgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lcHJpdmF0ZS5o
IgpAQCAtNzUsMTAgKzc2LDggQEAgRHJhZ1NvdXJjZUFjdGlvbiBEcmFnQ2xpZW50OjpkcmFnU291
cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JikKIAogdm9pZCBEcmFnQ2xpZW50
OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdl
T3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBG
cmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCiB7Ci0gICAgQ2xpcGJvYXJkR3RrKiBjbGlwYm9h
cmRHdGsgPSByZWludGVycHJldF9jYXN0PENsaXBib2FyZEd0ayo+KGNsaXBib2FyZCk7Ci0KICAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
a2l0KGZyYW1lKSk7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBjbGlw
Ym9hcmRHdGstPmRhdGFPYmplY3QoKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9i
amVjdCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKICAgICBHUmVmUHRy
PEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBhZG9wdEdSZWYoUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9i
amVjdC5nZXQoKSkpOwogICAgIEdPd25QdHI8R2RrRXZlbnQ+IGN1cnJlbnRFdmVudChndGtfZ2V0
X2N1cnJlbnRfZXZlbnQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4OWVkOGMzLi4wNTllOTIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDUtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RLIHBvcnQgb2Zm
IGxlZ2FjeSBjbGlwYm9hcmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNjIyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOiBSZW1v
dmUgQ2xpcGJvYXJkR3RrLmgKKyAgICAgICAgaW5jbHVkZS4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKTogR2V0IHRoZSBEYXRhT2JqZWN0R3RrIGZyb20g
dGhlCisgICAgICAgIFBhc3RlYm9hcmQgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gQ2xpcGJvYXJk
LgorCiAyMDEzLTA1LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QWRkIFdLUGFnZUxvYWREYXRhIGFuZCBXS1BhZ2VMb2FkRGF0YVdpdGhVc2VyRGF0YSBTUEkgdG8g
c3VwcG9ydCBsb2FkaW5nIGFyYml0cmFyeSBkYXRhIGJsb2JzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggZGNm
MzM2Yy4uMzg5NzI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIldlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0NsaXBib2FyZEd0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkVXRpbGl0aWVz
R3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EcmFnRGF0YS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAppbmRleCBk
ODA4ZWQ0Li40MDZmMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcApAQCAt
MzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0NsaXBib2FyZEd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFn
RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRD
YWlyby5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYxLDcgKzYzLDcgQEAgdm9p
ZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3Qg
SW50UG9pbnQmIGNsaWVudFBvc2kKICAgICBpZiAoYml0bWFwICYmICFiaXRtYXAtPmNyZWF0ZUhh
bmRsZShoYW5kbGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RGF0YU9iamVjdEd0
az4gZGF0YU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJk
KS0+ZGF0YU9iamVjdCgpOworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0g
Y2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwogICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xp
cGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7CiB9Cg==
</data>
<flag name="review"
          id="223536"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>