<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.yoctoproject.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>9449</bug_id>
          
          <creation_ts>2016-04-12 16:16:01 +0000</creation_ts>
          <short_desc>[meta-swupd] Reduce runtime of do_swupd_update</short_desc>
          <delta_ts>2016-12-09 16:22:02 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>7</classification_id>
          <classification>Build System, Metadata &amp; Runtime</classification>
          <product>Other YP Layers</product>
          <component>meta-swupd</component>
          <version>2.2</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Multiple</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>Medium+</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>2.3 M2</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Lock">joshuagloe</reporter>
          <assigned_to name="Patrick Ohly">patrick.ohly</assigned_to>
          <cc>dmitry.rojkov</cc>
    
    <cc>jose.perez.carranza</cc>
    
    <cc>mariano.lopez</cc>
    
    <cc>patrick.ohly</cc>
    
    <cc>poky.bs.watcher</cc>
    
    <cc>poky.watcher</cc>
    
    <cc>richard.purdie</cc>
    
    <cc>seebs</cc>
          
          <qa_contact name="Libertad">libertad.gonzalez.de.la.cruz</qa_contact>
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>No (bug/feature does not impact docs)</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61098</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-04-12 16:16:01 +0000</bug_when>
    <thetext>All of the system() calls to tar really impact performance as each system() call adds another pseudo load.

We&apos;ll work with swupd upstream to add an optional libarchive backend, the methodology will be:
* add tests for the tar calls
* abstract out tar usage into a module/backend
* implement a compatible libarchive module/backend
* add configure machinery to choose backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62959</commentid>
    <comment_count>1</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-06-14 13:54:11 +0000</bug_when>
    <thetext>Took a quick look at the latest swupd-server master branch to see how widely tar is used. There are currently 11 different locations where TAR_COMMAND is used to construct a tar call, they seem to follow 4 or 5 different patterns.

Should be simple enough to abstract these 4 or 5 patterns out into some functions which we can then look at providing a libarchive variant of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63923</commentid>
    <comment_count>2</comment_count>
      <attachid>3282</attachid>
    <who name="Dmitry Rozhkov">dmitry.rojkov</who>
    <bug_when>2016-07-13 15:11:45 +0000</bug_when>
    <thetext>Created attachment 3282
multi-threaded benchmarks

The attached program simulates the behavior of swupd_make_fullfiles: it runs 5000 tasks in 48 parallel threads. Each task is a series of creating/measuring/unlinking files (like moving a file to a bsdtar archive with different compression types and measuring the size in order to find the optimal compression type).

Under pseudo it takes 10 times more time to run than with no pseudo. The reason is that pseudo serializes any parallelism of the program it&apos;s loaded into by setting a mutex on wrapped syscalls. Also the pseudo-server is a single-threaded application serializing access to sqlite.

If to modify the benchmark to run tar with `system()` call in every task then the test gets ~15 time slower under pseudo, but again it could be much faster if pseudo used all available CPU cores.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64045</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-07-15 14:41:44 +0000</bug_when>
    <thetext>This won&apos;t make M3 and based on Dmitry&apos;s analysis it may not even provide the big win we were hoping for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64245</commentid>
    <comment_count>4</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2016-07-20 16:52:02 +0000</bug_when>
    <thetext>Added Peter Seebach since I suspect he might be interested in a benchmark that makes pseudo perform badly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65880</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-07 15:49:22 +0000</bug_when>
    <thetext>It looks like a libarchive backend for swupd-server won&apos;t make as significant a difference as first expected. Most likely we should close this issue and open an enhancement request against Pseudo but deferring on that for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66091</commentid>
    <comment_count>6</comment_count>
    <who name="Seebs">seebs</who>
    <bug_when>2016-09-13 17:15:18 +0000</bug_when>
    <thetext>The slowdown on parallel system calls is probably very close to impossible to correct without MASSIVE increases in overhead and risk of serious errors. Note that actually distinct processes won&apos;t have that problem. And while the server is still serializing operations, that&apos;s actually usually a non-issue, especially when FASTOP is in use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67862</commentid>
    <comment_count>7</comment_count>
    <who name="Patrick Ohly">patrick.ohly</who>
    <bug_when>2016-11-02 14:42:18 +0000</bug_when>
    <thetext>Performance of swupd_make_fullfiles gets much better under pseudo when invoking libarchive directly instead of invoking an external tar command. I have patches for that and various other enhancements. No enhancements of pseudo are needed.

Currently I am trying to convince the swupd maintainers to accept those patches, to avoid forking the swupd code. See https://github.com/clearlinux/swupd-server/pull/34 and https://github.com/ostroproject/ostro-os/pull/198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68328</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-11-15 17:28:30 +0000</bug_when>
    <thetext>Reassigning to Patrick as he&apos;s already made excellent progress here and has patches in progress.

Patrick: please let me know if you&apos;re unhappy with this or if you feel the target milestone is inappropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68989</commentid>
    <comment_count>9</comment_count>
    <who name="Patrick Ohly">patrick.ohly</who>
    <bug_when>2016-12-09 16:22:02 +0000</bug_when>
    <thetext>I just update meta-swupd master. The current revision (07ad71b789d) has implemented various performance improvements such that building update data for a build in which nothing changed takes only five minutes instead of more than two hours (in Ostro OS).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3282</attachid>
            <date>2016-07-13 15:11:45 +0000</date>
            <delta_ts>2016-07-13 15:11:45 +0000</delta_ts>
            <desc>multi-threaded benchmarks</desc>
            <filename>testthreads-0.1.tar.gz</filename>
            <type>application/gzip</type>
            <size>30720</size>
            <attacher name="Dmitry Rozhkov">dmitry.rojkov</attacher>
            
              <data encoding="base64">cGF4X2dsb2JhbF9oZWFkZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjYAMDAwMDAw
MAAwMDAwMDAwADAwMDAwMDAwMDY0ADEyNzQxNDQ3NDIxADAwMTQ1MjAAZwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHJvb3QAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwADAwMDAw
MDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1
MiBjb21tZW50PWNmNjIxYTBiOTM2Y2U0ZGI1NzRiNDBmNzE4MDdhNTE1MWM4ZWYxOGYKAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRl
c3R0aHJlYWRzLTAuMS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNzc1ADAwMDAwMDAA
MDAwMDAwMAAwMDAwMDAwMDAwMAAxMjc0MTQ0NzQyMQAwMDEzNzEyADUAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByb290AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAw
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdGVz
dHRocmVhZHMtMC4xLy5naXRpZ25vcmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjQAMDAwMDAwMAAw
MDAwMDAwADAwMDAwMDAwMDIzADEyNzQxNDQ3NDIxADAwMTU2NzUAMAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwADAwMDAwMDAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqfgoq
Lm8KdGVzdHRocmVhZHMKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRlc3R0
aHJlYWRzLTAuMS9NYWtlZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjY0ADAwMDAwMDAAMDAw
MDAwMAAwMDAwMDAwMDI2NAAxMjc0MTQ0NzQyMQAwMDE1MzU0ADAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAwAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWxsOiB0
ZXN0dGhyZWFkcy5jIHRocmVhZHBvb2wubwoJZ2NjIC1nIC1vIHRlc3R0aHJlYWRzIHRocmVhZHBv
b2wubyAtbHB0aHJlYWQgdGVzdHRocmVhZHMuYwoKdGhyZWFkcG9vbC5vOiB0aHJlYWRwb29sLmMg
dGhyZWFkcG9vbC5oCglnY2MgLWMgLWcgLW8gdGhyZWFkcG9vbC5vIC1mUElDIHRocmVhZHBvb2wu
YwoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXN0dGhy
ZWFkcy0wLjEvZGF0YS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc3NQAwMDAwMDAwADAwMDAw
MDAAMDAwMDAwMDAwMDAAMTI3NDE0NDc0MjEAMDAxNDYyMwA1AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAAMDAwMDAwMAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRlc3R0aHJl
YWRzLTAuMS9kYXRhL3Rlc3QuZGF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjY0ADAwMDAwMDAAMDAwMDAw
MAAwMDAwMDAwMDAyMgAxMjc0MTQ0NzQyMQAwMDE2MjY2ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAwAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdGhpcyBpcyB0
ZXN0IGRhdGEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXN0dGhyZWFk
cy0wLjEvdGVzdHRocmVhZHMuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAwMDAwADAwMDAwMDAA
MDAwMDAwMDI3NjQAMTI3NDE0NDc0MjEAMDAxNjQyMQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAAMDAwMDAwMAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNkZWZpbmUgX0dO
VV9TT1VSQ0UKCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVk
ZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy94YXR0
ci5oPgoKI2luY2x1ZGUgInRocmVhZHBvb2wuaCIKCiNkZWZpbmUgVEhSRUFEIDQ4CiNkZWZpbmUg
UVVFVUUgNTAwMAoKaW50NjRfdCB0YXNrc1tRVUVVRV07Cgp2b2lkIGRvX3NvbWV0aGluZyhjb25z
dCBjaGFyICpmaWxlbmFtZSkgewoJc3RydWN0IHN0YXQgc3RhdF9idWY7CglpbnQgcjsKCWludCBm
ZDsKCglmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1dST05MWSk7Cglhc3NlcnQoZmQg
PiAwKTsKCXIgPSB3cml0ZShmZCwgIjEyMzQ1Njc4OSIsIDEwKTsKCWFzc2VydChyID4gLTEpOwoJ
Y2xvc2UoZmQpOwoKCWxzdGF0KGZpbGVuYW1lLCAmc3RhdF9idWYpOwoJbHNldHhhdHRyKGZpbGVu
YW1lLCAidXNlci5uYW1lIiwgInRlc3QxIiwgNSwgMCk7CgoJciA9IHVubGluayhmaWxlbmFtZSk7
CglpZiAociAhPSAwKSB7CgkJcGVycm9yKCJDYW4ndCB1bmxpbmsiKTsKCX0KfQoKdm9pZCBkb19z
b21ldGhpbmdfdGFyKGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7CglpbnQgcjsKCWNoYXIgKmNvbW1h
bmQgPSBOVUxMOwoKCXIgPSBhc3ByaW50ZigmY29tbWFuZCwKCQkgICAgICJ0YXIgLWN6ZiAlcyAt
LXByZXNlcnZlLXBlcm1pc3Npb25zIC0teGF0dHJzIC0teGF0dHJzLWluY2x1ZGU9JyonIGRhdGEv
dGVzdC5kYXQiLAoJCSAgICAgZmlsZW5hbWUpOwoJYXNzZXJ0KHIgPiAwKTsKCXN5c3RlbShjb21t
YW5kKTsKCWZyZWUoY29tbWFuZCk7CgoJciA9IHVubGluayhmaWxlbmFtZSk7CglpZiAociAhPSAw
KSB7CgkJcGVycm9yKCJDYW4ndCB1bmxpbmsiKTsKCX0KfQoKdm9pZCB0YXJfdGFzayh2b2lkICph
cmcpIHsKCWludDY0X3QgKnRhc2tfaWQgPSAoaW50NjRfdCAqKWFyZzsKCWNoYXIgKmZpbGVuYW1l
ID0gTlVMTDsKCglmb3IgKGludCBpID0gMTsgaSA8IDU7IGkrKykgewoJCWFzc2VydChhc3ByaW50
ZigmZmlsZW5hbWUsICJ0ZXN0XyVsdV8lZC50YXIiLCAqdGFza19pZCwgaSkgPiAwKTsKCQlkb19z
b21ldGhpbmcoZmlsZW5hbWUpOwoJCWZyZWUoZmlsZW5hbWUpOwoJfQp9CgppbnQgbWFpbihpbnQg
YXJnYywgY2hhciAqYXJndltdKSB7Cgl0aHJlYWRwb29sX3QgKnBvb2w7CgoJYXNzZXJ0KChwb29s
ID0gdGhyZWFkcG9vbF9jcmVhdGUoVEhSRUFELCBRVUVVRSwgMCkpICE9IE5VTEwpOwoKCWZvciAo
aW50NjRfdCBpID0gMDsgaSA8IFFVRVVFOyBpKyspIHsKCQl0YXNrc1tpXSA9IGk7CgkJYXNzZXJ0
KHRocmVhZHBvb2xfYWRkKHBvb2wsICZ0YXJfdGFzaywgJih0YXNrc1tpXSksIDApID09IDApOwoJ
fQoKCWFzc2VydCh0aHJlYWRwb29sX2Rlc3Ryb3kocG9vbCwgdGhyZWFkcG9vbF9ncmFjZWZ1bCkg
PT0gMCk7CglyZXR1cm4gRVhJVF9TVUNDRVNTOwp9CgAAAAAAAAAAAAAAAHRlc3R0aHJlYWRzLTAu
MS90aHJlYWRwb29sLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjY0ADAwMDAwMDAAMDAwMDAwMAAwMDAw
MDAyMDQ1NwAxMjc0MTQ0NzQyMQAwMDE2MjI3ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJv
b3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAwAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICogQ29weXJpZ2h0
IChjKSAyMDE2LCBNYXRoaWFzIEJyb3NzYXJkIDxtYXRoaWFzQGJyb3NzYXJkLm9yZz4uCiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAqIAogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBt
ZXQ6CiAqIAogKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogCiAqICAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQogKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogCiAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKLyoqCiAqIEBmaWxlIHRocmVhZHBvb2wu
YwogKiBAYnJpZWYgVGhyZWFkcG9vbCBpbXBsZW1lbnRhdGlvbiBmaWxlCiAqLwoKI2luY2x1ZGUg
PHN0ZGxpYi5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5j
bHVkZSAidGhyZWFkcG9vbC5oIgoKdHlwZWRlZiBlbnVtIHsKICAgIGltbWVkaWF0ZV9zaHV0ZG93
biA9IDEsCiAgICBncmFjZWZ1bF9zaHV0ZG93biAgPSAyCn0gdGhyZWFkcG9vbF9zaHV0ZG93bl90
OwoKLyoqCiAqICBAc3RydWN0IHRocmVhZHBvb2xfdGFzawogKiAgQGJyaWVmIHRoZSB3b3JrIHN0
cnVjdAogKgogKiAgQHZhciBmdW5jdGlvbiBQb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdp
bGwgcGVyZm9ybSB0aGUgdGFzay4KICogIEB2YXIgYXJndW1lbnQgQXJndW1lbnQgdG8gYmUgcGFz
c2VkIHRvIHRoZSBmdW5jdGlvbi4KICovCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB2b2lkICgqZnVu
Y3Rpb24pKHZvaWQgKik7CiAgICB2b2lkICphcmd1bWVudDsKfSB0aHJlYWRwb29sX3Rhc2tfdDsK
Ci8qKgogKiAgQHN0cnVjdCB0aHJlYWRwb29sCiAqICBAYnJpZWYgVGhlIHRocmVhZHBvb2wgc3Ry
dWN0CiAqCiAqICBAdmFyIG5vdGlmeSAgICAgICBDb25kaXRpb24gdmFyaWFibGUgdG8gbm90aWZ5
IHdvcmtlciB0aHJlYWRzLgogKiAgQHZhciB0aHJlYWRzICAgICAgQXJyYXkgY29udGFpbmluZyB3
b3JrZXIgdGhyZWFkcyBJRC4KICogIEB2YXIgdGhyZWFkX2NvdW50IE51bWJlciBvZiB0aHJlYWRz
CiAqICBAdmFyIHF1ZXVlICAgICAgICBBcnJheSBjb250YWluaW5nIHRoZSB0YXNrIHF1ZXVlLgog
KiAgQHZhciBxdWV1ZV9zaXplICAgU2l6ZSBvZiB0aGUgdGFzayBxdWV1ZS4KICogIEB2YXIgaGVh
ZCAgICAgICAgIEluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50LgogKiAgQHZhciB0YWlsICAgICAg
ICAgSW5kZXggb2YgdGhlIG5leHQgZWxlbWVudC4KICogIEB2YXIgY291bnQgICAgICAgIE51bWJl
ciBvZiBwZW5kaW5nIHRhc2tzCiAqICBAdmFyIHNodXRkb3duICAgICBGbGFnIGluZGljYXRpbmcg
aWYgdGhlIHBvb2wgaXMgc2h1dHRpbmcgZG93bgogKiAgQHZhciBzdGFydGVkICAgICAgTnVtYmVy
IG9mIHN0YXJ0ZWQgdGhyZWFkcwogKi8Kc3RydWN0IHRocmVhZHBvb2xfdCB7CiAgcHRocmVhZF9t
dXRleF90IGxvY2s7CiAgcHRocmVhZF9jb25kX3Qgbm90aWZ5OwogIHB0aHJlYWRfdCAqdGhyZWFk
czsKICB0aHJlYWRwb29sX3Rhc2tfdCAqcXVldWU7CiAgaW50IHRocmVhZF9jb3VudDsKICBpbnQg
cXVldWVfc2l6ZTsKICBpbnQgaGVhZDsKICBpbnQgdGFpbDsKICBpbnQgY291bnQ7CiAgaW50IHNo
dXRkb3duOwogIGludCBzdGFydGVkOwp9OwoKLyoqCiAqIEBmdW5jdGlvbiB2b2lkICp0aHJlYWRw
b29sX3RocmVhZCh2b2lkICp0aHJlYWRwb29sKQogKiBAYnJpZWYgdGhlIHdvcmtlciB0aHJlYWQK
ICogQHBhcmFtIHRocmVhZHBvb2wgdGhlIHBvb2wgd2hpY2ggb3duIHRoZSB0aHJlYWQKICovCnN0
YXRpYyB2b2lkICp0aHJlYWRwb29sX3RocmVhZCh2b2lkICp0aHJlYWRwb29sKTsKCmludCB0aHJl
YWRwb29sX2ZyZWUodGhyZWFkcG9vbF90ICpwb29sKTsKCnRocmVhZHBvb2xfdCAqdGhyZWFkcG9v
bF9jcmVhdGUoaW50IHRocmVhZF9jb3VudCwgaW50IHF1ZXVlX3NpemUsIGludCBmbGFncykKewog
ICAgaWYodGhyZWFkX2NvdW50IDw9IDAgfHwgdGhyZWFkX2NvdW50ID4gTUFYX1RIUkVBRFMgfHwg
cXVldWVfc2l6ZSA8PSAwIHx8IHF1ZXVlX3NpemUgPiBNQVhfUVVFVUUpIHsKICAgICAgICByZXR1
cm4gTlVMTDsKICAgIH0KICAgIAogICAgdGhyZWFkcG9vbF90ICpwb29sOwogICAgaW50IGk7CiAg
ICAodm9pZCkgZmxhZ3M7CgogICAgaWYoKHBvb2wgPSAodGhyZWFkcG9vbF90ICopbWFsbG9jKHNp
emVvZih0aHJlYWRwb29sX3QpKSkgPT0gTlVMTCkgewogICAgICAgIGdvdG8gZXJyOwogICAgfQoK
ICAgIC8qIEluaXRpYWxpemUgKi8KICAgIHBvb2wtPnRocmVhZF9jb3VudCA9IDA7CiAgICBwb29s
LT5xdWV1ZV9zaXplID0gcXVldWVfc2l6ZTsKICAgIHBvb2wtPmhlYWQgPSBwb29sLT50YWlsID0g
cG9vbC0+Y291bnQgPSAwOwogICAgcG9vbC0+c2h1dGRvd24gPSBwb29sLT5zdGFydGVkID0gMDsK
CiAgICAvKiBBbGxvY2F0ZSB0aHJlYWQgYW5kIHRhc2sgcXVldWUgKi8KICAgIHBvb2wtPnRocmVh
ZHMgPSAocHRocmVhZF90ICopbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogdGhyZWFkX2NvdW50
KTsKICAgIHBvb2wtPnF1ZXVlID0gKHRocmVhZHBvb2xfdGFza190ICopbWFsbG9jCiAgICAgICAg
KHNpemVvZih0aHJlYWRwb29sX3Rhc2tfdCkgKiBxdWV1ZV9zaXplKTsKCiAgICAvKiBJbml0aWFs
aXplIG11dGV4IGFuZCBjb25kaXRpb25hbCB2YXJpYWJsZSBmaXJzdCAqLwogICAgaWYoKHB0aHJl
YWRfbXV0ZXhfaW5pdCgmKHBvb2wtPmxvY2spLCBOVUxMKSAhPSAwKSB8fAogICAgICAgKHB0aHJl
YWRfY29uZF9pbml0KCYocG9vbC0+bm90aWZ5KSwgTlVMTCkgIT0gMCkgfHwKICAgICAgIChwb29s
LT50aHJlYWRzID09IE5VTEwpIHx8CiAgICAgICAocG9vbC0+cXVldWUgPT0gTlVMTCkpIHsKICAg
ICAgICBnb3RvIGVycjsKICAgIH0KCiAgICAvKiBTdGFydCB3b3JrZXIgdGhyZWFkcyAqLwogICAg
Zm9yKGkgPSAwOyBpIDwgdGhyZWFkX2NvdW50OyBpKyspIHsKICAgICAgICBpZihwdGhyZWFkX2Ny
ZWF0ZSgmKHBvb2wtPnRocmVhZHNbaV0pLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHRocmVhZHBvb2xfdGhyZWFkLCAodm9pZCopcG9vbCkgIT0gMCkgewogICAgICAgICAgICB0aHJl
YWRwb29sX2Rlc3Ryb3kocG9vbCwgMCk7CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAg
IH0KICAgICAgICBwb29sLT50aHJlYWRfY291bnQrKzsKICAgICAgICBwb29sLT5zdGFydGVkKys7
CiAgICB9CgogICAgcmV0dXJuIHBvb2w7CgogZXJyOgogICAgaWYocG9vbCkgewogICAgICAgIHRo
cmVhZHBvb2xfZnJlZShwb29sKTsKICAgIH0KICAgIHJldHVybiBOVUxMOwp9CgppbnQgdGhyZWFk
cG9vbF9hZGQodGhyZWFkcG9vbF90ICpwb29sLCB2b2lkICgqZnVuY3Rpb24pKHZvaWQgKiksCiAg
ICAgICAgICAgICAgICAgICB2b2lkICphcmd1bWVudCwgaW50IGZsYWdzKQp7CiAgICBpbnQgZXJy
ID0gMDsKICAgIGludCBuZXh0OwogICAgKHZvaWQpIGZsYWdzOwoKICAgIGlmKHBvb2wgPT0gTlVM
TCB8fCBmdW5jdGlvbiA9PSBOVUxMKSB7CiAgICAgICAgcmV0dXJuIHRocmVhZHBvb2xfaW52YWxp
ZDsKICAgIH0KCiAgICBpZihwdGhyZWFkX211dGV4X2xvY2soJihwb29sLT5sb2NrKSkgIT0gMCkg
ewogICAgICAgIHJldHVybiB0aHJlYWRwb29sX2xvY2tfZmFpbHVyZTsKICAgIH0KCiAgICBuZXh0
ID0gKHBvb2wtPnRhaWwgKyAxKSAlIHBvb2wtPnF1ZXVlX3NpemU7CgogICAgZG8gewogICAgICAg
IC8qIEFyZSB3ZSBmdWxsID8gKi8KICAgICAgICBpZihwb29sLT5jb3VudCA9PSBwb29sLT5xdWV1
ZV9zaXplKSB7CiAgICAgICAgICAgIGVyciA9IHRocmVhZHBvb2xfcXVldWVfZnVsbDsKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvKiBBcmUgd2Ugc2h1dHRpbmcgZG93biA/
ICovCiAgICAgICAgaWYocG9vbC0+c2h1dGRvd24pIHsKICAgICAgICAgICAgZXJyID0gdGhyZWFk
cG9vbF9zaHV0ZG93bjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvKiBB
ZGQgdGFzayB0byBxdWV1ZSAqLwogICAgICAgIHBvb2wtPnF1ZXVlW3Bvb2wtPnRhaWxdLmZ1bmN0
aW9uID0gZnVuY3Rpb247CiAgICAgICAgcG9vbC0+cXVldWVbcG9vbC0+dGFpbF0uYXJndW1lbnQg
PSBhcmd1bWVudDsKICAgICAgICBwb29sLT50YWlsID0gbmV4dDsKICAgICAgICBwb29sLT5jb3Vu
dCArPSAxOwoKICAgICAgICAvKiBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0ICovCiAgICAgICAgaWYo
cHRocmVhZF9jb25kX3NpZ25hbCgmKHBvb2wtPm5vdGlmeSkpICE9IDApIHsKICAgICAgICAgICAg
ZXJyID0gdGhyZWFkcG9vbF9sb2NrX2ZhaWx1cmU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAg
IH0KICAgIH0gd2hpbGUoMCk7CgogICAgaWYocHRocmVhZF9tdXRleF91bmxvY2soJnBvb2wtPmxv
Y2spICE9IDApIHsKICAgICAgICBlcnIgPSB0aHJlYWRwb29sX2xvY2tfZmFpbHVyZTsKICAgIH0K
CiAgICByZXR1cm4gZXJyOwp9CgppbnQgdGhyZWFkcG9vbF9kZXN0cm95KHRocmVhZHBvb2xfdCAq
cG9vbCwgaW50IGZsYWdzKQp7CiAgICBpbnQgaSwgZXJyID0gMDsKCiAgICBpZihwb29sID09IE5V
TEwpIHsKICAgICAgICByZXR1cm4gdGhyZWFkcG9vbF9pbnZhbGlkOwogICAgfQoKICAgIGlmKHB0
aHJlYWRfbXV0ZXhfbG9jaygmKHBvb2wtPmxvY2spKSAhPSAwKSB7CiAgICAgICAgcmV0dXJuIHRo
cmVhZHBvb2xfbG9ja19mYWlsdXJlOwogICAgfQoKICAgIGRvIHsKICAgICAgICAvKiBBbHJlYWR5
IHNodXR0aW5nIGRvd24gKi8KICAgICAgICBpZihwb29sLT5zaHV0ZG93bikgewogICAgICAgICAg
ICBlcnIgPSB0aHJlYWRwb29sX3NodXRkb3duOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9
CgogICAgICAgIHBvb2wtPnNodXRkb3duID0gKGZsYWdzICYgdGhyZWFkcG9vbF9ncmFjZWZ1bCkg
PwogICAgICAgICAgICBncmFjZWZ1bF9zaHV0ZG93biA6IGltbWVkaWF0ZV9zaHV0ZG93bjsKCiAg
ICAgICAgLyogV2FrZSB1cCBhbGwgd29ya2VyIHRocmVhZHMgKi8KICAgICAgICBpZigocHRocmVh
ZF9jb25kX2Jyb2FkY2FzdCgmKHBvb2wtPm5vdGlmeSkpICE9IDApIHx8CiAgICAgICAgICAgKHB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCYocG9vbC0+bG9jaykpICE9IDApKSB7CiAgICAgICAgICAgIGVy
ciA9IHRocmVhZHBvb2xfbG9ja19mYWlsdXJlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9
CgogICAgICAgIC8qIEpvaW4gYWxsIHdvcmtlciB0aHJlYWQgKi8KICAgICAgICBmb3IoaSA9IDA7
IGkgPCBwb29sLT50aHJlYWRfY291bnQ7IGkrKykgewogICAgICAgICAgICBpZihwdGhyZWFkX2pv
aW4ocG9vbC0+dGhyZWFkc1tpXSwgTlVMTCkgIT0gMCkgewogICAgICAgICAgICAgICAgZXJyID0g
dGhyZWFkcG9vbF90aHJlYWRfZmFpbHVyZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0g
d2hpbGUoMCk7CgogICAgLyogT25seSBpZiBldmVyeXRoaW5nIHdlbnQgd2VsbCBkbyB3ZSBkZWFs
bG9jYXRlIHRoZSBwb29sICovCiAgICBpZighZXJyKSB7CiAgICAgICAgdGhyZWFkcG9vbF9mcmVl
KHBvb2wpOwogICAgfQogICAgcmV0dXJuIGVycjsKfQoKaW50IHRocmVhZHBvb2xfZnJlZSh0aHJl
YWRwb29sX3QgKnBvb2wpCnsKICAgIGlmKHBvb2wgPT0gTlVMTCB8fCBwb29sLT5zdGFydGVkID4g
MCkgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICAvKiBEaWQgd2UgbWFuYWdlIHRvIGFs
bG9jYXRlID8gKi8KICAgIGlmKHBvb2wtPnRocmVhZHMpIHsKICAgICAgICBmcmVlKHBvb2wtPnRo
cmVhZHMpOwogICAgICAgIGZyZWUocG9vbC0+cXVldWUpOwogCiAgICAgICAgLyogQmVjYXVzZSB3
ZSBhbGxvY2F0ZSBwb29sLT50aHJlYWRzIGFmdGVyIGluaXRpYWxpemluZyB0aGUKICAgICAgICAg
ICBtdXRleCBhbmQgY29uZGl0aW9uIHZhcmlhYmxlLCB3ZSdyZSBzdXJlIHRoZXkncmUKICAgICAg
ICAgICBpbml0aWFsaXplZC4gTGV0J3MgbG9jayB0aGUgbXV0ZXgganVzdCBpbiBjYXNlLiAqLwog
ICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmKHBvb2wtPmxvY2spKTsKICAgICAgICBwdGhyZWFk
X211dGV4X2Rlc3Ryb3koJihwb29sLT5sb2NrKSk7CiAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ry
b3koJihwb29sLT5ub3RpZnkpKTsKICAgIH0KICAgIGZyZWUocG9vbCk7ICAgIAogICAgcmV0dXJu
IDA7Cn0KCgpzdGF0aWMgdm9pZCAqdGhyZWFkcG9vbF90aHJlYWQodm9pZCAqdGhyZWFkcG9vbCkK
ewogICAgdGhyZWFkcG9vbF90ICpwb29sID0gKHRocmVhZHBvb2xfdCAqKXRocmVhZHBvb2w7CiAg
ICB0aHJlYWRwb29sX3Rhc2tfdCB0YXNrOwoKICAgIGZvcig7OykgewogICAgICAgIC8qIExvY2sg
bXVzdCBiZSB0YWtlbiB0byB3YWl0IG9uIGNvbmRpdGlvbmFsIHZhcmlhYmxlICovCiAgICAgICAg
cHRocmVhZF9tdXRleF9sb2NrKCYocG9vbC0+bG9jaykpOwoKICAgICAgICAvKiBXYWl0IG9uIGNv
bmRpdGlvbiB2YXJpYWJsZSwgY2hlY2sgZm9yIHNwdXJpb3VzIHdha2V1cHMuCiAgICAgICAgICAg
V2hlbiByZXR1cm5pbmcgZnJvbSBwdGhyZWFkX2NvbmRfd2FpdCgpLCB3ZSBvd24gdGhlIGxvY2su
ICovCiAgICAgICAgd2hpbGUoKHBvb2wtPmNvdW50ID09IDApICYmICghcG9vbC0+c2h1dGRvd24p
KSB7CiAgICAgICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCYocG9vbC0+bm90aWZ5KSwgJihwb29s
LT5sb2NrKSk7CiAgICAgICAgfQoKICAgICAgICBpZigocG9vbC0+c2h1dGRvd24gPT0gaW1tZWRp
YXRlX3NodXRkb3duKSB8fAogICAgICAgICAgICgocG9vbC0+c2h1dGRvd24gPT0gZ3JhY2VmdWxf
c2h1dGRvd24pICYmCiAgICAgICAgICAgIChwb29sLT5jb3VudCA9PSAwKSkpIHsKICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvKiBHcmFiIG91ciB0YXNrICovCiAgICAgICAg
dGFzay5mdW5jdGlvbiA9IHBvb2wtPnF1ZXVlW3Bvb2wtPmhlYWRdLmZ1bmN0aW9uOwogICAgICAg
IHRhc2suYXJndW1lbnQgPSBwb29sLT5xdWV1ZVtwb29sLT5oZWFkXS5hcmd1bWVudDsKICAgICAg
ICBwb29sLT5oZWFkID0gKHBvb2wtPmhlYWQgKyAxKSAlIHBvb2wtPnF1ZXVlX3NpemU7CiAgICAg
ICAgcG9vbC0+Y291bnQgLT0gMTsKCiAgICAgICAgLyogVW5sb2NrICovCiAgICAgICAgcHRocmVh
ZF9tdXRleF91bmxvY2soJihwb29sLT5sb2NrKSk7CgogICAgICAgIC8qIEdldCB0byB3b3JrICov
CiAgICAgICAgKCoodGFzay5mdW5jdGlvbikpKHRhc2suYXJndW1lbnQpOwogICAgfQoKICAgIHBv
b2wtPnN0YXJ0ZWQtLTsKCiAgICBwdGhyZWFkX211dGV4X3VubG9jaygmKHBvb2wtPmxvY2spKTsK
ICAgIHB0aHJlYWRfZXhpdChOVUxMKTsKICAgIHJldHVybihOVUxMKTsKfQoAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRlc3R0aHJlYWRzLTAuMS90aHJlYWRwb29sLmgAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAwMDAwNjY0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwNjQ1MQAxMjc0MTQ0NzQy
MQAwMDE2MjMyADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0
YXIAMDByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoKICogQ29weXJpZ2h0IChjKSAyMDE2LCBNYXRoaWFz
IEJyb3NzYXJkIDxtYXRoaWFzQGJyb3NzYXJkLm9yZz4uCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqIAogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqIAogKiAgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KICogCiAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICogCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCiAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAqLwoKI2lmbmRlZiBfVEhSRUFEUE9PTF9IXwojZGVmaW5lIF9USFJFQURQT09M
X0hfCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKLyoqCiAqIEBmaWxl
IHRocmVhZHBvb2wuaAogKiBAYnJpZWYgVGhyZWFkcG9vbCBIZWFkZXIgRmlsZQogKi8KIAogLyoq
CiAqIEluY3JlYXNlIHRoaXMgY29uc3RhbnRzIGF0IHlvdXIgb3duIHJpc2sKICogTGFyZ2UgdmFs
dWVzIG1pZ2h0IHNsb3cgZG93biB5b3VyIHN5c3RlbQogKi8KI2RlZmluZSBNQVhfVEhSRUFEUyA2
NAojZGVmaW5lIE1BWF9RVUVVRSAxMzEwNzIKCnR5cGVkZWYgc3RydWN0IHRocmVhZHBvb2xfdCB0
aHJlYWRwb29sX3Q7Cgp0eXBlZGVmIGVudW0gewogICAgdGhyZWFkcG9vbF9pbnZhbGlkICAgICAg
ICA9IC0xLAogICAgdGhyZWFkcG9vbF9sb2NrX2ZhaWx1cmUgICA9IC0yLAogICAgdGhyZWFkcG9v
bF9xdWV1ZV9mdWxsICAgICA9IC0zLAogICAgdGhyZWFkcG9vbF9zaHV0ZG93biAgICAgICA9IC00
LAogICAgdGhyZWFkcG9vbF90aHJlYWRfZmFpbHVyZSA9IC01Cn0gdGhyZWFkcG9vbF9lcnJvcl90
OwoKdHlwZWRlZiBlbnVtIHsKICAgIHRocmVhZHBvb2xfZ3JhY2VmdWwgICAgICAgPSAxCn0gdGhy
ZWFkcG9vbF9kZXN0cm95X2ZsYWdzX3Q7CgovKioKICogQGZ1bmN0aW9uIHRocmVhZHBvb2xfY3Jl
YXRlCiAqIEBicmllZiBDcmVhdGVzIGEgdGhyZWFkcG9vbF90IG9iamVjdC4KICogQHBhcmFtIHRo
cmVhZF9jb3VudCBOdW1iZXIgb2Ygd29ya2VyIHRocmVhZHMuCiAqIEBwYXJhbSBxdWV1ZV9zaXpl
ICAgU2l6ZSBvZiB0aGUgcXVldWUuCiAqIEBwYXJhbSBmbGFncyAgICAgICAgVW51c2VkIHBhcmFt
ZXRlci4KICogQHJldHVybiBhIG5ld2x5IGNyZWF0ZWQgdGhyZWFkIHBvb2wgb3IgTlVMTAogKi8K
dGhyZWFkcG9vbF90ICp0aHJlYWRwb29sX2NyZWF0ZShpbnQgdGhyZWFkX2NvdW50LCBpbnQgcXVl
dWVfc2l6ZSwgaW50IGZsYWdzKTsKCi8qKgogKiBAZnVuY3Rpb24gdGhyZWFkcG9vbF9hZGQKICog
QGJyaWVmIGFkZCBhIG5ldyB0YXNrIGluIHRoZSBxdWV1ZSBvZiBhIHRocmVhZCBwb29sCiAqIEBw
YXJhbSBwb29sICAgICBUaHJlYWQgcG9vbCB0byB3aGljaCBhZGQgdGhlIHRhc2suCiAqIEBwYXJh
bSBmdW5jdGlvbiBQb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgcGVyZm9ybSB0aGUg
dGFzay4KICogQHBhcmFtIGFyZ3VtZW50IEFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgZnVu
Y3Rpb24uCiAqIEBwYXJhbSBmbGFncyAgICBVbnVzZWQgcGFyYW1ldGVyLgogKiBAcmV0dXJuIDAg
aWYgYWxsIGdvZXMgd2VsbCwgbmVnYXRpdmUgdmFsdWVzIGluIGNhc2Ugb2YgZXJyb3IgKEBzZWUK
ICogdGhyZWFkcG9vbF9lcnJvcl90IGZvciBjb2RlcykuCiAqLwppbnQgdGhyZWFkcG9vbF9hZGQo
dGhyZWFkcG9vbF90ICpwb29sLCB2b2lkICgqcm91dGluZSkodm9pZCAqKSwKICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmFyZywgaW50IGZsYWdzKTsKCi8qKgogKiBAZnVuY3Rpb24gdGhyZWFkcG9v
bF9kZXN0cm95CiAqIEBicmllZiBTdG9wcyBhbmQgZGVzdHJveXMgYSB0aHJlYWQgcG9vbC4KICog
QHBhcmFtIHBvb2wgIFRocmVhZCBwb29sIHRvIGRlc3Ryb3kuCiAqIEBwYXJhbSBmbGFncyBGbGFn
cyBmb3Igc2h1dGRvd24KICoKICogS25vd24gdmFsdWVzIGZvciBmbGFncyBhcmUgMCAoZGVmYXVs
dCkgYW5kIHRocmVhZHBvb2xfZ3JhY2VmdWwgaW4KICogd2hpY2ggY2FzZSB0aGUgdGhyZWFkIHBv
b2wgZG9lc24ndCBhY2NlcHQgYW55IG5ldyB0YXNrcyBidXQKICogcHJvY2Vzc2VzIGFsbCBwZW5k
aW5nIHRhc2tzIGJlZm9yZSBzaHV0ZG93bi4KICovCmludCB0aHJlYWRwb29sX2Rlc3Ryb3kodGhy
ZWFkcG9vbF90ICpwb29sLCBpbnQgZmxhZ3MpOwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlm
CgojZW5kaWYgLyogX1RIUkVBRFBPT0xfSF8gKi8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
</data>

          </attachment>
      

    </bug>

</bugzilla>