<?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>89155</bug_id>
          
          <creation_ts>2012-06-14 18:50:02 -0700</creation_ts>
          <short_desc>[Forms] Copy RenderTextControlSingleLine.{cpp,h} to RenderSearchFiled.{cpp,h}</short_desc>
          <delta_ts>2014-01-24 23:40:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>649736</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-14 18:50:02 -0700</bug_when>
    <thetext>This is preparation of splinting RenderTextControlSingline into RenderTextControlSingline and RenderSeatchField (bug 88980).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649739</commentid>
    <comment_count>1</comment_count>
      <attachid>147705</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 18:56:25 -0700</bug_when>
    <thetext>Created attachment 147705
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649741</commentid>
    <comment_count>2</comment_count>
      <attachid>147705</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 18:57:13 -0700</bug_when>
    <thetext>Comment on attachment 147705
Patch 1

Could you review this patch?
Thanks in advance.

* Just copy two files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649747</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-14 19:00:15 -0700</bug_when>
    <thetext>Attachment 147705 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/rendering/RenderSearchField.cpp:25:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/rendering/RenderSearchField.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/rendering/RenderSearchField.cpp:658:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/rendering/RenderSearchField.h:23:  #ifndef header guard has wrong style, please use: RenderSearchField_h  [build/header_guard] [5]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649749</commentid>
    <comment_count>4</comment_count>
      <attachid>147705</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 19:02:49 -0700</bug_when>
    <thetext>Comment on attachment 147705
Patch 1

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649767</commentid>
    <comment_count>5</comment_count>
      <attachid>147705</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 19:25:23 -0700</bug_when>
    <thetext>Comment on attachment 147705
Patch 1

Clearing flags on attachment: 147705

Committed r120390: &lt;http://trac.webkit.org/changeset/120390&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649769</commentid>
    <comment_count>6</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-14 19:25:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651085</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-17 18:49:06 -0700</bug_when>
    <thetext>Unfortunately we failed.  RenderSearchField.cpp doesn&apos;t have expected history.

http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderSearchField.cpp?annotate=blame&amp;rev=120432</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651088</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-06-17 18:59:51 -0700</bug_when>
    <thetext>I&apos;m pretty sure you need to give an actual &quot;svn copy&quot; command in order to achieve that. git has no notion of moving/copying files, so what you&apos;re doing is copying the contents of the file, rather than the file itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651091</commentid>
    <comment_count>9</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 19:08:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I&apos;m pretty sure you need to give an actual &quot;svn copy&quot; command in order to achieve that. git has no notion of moving/copying files, so what you&apos;re doing is copying the contents of the file, rather than the file itself.

Thanks Peter!
I&apos;m doing roll out this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651093</commentid>
    <comment_count>10</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 19:10:02 -0700</bug_when>
    <thetext>Reverted r120390 for reason:

Failed to copy merge history to RenderSerachField.{cpp,h}

Committed r120558: &lt;http://trac.webkit.org/changeset/120558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651144</commentid>
    <comment_count>11</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:11:27 -0700</bug_when>
    <thetext>Reverted r120565 for reason:

Bad message

Committed r120566: &lt;http://trac.webkit.org/changeset/120566&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651184</commentid>
    <comment_count>12</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 23:00:10 -0700</bug_when>
    <thetext>Finally, I could copy history
r120567 http://trac.webkit.org/changeset/120567</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147705</attachid>
            <date>2012-06-14 18:56:25 -0700</date>
            <delta_ts>2012-06-14 19:25:23 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-89155-20120615105624.patch</filename>
            <type>text/plain</type>
            <size>41350</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjM1YzU4YTVhNGZhOTFk
Yjg5NTI2ZWU2ZjcyMDA0NTRmZjdiOTk2OS4uMjdiNDJhZTAyNzdmNTcxNzY1NWVhMzRkMzEwOGEx
ODdlMDY2YTdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBDb3B5
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS57Y3BwLGh9IHRvIFJlbmRlclNlYXJjaEZpbGVk
LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg5MTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBjb3BpZXMgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBhbmQgLmgg
aW50byBSZW5kZXJTZWFyY2hGaWVsZC5jcHAKKyAgICAgICAgYW5kIC5oIHdpdGgganVzdCAiY3Ai
IGNvZGUuIE5ldyBmaWxlcyBhcmVuJ3QgY29tcGlsZWQgdW50aWwgYnVnIDg4OTgwLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lckJsb2Nr
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpyZXN1bHRzQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhbmNlbEJ1dHRvbkVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2Vh
cmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2hvd1BvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGFzQ29udHJvbENsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9s
Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlQ29udHJvbEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRl
SW5uZXJUZXh0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0eUZv
ckNhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnRleHRTaG91bGRCZVRydW5jYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1UZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUxhYmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUljb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVudVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xp
ZW50SW5zZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2xpZW50SW5zZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRI
aWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRl
bUlzU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aXRlbUlzTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhvc3RXaW5kb3cpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3Jv
bGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oOiBBZGRlZC4KKyAgICAgICAgKFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnBvcHVwSXNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aXNUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6dG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAoUmVuZGVyVGV4dENvbnRyb2xJ
bm5lckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
azo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jazo6aGFzTGluZUlmRW1wdHkpOgorCiAyMDEyLTA2LTE0ICBK
aWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaWxlUmVhZGVyIGlzIGR5
c2Z1bmN0aW9uYWwgaW4gZG9jdW1lbnRzIHdpdGggIm51bGwiIG9yaWdpbiBzdHJpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg0OGZjMjExOTdjMmE3ZDI0ZjI2NDhkZjcwMjA1MjlmM2M4ODBkM2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCkBAIC0w
LDAgKzEsNzYwIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykgCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9w
dXBNZW51LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0
YS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkKK3sKKyAgICBMYXlvdXRQb2ludCBjb250ZW50c1BvaW50KHBvaW50KTsKKwor
ICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRyb2xzIGhhdmUgdGhlIHNjcm9sbCBvbiBzaGFkb3dB
bmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0CisgICAgLy8gaW50byBhY2NvdW50
IGhlcmUuCisgICAgaWYgKG1fbXVsdGlMaW5lKSB7CisgICAgICAgIFJlbmRlclRleHRDb250cm9s
KiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgICAgICBjb250ZW50c1BvaW50ICs9IHJlbmRlcmVyLT5zY3JvbGxlZENvbnRl
bnRPZmZzZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9y
UG9pbnQoY29udGVudHNQb2ludCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlclRleHRDb250cm9sKG5vZGUpCisgICAgLCBt
X3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9zaG91bGREcmF3Q2Fwc0xvY2tJ
bmRpY2F0b3IoZmFsc2UpCisgICAgLCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQoLTEpCisgICAg
LCBtX3NlYXJjaFBvcHVwKDApCit7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7
CisgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOworfQorCitSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQoreworICAgIGlm
IChtX3NlYXJjaFBvcHVwKSB7CisgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5k
aXNjb25uZWN0Q2xpZW50KCk7CisgICAgICAgIG1fc2VhcmNoUG9wdXAgPSAwOworICAgIH0KK30K
KworaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRh
aW5lckVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFp
bmVyRWxlbWVudCgpOworfQorCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1
dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKK30KKworaW5saW5lIEhUTUxFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBj
b25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJTcGluQnV0dG9uRWxlbWVu
dCgpOworfQorCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6cmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1l
bnQoKS0+cmVzdWx0c0J1dHRvbkVsZW1lbnQoKTsKK30KKworaW5saW5lIEhUTUxFbGVtZW50KiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdAor
eworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y2FuY2VsQnV0dG9uRWxlbWVudCgpOworfQor
CitSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxl
KCkgY29uc3QKK3sKKyAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVt
ZW50KCk7CisgICAgcmV0dXJuIGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpLT5z
dHlsZSgpIDogc3R5bGUoKTsKK30KKwordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmFkZFNlYXJjaFJlc3VsdCgpCit7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1
dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC0+dmFsdWUoKTsKKyAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3Mt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHNp
emUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX3JlY2VudFNl
YXJjaGVzW2ldID09IHZhbHVlKQorICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmUo
aSk7CisgICAgfQorCisgICAgbV9yZWNlbnRTZWFyY2hlcy5pbnNlcnQoMCwgdmFsdWUpOworICAg
IHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0
LT5tYXhSZXN1bHRzKCkpCisgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwor
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7CisgICAgaWYg
KCFtX3NlYXJjaFBvcHVwKQorICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFn
ZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOworCisgICAgbV9zZWFy
Y2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOworfQor
Cit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKK3sKKyAgICBp
ZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X3NlYXJjaFBvcHVwKQorICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgp
LT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOworCisgICAgaWYgKCFtX3Nl
YXJjaFBvcHVwLT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2VhcmNoUG9w
dXBJc1Zpc2libGUgPSB0cnVlOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0
b3NhdmVOYW1lKCk7CisgICAgbV9zZWFyY2hQb3B1cC0+bG9hZFJlY2VudFNlYXJjaGVzKG5hbWUs
IG1fcmVjZW50U2VhcmNoZXMpOworCisgICAgLy8gVHJpbSB0aGUgcmVjZW50IHNlYXJjaGVzIGxp
c3QgaWYgdGhlIG1heGltdW0gc2l6ZSBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IHNhdmVkLgor
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHN0
YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3Vs
dHMoKSkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgfSB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJj
aGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKTsKKworICAgICAgICBtX3NlYXJjaFBv
cHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CisgICAgfQor
CisgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnNob3cocGl4ZWxTbmFwcGVkSW50UmVj
dChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSwgZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAoKQoreworICAg
IGlmIChtX3NlYXJjaFBvcHVwKQorICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+
aGlkZSgpOworfQorCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAg
ICBSZW5kZXJUZXh0Q29udHJvbDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisKKyAg
ICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgbV9z
aG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsKKyAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50
c1JlY3QgPSBjb250ZW50Qm94UmVjdCgpOworCisgICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5
IGxpa2UgdGhlIHRleHQuCisgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRZKChoZWlnaHQoKSAtIGNv
bnRlbnRzUmVjdC5oZWlnaHQoKSkgLyAyKTsKKworICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0
IGludG8gdGhlIGNvb3JkcyB1c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAorICAgICAgICBj
b250ZW50c1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7CisgICAgICAgIHRo
ZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGNvbnRlbnRzUmVjdCkpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1v
dmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZAorICAgIC8vIHN0eWxl
RGlkQ2hhbmdlKCkuIFdlIG5lZWQgdGhlbSBiZWNhdXNlCisgICAgLy8gLSBDZW50ZXIgdGhlIGlu
bmVyIGVsZW1lbnRzIHZlcnRpY2FsbHkgaWYgdGhlIGlucHV0IGhlaWdodCBpcyB0YWxsZXIgdGhh
bgorICAgIC8vICAgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGlubmVyIGVsZW1lbnRzLgor
ICAgIC8vIC0gU2hyaW5rIHRoZSBpbm5lciBlbG1lbnQgaGVpZ2h0cyBpZiB0aGUgaW5wdXQgaGVp
Z2h0IGlzIHNhbWxsZXIgdGhhbiB0aGUKKyAgICAvLyAgIGludHJpbnNpYyBoZWlnaHRzIG9mIHRo
ZSBpbm5lciBlbGVtZW50cy4KKworICAgIC8vIFdlIGRvbid0IGhvbm9yIHBhZGRpbmdzIGFuZCBi
b3JkZXJzIGZvciB0ZXh0ZmllbGRzIHdpdGhvdXQgZGVjb3JhdGlvbnMKKyAgICAvLyBhbmQgdHlw
ZT1zZWFyY2ggaWYgdGhlIHRleHQgaGVpZ2h0IGlzIHRhbGxlciB0aGFuIHRoZSBjb250ZW50SGVp
Z2h0KCkKKyAgICAvLyBiZWNhdXNlIG9mIGNvbXBhYmlsaXR5LgorCisgICAgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrKGZhbHNlKTsKKworICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIEFTU0VSVChpbm5lclRleHRS
ZW5kZXJlcik7CisgICAgUmVuZGVyQm94KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2Nr
RWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwOworICAgIEhU
TUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7CisgICAgUmVuZGVyQm94
KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyQm94KCkg
OiAwOworCisgICAgLy8gU2V0IHRoZSB0ZXh0IGJsb2NrIGhlaWdodAorICAgIExheW91dFVuaXQg
ZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOworICAgIExheW91dFVuaXQgY3VycmVu
dEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKKworICAgIExheW91dFVuaXQg
aGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8fCAhY29udGFp
bmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIGlmIChjdXJyZW50SGVpZ2h0
ID4gaGVpZ2h0TGltaXQpIHsKKyAgICAgICAgaWYgKGRlc2lyZWRIZWlnaHQgIT0gY3VycmVudEhl
aWdodCkKKyAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7CisK
KyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGVz
aXJlZEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0ID0g
ZGVzaXJlZEhlaWdodDsKKyAgICAgICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlcikKKyAgICAgICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChkZXNpcmVk
SGVpZ2h0LCBGaXhlZCkpOworICAgIH0KKyAgICAvLyBUaGUgY29udGFpbmVyIG1pZ2h0IGJlIHRh
bGxlciBiZWNhdXNlIG9mIGRlY29yYXRpb24gZWxlbWVudHMuCisgICAgaWYgKGNvbnRhaW5lclJl
bmRlcmVyKSB7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwor
ICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lclJlbmRlcmVyLT5o
ZWlnaHQoKTsKKyAgICAgICAgaWYgKGNvbnRhaW5lckhlaWdodCA+IGhlaWdodExpbWl0KSB7Cisg
ICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCho
ZWlnaHRMaW1pdCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1h
cmtPbmx5VGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyUmVuZGVyZXItPmhlaWdo
dCgpIDwgY29udGVudEhlaWdodCgpKSB7CisgICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+
c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChjb250ZW50SGVpZ2h0KCksIEZpeGVkKSk7CisgICAg
ICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVu
Z3RoKGNvbnRhaW5lckhlaWdodCwgRml4ZWQpKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBuZWVk
IGFub3RoZXIgbGF5b3V0IHBhc3MsIHdlIGhhdmUgY2hhbmdlZCBvbmUgb2YgY2hpbGRyZW4ncyBo
ZWlnaHQgc28gd2UgbmVlZCB0byByZWxheW91dCB0aGVtLgorICAgIGlmIChuZWVkc0xheW91dCgp
KQorICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2sodHJ1ZSk7CisKKyAgICAvLyBDZW50
ZXIgdGhlIGNoaWxkIGJsb2NrIHZlcnRpY2FsbHkKKyAgICBjdXJyZW50SGVpZ2h0ID0gaW5uZXJU
ZXh0UmVuZGVyZXItPmhlaWdodCgpOworICAgIGlmICghY29udGFpbmVyICYmIGN1cnJlbnRIZWln
aHQgIT0gY29udGVudEhlaWdodCgpKSB7CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9
IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7CisgICAgICAgIGlubmVyVGV4dFJlbmRl
cmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlv
dXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKKyAgICB9IGVsc2UgaWYgKGlucHV0RWxlbWVudCgpLT5p
c1NlYXJjaEZpZWxkKCkgJiYgY29udGFpbmVyUmVuZGVyZXIgJiYgY29udGFpbmVyUmVuZGVyZXIt
PmhlaWdodCgpID4gY29udGVudEhlaWdodCgpKSB7CisgICAgICAgIC8vIEEgcXVpcmsgZm9yIGZp
bmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCisgICAgICAgIC8vIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNjMxNTcKKyAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29udGFpbmVy
UmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdodCgpOworICAgICAgICBjb250YWluZXJS
ZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsg
bGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7CisgICAgfQorCisgICAgLy8gSWdub3JlcyB0aGUg
cGFkZGluZ3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KKyAgICBpZiAoUmVuZGVyQm94KiBp
bm5lclNwaW5Cb3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25F
bGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgeworICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJv
eCA9IGlubmVyU3BpbkJveC0+cGFyZW50Qm94KCk7CisgICAgICAgIGlmIChjb250YWluZXJSZW5k
ZXJlciAmJiAhY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKKyAgICAgICAgICAgIGlubmVyU3BpbkJveC0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQo
LXBhZGRpbmdMZWZ0KCksIC1wYWRkaW5nVG9wKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaW5uZXJTcGluQm94LT5zZXRMb2NhdGlvbihMYXlvdXRQb2ludChwYXJlbnRCb3gtPndpZHRo
KCkgLSBpbm5lclNwaW5Cb3gtPndpZHRoKCkgKyBwYWRkaW5nUmlnaHQoKSwgLXBhZGRpbmdUb3Ao
KSkpOworICAgICAgICBpbm5lclNwaW5Cb3gtPnNldEhlaWdodChoZWlnaHQoKSAtIGJvcmRlclRv
cCgpIC0gYm9yZGVyQm90dG9tKCkpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50KiBwbGFjZWhv
bGRlckVsZW1lbnQgPSBpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xkZXJFbGVtZW50KCk7CisgICAg
aWYgKFJlbmRlckJveCogcGxhY2Vob2xkZXJCb3ggPSBwbGFjZWhvbGRlckVsZW1lbnQgPyBwbGFj
ZWhvbGRlckVsZW1lbnQtPnJlbmRlckJveCgpIDogMCkgeworICAgICAgICBwbGFjZWhvbGRlckJv
eC0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFJlbmRlcmVyLT53aWR0aCgpIC0g
cGxhY2Vob2xkZXJCb3gtPmJvcmRlckFuZFBhZGRpbmdXaWR0aCgpLCBGaXhlZCkpOworICAgICAg
ICBwbGFjZWhvbGRlckJveC0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRSZW5k
ZXJlci0+aGVpZ2h0KCkgLSBwbGFjZWhvbGRlckJveC0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgp
LCBGaXhlZCkpOworICAgICAgICBib29sIHBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ID0gcGxhY2Vo
b2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQoKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPmxheW91
dElmTmVlZGVkKCk7CisgICAgICAgIExheW91dFBvaW50IHRleHRPZmZzZXQgPSBpbm5lclRleHRS
ZW5kZXJlci0+bG9jYXRpb24oKTsKKyAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVtZW50KCkgJiYg
aW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgICAgICB0ZXh0T2Zmc2V0
ICs9IHRvTGF5b3V0U2l6ZShpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bG9jYXRp
b24oKSk7CisgICAgICAgIGlmIChjb250YWluZXJSZW5kZXJlcikKKyAgICAgICAgICAgIHRleHRP
ZmZzZXQgKz0gdG9MYXlvdXRTaXplKGNvbnRhaW5lclJlbmRlcmVyLT5sb2NhdGlvbigpKTsKKyAg
ICAgICAgcGxhY2Vob2xkZXJCb3gtPnNldExvY2F0aW9uKHRleHRPZmZzZXQpOworCisgICAgICAg
IGlmICghcGxhY2Vob2xkZXJCb3hIYWRMYXlvdXQgJiYgcGxhY2Vob2xkZXJCb3gtPmNoZWNrRm9y
UmVwYWludER1cmluZ0xheW91dCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGFzc3VtZXMgYSBz
aGFkb3cgdHJlZSB3aXRob3V0IGZsb2F0cy4gSWYgZmxvYXRzIGFyZSBhZGRlZCwgdGhlCisgICAg
ICAgICAgICAvLyBsb2dpYyBzaG91bGQgYmUgc2hhcmVkIHdpdGggUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrQ2hpbGQuCisgICAgICAgICAgICBwbGFjZWhvbGRlckJveC0+cmVwYWludCgpOworICAg
ICAgICB9CisgICAgfQorfQorCitib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorewor
ICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTYXkgdGhhdCB3ZSBoaXQgdGhlIGlubmVyIHRl
eHQgZWxlbWVudCBpZgorICAgIC8vICAtIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBpbm5lciB0
ZXh0IGVsZW1lbnQsCisgICAgLy8gIC0gd2UgaGl0IHRoZSA8aW5wdXQ+IGVsZW1lbnQgKGUuZy4g
d2UncmUgb3ZlciB0aGUgYm9yZGVyIG9yIHBhZGRpbmcpLCBvcgorICAgIC8vICAtIHdlIGhpdCBy
ZWdpb25zIG5vdCBpbiBhbnkgZGVjb3JhdGlvbiBidXR0b25zLgorICAgIEhUTUxFbGVtZW50KiBj
b250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7CisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUo
KS0+aXNEZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2Rl
KCkgPT0gbm9kZSgpIHx8IChjb250YWluZXIgJiYgY29udGFpbmVyID09IHJlc3VsdC5pbm5lck5v
ZGUoKSkpIHsKKyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250
YWluZXI7CisgICAgICAgIGlmIChjb250YWluZXIgJiYgaW5uZXJCbG9ja0VsZW1lbnQoKSkgewor
ICAgICAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAg
ICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9MYXlvdXRTaXplKGlubmVyQmxvY2tFbGVtZW50
KCktPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGlmIChjb250YWluZXIt
PnJlbmRlckJveCgpKQorICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9MYXlvdXRT
aXplKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOworICAgICAgICB9CisgICAg
ICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluUGFyZW50LCBhY2N1bXVsYXRl
ZE9mZnNldCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBtX2Rlc2lyZWRJbm5lclRleHRIZWln
aHQgPSAtMTsKKyAgICBSZW5kZXJUZXh0Q29udHJvbDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xk
U3R5bGUpOworCisgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdo
dCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgorICAgIC8vIFJlc2V0IHRoZW0gbm93IHRv
IGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlvdXQgaGludC4KKyAgICBIVE1MRWxlbWVudCog
aW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7CisgICAgaWYgKFJlbmRlck9iamVjdCog
aW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkg
OiAwKSB7CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExl
bmd0aCgpKTsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChM
ZW5ndGgoKSk7CisgICAgfQorICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJF
bGVtZW50KCk7CisgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250
YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7CisgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKCkpOworICAgICAgICBjb250YWluZXJS
ZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIH0KKyAgICBpZiAoSFRN
TEVsZW1lbnQqIHBsYWNlaG9sZGVyID0gaW5wdXRFbGVtZW50KCktPnBsYWNlaG9sZGVyRWxlbWVu
dCgpKQorICAgICAgICBwbGFjZWhvbGRlci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRleHRPdmVyZmxvdywgdGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgPyBDU1NWYWx1ZUVsbGlw
c2lzIDogQ1NTVmFsdWVDbGlwKTsKKyAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOworfQor
Cit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVD
aGFuZ2VkKCkKK3sKKyAgICBpZiAoIW5vZGUoKSB8fCAhZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gT25seSBkcmF3IHRoZSBjYXBzIGxvY2sgaW5kaWNhdG9yIGlmIHRoZXNl
IHRoaW5ncyBhcmUgdHJ1ZToKKyAgICAvLyAxKSBUaGUgZmllbGQgaXMgYSBwYXNzd29yZCBmaWVs
ZAorICAgIC8vIDIpIFRoZSBmcmFtZSBpcyBhY3RpdmUKKyAgICAvLyAzKSBUaGUgZWxlbWVudCBp
cyBmb2N1c2VkCisgICAgLy8gNCkgVGhlIGNhcHMgbG9jayBpcyBvbgorICAgIGJvb2wgc2hvdWxk
RHJhd0NhcHNMb2NrSW5kaWNhdG9yID0gZmFsc2U7CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9y
ID0gaW5wdXRFbGVtZW50KCktPmlzUGFzc3dvcmRGaWVsZCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0
aXZlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQo
KS0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgp
OworCisgICAgaWYgKHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciAhPSBtX3Nob3VsZERyYXdD
YXBzTG9ja0luZGljYXRvcikgeworICAgICAgICBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRv
ciA9IHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKKyAgICAgICAgcmVwYWludCgpOworICAg
IH0KK30KKworYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhhc0NvbnRyb2xDbGlw
KCkgY29uc3QKK3sKKyAgICAvLyBBcHBseSBjb250cm9sIGNsaXAgZm9yIHRleHQgZmllbGRzIHdp
dGggZGVjb3JhdGlvbnMuCisgICAgcmV0dXJuICEhY29udGFpbmVyRWxlbWVudCgpOworfQorCitM
YXlvdXRSZWN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udHJvbENsaXBSZWN0KGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAoreworICAgIEFTU0VSVCho
YXNDb250cm9sQ2xpcCgpKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gdW5pb25SZWN0KGNv
bnRlbnRCb3hSZWN0KCksIGNvbnRhaW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmZyYW1lUmVj
dCgpKTsKKyAgICBjbGlwUmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7CisgICAgcmV0dXJu
IGNsaXBSZWN0OworfQorCitmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2
Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KQoreworICAgIC8vIFNpbmNlIEx1Y2lkYSBH
cmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0
aAorICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFz
IGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCisgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2Rpbmdz
IChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCisgICAgLy8g
OTAxIGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIE1TIFNo
ZWxsIERsZy4KKyAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdyYW5kZSIp
KQorICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKKworICAgIHJldHVybiBSZW5k
ZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKGZhbWlseSk7Cit9CisKK0xheW91dFVuaXQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQg
Y2hhcldpZHRoKSBjb25zdAoreworICAgIGludCBmYWN0b3I7CisgICAgYm9vbCBpbmNsdWRlc0Rl
Y29yYXRpb24gPSBpbnB1dEVsZW1lbnQoKS0+c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uKGZh
Y3Rvcik7CisgICAgaWYgKGZhY3RvciA8PSAwKQorICAgICAgICBmYWN0b3IgPSAyMDsKKworICAg
IExheW91dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVkTGF5b3V0
VW5pdChjaGFyV2lkdGggKiBmYWN0b3IpKTsKKworICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAu
ZjsKKyAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZh
bWlseSgpOworICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwg
d2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAorICAgIC8vIG9mIE1TIFNoZWxsIERsZywg
dGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5k
CisgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBp
cyBlbmNvZGluZyBzcGVjaWZpYykuCisgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWluKSB2
YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KKyAgICBpZiAo
ZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdyYW5kZSIpKQorICAgICAgICBtYXhDaGFy
V2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKKyAgICBlbHNlIGlmIChoYXNWYWxpZEF2Z0No
YXJXaWR0aChmYW1pbHkpKQorICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS0+
Zm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgpKTsKKworICAgIC8vIEZvciB0ZXh0
IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgorICAgIGlmIChtYXhDaGFyV2lkdGgg
PiAwLmYpCisgICAgICAgIHJlc3VsdCArPSBtYXhDaGFyV2lkdGggLSBjaGFyV2lkdGg7CisKKyAg
ICBpZiAoaW5jbHVkZXNEZWNvcmF0aW9uKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBzcGluQnV0
dG9uID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOworICAgICAgICBpZiAoUmVuZGVyQm94KiBz
cGluUmVuZGVyZXIgPSBzcGluQnV0dG9uID8gc3BpbkJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7
CisgICAgICAgICAgICByZXN1bHQgKz0gc3BpblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBzcGlu
UmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKworICAgICAgICAgICAgICAgICAgc3BpblJlbmRlcmVy
LT5wYWRkaW5nTGVmdCgpICsgc3BpblJlbmRlcmVyLT5wYWRkaW5nUmlnaHQoKTsKKyAgICAgICAg
ICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBvZiBzcGluUmVuZGVyZXIgaXMgbm90IGNhbGN1bGF0ZWQg
eWV0LCBzcGluUmVuZGVyZXItPndpZHRoKCkgcmV0dXJucyAwLgorICAgICAgICAgICAgLy8gU28g
Y29tcHV0ZWRTdHlsZSgpLT53aWR0aCgpIGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgICAgICAgIHJl
c3VsdCArPSBzcGluQnV0dG9uLT5jb21wdXRlZFN0eWxlKCktPndpZHRoKCkudmFsdWUoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0xheW91dFVuaXQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlQ29udHJvbEhlaWdodChMYXlvdXRVbml0
IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QKK3sKKyAgICBI
VE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbiA9IHJlc3VsdHNCdXR0b25FbGVtZW50KCk7CisgICAg
aWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0gcmVzdWx0c0J1dHRvbiA/IHJlc3VsdHNC
dXR0b24tPnJlbmRlckJveCgpIDogMCkgeworICAgICAgICByZXN1bHRzUmVuZGVyZXItPmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIG5vbkNvbnRlbnRIZWlnaHQgPSBtYXgobm9uQ29u
dGVudEhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkgKyBy
ZXN1bHRzUmVuZGVyZXItPm1hcmdpbkhlaWdodCgpKTsKKyAgICAgICAgbGluZUhlaWdodCA9IG1h
eChsaW5lSGVpZ2h0LCByZXN1bHRzUmVuZGVyZXItPmhlaWdodCgpKTsKKyAgICB9CisgICAgSFRN
TEVsZW1lbnQqIGNhbmNlbEJ1dHRvbiA9IGNhbmNlbEJ1dHRvbkVsZW1lbnQoKTsKKyAgICBpZiAo
UmVuZGVyQm94KiBjYW5jZWxSZW5kZXJlciA9IGNhbmNlbEJ1dHRvbiA/IGNhbmNlbEJ1dHRvbi0+
cmVuZGVyQm94KCkgOiAwKSB7CisgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5jb21wdXRlTG9naWNh
bEhlaWdodCgpOworICAgICAgICBub25Db250ZW50SGVpZ2h0ID0gbWF4KG5vbkNvbnRlbnRIZWln
aHQsIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkgKyBjYW5jZWxSZW5k
ZXJlci0+bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWln
aHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxpbmVI
ZWlnaHQgKyBub25Db250ZW50SGVpZ2h0OworfQorCit2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQoreworICAgIFJlbmRlclRleHRDb250cm9sOjp1
cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKKyAg
ICAgICAgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOworCisgICAgaWYgKG1fc2VhcmNo
UG9wdXBJc1Zpc2libGUpCisgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT51cGRh
dGVGcm9tRWxlbWVudCgpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdGFydFN0eWxlKSBjb25zdAoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2Nr
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7ICAgCisgICAgdGV4dEJsb2NrU3R5bGUtPmlu
aGVyaXRGcm9tKHN0YXJ0U3R5bGUpOworICAgIGFkanVzdElubmVyVGV4dFN0eWxlKHN0YXJ0U3R5
bGUsIHRleHRCbG9ja1N0eWxlLmdldCgpKTsKKworICAgIHRleHRCbG9ja1N0eWxlLT5zZXRXaGl0
ZVNwYWNlKFBSRSk7CisgICAgdGV4dEJsb2NrU3R5bGUtPnNldFdvcmRXcmFwKE5vcm1hbFdvcmRX
cmFwKTsKKyAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4pOworICAgIHRl
eHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7CisgICAgdGV4dEJsb2NrU3R5bGUt
PnNldFRleHRPdmVyZmxvdyh0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IFRleHRPdmVyZmxvd0Vs
bGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7CisKKyAgICBpZiAobV9kZXNpcmVkSW5uZXJUZXh0
SGVpZ2h0ID49IDApCisgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1f
ZGVzaXJlZElubmVyVGV4dEhlaWdodCwgRml4ZWQpKTsKKyAgICAvLyBEbyBub3QgYWxsb3cgbGlu
ZS1oZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIG91ciBkZWZhdWx0LgorICAgIGlmICh0ZXh0Qmxv
Y2tTdHlsZS0+Zm9udE1ldHJpY3MoKS5saW5lU3BhY2luZygpID4gbGluZUhlaWdodCh0cnVlLCBI
b3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSkKKyAgICAgICAgdGV4
dEJsb2NrU3R5bGUtPnNldExpbmVIZWlnaHQoTGVuZ3RoKC0xMDAuMGYsIFBlcmNlbnQpKTsKKwor
ICAgIHRleHRCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKworICAgIHJldHVybiB0ZXh0
QmxvY2tTdHlsZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5u
ZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIGlubmVyQmxvY2tTdHls
ZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CisKKyAgICBpbm5lckJsb2NrU3R5bGUtPnNldEJv
eEZsZXgoMSk7CisgICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKyAgICBp
bm5lckJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihMVFIpOworCisgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0aGUgc2hhZG93IGRvbSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8g
cmVhZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KKyAgICBpbm5l
ckJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnkoUkVBRF9PTkxZKTsKKworICAgIHJldHVybiBpbm5l
ckJsb2NrU3R5bGUucmVsZWFzZSgpOworfQorCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0Cit7CisgICAgUmVuZGVy
T2JqZWN0KiBjYW5jZWxCdXR0b25SZW5kZXJlciA9IGNhbmNlbEJ1dHRvbkVsZW1lbnQoKS0+cmVu
ZGVyZXIoKTsKKyAgICBpZiAoIWNhbmNlbEJ1dHRvblJlbmRlcmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY3VyU3R5bGUgPSBjYW5jZWxCdXR0b25SZW5kZXJl
ci0+c3R5bGUoKTsKKyAgICBFVmlzaWJpbGl0eSBidXR0b25WaXNpYmlsaXR5ID0gdmlzaWJpbGl0
eUZvckNhbmNlbEJ1dHRvbigpOworICAgIGlmIChjdXJTdHlsZS0+dmlzaWJpbGl0eSgpID09IGJ1
dHRvblZpc2liaWxpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gY2FuY2VsQnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoY3VyU3R5bGUpOworICAg
IGNhbmNlbEJ1dHRvblN0eWxlLT5zZXRWaXNpYmlsaXR5KGJ1dHRvblZpc2liaWxpdHkpOworICAg
IGNhbmNlbEJ1dHRvblJlbmRlcmVyLT5zZXRTdHlsZShjYW5jZWxCdXR0b25TdHlsZSk7Cit9CisK
K0VWaXNpYmlsaXR5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0eUZvckNh
bmNlbEJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gSElEREVOIHx8IGlucHV0RWxlbWVudCgpLT52YWx1ZSgpLmlzRW1wdHkoKSkgPyBISURERU4g
OiBWSVNJQkxFOworfQorCitib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dFNo
b3VsZEJlVHJ1bmNhdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKSAhPSBub2RlKCkKKyAgICAgICAgJiYgc3R5bGUoKS0+dGV4dE92ZXJmbG93KCkgPT0g
VGV4dE92ZXJmbG93RWxsaXBzaXM7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7
Cit9CisKKy8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCit2b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZl
bnRzKQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6
ZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOworICAg
IGlmIChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAxKSkgewor
ICAgICAgICBpZiAoZmlyZUV2ZW50cykgeworICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5j
bGVhcigpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVO
YW1lKCk7CisgICAgICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX3NlYXJjaFBvcHVwKQorICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVw
ID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRo
aXMpOworICAgICAgICAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhu
YW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGlucHV0LT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKKyAg
ICAgICAgaWYgKGZpcmVFdmVudHMpCisgICAgICAgICAgICBpbnB1dC0+b25TZWFyY2goKTsKKyAg
ICAgICAgaW5wdXQtPnNlbGVjdCgpOworICAgIH0KK30KKworU3RyaW5nIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAg
IGludCBzaXplID0gbGlzdFNpemUoKTsKKyAgICBpZiAoc2l6ZSA9PSAxKSB7CisgICAgICAgIEFT
U0VSVCghbGlzdEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJj
aGVzVGV4dCgpOworICAgIH0KKyAgICBpZiAoIWxpc3RJbmRleCkKKyAgICAgICAgcmV0dXJuIHNl
YXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKTsKKyAgICBpZiAoaXRlbUlzU2VwYXJhdG9yKGxp
c3RJbmRleCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8
aW50PihsaXN0SW5kZXgpID09IChzaXplIC0gMSkpCisgICAgICAgIHJldHVybiBzZWFyY2hNZW51
Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsKKyAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1ts
aXN0SW5kZXggLSAxXTsKK30KKworU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aXRlbUxhYmVsKHVuc2lnbmVkKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUljb24odW5zaWduZWQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7Cisg
ICAgIGlmICghbGlzdEluZGV4IHx8IGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BvcHVwTWVudVN0eWxlIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAorewor
ICAgIHJldHVybiBtZW51U3R5bGUoKTsKK30KKworUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBQb3B1cE1l
bnVTdHlsZShzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciksIHN0eWxlKCktPmZvbnQoKSwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCisg
ICAgICAgIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05FLCBzdHlsZSgpLT50ZXh0SW5kZW50KCks
IHN0eWxlKCktPmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCktPnVuaWNvZGVCaWRpKCkp
KTsKK30KKworaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRMZWZ0
KCkgY29uc3QKK3sKKyAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBj
YXAgb24gdGhlIGxlZnQgc28gdGhhdAorICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3Ry
YWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwuCisgICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKK30KKwor
aW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0
Cit7CisgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRo
ZSByaWdodCBzbyB0aGF0CisgICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBw
YXJ0IG9mIHRoZSBiZXplbCAodW5sZXNzIGl0IG5lZWRzCisgICAgLy8gdG8gYmUgd2lkZXIpLgor
ICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Cit7CisgICAgTGF5b3V0VW5p
dCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKKyAgICBpZiAoUmVuZGVyQm94KiBib3ggPSBpbm5l
ckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKQor
ICAgICAgICBwYWRkaW5nICs9IGJveC0+eCgpOworICAgIHJldHVybiBwYWRkaW5nOworfQorCitM
YXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0
KCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nUmlnaHQoKTsKKyAg
ICBpZiAoUmVuZGVyQm94KiBjb250YWluZXJCb3ggPSBjb250YWluZXJFbGVtZW50KCkgPyBjb250
YWluZXJFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgeworICAgICAgICBpZiAoUmVuZGVyQm94
KiBpbm5lckJsb2NrQm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50
KCktPnJlbmRlckJveCgpIDogMCkKKyAgICAgICAgICAgIHBhZGRpbmcgKz0gY29udGFpbmVyQm94
LT53aWR0aCgpIC0gKGlubmVyQmxvY2tCb3gtPngoKSArIGlubmVyQmxvY2tCb3gtPndpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworaW50IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAoreworICAgIC8vIElmIHRoZXJlIGFyZSBubyBy
ZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1lbnUgd2lsbCBoYXZlIDEgIk5vIHJlY2VudCBzZWFy
Y2hlcyIgaXRlbS4KKyAgICBpZiAoIW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gMTsKKyAgICAvLyBPdGhlcndpc2UsIGxlYXZlIHJvb20gaW4gdGhlIG1lbnUgZm9yIGEg
aGVhZGVyLCBhIHNlcGFyYXRvciwgYW5kIHRoZSAiQ2xlYXIgcmVjZW50IHNlYXJjaGVzIiBpdGVt
LgorICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSArIDM7Cit9CisKK2ludCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIHJl
dHVybiAtMTsKK30KKwordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlk
SGlkZSgpCit7CisgICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOworfQorCitib29s
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29u
ZCB0byBsYXN0IGl0ZW0gaW4gb3VyIGxpc3QuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
bGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDIpOworfQorCitib29sIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorewor
ICAgIHJldHVybiBsaXN0SW5kZXggPT0gMDsKK30KKworYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9t
SXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCit7CisgICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVl
KGl0ZW1UZXh0KGxpc3RJbmRleCkpOworfQorCitGb250U2VsZWN0b3IqIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG9jdW1l
bnQoKS0+c3R5bGVSZXNvbHZlcigpLT5mb250U2VsZWN0b3IoKTsKK30KKworSG9zdFdpbmRvdyog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpob3N0V2luZG93KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7Cit9CisKK3ZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOworICAgIGlm
IChsYXllcikKKyAgICAgICAgbGF5ZXItPmF1dG9zY3JvbGwoKTsKK30KKworaW50IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIGlmIChpbm5l
clRleHRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9s
bFdpZHRoKCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGxXaWR0aCgpOworfQorCitp
bnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxIZWlnaHQoKSBjb25zdAorewor
ICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBpbm5lclRleHRFbGVt
ZW50KCktPnNjcm9sbEhlaWdodCgpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsSGVp
Z2h0KCk7Cit9CisKK2ludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbExlZnQo
KSBjb25zdAoreworICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBp
bm5lclRleHRFbGVtZW50KCktPnNjcm9sbExlZnQoKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OnNjcm9sbExlZnQoKTsKK30KKworaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Ny
b2xsVG9wKCkgY29uc3QKK3sKKyAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQorICAgICAgICBy
ZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxUb3AoKTsKKyAgICByZXR1cm4gUmVuZGVy
QmxvY2s6OnNjcm9sbFRvcCgpOworfQorCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKK3sKKyAgICBpZiAoaW5uZXJUZXh0RWxlbWVu
dCgpKQorICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNldFNjcm9sbExlZnQobmV3TGVmdCk7
Cit9CisKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxUb3AoaW50
IG5ld1RvcCkKK3sKKyAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQorICAgICAgICBpbm5lclRl
eHRFbGVtZW50KCktPnNldFNjcm9sbFRvcChuZXdUb3ApOworfQorCitib29sIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5v
ZGUpCit7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5k
ZXJCb3goKS0+bGF5ZXIoKTsKKyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllciwgc3RvcE5vZGUpOworfQorCitib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkK
K3sKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJv
eCgpLT5sYXllcigpOworICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1Bo
eXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5
bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2dp
Y2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsK
K30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXpl
KQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBib29sIGhhc0N1c3RvbVNj
cm9sbGJhclN0eWxlID0gc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKKyAgICBp
ZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwg
dGhpcy0+bm9kZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3Jl
YXRlTmF0aXZlU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgY29udHJvbFNp
emUpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOworfQorCitIVE1MSW5wdXRFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTIxYzg1NmMx
MGZhOWZiYTQzNmMwNmY3NDljMTRlMWUyYTgwYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAorI2RlZmluZSBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAorCisjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBIVE1MSW5wdXRFbGVtZW50OworY2xhc3MgU2VhcmNoUG9wdXBNZW51OworCitj
bGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRy
b2wsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUoTm9kZSopOworICAgIHZpcnR1YWwgflJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSgpOworICAgIC8vIEZJWE1FOiBNb3ZlIGNyZWF0ZSpTdHlsZSgpIHRvIHRoZWlyIGNs
YXNzZXMuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lclRl
eHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdGFydFN0eWxlKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxp
dHkoKSBjb25zdDsKKworICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CisgICAgdm9pZCBzdG9w
U2VhcmNoRXZlbnRUaW1lcigpOworCisgICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7IH0KKyAgICB2b2lkIHNob3dQb3B1cCgpOwor
ICAgIHZvaWQgaGlkZVBvcHVwKCk7CisKKyAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hh
bmdlZCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNv
bnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0
UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXV0
b3Njcm9sbCgpOworCisgICAgLy8gU3ViY2xhc3NlZCB0byBmb3J3YXJkIHRvIG91ciBpbm5lciBk
aXYuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IHNjcm9sbFRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbExlZnQoaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7
CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmly
dHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKwor
ICAgIGludCB0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZn
Q2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
cmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFVuaXQgY29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBM
YXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0IE9WRVJSSURFOworICAgIAorICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisK
KyAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiB0ZXh0QmFzZVN0eWxlKCkgY29uc3Q7CisKKyAgICBF
VmlzaWJpbGl0eSB2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3Q7CisgICAgYm9vbCB0
ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF1
dG9zYXZlTmFtZSgpIGNvbnN0OworCisgICAgLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKKyAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJl
RXZlbnRzID0gdHJ1ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5n
ZWQodW5zaWduZWQsIGJvb2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rp
b25DbGVhcmVkKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbVRleHQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
TGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBpdGVtSWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1BY2Nlc3NpYmlsaXR5VGV4dCh1
bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgaXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBtZW51U3R5bGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldExlZnQoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBwb3B1cERpZEhpZGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlz
U2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFBvcE92ZXIoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB2YWx1ZVNob3VsZENoYW5nZU9u
SG90VHJhY2soKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBPVkVSUklERTsK
KworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0OworCisgICAgSFRN
TEVsZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MRWxlbWVudCogaW5u
ZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MRWxlbWVudCogaW5uZXJTcGluQnV0dG9u
RWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgp
IGNvbnN0OworICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7CisK
KyAgICBib29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7CisgICAgYm9vbCBtX3Nob3VsZERyYXdD
YXBzTG9ja0luZGljYXRvcjsKKyAgICBMYXlvdXRVbml0IG1fZGVzaXJlZElubmVyVGV4dEhlaWdo
dDsKKyAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBtX3NlYXJjaFBvcHVwOworICAgIFZlY3Rv
cjxTdHJpbmc+IG1fcmVjZW50U2VhcmNoZXM7Cit9OworCitpbmxpbmUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKiB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxkKCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihv
YmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNz
YXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGNvbnN0IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSopOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2NsYXNzIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJC
bG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKE5vZGUqIG5v
ZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVuZGVyQmxvY2sobm9kZSksIG1fbXVsdGlMaW5lKGlz
TXVsdGlMaW5lKSB7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1w
dHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgYm9vbCBtX211bHRp
TGluZTsKK307CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>