<?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>168629</bug_id>
          
          <creation_ts>2017-02-20 18:46:27 -0800</creation_ts>
          <short_desc>Air should have a disassembly mode that dumps IR and assembly intermixed</short_desc>
          <delta_ts>2017-02-21 15:59:03 -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>JavaScriptCore</component>
          <version>WebKit Local 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1279182</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-20 18:46:27 -0800</bug_when>
    <thetext>Similar to the output you get from dumpDFGDisassembly, but for Air.

I&apos;m going to be spending a lot of time looking at generated code, and it will make job easier to know where generated code came from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279492</commentid>
    <comment_count>1</comment_count>
      <attachid>302296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-21 12:58:26 -0800</bug_when>
    <thetext>Created attachment 302296
WIP

It produces output like:

BB#0: ; frequency = 1.000000
      0x30b448402e00: push %rbp
      0x30b448402e01: mov %rsp, %rbp
      0x30b448402e04: add $0xffffffffffffffd0, %rsp
  Move $0x11456c960, %rax, $4636199264(@16)
      0x30b448402e08: mov $0x11456c960, %rax
  Move %rax, 16(%rbp), @19
      0x30b448402e12: mov %rax, 0x10(%rbp)
  Patch &amp;Patchpoint2, %rbp, %rax, @20
      0x30b448402e16: lea -0x50(%rbp), %rax
      0x30b448402e1a: mov $0x1112081e0, %r11
      0x30b448402e24: cmp %rax, (%r11)
      0x30b448402e27: ja 0x30b448402e9a
  Move 56(%rbp), %rdx, @23
      0x30b448402e2d: mov 0x38(%rbp), %rdx
  Move $0xffff000000000002, %rax, $-281474976710654(@15)
      0x30b448402e31: mov $0xffff000000000002, %rax
  Patch &amp;BranchTest64(3,SameAsRep)1, NonZero, %rdx, %rax, %rdx, @26
      0x30b448402e3b: test %rdx, %rax
      0x30b448402e3e: jnz 0x30b448402f08
  Move 48(%rbp), %rax, @29
      0x30b448402e44: mov 0x30(%rbp), %rax
  Move %rax, %rcx, @31
      0x30b448402e48: mov %rax, %rcx
  Xor64 $6, %rcx, @31
      0x30b448402e4b: xor $0x6, %rcx
  Patch &amp;BranchTest64(3,SameAsRep)1, NonZero, %rcx, $-2, %rax, @35
      0x30b448402e4f: test $0xfffffffffffffffe, %rcx
      0x30b448402e56: jnz 0x30b448402f12
  Patch &amp;Branch32(3,SameAsRep)0, NotEqual, (%rdx), $266, %rdx, @45
      0x30b448402e5c: cmp $0x10a, (%rdx)
      0x30b448402e62: jnz 0x30b448402f1c
  BranchTest32 NonZero, %rax, $1, @49
      0x30b448402e68: test $0x1, %al
      0x30b448402e6a: jnz 0x30b448402e91
BB#1: ; frequency = 1.000000
  Predecessors: #0
  Move $0, %rcx, @65
      0x30b448402e70: xor %rcx, %rcx
BB#2: ; frequency = 1.000000
  Predecessors: #1, #3
  Move 24(%rdx), %rax, @58
      0x30b448402e73: mov 0x18(%rdx), %rax
  Patch &amp;BranchAdd32(4,ForceLateUseUnlessRecoverable)3, Overflow, %rcx, %rax, %rcx, %rcx, %rax, @60
      0x30b448402e77: add %eax, %ecx
      0x30b448402e79: jo 0x30b448402f26
  Move $0xffff000000000000, %rax, $-281474976710656(@14)
      0x30b448402e7f: mov $0xffff000000000000, %rax
  Add64 %rcx, %rax, %rax, @62
      0x30b448402e89: add %rcx, %rax
  Ret64 %rax, @63
      0x30b448402e8c: mov %rbp, %rsp
      0x30b448402e8f: pop %rbp
      0x30b448402e90: ret</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279545</commentid>
    <comment_count>2</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2017-02-21 14:46:12 -0800</bug_when>
    <thetext>This is really good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279576</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-21 15:22:28 -0800</bug_when>
    <thetext>Ok, I revised the output a bit. It&apos;ll look like this when using dumpFTLDisassembly:

Generated FTL JIT code for foo#CUaFiQ:[0x10b76c960-&gt;0x10b76c2d0-&gt;0x10b7b6da0, FTLFunctionCall, 40 (NeverInline)], instruction count = 40:
BB#0: ; frequency = 1.000000
        0x469004e02e00: push %rbp
        0x469004e02e01: mov %rsp, %rbp
        0x469004e02e04: add $0xffffffffffffffd0, %rsp
    Move $0x10b76c960, %rax, $4487301472(@16)
        0x469004e02e08: mov $0x10b76c960, %rax
    Move %rax, 16(%rbp), @19
        0x469004e02e12: mov %rax, 0x10(%rbp)
    Patch &amp;Patchpoint2, %rbp, %rax, @20
        0x469004e02e16: lea -0x50(%rbp), %rax
        0x469004e02e1a: mov $0x1084081e0, %r11
        0x469004e02e24: cmp %rax, (%r11)
        0x469004e02e27: ja 0x469004e02e9a
    Move 56(%rbp), %rdx, @23
        0x469004e02e2d: mov 0x38(%rbp), %rdx
    Move $0xffff000000000002, %rax, $-281474976710654(@15)
        0x469004e02e31: mov $0xffff000000000002, %rax
    Patch &amp;BranchTest64(3,SameAsRep)1, NonZero, %rdx, %rax, %rdx, @26
        0x469004e02e3b: test %rdx, %rax
        0x469004e02e3e: jnz 0x469004e02f08
    Move 48(%rbp), %rax, @29
        0x469004e02e44: mov 0x30(%rbp), %rax
    Move %rax, %rcx, @31
        0x469004e02e48: mov %rax, %rcx
    Xor64 $6, %rcx, @31
        0x469004e02e4b: xor $0x6, %rcx
    Patch &amp;BranchTest64(3,SameAsRep)1, NonZero, %rcx, $-2, %rax, @35
        0x469004e02e4f: test $0xfffffffffffffffe, %rcx
        0x469004e02e56: jnz 0x469004e02f12
    Patch &amp;Branch32(3,SameAsRep)0, NotEqual, (%rdx), $266, %rdx, @45
        0x469004e02e5c: cmp $0x10a, (%rdx)
        0x469004e02e62: jnz 0x469004e02f1c
    BranchTest32 NonZero, %rax, $1, @49
        0x469004e02e68: test $0x1, %al
        0x469004e02e6a: jnz 0x469004e02e91
  Successors: #3, #1
BB#1: ; frequency = 1.000000
  Predecessors: #0
    Move $0, %rcx, @65
        0x469004e02e70: xor %rcx, %rcx
    Jump @66
  Successors: #2
BB#2: ; frequency = 1.000000
  Predecessors: #1, #3
    Move 24(%rdx), %rax, @58
        0x469004e02e73: mov 0x18(%rdx), %rax
    Patch &amp;BranchAdd32(4,ForceLateUseUnlessRecoverable)3, Overflow, %rcx, %rax, %rcx, %rcx, %rax, @60
        0x469004e02e77: add %eax, %ecx
        0x469004e02e79: jo 0x469004e02f26
    Move $0xffff000000000000, %rax, $-281474976710656(@14)
        0x469004e02e7f: mov $0xffff000000000000, %rax
    Add64 %rcx, %rax, %rax, @62
        0x469004e02e89: add %rcx, %rax
    Ret64 %rax, @63
        0x469004e02e8c: mov %rbp, %rsp
        0x469004e02e8f: pop %rbp
        0x469004e02e90: ret 
BB#3: ; frequency = 1.000000
  Predecessors: #0
    Move 16(%rdx), %rcx, @52
        0x469004e02e91: mov 0x10(%rdx), %rcx
    Jump @55
        0x469004e02e95: jmp 0x469004e02e73
  Successors: #2
# Late paths
        0x469004e02e9a: mov $0x0, 0x24(%rbp)
        0x469004e02ea1: mov $0x108406618, %r9
        0x469004e02eab: mov (%r9), %r9
        0x469004e02eae: add $0xffffffffffffffd8, %r9
        0x469004e02eb2: mov %rbx, (%r9)
        0x469004e02eb5: mov %r12, 0x8(%r9)
        0x469004e02eb9: mov %r13, 0x10(%r9)
        0x469004e02ebd: mov %r14, 0x18(%r9)
        0x469004e02ec1: mov %r15, 0x20(%r9)
        0x469004e02ec5: mov %rbp, %rdi
        0x469004e02ec8: mov $0x10b76c960, %rsi
        0x469004e02ed2: mov $0x0, %r11
        0x469004e02edc: call *%r11
        0x469004e02edf: mov $0x108400000, %rdi
        0x469004e02ee9: mov %rbp, %rsi
        0x469004e02eec: mov $0x0, %r11
        0x469004e02ef6: call *%r11
        0x469004e02ef9: mov $0x1084080f0, %rsi
        0x469004e02f03: mov (%rsi), %rsi
        0x469004e02f06: jmp *%rsi
        0x469004e02f08: push $0x0
        0x469004e02f0d: jmp 0x469004e02f12
        0x469004e02f12: push $0x1
        0x469004e02f17: jmp 0x469004e02f1c
        0x469004e02f1c: push $0x2
        0x469004e02f21: jmp 0x469004e02f26
        0x469004e02f26: sub %eax, %ecx
        0x469004e02f28: push $0x3
        0x469004e02f2d: jmp 0x469004e02f32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279582</commentid>
    <comment_count>4</comment_count>
      <attachid>302320</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-21 15:28:22 -0800</bug_when>
    <thetext>Created attachment 302320
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279586</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-21 15:31:36 -0800</bug_when>
    <thetext>Attachment 302320 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:209:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:213:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 8 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>1279603</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-21 15:59:03 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/212775</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302296</attachid>
            <date>2017-02-21 12:58:26 -0800</date>
            <delta_ts>2017-02-21 15:28:22 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>17743</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTI3MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ1OCw2ICsxNDU4LDggQEAKIAkJNzlBMDkwODAxRDc2
ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcElt
cGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODMzMUQzNUQ3MUUwMEQ4RTA2
NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcg
LyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07
CisJCTc5QUJCMTdEMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQkIxN0IxRTVDQ0I1
NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTc5QUJCMTdFMUU1Q0NC
NTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNh
c3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFE
M0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlCMDBDQkMxQzZBQjA3RTAwODhD
NjVEIC8qIFByb3h5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQjgxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3Ry
dWN0b3IuY3BwICovOyB9OwogCQk3OUIwMENCRDFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlCMDBDQjkxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzk0NSw2ICszOTQ3LDgg
QEAKIAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQ
cm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMg
LyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlBQkIx
N0IxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gYjMvYWly
L0FpckRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QUJC
MTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBiMy9haXIvQWlyRGlz
YXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUTWF0aElDSW5saW5lUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUIwMENCOTFDNkFCMDdFMDA4
OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm94eUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NDQ0LDYgKzU0NDgsOCBAQAogCQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2Rl
LmggKi8sCiAJCQkJMEY2MTgzMjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi8s
CiAJCQkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovLAorCQkJCTc5
QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwICovLAorCQkJCTc5
QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQlEQzQ1
NEI4QTFEMDBFODFGMDA0QzE4QUYgLyogQWlyRHVtcEFzSlMuY3BwICovLAogCQkJCURDNDU0QjhC
MUQwMEU4MUYwMDRDMThBRiAvKiBBaXJEdW1wQXNKUy5oICovLAogCQkJCTBGNDU3MDM2MUJFNDRD
OTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCkBAIC03OTQyLDYgKzc5
NDgsNyBAQAogCQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVG
IC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUFCQjE3RTFF
NUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzUyOUE0QzFDNDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkUwNTAxNDFBQTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDI4MCw2ICsxMDI4Nyw3IEBACiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYy
IC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgwMDI2
QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMTEwN0VD
Mzc2MDA0MjdBNDggLyogSlNDZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5QUJCMTdEMUU1
Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJl
dmlzaW9uIDIxMjcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBaXJBcmcuaCIK
ICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyRGlzYXNzZW1ibGVyLmgi
CiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2lu
Y2x1ZGUgIkFpclRtcC5oIgpAQCAtNTEsNiArNTIsNyBAQCBuYW1lc3BhY2UgQWlyIHsKIAogY2xh
c3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDQ2FsbFNwZWNpYWw7CitjbGFzcyBEaXNhc3Nl
bWJsZXI7CiAKIHR5cGVkZWYgdm9pZCBXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcsIHVuc2lnbmVkKTsKIHR5cGVkZWYgU2hhcmVkVGFzazxXYXNt
Qm91bmRzQ2hlY2tHZW5lcmF0b3JGdW5jdGlvbj4gV2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yOwpA
QCAtMjc1LDYgKzI3Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBpdCdzIG1haW5seSBmb3IgdmFsaWRh
dGluZyB0aGUgcmVzdWx0cyBmcm9tIEpTQWlyLgogICAgIHVuc2lnbmVkIGpzSGFzaCgpIGNvbnN0
OwogCisgICAgdm9pZCBzZXREaXNhc3NlbWJsZXIoc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxl
cj4mJiBkaXNhc3NlbWJsZXIpIHsgbV9kaXNhc3NlbWJsZXIgPSBXVEZNb3ZlKGRpc2Fzc2VtYmxl
cik7IH0KKyAgICBEaXNhc3NlbWJsZXIqIGRpc2Fzc2VtYmxlcigpIHsgcmV0dXJuIG1fZGlzYXNz
ZW1ibGVyLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIDo6SlNDOjpCMzo6
UHJvY2VkdXJlOwogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKQEAgLTMxMCw2
ICszMTUsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBtX2Vu
dHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwgY29kZSBnZW5lcmF0aW9uLgog
ICAgIFJlZlB0cjxXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2Vu
ZXJhdG9yOwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGlzYXNzZW1ibGVyPiBtX2Rpc2Fzc2VtYmxlcjsKIH07CiAKIH0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJEaXNhc3NlbWJsZXIuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIu
aCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBEaXNhc3NlbWJsZXI6OnN0YXJ0RW50cnlwb2lu
dChDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2VudHJ5cG9pbnRTdGFydCA9IGppdC5sYWJl
bElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OmVuZEVudHJ5
cG9pbnQoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgbV9lbnRyeXBvaW50RW5kID0gaml0Lmxh
YmVsSWdub3JpbmdXYXRjaHBvaW50cygpOworfQorCit2b2lkIERpc2Fzc2VtYmxlcjo6c3RhcnRM
YXRlUGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2xhdGVQYXRoU3RhcnQgPSBqaXQu
bGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjplbmRM
YXRlUGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2xhdGVQYXRoRW5kID0gaml0Lmxh
YmVsSWdub3JpbmdXYXRjaHBvaW50cygpOworfQorCit2b2lkIERpc2Fzc2VtYmxlcjo6c3RhcnRC
bG9jayhCYXNpY0Jsb2NrKiBibG9jaywgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgVU5VU0VE
X1BBUkFNKGppdCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKGJsb2NrKTsKK30KKwordm9pZCBEaXNh
c3NlbWJsZXI6OmFkZEluc3QoSW5zdCogaW5zdCwgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydCwg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBlbmQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2luc3RU
b1JhbmdlLmFkZChpbnN0LCBzdGQ6Om1ha2VfcGFpcihzdGFydCwgZW5kKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIERpc2Fzc2VtYmxlcjo6
ZHVtcChDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQoreworICAgIGF1dG8gZHVtcFJhbmdlID0gWyZdIChDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0
TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwgZW5kTGFiZWwpIHsKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhcnRMYWJlbCk7CisgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihlbmRMYWJl
bCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5l
eGVjdXRhYmxlQWRkcmVzcygpKSA+PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdGFydC5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsK
KyAgICAgICAgZGlzYXNzZW1ibGUoc3RhcnQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5l
eGVjdXRhYmxlQWRkcmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBwcmVmaXgsIG91dCk7CisgICAgfTsKKworICAgIC8vIEZJWE1FOiB3
aGF0IGlmIGVudHJ5cG9pbnQgaXNuJ3QgdGhlIGZpcnN0IHRoaW5nPworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2Jsb2NrcykgeworICAgICAgICBibG9jay0+ZHVtcEhlYWRlcihvdXQp
OworICAgICAgICBpZiAoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKQorICAgICAgICAgICAgZHVt
cFJhbmdlKG1fZW50cnlwb2ludFN0YXJ0LCBtX2VudHJ5cG9pbnRFbmQpOworCisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgYXV0byBpdGVyID0gbV9pbnN0
VG9SYW5nZS5maW5kKCZpbnN0KTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IG1faW5zdFRvUmFu
Z2UuZW5kKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEZJWE1FOiB0aGlzIGNhbiBo
YXBwZW4gYXQgYSB0ZXJtaW5hbCwgYW5kIEkgdGhpbmsgbm93aGVyZSBlbHNlLiBXZSBzaG91bGQg
YXNzZXJ0IHRoaXMuCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgIik7CisgICAgICAgICAgICBp
bnN0LmR1bXAob3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAg
IGF1dG8gcGFpciA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgZHVtcFJhbmdlKHBhaXIuZmly
c3QsIHBhaXIuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3ZSBj
b3VsZCBiZSBiZXR0ZXIgYWJvdXQgdmFyaW91cyBsYXRlIHBhdGhzCisgICAgb3V0LnByaW50KCIj
IExhdGUgcGF0aHNcbiIpOworICAgIGR1bXBSYW5nZShtX2xhdGVQYXRoU3RhcnQsIG1fbGF0ZVBh
dGhFbmQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJE
aXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckRpc2Fzc2VtYmxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IAorCitjbGFzcyBMaW5rQnVmZmVyOworCituYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CitzdHJ1
Y3QgSW5zdDsKKworY2xhc3MgRGlzYXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBEaXNhc3NlbWJs
ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHN0YXJ0RW50cnlwb2ludChDQ2FsbEhlbHBlcnMm
KTsKKyAgICB2b2lkIGVuZEVudHJ5cG9pbnQoQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBzdGFy
dExhdGVQYXRoKENDYWxsSGVscGVycyYpOworICAgIHZvaWQgZW5kTGF0ZVBhdGgoQ0NhbGxIZWxw
ZXJzJik7CisgICAgdm9pZCBzdGFydEJsb2NrKEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnMmKTsK
KyAgICB2b2lkIGFkZEluc3QoSW5zdCosIENDYWxsSGVscGVyczo6TGFiZWwsIENDYWxsSGVscGVy
czo6TGFiZWwpOworCisgICAgdm9pZCBkdW1wKENvZGUmLCBQcmludFN0cmVhbSYsIExpbmtCdWZm
ZXImKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPEluc3QqLCBzdGQ6OnBhaXI8Q0NhbGxIZWxw
ZXJzOjpMYWJlbCwgQ0NhbGxIZWxwZXJzOjpMYWJlbD4+IG1faW5zdFRvUmFuZ2U7CisgICAgVmVj
dG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrczsKKyAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIG1fZW50
cnlwb2ludFN0YXJ0OworICAgIENDYWxsSGVscGVyczo6TGFiZWwgbV9lbnRyeXBvaW50RW5kOwor
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgbV9sYXRlUGF0aFN0YXJ0OworICAgIENDYWxsSGVscGVy
czo6TGFiZWwgbV9sYXRlUGF0aEVuZDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjEyNzI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Niw2ICsxOTYsOCBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVy
cyYgCiAgICAgICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQubGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCksIGluc3Qub3JpZ2luLT5vcmlnaW4oKSk7CiAgICAgfTsKIAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxEaXNhc3NlbWJsZXI+IGRpc2Fzc2VtYmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8
RGlzYXNzZW1ibGVyPigpOworCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
ICAgICAgICAgY29udGV4dC5jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAgICAgY29udGV4dC5p
bmRleEluQmxvY2sgPSBVSU5UX01BWDsKQEAgLTIwMyw3ICsyMDUsMTMgQEAgdm9pZCBnZW5lcmF0
ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IGxhYmVsID0gaml0LmxhYmVsKCk7CiAgICAgICAgICpjb250ZXh0LmJsb2NrTGFiZWxzW2Jsb2Nr
XSA9IGxhYmVsOwogCisgICAgICAgIGlmIChkaXNhc3NlbWJsZXIpCisgICAgICAgICAgIGRpc2Fz
c2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCisKICAgICAgICAgaWYgKGNvZGUuaXNF
bnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICAgICAgaWYgKGRpc2Fzc2VtYmxlcikKKyAgICAg
ICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRFbnRyeXBvaW50KGppdCk7IAorCiAgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgICAgIGlmIChjb2RlLmZy
YW1lU2l6ZSgpKQogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwpAQCAtMjE0LDYgKzIyMiw5IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShlbnRyeS5yZWcoKS5mcHIoKSwgYXJnRm9yKGVudHJ5KSk7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaXNhc3NlbWJsZXIpCisgICAgICAgICAgICAg
ICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOwpAQCAtMjIxLDggKzIzMiwxMiBA
QCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICBj
b250ZXh0LmluZGV4SW5CbG9jayA9IGk7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgYWRkSXRlbShpbnN0KTsKKyAgICAgICAgICAgIGF1dG8gc3Rh
cnQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7CiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBhdXRv
IGVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKKyAgICAgICAgICAgIGlmIChk
aXNhc3NlbWJsZXIpCisgICAgICAgICAgICAgICAgZGlzYXNzZW1ibGVyLT5hZGRJbnN0KCZpbnN0
LCBzdGFydCwgZW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnRleHQuaW5kZXhJbkJsb2Nr
ID0gYmxvY2stPnNpemUoKSAtIDE7CkBAIC0yMzYsNiArMjUxLDcgQEAgdm9pZCBnZW5lcmF0ZShD
b2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAoaXNSZXR1cm4oYmxvY2stPmxh
c3QoKS5raW5kLm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBy
ZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVkIHRv
CiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAgICAgICBhdXRvIHN0
YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAgICAgICAgICAgaWYgKGNv
ZGUuZnJhbWVTaXplKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCkBAIC0yNDgsMTAgKzI2NCwxOCBAQCB2
b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJhbWUoKTsKICAgICAgICAgICAgIGpp
dC5yZXQoKTsKICAgICAgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxhc3QoKSk7CisgICAgICAgICAg
ICBhdXRvIGVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKKyAgICAgICAgICAg
IGlmIChkaXNhc3NlbWJsZXIpCisgICAgICAgICAgICAgICAgZGlzYXNzZW1ibGVyLT5hZGRJbnN0
KCZibG9jay0+bGFzdCgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKKyAgICAgICAgYXV0byBzdGFydCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGF1dG8gZW5kID0gaml0LmxhYmVsSWdub3Jp
bmdXYXRjaHBvaW50cygpOworICAgICAgICBpZiAoZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAg
ZGlzYXNzZW1ibGVyLT5hZGRJbnN0KCZibG9jay0+bGFzdCgpLCBzdGFydCwgZW5kKTsKKwogICAg
ICAgICAvLyBUaGUganVtcCB3b24ndCBiZSBzZXQgZm9yIHBhdGNocG9pbnRzLiBJdCB3b24ndCBi
ZSBzZXQgZm9yIE9vcHMgYmVjYXVzZSB0aGVuIGl0IHdvbid0IGhhdmUKICAgICAgICAgLy8gYW55
IHN1Y2Nlc3NvcnMuCiAgICAgICAgIGlmIChqdW1wLmlzU2V0KCkpIHsKQEAgLTI4Miw5ICszMDYs
MTcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogCiAgICAgcGNU
b09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmlnaW4oKSk7CiAgICAgLy8gRklY
TUU6IE1ha2UgbGF0ZSBwYXRocyBoYXZlIE9yaWdpbnM6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTM2ODkKKyAgICBpZiAoZGlzYXNzZW1ibGVyKQorICAgICAgICBk
aXNhc3NlbWJsZXItPnN0YXJ0TGF0ZVBhdGgoaml0KTsKKwogICAgIGZvciAoYXV0byYgbGF0ZVBh
dGggOiBjb250ZXh0LmxhdGVQYXRocykKICAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRl
eHQpOwotICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQubGFiZWwoKSwgT3JpZ2luKCkp
OworCisgICAgaWYgKGRpc2Fzc2VtYmxlcikKKyAgICAgICAgZGlzYXNzZW1ibGVyLT5lbmRMYXRl
UGF0aChqaXQpOworICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQubGFiZWxJZ25vcmlu
Z1dhdGNocG9pbnRzKCksIE9yaWdpbigpKTsKKworICAgIGNvZGUuc2V0RGlzYXNzZW1ibGVyKFdU
Rk1vdmUoZGlzYXNzZW1ibGVyKSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNp
b24gMjEyNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckRpc2Fzc2VtYmxlci5oIgogI2luY2x1
ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNs
dWRlICJCM1N0YWNrU2xvdC5oIgpAQCAtMTUxLDYgKzE1MiwxMCBAQCB2b2lkIGNvbXBpbGUoU3Rh
dGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBi
aXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rpb24+KAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAg
ICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVh
c2VCeXByb2R1Y3RzKCkpOworCisgICAgaWYgKEIzOjpBaXI6OkRpc2Fzc2VtYmxlciogZGlzYXNz
ZW1ibGVyID0gc3RhdGUucHJvYy0+Y29kZSgpLmRpc2Fzc2VtYmxlcigpKSB7CisgICAgICAgIGRp
c2Fzc2VtYmxlci0+ZHVtcChzdGF0ZS5wcm9jLT5jb2RlKCksIFdURjo6ZGF0YUZpbGUoKSwgKnN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CisgICAgfQogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302320</attachid>
            <date>2017-02-21 15:28:22 -0800</date>
            <delta_ts>2017-02-21 15:30:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>23740</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyNzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBA
QAorMjAxNy0wMi0yMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBaXIgc2hvdWxkIGhhdmUgYSBkaXNhc3NlbWJseSBtb2RlIHRoYXQgZHVtcHMgSVIgYW5kIGFz
c2VtYmx5IGludGVybWl4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgd2lsbCBtYWtlIGR1bXBpbmcgRlRMIGRpc2Fzc2VtYmx5IGR1bXAgQWly
IGludGVybWl4ZWQKKyAgICAgICAgd2l0aCB0aGUgYXNzZW1ibHkgZ2VuZXJhdGVkIGJ5IGVhY2gg
QWlyIEluc3QuIFRoaXMgaXMgc2ltaWxhcgorICAgICAgICB0byBob3cgZHVtcERGR0Rpc2Fzc2Vt
Ymx5IGR1bXBzIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgZm9yIGVhY2gKKyAgICAgICAgTm9kZS4K
KyAgICAgICAgCisgICAgICAgIEhlcmUgaXMgd2hhdCB0aGUgb3V0cHV0IHdpbGwgbG9vayBsaWtl
OgorICAgICAgICAKKyAgICAgICAgR2VuZXJhdGVkIEZUTCBKSVQgY29kZSBmb3IgZm9vI0NVYUZp
UTpbMHgxMGI3NmM5NjAtPjB4MTBiNzZjMmQwLT4weDEwYjdiNmRhMCwgRlRMRnVuY3Rpb25DYWxs
LCA0MCAoTmV2ZXJJbmxpbmUpXSwgaW5zdHJ1Y3Rpb24gY291bnQgPSA0MDoKKyAgICAgICAgQkIj
MDogOyBmcmVxdWVuY3kgPSAxLjAwMDAwMAorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTAw
OiBwdXNoICVyYnAKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUwMmUwMTogbW92ICVyc3AsICVy
YnAKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUwMmUwNDogYWRkICQweGZmZmZmZmZmZmZmZmZm
ZDAsICVyc3AKKyAgICAgICAgICAgIE1vdmUgJDB4MTBiNzZjOTYwLCAlcmF4LCAkNDQ4NzMwMTQ3
MihAMTYpCisgICAgICAgICAgICAgICAgMHg0NjkwMDRlMDJlMDg6IG1vdiAkMHgxMGI3NmM5NjAs
ICVyYXgKKyAgICAgICAgICAgIE1vdmUgJXJheCwgMTYoJXJicCksIEAxOQorICAgICAgICAgICAg
ICAgIDB4NDY5MDA0ZTAyZTEyOiBtb3YgJXJheCwgMHgxMCglcmJwKQorICAgICAgICAgICAgUGF0
Y2ggJlBhdGNocG9pbnQyLCAlcmJwLCAlcmF4LCBAMjAKKyAgICAgICAgICAgICAgICAweDQ2OTAw
NGUwMmUxNjogbGVhIC0weDUwKCVyYnApLCAlcmF4CisgICAgICAgICAgICAgICAgMHg0NjkwMDRl
MDJlMWE6IG1vdiAkMHgxMDg0MDgxZTAsICVyMTEKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUw
MmUyNDogY21wICVyYXgsICglcjExKQorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTI3OiBq
YSAweDQ2OTAwNGUwMmU5YQorICAgICAgICAgICAgTW92ZSA1NiglcmJwKSwgJXJkeCwgQDIzCisg
ICAgICAgICAgICAgICAgMHg0NjkwMDRlMDJlMmQ6IG1vdiAweDM4KCVyYnApLCAlcmR4CisgICAg
ICAgICAgICBNb3ZlICQweGZmZmYwMDAwMDAwMDAwMDIsICVyYXgsICQtMjgxNDc0OTc2NzEwNjU0
KEAxNSkKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUwMmUzMTogbW92ICQweGZmZmYwMDAwMDAw
MDAwMDIsICVyYXgKKyAgICAgICAgICAgIFBhdGNoICZCcmFuY2hUZXN0NjQoMyxTYW1lQXNSZXAp
MSwgTm9uWmVybywgJXJkeCwgJXJheCwgJXJkeCwgQDI2CisgICAgICAgICAgICAgICAgMHg0Njkw
MDRlMDJlM2I6IHRlc3QgJXJkeCwgJXJheAorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTNl
OiBqbnogMHg0NjkwMDRlMDJmMDgKKyAgICAgICAgICAgIE1vdmUgNDgoJXJicCksICVyYXgsIEAy
OQorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTQ0OiBtb3YgMHgzMCglcmJwKSwgJXJheAor
ICAgICAgICAgICAgTW92ZSAlcmF4LCAlcmN4LCBAMzEKKyAgICAgICAgICAgICAgICAweDQ2OTAw
NGUwMmU0ODogbW92ICVyYXgsICVyY3gKKyAgICAgICAgICAgIFhvcjY0ICQ2LCAlcmN4LCBAMzEK
KyAgICAgICAgICAgICAgICAweDQ2OTAwNGUwMmU0YjogeG9yICQweDYsICVyY3gKKyAgICAgICAg
ICAgIFBhdGNoICZCcmFuY2hUZXN0NjQoMyxTYW1lQXNSZXApMSwgTm9uWmVybywgJXJjeCwgJC0y
LCAlcmF4LCBAMzUKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUwMmU0ZjogdGVzdCAkMHhmZmZm
ZmZmZmZmZmZmZmZlLCAlcmN4CisgICAgICAgICAgICAgICAgMHg0NjkwMDRlMDJlNTY6IGpueiAw
eDQ2OTAwNGUwMmYxMgorICAgICAgICAgICAgUGF0Y2ggJkJyYW5jaDMyKDMsU2FtZUFzUmVwKTAs
IE5vdEVxdWFsLCAoJXJkeCksICQyNjYsICVyZHgsIEA0NQorICAgICAgICAgICAgICAgIDB4NDY5
MDA0ZTAyZTVjOiBjbXAgJDB4MTBhLCAoJXJkeCkKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUw
MmU2Mjogam56IDB4NDY5MDA0ZTAyZjFjCisgICAgICAgICAgICBCcmFuY2hUZXN0MzIgTm9uWmVy
bywgJXJheCwgJDEsIEA0OQorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTY4OiB0ZXN0ICQw
eDEsICVhbAorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTZhOiBqbnogMHg0NjkwMDRlMDJl
OTEKKyAgICAgICAgICBTdWNjZXNzb3JzOiAjMywgIzEKKyAgICAgICAgQkIjMTogOyBmcmVxdWVu
Y3kgPSAxLjAwMDAwMAorICAgICAgICAgIFByZWRlY2Vzc29yczogIzAKKyAgICAgICAgICAgIE1v
dmUgJDAsICVyY3gsIEA2NQorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTcwOiB4b3IgJXJj
eCwgJXJjeAorICAgICAgICAgICAgSnVtcCBANjYKKyAgICAgICAgICBTdWNjZXNzb3JzOiAjMgor
ICAgICAgICBCQiMyOiA7IGZyZXF1ZW5jeSA9IDEuMDAwMDAwCisgICAgICAgICAgUHJlZGVjZXNz
b3JzOiAjMSwgIzMKKyAgICAgICAgICAgIE1vdmUgMjQoJXJkeCksICVyYXgsIEA1OAorICAgICAg
ICAgICAgICAgIDB4NDY5MDA0ZTAyZTczOiBtb3YgMHgxOCglcmR4KSwgJXJheAorICAgICAgICAg
ICAgUGF0Y2ggJkJyYW5jaEFkZDMyKDQsRm9yY2VMYXRlVXNlVW5sZXNzUmVjb3ZlcmFibGUpMywg
T3ZlcmZsb3csICVyY3gsICVyYXgsICVyY3gsICVyY3gsICVyYXgsIEA2MAorICAgICAgICAgICAg
ICAgIDB4NDY5MDA0ZTAyZTc3OiBhZGQgJWVheCwgJWVjeAorICAgICAgICAgICAgICAgIDB4NDY5
MDA0ZTAyZTc5OiBqbyAweDQ2OTAwNGUwMmYyNgorICAgICAgICAgICAgTW92ZSAkMHhmZmZmMDAw
MDAwMDAwMDAwLCAlcmF4LCAkLTI4MTQ3NDk3NjcxMDY1NihAMTQpCisgICAgICAgICAgICAgICAg
MHg0NjkwMDRlMDJlN2Y6IG1vdiAkMHhmZmZmMDAwMDAwMDAwMDAwLCAlcmF4CisgICAgICAgICAg
ICBBZGQ2NCAlcmN4LCAlcmF4LCAlcmF4LCBANjIKKyAgICAgICAgICAgICAgICAweDQ2OTAwNGUw
MmU4OTogYWRkICVyY3gsICVyYXgKKyAgICAgICAgICAgIFJldDY0ICVyYXgsIEA2MworICAgICAg
ICAgICAgICAgIDB4NDY5MDA0ZTAyZThjOiBtb3YgJXJicCwgJXJzcAorICAgICAgICAgICAgICAg
IDB4NDY5MDA0ZTAyZThmOiBwb3AgJXJicAorICAgICAgICAgICAgICAgIDB4NDY5MDA0ZTAyZTkw
OiByZXQgCisgICAgICAgIEJCIzM6IDsgZnJlcXVlbmN5ID0gMS4wMDAwMDAKKyAgICAgICAgICBQ
cmVkZWNlc3NvcnM6ICMwCisgICAgICAgICAgICBNb3ZlIDE2KCVyZHgpLCAlcmN4LCBANTIKKyAg
ICAgICAgICAgICAgICAweDQ2OTAwNGUwMmU5MTogbW92IDB4MTAoJXJkeCksICVyY3gKKyAgICAg
ICAgICAgIEp1bXAgQDU1CisgICAgICAgICAgICAgICAgMHg0NjkwMDRlMDJlOTU6IGptcCAweDQ2
OTAwNGUwMmU3MworICAgICAgICAgIFN1Y2Nlc3NvcnM6ICMyCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OnNldERpc2Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmRp
c2Fzc2VtYmxlcik6CisgICAgICAgICogYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEaXNhc3NlbWJsZXI6OnN0YXJ0RW50cnlwb2ludCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRpc2Fzc2VtYmxlcjo6ZW5kRW50cnlwb2ludCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkRpc2Fzc2VtYmxlcjo6c3RhcnRMYXRlUGF0aCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkRpc2Fzc2VtYmxlcjo6ZW5kTGF0ZVBhdGgpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEaXNhc3NlbWJsZXI6OnN0YXJ0QmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpEaXNhc3NlbWJsZXI6OmFkZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpE
aXNhc3NlbWJsZXI6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJEaXNhc3NlbWJsZXIuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpjb21waWxlKToKKwogMjAxNy0wMi0yMSAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEy
NzEyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEy
NzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC03OSw2ICs3OSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMv
YWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICBiMy9haXIvQWlyQ29kZS5jcHAKICAg
ICBiMy9haXIvQWlyQ3VzdG9tLmNwcAorICAgIGIzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3BwCiAg
ICAgYjMvYWlyL0FpckR1bXBBc0pTLmNwcAogICAgIGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29k
ZS5jcHAKICAgICBiMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEyNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE0NTgsNiArMTQ1OCw4IEBACiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMjI4MzUxRDM1RDcxRTAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUEyMjgzMzFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNw
cCAqLzsgfTsKIAkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1
RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyB9OworCQk3OUFCQjE3RDFFNUNDQjU3
MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNh
c3NlbWJsZXIuY3BwICovOyB9OworCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBRjBCRTQxRDNFRkQ0
QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJ
VE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5QjAwQ0JDMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QjAwQ0I4MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJ
NzlCMDBDQkQxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAwQ0I5MUM2QUIwN0UwMDg4
QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5NDUsNiArMzk0Nyw4IEBACiAJCTc5QTIyODMzMUQzNUQ3
MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXJpdGhQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0aFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlBODk5RkUxRDM4NjEyRTAwRDE4QzczIC8qIEpJVE1hdGhJQ0ZvcndhcmRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQ0ZvcndhcmRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QUJCMTdCMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJEaXNhc3NlbWJsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckRpc2Fzc2VtYmxlci5oOyBwYXRoID0gYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFGMEJFMzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0
aElDSW5saW5lUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1h
dGhJQ0lubGluZVJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUIwMENC
ODFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQjkxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlDb25zdHJ1Y3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ0NCw2ICs1NDQ4LDggQEAKIAkJ
CQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAogCQkJCTBGNjE4MzIy
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwICovLAogCQkJCTBGMTBGMUEyMUM0MjBC
RjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLywKKwkJCQk3OUFCQjE3QjFFNUNDQjU3MDA0NUI5
QTYgLyogQWlyRGlzYXNzZW1ibGVyLmNwcCAqLywKKwkJCQk3OUFCQjE3QzFFNUNDQjU3MDA0NUI5
QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJREM0NTRCOEExRDAwRTgxRjAwNEMxOEFG
IC8qIEFpckR1bXBBc0pTLmNwcCAqLywKIAkJCQlEQzQ1NEI4QjFEMDBFODFGMDA0QzE4QUYgLyog
QWlyRHVtcEFzSlMuaCAqLywKIAkJCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxp
bWluYXRlRGVhZENvZGUuY3BwICovLApAQCAtNzk0Miw2ICs3OTQ4LDcgQEAKIAkJCQlBNUVBNzBF
OTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJ
Q2FzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFp
ckRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM1MjlBNEMxQzQ1N0I3NTAwMEI0
OUM2IC8qIEFQSVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBC
OUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTQxQUE5MDkxMTAw
RDMzQjMzIC8qIEFyZ3VtZW50c01vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTAyODAsNiArMTAy
ODcsNyBAQAogCQkJCTY1N0NGNDU4MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDExMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ2Vs
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUFCQjE3RDFFNUNDQjU3MDA0NUI5QTYgLyogQWly
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0NKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0
NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE2
MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAyMTI3MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnLmgiCiAjaW5jbHVkZSAiQWlyQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkFpckRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkFpclNwZWNp
YWwuaCIKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJBaXJUbXAuaCIKQEAg
LTUxLDYgKzUyLDcgQEAgbmFtZXNwYWNlIEFpciB7CiAKIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0
OwogY2xhc3MgQ0NhbGxTcGVjaWFsOworY2xhc3MgRGlzYXNzZW1ibGVyOwogCiB0eXBlZGVmIHZv
aWQgV2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
LCB1bnNpZ25lZCk7CiB0eXBlZGVmIFNoYXJlZFRhc2s8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9y
RnVuY3Rpb24+IFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKQEAgLTI3NSw2ICsyNzcsOSBAQCBw
dWJsaWM6CiAgICAgLy8gaXQncyBtYWlubHkgZm9yIHZhbGlkYXRpbmcgdGhlIHJlc3VsdHMgZnJv
bSBKU0Fpci4KICAgICB1bnNpZ25lZCBqc0hhc2goKSBjb25zdDsKIAorICAgIHZvaWQgc2V0RGlz
YXNzZW1ibGVyKHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJsZXI+JiYgZGlzYXNzZW1ibGVyKSB7
IG1fZGlzYXNzZW1ibGVyID0gV1RGTW92ZShkaXNhc3NlbWJsZXIpOyB9CisgICAgRGlzYXNzZW1i
bGVyKiBkaXNhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Rpc2Fzc2VtYmxlci5nZXQoKTsgfQorCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyA6OkpTQzo6QjM6OlByb2NlZHVyZTsKICAgICBmcmll
bmQgY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CkBAIC0zMTAsNiArMzE1LDcgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBU
aGlzIGlzIGVtcHR5IHVudGlsIGNvZGUgZ2VuZXJhdGlvbi4KICAgICBSZWZQdHI8V2FzbUJvdW5k
c0NoZWNrR2VuZXJhdG9yPiBtX3dhc21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKICAgICBjb25zdCBj
aGFyKiBtX2xhc3RQaGFzZU5hbWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmxlcj4g
bV9kaXNhc3NlbWJsZXI7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlz
YXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyRGlzYXNzZW1ibGVyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjpzdGFydEVudHJ5cG9pbnQoQ0NhbGxIZWxwZXJzJiBqaXQp
Cit7CisgICAgbV9lbnRyeXBvaW50U3RhcnQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjplbmRFbnRyeXBvaW50KENDYWxsSGVscGVycyYg
aml0KQoreworICAgIG1fZW50cnlwb2ludEVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OnN0YXJ0TGF0ZVBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQpCit7CisgICAgbV9sYXRlUGF0aFN0YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBv
aW50cygpOworfQorCit2b2lkIERpc2Fzc2VtYmxlcjo6ZW5kTGF0ZVBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQpCit7CisgICAgbV9sYXRlUGF0aEVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OnN0YXJ0QmxvY2soQmFzaWNCbG9jayogYmxv
Y2ssIENDYWxsSGVscGVycyYgaml0KQoreworICAgIFVOVVNFRF9QQVJBTShqaXQpOworICAgIG1f
YmxvY2tzLmFwcGVuZChibG9jayk7Cit9CisKK3ZvaWQgRGlzYXNzZW1ibGVyOjphZGRJbnN0KElu
c3QqIGluc3QsIENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnQsIENDYWxsSGVscGVyczo6TGFiZWwg
ZW5kKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnN0VG9SYW5nZS5hZGQoaW5zdCwgc3Rk
OjptYWtlX3BhaXIoc3RhcnQsIGVuZCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKwordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoQ29kZSYgY29kZSwgUHJp
bnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKK3sKKyAgICBhdXRvIGR1bXBS
YW5nZSA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydExhYmVsLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGVuZExhYmVsKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0TGFiZWwuaXNT
ZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZExhYmVsLmlzU2V0KCkpOworICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGFydExh
YmVsKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGVuZExhYmVsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gIiAgICAgICI7CisgICAgICAgIGRpc2Fzc2VtYmxlKHN0YXJ0LCBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSwgcHJlZml4LCBvdXQpOworICAgIH07CisKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ibG9ja3MpIHsKKyAgICAgICAgYmxvY2stPmR1
bXBIZWFkZXIob3V0KTsKKyAgICAgICAgaWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkKKyAg
ICAgICAgICAgIGR1bXBSYW5nZShtX2VudHJ5cG9pbnRTdGFydCwgbV9lbnRyeXBvaW50RW5kKTsK
KworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICAgICIpOworICAgICAgICAgICAgaW5zdC5kdW1wKG91dCk7CisgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7CisKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1faW5zdFRvUmFuZ2Uu
ZmluZCgmaW5zdCk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtX2luc3RUb1JhbmdlLmVuZCgp
KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoJmluc3QgPT0gJmJsb2NrLT5sYXN0
KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYXV0byBwYWlyID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBkdW1wUmFuZ2UocGFpci5m
aXJzdCwgcGFpci5zZWNvbmQpOworICAgICAgICB9CisgICAgICAgIGJsb2NrLT5kdW1wRm9vdGVy
KG91dCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGJlIGJldHRlciBhYm91dCB2
YXJpb3VzIGxhdGUgcGF0aHMuIFdlIGNhbiBpbXBsZW1lbnQKKyAgICAvLyB0aGlzIGxhdGVyIGlm
IHdlIGZpbmQgYSBzdHJvbmcgdXNlIGZvciBpdC4KKyAgICBvdXQucHJpbnQoIiMgTGF0ZSBwYXRo
c1xuIik7CisgICAgZHVtcFJhbmdlKG1fbGF0ZVBhdGhTdGFydCwgbV9sYXRlUGF0aEVuZCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNz
ZW1ibGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJEaXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgCisKK2NsYXNzIExpbmtCdWZmZXI7CisKK25hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKK3N0cnVjdCBJbnN0Owor
CitjbGFzcyBEaXNhc3NlbWJsZXIgeworcHVibGljOgorICAgIERpc2Fzc2VtYmxlcigpID0gZGVm
YXVsdDsKKworICAgIHZvaWQgc3RhcnRFbnRyeXBvaW50KENDYWxsSGVscGVycyYpOworICAgIHZv
aWQgZW5kRW50cnlwb2ludChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIHN0YXJ0TGF0ZVBhdGgo
Q0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBlbmRMYXRlUGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAg
ICB2b2lkIHN0YXJ0QmxvY2soQmFzaWNCbG9jayosIENDYWxsSGVscGVycyYpOworICAgIHZvaWQg
YWRkSW5zdChJbnN0KiwgQ0NhbGxIZWxwZXJzOjpMYWJlbCwgQ0NhbGxIZWxwZXJzOjpMYWJlbCk7
CisKKyAgICB2b2lkIGR1bXAoQ29kZSYsIFByaW50U3RyZWFtJiwgTGlua0J1ZmZlciYpOworCitw
cml2YXRlOgorICAgIEhhc2hNYXA8SW5zdCosIHN0ZDo6cGFpcjxDQ2FsbEhlbHBlcnM6OkxhYmVs
LCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9pbnN0VG9SYW5nZTsKKyAgICBWZWN0b3I8QmFzaWNC
bG9jayo+IG1fYmxvY2tzOworICAgIENDYWxsSGVscGVyczo6TGFiZWwgbV9lbnRyeXBvaW50U3Rh
cnQ7CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtX2VudHJ5cG9pbnRFbmQ7CisgICAgQ0NhbGxI
ZWxwZXJzOjpMYWJlbCBtX2xhdGVQYXRoU3RhcnQ7CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBt
X2xhdGVQYXRoRW5kOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTI3MjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYg
KzE5Niw4IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAg
ICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMo
KSwgaW5zdC5vcmlnaW4tPm9yaWdpbigpKTsKICAgICB9OwogCisgICAgRGlzYXNzZW1ibGVyKiBk
aXNhc3NlbWJsZXIgPSBjb2RlLmRpc2Fzc2VtYmxlcigpOworCiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgY29udGV4dC5jdXJyZW50QmxvY2sgPSBibG9jazsK
ICAgICAgICAgY29udGV4dC5pbmRleEluQmxvY2sgPSBVSU5UX01BWDsKQEAgLTIwMyw3ICsyMDUs
MTMgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGxhYmVsID0gaml0LmxhYmVsKCk7CiAgICAgICAgICpjb250ZXh0
LmJsb2NrTGFiZWxzW2Jsb2NrXSA9IGxhYmVsOwogCisgICAgICAgIGlmIChkaXNhc3NlbWJsZXIp
CisgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRCbG9jayhibG9jaywgaml0KTsgCisKICAg
ICAgICAgaWYgKGNvZGUuaXNFbnRyeXBvaW50KGJsb2NrKSkgeworICAgICAgICAgICAgaWYgKGRp
c2Fzc2VtYmxlcikKKyAgICAgICAgICAgICAgIGRpc2Fzc2VtYmxlci0+c3RhcnRFbnRyeXBvaW50
KGppdCk7IAorCiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAg
ICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKQogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjE0LDYgKzIyMiw5IEBAIHZvaWQgZ2Vu
ZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShlbnRyeS5yZWcoKS5mcHIoKSwgYXJn
Rm9yKGVudHJ5KSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaXNhc3NlbWJs
ZXIpCisgICAgICAgICAgICAgICBkaXNhc3NlbWJsZXItPmVuZEVudHJ5cG9pbnQoaml0KTsgCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOwpA
QCAtMjIxLDggKzIzMiwxMiBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVy
cyYgCiAgICAgICAgICAgICBjb250ZXh0LmluZGV4SW5CbG9jayA9IGk7CiAgICAgICAgICAgICBJ
bnN0JiBpbnN0ID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgYWRkSXRlbShpbnN0KTsKKyAg
ICAgICAgICAgIGF1dG8gc3RhcnQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7CiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBj
b250ZXh0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7
CisgICAgICAgICAgICBhdXRvIGVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsK
KyAgICAgICAgICAgIGlmIChkaXNhc3NlbWJsZXIpCisgICAgICAgICAgICAgICAgZGlzYXNzZW1i
bGVyLT5hZGRJbnN0KCZpbnN0LCBzdGFydCwgZW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGNv
bnRleHQuaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKSAtIDE7CkBAIC0yMzYsNiArMjUxLDcg
QEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICBpZiAo
aXNSZXR1cm4oYmxvY2stPmxhc3QoKS5raW5kLm9wY29kZSkpIHsKICAgICAgICAgICAgIC8vIFdl
IGN1cnJlbnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4g
QWlyLCBzbyB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisg
ICAgICAgICAgICBhdXRvIHN0YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwog
ICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCkBAIC0y
NDgsMTAgKzI2NCwxOCBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYg
CiAgICAgICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJhbWUo
KTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKICAgICAgICAgICAgIGFkZEl0ZW0oYmxvY2stPmxh
c3QoKSk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKTsKKyAgICAgICAgICAgIGlmIChkaXNhc3NlbWJsZXIpCisgICAgICAgICAgICAgICAgZGlz
YXNzZW1ibGVyLT5hZGRJbnN0KCZibG9jay0+bGFzdCgpLCBzdGFydCwgZW5kKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byBzdGFydCA9IGppdC5sYWJl
bElnbm9yaW5nV2F0Y2hwb2ludHMoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAg
PSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGF1dG8gZW5k
ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOworICAgICAgICBpZiAoZGlzYXNzZW1i
bGVyKQorICAgICAgICAgICAgZGlzYXNzZW1ibGVyLT5hZGRJbnN0KCZibG9jay0+bGFzdCgpLCBz
dGFydCwgZW5kKTsKKwogICAgICAgICAvLyBUaGUganVtcCB3b24ndCBiZSBzZXQgZm9yIHBhdGNo
cG9pbnRzLiBJdCB3b24ndCBiZSBzZXQgZm9yIE9vcHMgYmVjYXVzZSB0aGVuIGl0IHdvbid0IGhh
dmUKICAgICAgICAgLy8gYW55IHN1Y2Nlc3NvcnMuCiAgICAgICAgIGlmIChqdW1wLmlzU2V0KCkp
IHsKQEAgLTI4Miw5ICszMDYsMTUgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhl
bHBlcnMmIAogCiAgICAgcGNUb09yaWdpbk1hcC5hcHBlbmRJdGVtKGppdC5sYWJlbCgpLCBPcmln
aW4oKSk7CiAgICAgLy8gRklYTUU6IE1ha2UgbGF0ZSBwYXRocyBoYXZlIE9yaWdpbnM6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM2ODkKKyAgICBpZiAoZGlzYXNz
ZW1ibGVyKQorICAgICAgICBkaXNhc3NlbWJsZXItPnN0YXJ0TGF0ZVBhdGgoaml0KTsKKwogICAg
IGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKICAgICAgICAgbGF0ZVBh
dGgtPnJ1bihqaXQsIGNvbnRleHQpOwotICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRlbShqaXQu
bGFiZWwoKSwgT3JpZ2luKCkpOworCisgICAgaWYgKGRpc2Fzc2VtYmxlcikKKyAgICAgICAgZGlz
YXNzZW1ibGVyLT5lbmRMYXRlUGF0aChqaXQpOworICAgIHBjVG9PcmlnaW5NYXAuYXBwZW5kSXRl
bShqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIE9yaWdpbigpKTsKIH0KIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMTI3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
RGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCkBAIC01Nyw2ICs1OCw5
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGdyYXBoLm1fY29kZUJsb2NrOwogICAgIFZNJiB2bSA9IGdyYXBoLm1f
dm07CiAKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIHN0YXRlLnBy
b2MtPmNvZGUoKS5zZXREaXNhc3NlbWJsZXIoc3RkOjptYWtlX3VuaXF1ZTxCMzo6QWlyOjpEaXNh
c3NlbWJsZXI+KCkpOworCiAgICAgewogICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQo
c3RhdGUuZ3JhcGgsIHNhZmVwb2ludFJlc3VsdCk7CiAKQEAgLTE1MSw2ICsxNTUsMTMgQEAgdm9p
ZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKICAgICAgICAgc3Rh
dGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0
ZS5wcm9jLT5yZWxlYXNlQnlwcm9kdWN0cygpKTsKKworICAgIGlmIChCMzo6QWlyOjpEaXNhc3Nl
bWJsZXIqIGRpc2Fzc2VtYmxlciA9IHN0YXRlLnByb2MtPmNvZGUoKS5kaXNhc3NlbWJsZXIoKSkg
eworICAgICAgICBkYXRhTG9nTG4oIlxuR2VuZXJhdGVkIEZUTCBKSVQgY29kZSBmb3IgIiwgQ29k
ZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJ
VCksICIsIGluc3RydWN0aW9uIGNvdW50ID0gIiwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQ291bnQoKSwgIjoiKTsKKyAgICAgICAgTGlua0J1ZmZlciYgbGlua0J1ZmZlciA9
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXI7CisgICAgICAgIGRpc2Fzc2VtYmxl
ci0+ZHVtcChzdGF0ZS5wcm9jLT5jb2RlKCksIFdURjo6ZGF0YUZpbGUoKSwgbGlua0J1ZmZlcik7
CisgICAgICAgIGxpbmtCdWZmZXIuZGlkQWxyZWFkeURpc2Fzc2VtYmxlKCk7CisgICAgfQogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCg==
</data>
<flag name="review"
          id="324052"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>