From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============8864322001466470388==" MIME-Version: 1.0 From: Darren Bilby Subject: Re: [Luv] Results and a few questions Date: Fri, 04 Dec 2015 17:41:02 +1100 Message-ID: In-Reply-To: List-Id: To: chipsec@lists.01.org --===============8864322001466470388== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi John, 1.2.2 does fix the xml file issue and I think it should work in LUV as is (although I haven't tested). I assume the pull request you refer to is https://github.com/chipsec/chipsec/pull/11 ? That helps solve the issue of chipsec expecting the xml files to be in a particular place, which currently prevents us using the setup.py in a virtualenv or using it as an egg (https://github.com/chipsec/chipsec/issues/12). Thanks, Darren On Thu, Dec 3, 2015 at 10:09 AM, Loucaides, John wrote: > Darren, would you mind checking 1.2.2 to see if setup.py works, now? > > > > I see a pull request that does more=E2=80=A6 trying to figure out if 1.2.= 2 is > still broken, though. > > > > Thanks, > > - John > > > > *From:* Darren Bilby [mailto:darrenbilby(a)gmail.com] > *Sent:* Wednesday, October 28, 2015 11:13 PM > *To:* Loucaides, John ; Ricardo Neri < > ricardo.neri-calderon(a)linux.intel.com>; kusuriya(a)corrupted.io > > *Cc:* chipsec(a)lists.01.org; luv(a)lists.01.org > *Subject:* Re: [chipsec] [Luv] Results and a few questions > > > > I originally discovered the issue when attempting to build a chipsec egg > file as part of work to make it useful in github.com/google/grr. Build of > an egg uses the same setup.py so had the same issue with the lack of xml > files. > > > > > > On Thu, Oct 29, 2015 at 4:54 PM Loucaides, John > wrote: > > Interesting=E2=80=A6 I=E2=80=99m looking into this. We=E2=80=99re trying = to finish up a 1.2.2 > release, and I plan to go through the pull requests over the next day or > two. > > > > Btw, have you seen bugs related to setup.py outside LUV as well? > > > > Thanks, > > - John > > > > *From:* chipsec [mailto:chipsec-bounces(a)lists.01.org] *On Behalf Of *Da= rren > Bilby > *Sent:* Wednesday, October 28, 2015 5:55 PM > *To:* Ricardo Neri ; > kusuriya(a)corrupted.io > *Cc:* chipsec(a)lists.01.org; luv(a)lists.01.org > *Subject:* Re: [chipsec] [Luv] Results and a few questions > > > > I'm actually not convinced Chipsec on LUV has ever worked. > > The configuration in setup.py for Chipsec doesn't include the XML files in > the deployment, thus no XML files in LUV, and therefore the errors. > > There is a fix for it in a pull request here > https://github.com/chipsec/chipsec/pull/7 but there are a bunch of other > very old pull requests that don't seem to be being looked at. > > > > On Thu, Oct 29, 2015 at 9:26 AM Ricardo Neri < > ricardo.neri-calderon(a)linux.intel.com> wrote: > > Actually including the CHIPSEC mailing list this time. > On Mon, 2015-10-26 at 19:51 +0000, Neri, Ricardo wrote: > > +CHIPSEC mailing list > > > > Hi Jason, > > > > Thanks for your report. > > > > On Mon, 2015-10-26 at 12:04 -0700, Jason Barbier wrote: > > > Hey all, > > > I ran LUV-Live and my results are attached as a zip, I sort of was > > > wondering about the errors in the chipsec log though, > > > These were similar errors that I got last week that caused some issues > > > with my clock being reset using version 1.2, the latest RC seems to n= ot > > > do that but It still can not seem to run all the tests. > > > > > > -- > > > WARNING: 'SPIBAR' MMIO BAR definition not found/correct in XML config > > > [pci] reading B/D/F: 0/31/0, offset: 0xF0, value: 0xFED1C001 > > > [spi] SPI MMIO base: 0x00000000FED1F800 (assuming below 4GB) > > > [spi] SPI MMIO base: 0x00000000FED1F800 (assuming below 4GB) > > > [-] Traceback (most recent call last): > > > File "/usr/lib/python2.7/site-packages/chipsec_main.py", line 291, = in > > > run_module > > > result =3D modx.run( module_argv ) > > > File "/usr/lib/python2.7/site-packages/chipsec/module.py", line 69, > in > > > run > > > result =3D self.get_module_object() > > > File "/usr/lib/python2.7/site-packages/chipsec/module.py", line 101, > > > in get_module_object > > > self.mod_obj =3D iref() > > > File > > > "/usr/lib/python2.7/site-packages/chipsec/modules/common/bios_wp.py= ", > > > line 51, in __init__ > > > self.spi =3D SPI( self.cs ) > > > File "/usr/lib/python2.7/site-packages/chipsec/hal/spi.py", line 17= 6, > > > in __init__ > > > self.hsfs_off =3D int(chipsec.chipset.get_register_def( self.cs, > > > "HSFS" )['offset'],16) > > > File "/usr/lib/python2.7/site-packages/chipsec/chipset.py", line 46= 7, > > > in get_register_def > > > return _cs.Cfg.REGISTERS[ reg_name ] > > > KeyError: 'HSFS' > > > -- > > > [-] Traceback (most recent call last): > > > File "/usr/lib/python2.7/site-packages/chipsec_main.py", line 291, = in > > > run_module > > > result =3D modx.run( module_argv ) > > > File "/usr/lib/python2.7/site-packages/chipsec/module.py", line 80, > in > > > run > > > result =3D self.mod_obj.run(module_argv) > > > File > > > > "/usr/lib/python2.7/site-packages/chipsec/modules/common/spi_desc.py", > > > line 68, in run > > > return self.check_flash_access_permissions() > > > File > > > > "/usr/lib/python2.7/site-packages/chipsec/modules/common/spi_desc.py", > > > line 48, in check_flash_access_permissions > > > frap =3D chipsec.chipset.read_register( self.cs, 'FRAP' ) > > > File "/usr/lib/python2.7/site-packages/chipsec/chipset.py", line 47= 0, > > > in read_register > > > reg =3D _cs.Cfg.REGISTERS[ reg_name ] > > > KeyError: 'FRAP' > > > > > > ERROR: Exception occurred during chipsec.modules.common.spi_desc.run(= ): > > > ''FRAP'' > > > -- > > > [-] Traceback (most recent call last): > > > File "/usr/lib/python2.7/site-packages/chipsec_main.py", line 291, = in > > > run_module > > > result =3D modx.run( module_argv ) > > > File "/usr/lib/python2.7/site-packages/chipsec/module.py", line 80, > in > > > run > > > result =3D self.mod_obj.run(module_argv) > > > File > > > > "/usr/lib/python2.7/site-packages/chipsec/modules/common/spi_lock.py", > > > line 59, in run > > > return self.check_spi_lock() > > > File > > > > "/usr/lib/python2.7/site-packages/chipsec/modules/common/spi_lock.py", > > > line 46, in check_spi_lock > > > hsfs_reg =3D chipsec.chipset.read_register( self.cs, 'HSFS' ) > > > File "/usr/lib/python2.7/site-packages/chipsec/chipset.py", line 47= 0, > > > in read_register > > > reg =3D _cs.Cfg.REGISTERS[ reg_name ] > > > KeyError: 'HSFS' > > > > > > ERROR: Exception occurred during chipsec.modules.common.spi_lock.run(= ): > > > ''HSFS'' > > > -- > > > > > I added the CHIPSEC mailing list. Perhaps they can give further insight > > on what the problem might be. > > > > As per LUV, it seems that this exception somehow caused a crash in the > > LUV test manager and it prevented it from running the tests of the > > tests. It seems we need to add some safeguards so that LUV can handle > > these errors more gracefully. > > > > Thanks and BR, > > Ricardo > > > > > > > > _______________________________________________ > > > Luv mailing list > > > Luv(a)lists.01.org > > > https://lists.01.org/mailman/listinfo/luv > > > > _______________________________________________ > > Luv mailing list > > Luv(a)lists.01.org > > https://lists.01.org/mailman/listinfo/luv > > > _______________________________________________ > chipsec mailing list > chipsec(a)lists.01.org > https://lists.01.org/mailman/listinfo/chipsec > > --===============8864322001466470388== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+SGkgSm9obiw8ZGl2PjEuMi4yIGRvZXMgZml4IHRoZSB4bWwgZmlsZSBp c3N1ZSBhbmQgSSB0aGluayBpdCBzaG91bGQgd29yayBpbiBMVVYgYXMgaXMgKGFsdGhvdWdoIEkg aGF2ZW4mIzM5O3QgdGVzdGVkKS7CoDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBhc3N1bWUg dGhlIHB1bGwgcmVxdWVzdCB5b3UgcmVmZXIgdG8gaXMgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIu Y29tL2NoaXBzZWMvY2hpcHNlYy9wdWxsLzExIj5odHRwczovL2dpdGh1Yi5jb20vY2hpcHNlYy9j aGlwc2VjL3B1bGwvMTE8L2E+ID8gVGhhdCBoZWxwcyBzb2x2ZSB0aGUgaXNzdWUgb2YgY2hpcHNl YyBleHBlY3RpbmcgdGhlIHhtbCBmaWxlcyB0byBiZSBpbiBhIHBhcnRpY3VsYXIgcGxhY2UsIHdo aWNoIGN1cnJlbnRseSBwcmV2ZW50cyB1cyB1c2luZyB0aGUgc2V0dXAucHkgaW4gYSB2aXJ0dWFs ZW52IG9yIHVzaW5nIGl0IGFzIGFuIGVnZyAoPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2No aXBzZWMvY2hpcHNlYy9pc3N1ZXMvMTIiPmh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBz ZWMvaXNzdWVzLzEyPC9hPikuwqA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rcywgRGFy cmVuPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJn bWFpbF9xdW90ZSI+T24gVGh1LCBEZWMgMywgMjAxNSBhdCAxMDowOSBBTSwgTG91Y2FpZGVzLCBK b2huIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmpvaG4ubG91Y2FpZGVzQGlu dGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmpvaG4ubG91Y2FpZGVzQGludGVsLmNvbTwvYT4mZ3Q7 PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0i bWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0 OjFleCI+CgoKCgoKPGRpdiBsYW5nPSJFTi1VUyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+ CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMWY0OTdk Ij5EYXJyZW4sIHdvdWxkIHlvdSBtaW5kIGNoZWNraW5nIDEuMi4yIHRvIHNlZSBpZiBzZXR1cC5w eSB3b3Jrcywgbm93Pzx1PjwvdT48dT48L3U+PC9zcGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxZjQ5N2QiPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+ PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFmNDk3ZCI+ SSBzZWUgYSBwdWxsIHJlcXVlc3QgdGhhdCBkb2VzIG1vcmXigKYgdHJ5aW5nIHRvIGZpZ3VyZSBv dXQgaWYgMS4yLjIgaXMgc3RpbGwgYnJva2VuLCB0aG91Z2guPHU+PC91Pjx1PjwvdT48L3NwYW4+ PC9wPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFmNDk3ZCI+ PHU+PC91PsKgPHU+PC91Pjwvc3Bhbj48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjtjb2xvcjojMWY0OTdkIj5UaGFua3MsPHU+PC91Pjx1PjwvdT48L3NwYW4+PC9wPgo8 cCBzdHlsZT0ibWFyZ2luLWxlZnQ6MjAuMjVwdCI+Cjx1PjwvdT48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29s b3I6IzFmNDk3ZCI+PHNwYW4+LTxzcGFuIHN0eWxlPSJmb250OjcuMHB0ICZxdW90O1RpbWVzIE5l dyBSb21hbiZxdW90OyI+wqDCoMKgwqDCoMKgwqDCoMKgCjwvc3Bhbj48L3NwYW4+PC9zcGFuPjx1 PjwvdT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxp YnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFmNDk3ZCI+Sm9objx1PjwvdT48dT48L3U+PC9z cGFuPjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxZjQ5 N2QiPjx1PjwvdT7CoDx1PjwvdT48L3NwYW4+PC9wPgo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTti b3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0O3BhZGRpbmc6MGluIDBpbiAwaW4gNC4wcHQiPgo8 ZGl2Pgo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNlMWUxZTEgMS4w cHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZiI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+IERhcnJlbiBC aWxieSBbbWFpbHRvOjxhIGhyZWY9Im1haWx0bzpkYXJyZW5iaWxieUBnbWFpbC5jb20iIHRhcmdl dD0iX2JsYW5rIj5kYXJyZW5iaWxieUBnbWFpbC5jb208L2E+XQo8YnI+CjxiPlNlbnQ6PC9iPiBX ZWRuZXNkYXksIE9jdG9iZXIgMjgsIDIwMTUgMTE6MTMgUE08YnI+CjxiPlRvOjwvYj4gTG91Y2Fp ZGVzLCBKb2huICZsdDs8YSBocmVmPSJtYWlsdG86am9obi5sb3VjYWlkZXNAaW50ZWwuY29tIiB0 YXJnZXQ9Il9ibGFuayI+am9obi5sb3VjYWlkZXNAaW50ZWwuY29tPC9hPiZndDs7IFJpY2FyZG8g TmVyaSAmbHQ7PGEgaHJlZj0ibWFpbHRvOnJpY2FyZG8ubmVyaS1jYWxkZXJvbkBsaW51eC5pbnRl bC5jb20iIHRhcmdldD0iX2JsYW5rIj5yaWNhcmRvLm5lcmktY2FsZGVyb25AbGludXguaW50ZWwu Y29tPC9hPiZndDs7IDxhIGhyZWY9Im1haWx0bzprdXN1cml5YUBjb3JydXB0ZWQuaW8iIHRhcmdl dD0iX2JsYW5rIj5rdXN1cml5YUBjb3JydXB0ZWQuaW88L2E+PC9zcGFuPjwvcD48ZGl2PjxkaXYg Y2xhc3M9Img1Ij48YnI+CjxiPkNjOjwvYj4gPGEgaHJlZj0ibWFpbHRvOmNoaXBzZWNAbGlzdHMu MDEub3JnIiB0YXJnZXQ9Il9ibGFuayI+Y2hpcHNlY0BsaXN0cy4wMS5vcmc8L2E+OyA8YSBocmVm PSJtYWlsdG86bHV2QGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmx1dkBsaXN0cy4wMS5v cmc8L2E+PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtjaGlwc2VjXSBbTHV2XSBSZXN1bHRzIGFu ZCBhIGZldyBxdWVzdGlvbnM8dT48L3U+PHU+PC91PjwvZGl2PjwvZGl2PjxwPjwvcD4KPC9kaXY+ CjwvZGl2PjxkaXY+PGRpdiBjbGFzcz0iaDUiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+ wqA8dT48L3U+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj5JIG9yaWdpbmFsbHkgZGlz Y292ZXJlZCB0aGUgaXNzdWUgd2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIGEgY2hpcHNlYyBlZ2cg ZmlsZSBhcyBwYXJ0IG9mIHdvcmsgdG8gbWFrZSBpdCB1c2VmdWwgaW4KPGEgaHJlZj0iaHR0cDov L2dpdGh1Yi5jb20vZ29vZ2xlL2dyciIgdGFyZ2V0PSJfYmxhbmsiPmdpdGh1Yi5jb20vZ29vZ2xl L2dycjwvYT4uIEJ1aWxkIG9mIGFuIGVnZyB1c2VzIHRoZSBzYW1lIHNldHVwLnB5IHNvIGhhZCB0 aGUgc2FtZSBpc3N1ZSB3aXRoIHRoZSBsYWNrIG9mIHhtbCBmaWxlcy7CoDx1PjwvdT48dT48L3U+ PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj48dT48L3U+wqA8dT48L3U+PC9wPgo8L2Rp dj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjx1PjwvdT7CoDx1PjwvdT48L3A+CjxkaXY+ CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPk9uIFRodSwgT2N0IDI5LCAyMDE1IGF0IDQ6NTQg UE0gTG91Y2FpZGVzLCBKb2huICZsdDs8YSBocmVmPSJtYWlsdG86am9obi5sb3VjYWlkZXNAaW50 ZWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+am9obi5sb3VjYWlkZXNAaW50ZWwuY29tPC9hPiZndDsg d3JvdGU6PHU+PC91Pjx1PjwvdT48L3A+CjwvZGl2Pgo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVy Om5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgI2NjY2NjYyAxLjBwdDtwYWRkaW5nOjBpbiAwaW4gMGlu IDYuMHB0O21hcmdpbi1sZWZ0OjQuOHB0O21hcmdpbi1yaWdodDowaW4iPgo8ZGl2Pgo8ZGl2Pgo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFmNDk3ZCI+SW50ZXJl c3RpbmfigKYgSeKAmW0gbG9va2luZyBpbnRvIHRoaXMuIFdl4oCZcmUgdHJ5aW5nIHRvIGZpbmlz aCB1cCBhIDEuMi4yIHJlbGVhc2UsIGFuZCBJIHBsYW4gdG8gZ28gdGhyb3VnaAogdGhlIHB1bGwg cmVxdWVzdHMgb3ZlciB0aGUgbmV4dCBkYXkgb3IgdHdvLiA8L3NwYW4+PHU+PC91Pjx1PjwvdT48 L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMWY0OTdkIj7C oDwvc3Bhbj48dT48L3U+PHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmO2NvbG9yOiMxZjQ5N2QiPkJ0dywgaGF2ZSB5b3Ugc2VlbiBidWdzIHJlbGF0ZWQgdG8g c2V0dXAucHkgb3V0c2lkZSBMVVYgYXMgd2VsbD88L3NwYW4+PHU+PC91Pjx1PjwvdT48L3A+Cjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMWY0OTdkIj7CoDwvc3Bh bj48dT48L3U+PHU+PC91PjwvcD4KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm O2NvbG9yOiMxZjQ5N2QiPlRoYW5rcyw8L3NwYW4+PHU+PC91Pjx1PjwvdT48L3A+CjxwIHN0eWxl PSJtYXJnaW4tbGVmdDoyMC4yNXB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250 LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFmNDk3ZCI+LTwv c3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjcuMHB0O2NvbG9yOiMxZjQ5N2QiPsKgwqDCoMKg wqDCoMKgwqDCoAo8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxZjQ5N2QiPkpvaG48L3Nw YW4+PHU+PC91Pjx1PjwvdT48L3A+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJp Zjtjb2xvcjojMWY0OTdkIj7CoDwvc3Bhbj48dT48L3U+PHU+PC91PjwvcD4KPGRpdiBzdHlsZT0i Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgYmx1ZSAxLjVwdDtwYWRkaW5nOjBpbiAwaW4g MGluIDQuMHB0Ij4KPGRpdj4KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xp ZCAjZTFlMWUxIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPgo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVv dDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWYiPiBjaGlwc2VjIFttYWlsdG86PGEgaHJlZj0ibWFpbHRvOmNoaXBzZWMtYm91bmNlc0BsaXN0 cy4wMS5vcmciIHRhcmdldD0iX2JsYW5rIj5jaGlwc2VjLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9h Pl0KPGI+T24gQmVoYWxmIE9mIDwvYj5EYXJyZW4gQmlsYnk8YnI+CjxiPlNlbnQ6PC9iPiBXZWRu ZXNkYXksIE9jdG9iZXIgMjgsIDIwMTUgNTo1NSBQTTxicj4KPGI+VG86PC9iPiBSaWNhcmRvIE5l cmkgJmx0OzxhIGhyZWY9Im1haWx0bzpyaWNhcmRvLm5lcmktY2FsZGVyb25AbGludXguaW50ZWwu Y29tIiB0YXJnZXQ9Il9ibGFuayI+cmljYXJkby5uZXJpLWNhbGRlcm9uQGxpbnV4LmludGVsLmNv bTwvYT4mZ3Q7Owo8YSBocmVmPSJtYWlsdG86a3VzdXJpeWFAY29ycnVwdGVkLmlvIiB0YXJnZXQ9 Il9ibGFuayI+a3VzdXJpeWFAY29ycnVwdGVkLmlvPC9hPjxicj4KPGI+Q2M6PC9iPiA8YSBocmVm PSJtYWlsdG86Y2hpcHNlY0BsaXN0cy4wMS5vcmciIHRhcmdldD0iX2JsYW5rIj5jaGlwc2VjQGxp c3RzLjAxLm9yZzwvYT47CjxhIGhyZWY9Im1haWx0bzpsdXZAbGlzdHMuMDEub3JnIiB0YXJnZXQ9 Il9ibGFuayI+bHV2QGxpc3RzLjAxLm9yZzwvYT48YnI+CjxiPlN1YmplY3Q6PC9iPiBSZTogW2No aXBzZWNdIFtMdXZdIFJlc3VsdHMgYW5kIGEgZmV3IHF1ZXN0aW9uczwvc3Bhbj48dT48L3U+PHU+ PC91PjwvcD4KPC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8ZGl2Pgo8ZGl2Pgo8 ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0O3BhZGRp bmc6MGluIDBpbiAwaW4gNC4wcHQiPgo8cCBjbGFzcz0iTXNvTm9ybWFsIj7CoDx1PjwvdT48dT48 L3U+PC9wPgo8ZGl2Pgo8cCBjbGFzcz0iTXNvTm9ybWFsIj5JJiMzOTttIGFjdHVhbGx5IG5vdCBj b252aW5jZWQgQ2hpcHNlYyBvbiBMVVYgaGFzIGV2ZXIgd29ya2VkLsKgPHU+PC91Pjx1PjwvdT48 L3A+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRoZSBjb25maWd1cmF0aW9uIGluIHNldHVw LnB5IGZvciBDaGlwc2VjIGRvZXNuJiMzOTt0IGluY2x1ZGUgdGhlIFhNTCBmaWxlcyBpbiB0aGUg ZGVwbG95bWVudCwgdGh1cyBubyBYTUwgZmlsZXMgaW4gTFVWLCBhbmQgdGhlcmVmb3JlIHRoZSBl cnJvcnMuwqA8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3Jt YWwiPlRoZXJlIGlzIGEgZml4IGZvciBpdCBpbiBhIHB1bGwgcmVxdWVzdCBoZXJlCjxhIGhyZWY9 Imh0dHBzOi8vZ2l0aHViLmNvbS9jaGlwc2VjL2NoaXBzZWMvcHVsbC83IiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9naXRodWIuY29tL2NoaXBzZWMvY2hpcHNlYy9wdWxsLzc8L2E+wqBidXQgdGhl cmUgYXJlIGEgYnVuY2ggb2Ygb3RoZXIgdmVyeSBvbGQgcHVsbCByZXF1ZXN0cyB0aGF0IGRvbiYj Mzk7dCBzZWVtIHRvIGJlIGJlaW5nIGxvb2tlZCBhdC7CoDx1PjwvdT48dT48L3U+PC9wPgo8L2Rp dj4KPC9kaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPsKgPHU+PC91Pjx1PjwvdT48L3A+CjxkaXY+ CjxkaXY+CjxwIGNsYXNzPSJNc29Ob3JtYWwiPk9uIFRodSwgT2N0IDI5LCAyMDE1IGF0IDk6MjYg QU0gUmljYXJkbyBOZXJpICZsdDs8YSBocmVmPSJtYWlsdG86cmljYXJkby5uZXJpLWNhbGRlcm9u QGxpbnV4LmludGVsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnJpY2FyZG8ubmVyaS1jYWxkZXJvbkBs aW51eC5pbnRlbC5jb208L2E+Jmd0OyB3cm90ZTo8dT48L3U+PHU+PC91PjwvcD4KPC9kaXY+Cjxi bG9ja3F1b3RlIHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjY2NjY2NjIDEu MHB0O3BhZGRpbmc6MGluIDBpbiAwaW4gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXRv cDo1LjBwdDttYXJnaW4tcmlnaHQ6MGluO21hcmdpbi1ib3R0b206NS4wcHQiPgo8cCBjbGFzcz0i TXNvTm9ybWFsIj5BY3R1YWxseSBpbmNsdWRpbmcgdGhlIENISVBTRUMgbWFpbGluZyBsaXN0IHRo aXMgdGltZS48YnI+Ck9uIE1vbiwgMjAxNS0xMC0yNiBhdCAxOTo1MSArMDAwMCwgTmVyaSwgUmlj YXJkbyB3cm90ZTo8YnI+CiZndDsgK0NISVBTRUMgbWFpbGluZyBsaXN0PGJyPgomZ3Q7PGJyPgom Z3Q7IEhpIEphc29uLDxicj4KJmd0Ozxicj4KJmd0OyBUaGFua3MgZm9yIHlvdXIgcmVwb3J0Ljxi cj4KJmd0Ozxicj4KJmd0OyBPbiBNb24sIDIwMTUtMTAtMjYgYXQgMTI6MDQgLTA3MDAsIEphc29u IEJhcmJpZXIgd3JvdGU6PGJyPgomZ3Q7ICZndDsgSGV5IGFsbCw8YnI+CiZndDsgJmd0OyBJIHJh biBMVVYtTGl2ZSBhbmQgbXkgcmVzdWx0cyBhcmUgYXR0YWNoZWQgYXMgYSB6aXAsIEkgc29ydCBv ZiB3YXM8YnI+CiZndDsgJmd0OyB3b25kZXJpbmcgYWJvdXQgdGhlIGVycm9ycyBpbiB0aGUgY2hp cHNlYyBsb2cgdGhvdWdoLDxicj4KJmd0OyAmZ3Q7IFRoZXNlIHdlcmUgc2ltaWxhciBlcnJvcnMg dGhhdCBJIGdvdCBsYXN0IHdlZWsgdGhhdCBjYXVzZWQgc29tZSBpc3N1ZXM8YnI+CiZndDsgJmd0 OyB3aXRoIG15IGNsb2NrIGJlaW5nIHJlc2V0IHVzaW5nIHZlcnNpb24gMS4yLCB0aGUgbGF0ZXN0 IFJDIHNlZW1zIHRvIG5vdDxicj4KJmd0OyAmZ3Q7IGRvIHRoYXQgYnV0IEl0IHN0aWxsIGNhbiBu b3Qgc2VlbSB0byBydW4gYWxsIHRoZSB0ZXN0cy48YnI+CiZndDsgJmd0Ozxicj4KJmd0OyAmZ3Q7 IC0tPGJyPgomZ3Q7ICZndDsgV0FSTklORzogJiMzOTtTUElCQVImIzM5OyBNTUlPIEJBUiBkZWZp bml0aW9uIG5vdCBmb3VuZC9jb3JyZWN0IGluIFhNTCBjb25maWc8YnI+CiZndDsgJmd0OyBbcGNp XSByZWFkaW5nIEIvRC9GOiAwLzMxLzAsIG9mZnNldDogMHhGMCwgdmFsdWU6IDB4RkVEMUMwMDE8 YnI+CiZndDsgJmd0OyBbc3BpXSBTUEkgTU1JTyBiYXNlOiAweDAwMDAwMDAwRkVEMUY4MDAgKGFz c3VtaW5nIGJlbG93IDRHQik8YnI+CiZndDsgJmd0OyBbc3BpXSBTUEkgTU1JTyBiYXNlOiAweDAw MDAwMDAwRkVEMUY4MDAgKGFzc3VtaW5nIGJlbG93IDRHQik8YnI+CiZndDsgJmd0OyBbLV0gVHJh Y2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOjxicj4KJmd0OyAmZ3Q7wqAgwqBGaWxlICZx dW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2NoaXBzZWNfbWFpbi5weSZxdW90 OywgbGluZSAyOTEsIGluPGJyPgomZ3Q7ICZndDvCoCDCoHJ1bl9tb2R1bGU8YnI+CiZndDsgJmd0 O8KgIMKgIMKgcmVzdWx0ID0gbW9keC5ydW4oIG1vZHVsZV9hcmd2ICk8YnI+CiZndDsgJmd0O8Kg IMKgRmlsZSAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9jaGlwc2VjL21v ZHVsZS5weSZxdW90OywgbGluZSA2OSwgaW48YnI+CiZndDsgJmd0O8KgIMKgcnVuPGJyPgomZ3Q7 ICZndDvCoCDCoCDCoHJlc3VsdCA9IHNlbGYuZ2V0X21vZHVsZV9vYmplY3QoKTxicj4KJmd0OyAm Z3Q7wqAgwqBGaWxlICZxdW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2NoaXBz ZWMvbW9kdWxlLnB5JnF1b3Q7LCBsaW5lIDEwMSw8YnI+CiZndDsgJmd0O8KgIMKgaW4gZ2V0X21v ZHVsZV9vYmplY3Q8YnI+CiZndDsgJmd0O8KgIMKgIMKgc2VsZi5tb2Rfb2JqID0gaXJlZigpPGJy PgomZ3Q7ICZndDvCoCDCoEZpbGU8YnI+CiZndDsgJmd0O8KgIMKgJnF1b3Q7L3Vzci9saWIvcHl0 aG9uMi43L3NpdGUtcGFja2FnZXMvY2hpcHNlYy9tb2R1bGVzL2NvbW1vbi9iaW9zX3dwLnB5JnF1 b3Q7LDxicj4KJmd0OyAmZ3Q7wqAgwqBsaW5lIDUxLCBpbiBfX2luaXRfXzxicj4KJmd0OyAmZ3Q7 wqAgwqAgwqBzZWxmLnNwacKgIMKgID0gU1BJKCBzZWxmLmNzICk8YnI+CiZndDsgJmd0O8KgIMKg RmlsZSAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9jaGlwc2VjL2hhbC9z cGkucHkmcXVvdDssIGxpbmUgMTc2LDxicj4KJmd0OyAmZ3Q7wqAgwqBpbiBfX2luaXRfXzxicj4K Jmd0OyAmZ3Q7wqAgwqAgwqBzZWxmLmhzZnNfb2ZmwqAgwqA9IGludChjaGlwc2VjLmNoaXBzZXQu Z2V0X3JlZ2lzdGVyX2RlZiggc2VsZi5jcyw8YnI+CiZndDsgJmd0O8KgIMKgIMKgJnF1b3Q7SFNG UyZxdW90OyApWyYjMzk7b2Zmc2V0JiMzOTtdLDE2KTxicj4KJmd0OyAmZ3Q7wqAgwqBGaWxlICZx dW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2NoaXBzZWMvY2hpcHNldC5weSZx dW90OywgbGluZSA0NjcsPGJyPgomZ3Q7ICZndDvCoCDCoGluIGdldF9yZWdpc3Rlcl9kZWY8YnI+ CiZndDsgJmd0O8KgIMKgIMKgcmV0dXJuIF9jcy5DZmcuUkVHSVNURVJTWyByZWdfbmFtZSBdPGJy PgomZ3Q7ICZndDsgS2V5RXJyb3I6ICYjMzk7SFNGUyYjMzk7PGJyPgomZ3Q7ICZndDsgLS08YnI+ CiZndDsgJmd0OyBbLV0gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOjxicj4KJmd0 OyAmZ3Q7wqAgwqBGaWxlICZxdW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2No aXBzZWNfbWFpbi5weSZxdW90OywgbGluZSAyOTEsIGluPGJyPgomZ3Q7ICZndDvCoCDCoHJ1bl9t b2R1bGU8YnI+CiZndDsgJmd0O8KgIMKgIMKgcmVzdWx0ID0gbW9keC5ydW4oIG1vZHVsZV9hcmd2 ICk8YnI+CiZndDsgJmd0O8KgIMKgRmlsZSAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1w YWNrYWdlcy9jaGlwc2VjL21vZHVsZS5weSZxdW90OywgbGluZSA4MCwgaW48YnI+CiZndDsgJmd0 O8KgIMKgcnVuPGJyPgomZ3Q7ICZndDvCoCDCoCDCoHJlc3VsdCA9IHNlbGYubW9kX29iai5ydW4o bW9kdWxlX2FyZ3YpPGJyPgomZ3Q7ICZndDvCoCDCoEZpbGU8YnI+CiZndDsgJmd0O8KgIMKgJnF1 b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvY2hpcHNlYy9tb2R1bGVzL2NvbW1v bi9zcGlfZGVzYy5weSZxdW90Oyw8YnI+CiZndDsgJmd0O8KgIMKgbGluZSA2OCwgaW4gcnVuPGJy PgomZ3Q7ICZndDvCoCDCoCDCoHJldHVybiBzZWxmLmNoZWNrX2ZsYXNoX2FjY2Vzc19wZXJtaXNz aW9ucygpPGJyPgomZ3Q7ICZndDvCoCDCoEZpbGU8YnI+CiZndDsgJmd0O8KgIMKgJnF1b3Q7L3Vz ci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvY2hpcHNlYy9tb2R1bGVzL2NvbW1vbi9zcGlf ZGVzYy5weSZxdW90Oyw8YnI+CiZndDsgJmd0O8KgIMKgbGluZSA0OCwgaW4gY2hlY2tfZmxhc2hf YWNjZXNzX3Blcm1pc3Npb25zPGJyPgomZ3Q7ICZndDvCoCDCoCDCoGZyYXAgPSBjaGlwc2VjLmNo aXBzZXQucmVhZF9yZWdpc3Rlciggc2VsZi5jcywgJiMzOTtGUkFQJiMzOTsgKTxicj4KJmd0OyAm Z3Q7wqAgwqBGaWxlICZxdW90Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2NoaXBz ZWMvY2hpcHNldC5weSZxdW90OywgbGluZSA0NzAsPGJyPgomZ3Q7ICZndDvCoCDCoGluIHJlYWRf cmVnaXN0ZXI8YnI+CiZndDsgJmd0O8KgIMKgIMKgcmVnID0gX2NzLkNmZy5SRUdJU1RFUlNbIHJl Z19uYW1lIF08YnI+CiZndDsgJmd0OyBLZXlFcnJvcjogJiMzOTtGUkFQJiMzOTs8YnI+CiZndDsg Jmd0Ozxicj4KJmd0OyAmZ3Q7IEVSUk9SOiBFeGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIGNoaXBz ZWMubW9kdWxlcy5jb21tb24uc3BpX2Rlc2MucnVuKCk6PGJyPgomZ3Q7ICZndDsgJiMzOTsmIzM5 O0ZSQVAmIzM5OyYjMzk7PGJyPgomZ3Q7ICZndDsgLS08YnI+CiZndDsgJmd0OyBbLV0gVHJhY2Vi YWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOjxicj4KJmd0OyAmZ3Q7wqAgwqBGaWxlICZxdW90 Oy91c3IvbGliL3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL2NoaXBzZWNfbWFpbi5weSZxdW90Oywg bGluZSAyOTEsIGluPGJyPgomZ3Q7ICZndDvCoCDCoHJ1bl9tb2R1bGU8YnI+CiZndDsgJmd0O8Kg IMKgIMKgcmVzdWx0ID0gbW9keC5ydW4oIG1vZHVsZV9hcmd2ICk8YnI+CiZndDsgJmd0O8KgIMKg RmlsZSAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9jaGlwc2VjL21vZHVs ZS5weSZxdW90OywgbGluZSA4MCwgaW48YnI+CiZndDsgJmd0O8KgIMKgcnVuPGJyPgomZ3Q7ICZn dDvCoCDCoCDCoHJlc3VsdCA9IHNlbGYubW9kX29iai5ydW4obW9kdWxlX2FyZ3YpPGJyPgomZ3Q7 ICZndDvCoCDCoEZpbGU8YnI+CiZndDsgJmd0O8KgIMKgJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43 L3NpdGUtcGFja2FnZXMvY2hpcHNlYy9tb2R1bGVzL2NvbW1vbi9zcGlfbG9jay5weSZxdW90Oyw8 YnI+CiZndDsgJmd0O8KgIMKgbGluZSA1OSwgaW4gcnVuPGJyPgomZ3Q7ICZndDvCoCDCoCDCoHJl dHVybiBzZWxmLmNoZWNrX3NwaV9sb2NrKCk8YnI+CiZndDsgJmd0O8KgIMKgRmlsZTxicj4KJmd0 OyAmZ3Q7wqAgwqAmcXVvdDsvdXNyL2xpYi9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9jaGlwc2Vj L21vZHVsZXMvY29tbW9uL3NwaV9sb2NrLnB5JnF1b3Q7LDxicj4KJmd0OyAmZ3Q7wqAgwqBsaW5l IDQ2LCBpbiBjaGVja19zcGlfbG9jazxicj4KJmd0OyAmZ3Q7wqAgwqAgwqBoc2ZzX3JlZyA9IGNo aXBzZWMuY2hpcHNldC5yZWFkX3JlZ2lzdGVyKCBzZWxmLmNzLCAmIzM5O0hTRlMmIzM5OyApPGJy PgomZ3Q7ICZndDvCoCDCoEZpbGUgJnF1b3Q7L3Vzci9saWIvcHl0aG9uMi43L3NpdGUtcGFja2Fn ZXMvY2hpcHNlYy9jaGlwc2V0LnB5JnF1b3Q7LCBsaW5lIDQ3MCw8YnI+CiZndDsgJmd0O8KgIMKg aW4gcmVhZF9yZWdpc3Rlcjxicj4KJmd0OyAmZ3Q7wqAgwqAgwqByZWcgPSBfY3MuQ2ZnLlJFR0lT VEVSU1sgcmVnX25hbWUgXTxicj4KJmd0OyAmZ3Q7IEtleUVycm9yOiAmIzM5O0hTRlMmIzM5Ozxi cj4KJmd0OyAmZ3Q7PGJyPgomZ3Q7ICZndDsgRVJST1I6IEV4Y2VwdGlvbiBvY2N1cnJlZCBkdXJp bmcgY2hpcHNlYy5tb2R1bGVzLmNvbW1vbi5zcGlfbG9jay5ydW4oKTo8YnI+CiZndDsgJmd0OyAm IzM5OyYjMzk7SFNGUyYjMzk7JiMzOTs8YnI+CiZndDsgJmd0OyAtLTxicj4KJmd0OyAmZ3Q7PGJy PgomZ3Q7IEkgYWRkZWQgdGhlIENISVBTRUMgbWFpbGluZyBsaXN0LiBQZXJoYXBzIHRoZXkgY2Fu IGdpdmUgZnVydGhlciBpbnNpZ2h0PGJyPgomZ3Q7IG9uIHdoYXQgdGhlIHByb2JsZW0gbWlnaHQg YmUuPGJyPgomZ3Q7PGJyPgomZ3Q7IEFzIHBlciBMVVYsIGl0IHNlZW1zIHRoYXQgdGhpcyBleGNl cHRpb24gc29tZWhvdyBjYXVzZWQgYSBjcmFzaCBpbiB0aGU8YnI+CiZndDsgTFVWIHRlc3QgbWFu YWdlciBhbmQgaXQgcHJldmVudGVkIGl0IGZyb20gcnVubmluZyB0aGUgdGVzdHMgb2YgdGhlPGJy PgomZ3Q7IHRlc3RzLiBJdCBzZWVtcyB3ZSBuZWVkIHRvIGFkZCBzb21lIHNhZmVndWFyZHMgc28g dGhhdCBMVVYgY2FuIGhhbmRsZTxicj4KJmd0OyB0aGVzZSBlcnJvcnMgbW9yZSBncmFjZWZ1bGx5 Ljxicj4KJmd0Ozxicj4KJmd0OyBUaGFua3MgYW5kIEJSLDxicj4KJmd0OyBSaWNhcmRvPGJyPgom Z3Q7PGJyPgomZ3Q7ICZndDs8YnI+CiZndDsgJmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXzxicj4KJmd0OyAmZ3Q7IEx1diBtYWlsaW5nIGxpc3Q8YnI+ CiZndDsgJmd0OyA8YSBocmVmPSJtYWlsdG86THV2QGxpc3RzLjAxLm9yZyIgdGFyZ2V0PSJfYmxh bmsiPkx1dkBsaXN0cy4wMS5vcmc8L2E+PGJyPgomZ3Q7ICZndDsgPGEgaHJlZj0iaHR0cHM6Ly9s aXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9sdXYiIHRhcmdldD0iX2JsYW5rIj5odHRwczov L2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2x1djwvYT48YnI+CiZndDs8YnI+CiZndDsg X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+CiZndDsg THV2IG1haWxpbmcgbGlzdDxicj4KJmd0OyA8YSBocmVmPSJtYWlsdG86THV2QGxpc3RzLjAxLm9y ZyIgdGFyZ2V0PSJfYmxhbmsiPkx1dkBsaXN0cy4wMS5vcmc8L2E+PGJyPgomZ3Q7IDxhIGhyZWY9 Imh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vbHV2IiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9sdXY8L2E+PGJyPgo8YnI+ Cjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+ CmNoaXBzZWMgbWFpbGluZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86Y2hpcHNlY0BsaXN0cy4w MS5vcmciIHRhcmdldD0iX2JsYW5rIj5jaGlwc2VjQGxpc3RzLjAxLm9yZzwvYT48YnI+CjxhIGhy ZWY9Imh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vY2hpcHNlYyIgdGFyZ2V0 PSJfYmxhbmsiPmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vY2hpcHNlYzwv YT48dT48L3U+PHU+PC91PjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8 L2Rpdj4KPC9ibG9ja3F1b3RlPgo8L2Rpdj4KPC9kaXY+PC9kaXY+PC9kaXY+CjwvZGl2Pgo8L2Rp dj4KCjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+Cg== --===============8864322001466470388==--