Re: [testdrivendevelopment] How would you TDD a website front-end?
"Jeff Langr" <[email protected]> Fri, 10 Jan 2020 11:30:49 -0500
| Newsgroups | gmane.comp.programming.test-driven-development |
|---|---|
| Message-ID | <[email protected]> |
--------------CA6670FE0015518F4DA4FE67
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
I've done a few projects with React + Redux (and now switching to
Context / Hooks).
A component--the HTML--is declarative, as Tim suggests. The best rule
is, no logic in components--the only things allowed are wiring to
actions and pulling from injected properties. Those behaviors go into
actions / reducers, which are easily test-driven. Reducers essentially
represent global state management; actions can involve interactions with
3rd-party services.
Some folks try the Enzyme route, which allows tests to deal with either
shallowly-or-deeply-rendered components. These tests can also include
snapshot tests, which fail on any change to rendered state and act as a
weak protection against regressions (maybe useful, until you start
almost reflexively "accepting" a change, thus missing stuff you should
be examining).
I minimize my use of Enzyme--I don't feel a compulsion to test-drive
layout and declarations.
Interactions with http services are tested in a number of different ways
through 3rd party libraries like axios-mock-adapter:
mock.onGet('/users').reply(200,{users:[ { id:1, name:'Joe Blow'}]});
axios.get('/users').then((response)=> { /* ... prod code */});
JavaScript is a wonky though powerful-enough little language; anyone not
unit testing the even-small bits of logic in the front end is asking for
trouble. TDD works fine here.
(Angular, BTW, is a pain in the ass, particularly for testing.)
Jeff
<http://langrsoft.com>
Jeff Langr/ Langr Software Solutions, Inc. <https://twitter.com/jlangr>
<https://www.linkedin.com/in/jefflangr>
<https://www.facebook.com/jeff.langr>
http://langrsoft.com +1-719-287-4335
Pragmatic Unit Testing in Java <http://pragprog.com/book/utj2>
Modern C++ Programming with TDD <http://pragprog.com/book/lotdd>
Agile in a Flash <http://pragprog.com/book/olag>
Agile Java: Crafting Code with Test-Driven Development
<http://amzn.com/0131482394>
Essential Java Style <http://amzn.com/0130850861>
Tim Ottinger wrote on 1/2/20 10:12 PM:
> I’ve struggled a bit with this in 2019. I think George is right.
>
> With React and with Angular, it seems that a lot of the “code” is css
> and html and some declarative bits here and there. Many microtests
> around those things feels like “testing the compiler” and so they’re
> not very interesting. Mocking the back-end feels wrong too.
>
> So it may be good to ensure that crucial bits of the JSON request are
> built correctly or that lookups of urls are done, and such, but for
> the most part i think the logic behind needs to be tested and only
> rather interesting bits of the front end (decision-making functions,
> separated from document-model manipulation stuff).
>
> I have seen a lot of testing done on these UI bits, but not to good
> effect. It was always more like something a person done and had made
> it work rather than something that worked for the developers. Often
> the tests got in the way of refactoring instead of supporting it.
>
> So... yeah. I don’t have answers, but what George says sounds right.
>
> Tim
>
> I would test the business logic of the model/web service.
> I would also have a few tests that make sure the view is wired
> correctly
> to the model/web service. Not many of these.
> I might also have tests that provide model data to the view and make
> verifications that it handles them correctly. This can be hard.
>
> - George
>
> --
> Peace,
> Tim
> -------------------------------------
> http://www.industriallogic.com/
> http://agileotter.blogspot.com/
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#35839): https://groups.io/g/testdrivendevelopment/message/35839
Mute This Topic: https://groups.io/mt/69387056/3268755
Group Owner: [email protected]
Unsubscribe: https://groups.io/g/testdrivendevelopment/leave/6156322/744556386/xyzzy [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-
--------------CA6670FE0015518F4DA4FE67
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
PGh0bWwgdGhlbWU9Im1vZHVsYXIiPjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5
cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CjwvaGVhZD48Ym9keSB0ZXh0
PSIjMDAwMDAwIj5JJ3ZlIGRvbmUgYSBmZXcgcHJvamVjdHMgd2l0aCBSZWFjdCArIFJlZHV4IAoo
YW5kIG5vdyBzd2l0Y2hpbmcgdG8gQ29udGV4dCAvIEhvb2tzKS48YnI+Cjxicj4KQSBjb21wb25l
bnQtLXRoZSBIVE1MLS1pcyBkZWNsYXJhdGl2ZSwgYXMgVGltIHN1Z2dlc3RzLiBUaGUgYmVzdCBy
dWxlIAppcywgbm8gbG9naWMgaW4gY29tcG9uZW50cy0tdGhlIG9ubHkgdGhpbmdzIGFsbG93ZWQg
YXJlIHdpcmluZyB0byAKYWN0aW9ucyBhbmQgcHVsbGluZyBmcm9tIGluamVjdGVkIHByb3BlcnRp
ZXMuIFRob3NlIGJlaGF2aW9ycyBnbyBpbnRvIAphY3Rpb25zIC8gcmVkdWNlcnMsIHdoaWNoIGFy
ZSBlYXNpbHkgdGVzdC1kcml2ZW4uIFJlZHVjZXJzIGVzc2VudGlhbGx5IApyZXByZXNlbnQgZ2xv
YmFsIHN0YXRlIG1hbmFnZW1lbnQ7IGFjdGlvbnMgY2FuIGludm9sdmUgaW50ZXJhY3Rpb25zIHdp
dGgKIDNyZC1wYXJ0eSBzZXJ2aWNlcy48YnI+Cjxicj4KU29tZSBmb2xrcyB0cnkgdGhlIEVuenlt
ZSByb3V0ZSwgd2hpY2ggYWxsb3dzIHRlc3RzIHRvIGRlYWwgd2l0aCBlaXRoZXIgCnNoYWxsb3ds
eS1vci1kZWVwbHktcmVuZGVyZWQgY29tcG9uZW50cy4gVGhlc2UgdGVzdHMgY2FuIGFsc28gaW5j
bHVkZSAKc25hcHNob3QgdGVzdHMsIHdoaWNoIGZhaWwgb24gYW55IGNoYW5nZSB0byByZW5kZXJl
ZCBzdGF0ZSBhbmQgYWN0IGFzIGEgCndlYWsgcHJvdGVjdGlvbiBhZ2FpbnN0IHJlZ3Jlc3Npb25z
IChtYXliZSB1c2VmdWwsIHVudGlsIHlvdSBzdGFydCAKYWxtb3N0IHJlZmxleGl2ZWx5ICJhY2Nl
cHRpbmciIGEgY2hhbmdlLCB0aHVzIG1pc3Npbmcgc3R1ZmYgeW91IHNob3VsZCAKYmUgZXhhbWlu
aW5nKS48YnI+Cjxicj4KSSBtaW5pbWl6ZSBteSB1c2Ugb2YgRW56eW1lLS1JIGRvbid0IGZlZWwg
YSBjb21wdWxzaW9uIHRvIHRlc3QtZHJpdmUgCmxheW91dCBhbmQgZGVjbGFyYXRpb25zLjxicj4K
PGJyPgpJbnRlcmFjdGlvbnMgd2l0aCBodHRwIHNlcnZpY2VzIGFyZSB0ZXN0ZWQgaW4gYSBudW1i
ZXIgb2YgZGlmZmVyZW50IHdheXMKIHRocm91Z2ggM3JkIHBhcnR5IGxpYnJhcmllcyBsaWtlIGF4
aW9zLW1vY2stYWRhcHRlcjo8YnI+Cjxicj4KPHByZSBjbGFzcz0iZWRpdG9yIGVkaXRvci1jb2xv
cnMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBmb250LWZhbWlseTogbW9ub3NwYWNl
LCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTZweDsgbWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90
dG9tOiAyNHB4OyBwYWRkaW5nOiAxM3B4IDE1cHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNDcs
IDI0NywgMjQ3KTsgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMnB4OyBib3JkZXItdG9wLXJpZ2h0
LXJhZGl1czogMnB4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4OyBib3JkZXItYm90
dG9tLWxlZnQtcmFkaXVzOiAycHg7IG92ZXJmbG93LXg6IGF1dG87IGNhcmV0LWNvbG9yOiByZ2Io
MCwgMCwgMCk7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12
YXJpYW50LWNhcHM6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbGV0dGVyLXNwYWNpbmc6
IG5vcm1hbDsgb3JwaGFuczogYXV0bzsgdGV4dC1hbGlnbjogc3RhcnQ7IHRleHQtaW5kZW50OiAw
cHg7IHRleHQtdHJhbnNmb3JtOiBub25lOyB3aWRvd3M6IGF1dG87IHdvcmQtc3BhY2luZzogMHB4
OyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IGF1dG87IC13ZWJraXQtdGV4dC1zdHJva2Utd2lk
dGg6IDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBpbml0
aWFsIGluaXRpYWw7IGJhY2tncm91bmQtcmVwZWF0OiBpbml0aWFsIGluaXRpYWw7Ij48ZGl2IGNs
YXNzPSJsaW5lIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIGNsYXNzPSJz
b3VyY2UganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gY2xhc3M9InZh
cmlhYmxlIG90aGVyIG9iamVjdCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNv
bG9yOiByZ2IoMCwgMTI4LCAxMjgpOyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1i
b3g7Ij4gIG1vY2s8L3NwYW4+PC9zcGFuPjxzcGFuIGNsYXNzPSJtZXRhIGpzIiBzdHlsZT0iYm94
LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIGNsYXNzPSJtZXRhIGRlbGltaXRlciBtZXRob2Qg
cGVyaW9kIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJi
b3gtc2l6aW5nOiBib3JkZXItYm94OyI+Ljwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9ImVudGl0
eSBuYW1lIGZ1bmN0aW9uIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgY29sb3I6
IHJnYigxNTMsIDAsIDApOyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij5v
bkdldDwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEganMiIHN0eWxlPSJib3gtc2l6aW5n
OiBib3JkZXItYm94OyI+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRpb24gYmVnaW4g
cm91bmQganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ij4oPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5n
IHF1b3RlZCBzaW5nbGUganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjog
cmdiKDIyMSwgMTcsIDY4KTsiPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiBkZWZpbml0aW9uIHN0
cmluZyBiZWdpbiBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNvbG9yOiByZ2Io
MjIxLCAxNywgNjgpOyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4nPC9z
cGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPi91c2Vyczwv
c3Bhbj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24gZGVmaW5pdGlvbiBzdHJpbmcgZW5kIGpzIiBz
dHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgY29sb3I6IHJnYigyMjEsIDE3LCA2OCk7Ij48
c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPic8L3NwYW4+PC9zcGFuPjwvc3Bh
bj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24gZGVmaW5pdGlvbiBlbmQgcm91bmQganMiIHN0eWxl
PSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Ij4pPC9zcGFuPjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEgZGVsaW1pdGVy
IG1ldGhvZCBwZXJpb2QganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4g
c3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4uPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFz
cz0iZW50aXR5IG5hbWUgZnVuY3Rpb24ganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94
OyBjb2xvcjogcmdiKDE1MywgMCwgMCk7Ij48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVy
LWJveDsiPnJlcGx5PC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBqcyIgc3R5bGU9ImJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24gZGVmaW5pdGlv
biBiZWdpbiByb3VuZCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBz
dHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPig8L3NwYW4+PC9zcGFuPjxzcGFuIGNsYXNz
PSJjb25zdGFudCBudW1lcmljIGRlY2ltYWwganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXIt
Ym94OyBjb2xvcjogcmdiKDIyMSwgMTcsIDY4KTsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBi
b3JkZXItYm94OyI+MjAwPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBkZWxpbWl0ZXIg
b2JqZWN0IGNvbW1hIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0
eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+LDwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9
ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij7CoDwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBicmFj
ZSBjdXJseSBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0i
Ym94LXNpemluZzogYm9yZGVyLWJveDsiPns8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJib3gt
c2l6aW5nOiBib3JkZXItYm94OyI+IHVzZXJzPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIG9w
ZXJhdG9yIGFzc2lnbm1lbnQganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xv
cjogcmdiKDM0LCAzNCwgMzQpOyBmb250LXdlaWdodDogYm9sZDsiPjxzcGFuIHN0eWxlPSJib3gt
c2l6aW5nOiBib3JkZXItYm94OyI+Ojwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImJveC1zaXpp
bmc6IGJvcmRlci1ib3g7Ij7CoDwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBicmFjZSBzcXVhcmUg
anMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1zaXpp
bmc6IGJvcmRlci1ib3g7Ij5bIDwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEgYnJhY2Ug
Y3VybHkganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ij57PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNp
emluZzogYm9yZGVyLWJveDsiPsKgaWQ8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQgb3BlcmF0
b3IgYXNzaWdubWVudCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNvbG9yOiBy
Z2IoMzQsIDM0LCAzNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+PHNwYW4gc3R5bGU9ImJveC1zaXpp
bmc6IGJvcmRlci1ib3g7Ij46PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNpemluZzog
Ym9yZGVyLWJveDsiPsKgPC9zcGFuPjxzcGFuIGNsYXNzPSJjb25zdGFudCBudW1lcmljIGRlY2lt
YWwganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjogcmdiKDIyMSwgMTcs
IDY4KTsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+MTwvc3Bhbj48L3Nw
YW4+PHNwYW4gY2xhc3M9Im1ldGEgZGVsaW1pdGVyIG9iamVjdCBjb21tYSBqcyIgc3R5bGU9ImJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJv
eDsiPiw8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+
wqBuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIG9wZXJhdG9yIGFzc2lnbm1lbnQganMi
IHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjogcmdiKDM0LCAzNCwgMzQpOyBm
b250LXdlaWdodDogYm9sZDsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+
Ojwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij7CoDwv
c3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIHF1b3RlZCBzaW5nbGUganMiIHN0eWxlPSJib3gtc2l6
aW5nOiBib3JkZXItYm94OyBjb2xvcjogcmdiKDIyMSwgMTcsIDY4KTsiPjxzcGFuIGNsYXNzPSJw
dW5jdHVhdGlvbiBkZWZpbml0aW9uIHN0cmluZyBiZWdpbiBqcyIgc3R5bGU9ImJveC1zaXppbmc6
IGJvcmRlci1ib3g7IGNvbG9yOiByZ2IoMjIxLCAxNywgNjgpOyI+PHNwYW4gc3R5bGU9ImJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ij4nSm9lIEJsb3c8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJi
b3gtc2l6aW5nOiBib3JkZXItYm94OyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiBk
ZWZpbml0aW9uIHN0cmluZyBlbmQganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBj
b2xvcjogcmdiKDIyMSwgMTcsIDY4KTsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXIt
Ym94OyI+Jzwvc3Bhbj48L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3Jk
ZXItYm94OyI+wqA8L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEgYnJhY2UgY3VybHkganMiIHN0eWxl
PSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Ij59PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJv
eDsiPiA8L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEgYnJhY2Ugc3F1YXJlIGpzIiBzdHlsZT0iYm94
LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94
OyI+XTwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEgYnJhY2UgY3VybHkganMiIHN0eWxl
PSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Ij4gfTwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRp
b24gZW5kIHJvdW5kIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0
eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+KTwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bh
bj48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24gdGVybWluYXRvciBzdGF0ZW1lbnQganMiIHN0eWxl
PSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Ij47Cjwvc3Bhbj48L3NwYW4+PC9zcGFuPjxwcmUgY2xhc3M9ImVkaXRvciBlZGl0b3It
Y29sb3JzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgZm9udC1mYW1pbHk6IG1vbm9z
cGFjZSwgbW9ub3NwYWNlOyBmb250LXNpemU6IDE2cHg7IG1hcmdpbi10b3A6IDBweDsgbWFyZ2lu
LWJvdHRvbTogMjRweDsgcGFkZGluZzogMTNweCAxNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MjQ3LCAyNDcsIDI0Nyk7IGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDsgYm9yZGVyLXRvcC1y
aWdodC1yYWRpdXM6IDJweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsgYm9yZGVy
LWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OyBvdmVyZmxvdy14OiBhdXRvOyBjYXJldC1jb2xvcjog
cmdiKDAsIDAsIDApOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LXN0eWxlOiBub3JtYWw7IGZv
bnQtdmFyaWFudC1jYXBzOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFj
aW5nOiBub3JtYWw7IG9ycGhhbnM6IGF1dG87IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVu
dDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2lkb3dzOiBhdXRvOyB3b3JkLXNwYWNpbmc6
IDBweDsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBhdXRvOyAtd2Via2l0LXRleHQtc3Ryb2tl
LXdpZHRoOiAwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYmFja2dyb3VuZC1wb3NpdGlvbjog
aW5pdGlhbCBpbml0aWFsOyBiYWNrZ3JvdW5kLXJlcGVhdDogaW5pdGlhbCBpbml0aWFsOyI+PGRp
diBjbGFzcz0ibGluZSIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFz
cz0ic291cmNlIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxl
PSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+wqA8L3NwYW4+PC9zcGFuPjwvZGl2PjxkaXYgY2xh
c3M9ImxpbmUiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gY2xhc3M9InNv
dXJjZSBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0idmFy
aWFibGUgb3RoZXIgb2JqZWN0IGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgY29s
b3I6IHJnYigwLCAxMjgsIDEyOCk7Ij48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJv
eDsiPmF4aW9zPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBqcyIgc3R5bGU9ImJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0ibWV0YSBkZWxpbWl0ZXIgbWV0aG9kIHBl
cmlvZCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94
LXNpemluZzogYm9yZGVyLWJveDsiPi48L3NwYW4+PC9zcGFuPjxzcGFuIGNsYXNzPSJzdXBwb3J0
IGZ1bmN0aW9uIGRvbSBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNvbG9yOiBy
Z2IoNjgsIDg1LCAxMzYpOyI+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij5n
ZXQ8L3NwYW4+PC9zcGFuPjxzcGFuIGNsYXNzPSJtZXRhIGpzIiBzdHlsZT0iYm94LXNpemluZzog
Ym9yZGVyLWJveDsiPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiBkZWZpbml0aW9uIGJlZ2luIHJv
dW5kIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJib3gt
c2l6aW5nOiBib3JkZXItYm94OyI+KDwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyBx
dW90ZWQgc2luZ2xlIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgY29sb3I6IHJn
YigyMjEsIDE3LCA2OCk7Ij48c3BhbiBjbGFzcz0icHVuY3R1YXRpb24gZGVmaW5pdGlvbiBzdHJp
bmcgYmVnaW4ganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjogcmdiKDIy
MSwgMTcsIDY4KTsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+Jzwvc3Bh
bj48L3NwYW4+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4vdXNlcnM8L3Nw
YW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRpb24gc3RyaW5nIGVuZCBqcyIgc3R5
bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNvbG9yOiByZ2IoMjIxLCAxNywgNjgpOyI+PHNw
YW4gc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4nPC9zcGFuPjwvc3Bhbj48L3NwYW4+
PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRpb24gZW5kIHJvdW5kIGpzIiBzdHlsZT0i
Ym94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXIt
Ym94OyI+KTwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNpemlu
ZzogYm9yZGVyLWJveDsiPjwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBqcyIgc3R5bGU9ImJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0ibWV0YSBkZWxpbWl0ZXIgbWV0aG9kIHBl
cmlvZCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94
LXNpemluZzogYm9yZGVyLWJveDsiPi48L3NwYW4+PC9zcGFuPjxzcGFuIGNsYXNzPSJlbnRpdHkg
bmFtZSBmdW5jdGlvbiBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNvbG9yOiBy
Z2IoMTUzLCAwLCAwKTsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+dGhl
bjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im1ldGEganMiIHN0eWxlPSJib3gtc2l6aW5nOiBi
b3JkZXItYm94OyI+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRpb24gYmVnaW4gcm91
bmQganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9ImJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ij4oPC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz0ibWV0YSBmdW5j
dGlvbiBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0ibWV0
YSBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBjbGFzcz0icHVuY3R1
YXRpb24gZGVmaW5pdGlvbiBiZWdpbiByb3VuZCBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPig8L3NwYW4+PC9z
cGFuPjxzcGFuIGNsYXNzPSJ2YXJpYWJsZSBmdW5jdGlvbiBqcyIgc3R5bGU9ImJveC1zaXppbmc6
IGJvcmRlci1ib3g7IGNvbG9yOiByZ2IoMCwgMTI4LCAxMjgpOyI+PHNwYW4gc3R5bGU9ImJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ij5yZXNwb25zZTwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InB1
bmN0dWF0aW9uIGRlZmluaXRpb24gZW5kIHJvdW5kIGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9y
ZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+KTwvc3Bhbj48
L3NwYW4+PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsi
PiA9Jmd0OyA8L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIGRlZmluaXRpb24gZnVuY3Rp
b24gYmVnaW4gY3VybHkganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4g
c3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij57PC9zcGFuPjwvc3Bhbj4gLyogLi4uIHBy
b2QgY29kZSAqLzxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiB0ZXJtaW5hdG9yIHN0YXRlbWVudCBq
cyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94LXNpemlu
ZzogYm9yZGVyLWJveDsiPjwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImJveC1zaXppbmc6IGJv
cmRlci1ib3g7Ij4gPC9zcGFuPjxzcGFuIGNsYXNzPSJwdW5jdHVhdGlvbiBkZWZpbml0aW9uIGZ1
bmN0aW9uIGVuZCBjdXJseSBqcyIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48c3Bh
biBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPn08L3NwYW4+PC9zcGFuPjxzcGFuIGNs
YXNzPSJwdW5jdHVhdGlvbiBkZWZpbml0aW9uIGVuZCByb3VuZCBqcyIgc3R5bGU9ImJveC1zaXpp
bmc6IGJvcmRlci1ib3g7Ij48c3BhbiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPik8
L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIHRlcm1p
bmF0b3Igc3RhdGVtZW50IGpzIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFu
IHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+Ozwvc3Bhbj48L3NwYW4+PC9zcGFuPjwv
ZGl2PjwvcHJlPjxzcGFuIGNsYXNzPSJzb3VyY2UganMiIHN0eWxlPSJib3gtc2l6aW5nOiBib3Jk
ZXItYm94OyI+PHNwYW4gY2xhc3M9InB1bmN0dWF0aW9uIHRlcm1pbmF0b3Igc3RhdGVtZW50IGpz
IiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsiPjxzcGFuIHN0eWxlPSJib3gtc2l6aW5n
OiBib3JkZXItYm94OyI+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9kaXY+PC9wcmU+CkphdmFTY3Jp
cHQgaXMgYSB3b25reSB0aG91Z2ggcG93ZXJmdWwtZW5vdWdoIGxpdHRsZSBsYW5ndWFnZTsgYW55
b25lIG5vdAogdW5pdCB0ZXN0aW5nIHRoZSBldmVuLXNtYWxsIGJpdHMgb2YgbG9naWMgaW4gdGhl
IGZyb250IGVuZCBpcyBhc2tpbmcgCmZvciB0cm91YmxlLiBUREQgd29ya3MgZmluZSBoZXJlLjxi
cj4KPGJyPgooQW5ndWxhciwgQlRXLCBpcyBhIHBhaW4gaW4gdGhlIGFzcywgcGFydGljdWxhcmx5
IGZvciB0ZXN0aW5nLik8YnI+Cjxicj4KSmVmZjxicj4KPGRpdiBjbGFzcz0ibW96LXNpZ25hdHVy
ZSI+PGJyPgo8dGFibGUgc3R5bGU9ImZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLEhlbHZl
dGljYSxBcmlhbCxzYW5zLXNlcmlmIiAKY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBi
b3JkZXI9IjAiPgoKCgoKCjx0Ym9keT4KPHRyPgogPHRkIHN0eWxlPSJwYWRkaW5nLXJpZ2h0Ojhw
eDsiPjxhIGhyZWY9Imh0dHA6Ly9sYW5ncnNvZnQuY29tIj48aW1nIApzcmM9Imh0dHA6Ly9sYW5n
cnNvZnQuY29tLzIwMTUvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDEvbGFuZ3Jzb2Z0LWxvZ28t
d29yZGxlc3Mtc21hbGwtMS5qcGciCiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjEwNSI+PGJyPjwvYT48
L3RkPgogPHRkPgogIDx0YWJsZSBib3JkZXI9IjAiPgogICA8dGJvZHk+CiAgICAgIDx0cj4KICAg
ICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgZm9udC1zaXplOjEyNSU7IAps
aW5lLWhlaWdodDoyNXB4OyBmb250LXdlaWdodDpib2xkOyBwYWRkaW5nLWJvdHRvbToycHg7Ij48
c3BhbiAKc3R5bGU9ImNvbG9yOiAjYjE4ZTIxOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Ij5K
ZWZmIExhbmdyPC9zcGFuPjxzcGFuCiBzdHlsZT0idmVydGljYWwtYWxpZ246IGNlbnRlcjsgZm9u
dC1zaXplOiAxMDUlIj4gLyBMYW5nciBTb2Z0d2FyZSAKU29sdXRpb25zLCBJbmMuwqDCoMKgPC9z
cGFuPgogICAgICAgICA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2psYW5nciIgc3R5bGU9
IiBwYWRkaW5nLXJpZ2h0OiAKNXB4OyI+PGltZyBhbHQ9IiIgCnNyYz0iaHR0cDovL2xhbmdyc29m
dC5jb20vMjAxNS93cC1jb250ZW50L3VwbG9hZHMvMjAxNy8wMS90d2l0dGVyLWMuanBnIgogc3R5
bGU9ImJvcmRlci1yYWRpdXM6IDUwJTsgYm9yZGVyOiBzb2xpZCAxcHggcmdiYSgxNTYsIDE2NCwg
MTczLCAKMC41Mik7IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjwvYT4KICAgICAgICAgPGEgaHJl
Zj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2plZmZsYW5nciIgc3R5bGU9IiAKcGFkZGlu
Zy1yaWdodDogNXB4OyI+PGltZyBhbHQ9IiIgCnNyYz0iaHR0cDovL2xhbmdyc29mdC5jb20vMjAx
NS93cC1jb250ZW50L3VwbG9hZHMvMjAxNy8wMS9pbi1jLmpwZyIgCnN0eWxlPSJib3JkZXItcmFk
aXVzOiA1MCU7IGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTU2LCAxNjQsIDE3MywgMC41Mik7Igog
d2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj48L2E+CiAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3
LmZhY2Vib29rLmNvbS9qZWZmLmxhbmdyIiAKc3R5bGU9InBhZGRpbmctcmlnaHQ6IDVweDsiPjxp
bWcgYWx0PSIiIApzcmM9Imh0dHA6Ly9sYW5ncnNvZnQuY29tLzIwMTUvd3AtY29udGVudC91cGxv
YWRzLzIwMTgvMDgvZmIuZ2lmIiAKc3R5bGU9ImJvcmRlci1yYWRpdXM6IDUwJTsgYm9yZGVyOiBz
b2xpZCAxcHggcmdiYSgxNTYsIDE2NCwgMTczLCAwLjUyKTsiCiB3aWR0aD0iMjAiIGhlaWdodD0i
MjAiPjwvYT4KICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICAgPHRk
IHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+PGEgaHJlZj0iaHR0cDovL2xhbmdyc29mdC5j
b20iPmh0dHA6Ly9sYW5ncnNvZnQuY29tPC9hPsKgPHNwYW4KIHN0eWxlPSJwYWRkaW5nLXRvcDog
OHB4Ij4rMS03MTktMjg3LTQzMzU8L3NwYW4+CiAgICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAg
ICAgIDx0cj4KICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy10b3A6MnB4OyAKYm9yZGVyLXRvcDoj
YjE4ZTIxIHNvbGlkIDFweDsiPgogICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxs
cGFkZGluZz0iMCIgYm9yZGVyPSIwIj4KICAgICAgICAgICA8dGJvZHkgc3R5bGU9ImZvbnQtc2l6
ZTogOTUlOyI+CiAgICAgICAgICAgIDx0cj48dGQ+PGEgaHJlZj0iaHR0cDovL3ByYWdwcm9nLmNv
bS9ib29rL3V0ajIiPlByYWdtYXRpYyAKVW5pdCBUZXN0aW5nIGluIEphdmE8L2E+PC90ZD48L3Ry
PgogICAgICAgICAgICA8dHI+PHRkPjxhIGhyZWY9Imh0dHA6Ly9wcmFncHJvZy5jb20vYm9vay9s
b3RkZCI+TW9kZXJuIEMrKyAKUHJvZ3JhbW1pbmcgd2l0aCBUREQ8L2E+PC90ZD48L3RyPgogICAg
ICAgICAgICA8dHI+PHRkPjxhIGhyZWY9Imh0dHA6Ly9wcmFncHJvZy5jb20vYm9vay9vbGFnIj5B
Z2lsZSBpbiBhIApGbGFzaDwvYT48L3RkPjwvdHI+CiAgICAgICAgICAgIDx0cj48dGQ+PGEgaHJl
Zj0iaHR0cDovL2Ftem4uY29tLzAxMzE0ODIzOTQiPkFnaWxlIEphdmE6IApDcmFmdGluZyBDb2Rl
IHdpdGggVGVzdC1Ecml2ZW4gRGV2ZWxvcG1lbnQ8L2E+PC90ZD48L3RyPgogICAgICAgICAgICA8
dHI+PHRkPjxhIGhyZWY9Imh0dHA6Ly9hbXpuLmNvbS8wMTMwODUwODYxIj5Fc3NlbnRpYWwgSmF2
YSAKU3R5bGU8L2E+PC90ZD48L3RyPgogICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rh
YmxlPgogICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgPC90Ym9keT4KICA8L3RhYmxlPgogPC90
ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KCgoKCjwvZGl2Pgo8YnI+Cjxicj4KPHNwYW4+VGlt
IE90dGluZ2VyIHdyb3RlIG9uIDEvMi8yMCAxMDoxMiBQTTo8L3NwYW4+PGJyPgo8YmxvY2txdW90
ZSB0eXBlPSJjaXRlIiAKY2l0ZT0ibWlkOkNBTjJOU3RrT3g9WTA4Y2FxQXJ3dVNQZi1xeDJ6d2tM
VldKUTEtYzJ6UkhUPXVlM1U2UUBtYWlsLmdtYWlsLmNvbSI+CiAgPG1ldGEgaHR0cC1lcXVpdj0i
Y29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgogIDxkaXY+
PGRpdiBkaXI9ImF1dG8iPknigJl2ZSBzdHJ1Z2dsZWQgYSBiaXQgd2l0aCB0aGlzIGluIDIwMTku
wqAgSSB0aGluayAKR2VvcmdlIGlzIHJpZ2h0LsKgPC9kaXY+PC9kaXY+CiAgPGRpdiBkaXI9ImF1
dG8iPjxicj48L2Rpdj4KICA8ZGl2IGRpcj0iYXV0byI+V2l0aCBSZWFjdCBhbmQgd2l0aCBBbmd1
bGFyLCBpdCBzZWVtcyB0aGF0IGEgbG90IG9mIAp0aGUg4oCcY29kZeKAnSBpcyBjc3MgYW5kIGh0
bWwgYW5kIHNvbWUgZGVjbGFyYXRpdmUgYml0cyBoZXJlIGFuZCB0aGVyZS4gCk1hbnkgbWljcm90
ZXN0cyBhcm91bmQgdGhvc2UgdGhpbmdzIGZlZWxzIGxpa2Ug4oCcdGVzdGluZyB0aGUgY29tcGls
ZXLigJ0gCmFuZCBzbyB0aGV54oCZcmUgbm90IHZlcnkgaW50ZXJlc3RpbmcuIE1vY2tpbmcgdGhl
IGJhY2stZW5kIGZlZWxzIHdyb25nIAp0b28uwqA8L2Rpdj4KICA8ZGl2IGRpcj0iYXV0byI+PGJy
PjwvZGl2PgogIDxkaXYgZGlyPSJhdXRvIj5TbyBpdCBtYXkgYmUgZ29vZCB0byBlbnN1cmUgdGhh
dCBjcnVjaWFsIGJpdHMgb2YgdGhlIApKU09OIHJlcXVlc3QgYXJlIGJ1aWx0IGNvcnJlY3RseSBv
ciB0aGF0IGxvb2t1cHMgb2YgdXJscyBhcmUgZG9uZSwgYW5kIApzdWNoLCBidXQgZm9yIHRoZSBt
b3N0IHBhcnQgaSB0aGluayB0aGUgbG9naWMgYmVoaW5kIG5lZWRzIHRvIGJlIHRlc3RlZCAKYW5k
IG9ubHkgcmF0aGVyIGludGVyZXN0aW5nIGJpdHMgb2YgdGhlIGZyb250IGVuZCAoZGVjaXNpb24t
bWFraW5nIApmdW5jdGlvbnMsIHNlcGFyYXRlZCBmcm9tIGRvY3VtZW50LW1vZGVsIG1hbmlwdWxh
dGlvbiBzdHVmZikuwqA8L2Rpdj4KICA8ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PgogIDxkaXYg
ZGlyPSJhdXRvIj5JIGhhdmUgc2VlbiBhIGxvdCBvZiB0ZXN0aW5nIGRvbmUgb24gdGhlc2UgVUkg
Yml0cywgCmJ1dCBub3QgdG8gZ29vZCBlZmZlY3QuIEl0IHdhcyBhbHdheXMgbW9yZSBsaWtlIHNv
bWV0aGluZyBhIHBlcnNvbiBkb25lIAphbmQgaGFkIG1hZGUgaXQgd29yayByYXRoZXIgdGhhbiBz
b21ldGhpbmcgdGhhdCB3b3JrZWQgZm9yIHRoZSAKZGV2ZWxvcGVycy4gT2Z0ZW4gdGhlIHRlc3Rz
IGdvdCBpbiB0aGUgd2F5IG9mIHJlZmFjdG9yaW5nIGluc3RlYWQgb2YgCnN1cHBvcnRpbmcgaXQu
PC9kaXY+CiAgPGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj4KICA8ZGl2IGRpcj0iYXV0byI+U28u
Li4geWVhaC4gSSBkb27igJl0IGhhdmUgYW5zd2VycywgYnV0IHdoYXQgR2VvcmdlIHNheXMKIHNv
dW5kcyByaWdodC7CoDwvZGl2PgogIDxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+CiAgPGRpdiBk
aXI9ImF1dG8iPlRpbTwvZGl2PgogIDxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48
YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIApzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7
Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+SSAKd291bGQgdGVz
dCB0aGUgYnVzaW5lc3MgbG9naWMgb2YgdGhlIG1vZGVsL3dlYiBzZXJ2aWNlLjxicj4KSSB3b3Vs
ZCBhbHNvIGhhdmUgYSBmZXcgdGVzdHMgdGhhdCBtYWtlIHN1cmUgdGhlIHZpZXcgaXMgd2lyZWQg
Y29ycmVjdGx5CiA8YnI+CnRvIHRoZSBtb2RlbC93ZWIgc2VydmljZS4gTm90IG1hbnkgb2YgdGhl
c2UuPGJyPgpJIG1pZ2h0IGFsc28gaGF2ZSB0ZXN0cyB0aGF0IHByb3ZpZGUgbW9kZWwgZGF0YSB0
byB0aGUgdmlldyBhbmQgbWFrZSA8YnI+CnZlcmlmaWNhdGlvbnMgdGhhdCBpdCBoYW5kbGVzIHRo
ZW0gY29ycmVjdGx5LiBUaGlzIGNhbiBiZSBoYXJkLjxicj4KPGJyPgrCoCAtIEdlb3JnZTxicj48
L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+Ci0tIDxicj4KICA8ZGl2IGRpcj0ibHRyIiBjbGFzcz0i
Z21haWxfc2lnbmF0dXJlIiAKZGF0YS1zbWFydG1haWw9ImdtYWlsX3NpZ25hdHVyZSI+PGRpdiBk
aXI9Imx0ciI+PGRpdj48ZGl2IGRpcj0ibHRyIj48ZGl2PjxkaXYKIGRpcj0ibHRyIj5QZWFjZSw8
L2Rpdj48ZGl2IGRpcj0ibHRyIj5UaW08YnI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLTxicj48YQogaHJlZj0iaHR0cDovL3d3dy5pbmR1c3RyaWFsbG9naWMuY29tLyIgdGFy
Z2V0PSJfYmxhbmsiIAptb3otZG8tbm90LXNlbmQ9InRydWUiPmh0dHA6Ly93d3cuaW5kdXN0cmlh
bGxvZ2ljLmNvbS88L2E+PGJyPjxhIApocmVmPSJodHRwOi8vYWdpbGVvdHRlci5ibG9nc3BvdC5j
b20vIiB0YXJnZXQ9Il9ibGFuayIgCm1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+aHR0cDovL2FnaWxl
b3R0ZXIuYmxvZ3Nwb3QuY29tLzwvYT48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+
PC9kaXY+CgoKICAKPC9ibG9ja3F1b3RlPgo8YnI+CjwvYm9keT48L2h0bWw+DQo8ZGl2IHdpZHRo
PSIxIiBzdHlsZT0iY29sb3I6d2hpdGU7Y2xlYXI6Ym90aCI+Xy5fLF8uXyxfPC9kaXY+Cjxocj4K
R3JvdXBzLmlvIExpbmtzOjxwPgoKCllvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBzZW50IHRvIHRo
aXMgZ3JvdXAuCgoKCjxwPgoKPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vZ3JvdXBz
LmlvL2cvdGVzdGRyaXZlbmRldmVsb3BtZW50L21lc3NhZ2UvMzU4MzkiPlZpZXcvUmVwbHkgT25s
aW5lICgjMzU4MzkpPC9hPiB8CgoKICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0ibWFpbHRvOnRl
c3Rkcml2ZW5kZXZlbG9wbWVudEBncm91cHMuaW8/c3ViamVjdD1SZTolMjBSZSUzQSUyMCU1QnRl
c3Rkcml2ZW5kZXZlbG9wbWVudCU1RCUyMEhvdyUyMHdvdWxkJTIweW91JTIwVEREJTIwYSUyMHdl
YnNpdGUlMjBmcm9udC1lbmQlM0YiPlJlcGx5IFRvIEdyb3VwPC9hPgogIAogICAgfCA8YSB0YXJn
ZXQ9Il9ibGFuayIgaHJlZj0ibWFpbHRvOmplZmZAbGFuZ3Jzb2Z0LmNvbT9zdWJqZWN0PVByaXZh
dGU6JTIwUmU6JTIwUmUlM0ElMjAlNUJ0ZXN0ZHJpdmVuZGV2ZWxvcG1lbnQlNUQlMjBIb3clMjB3
b3VsZCUyMHlvdSUyMFRERCUyMGElMjB3ZWJzaXRlJTIwZnJvbnQtZW5kJTNGIj5SZXBseSBUbyBT
ZW5kZXI8L2E+CiAgCgoKfAoKCiAgCiAgICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6
Ly9ncm91cHMuaW8vbXQvNjkzODcwNTYvMzI2ODc1NSI+TXV0ZSBUaGlzIFRvcGljPC9hPgogIAoK
fCA8YSBocmVmPSJodHRwczovL2dyb3Vwcy5pby9nL3Rlc3Rkcml2ZW5kZXZlbG9wbWVudC9wb3N0
Ij5OZXcgVG9waWM8L2E+PGJyPgoKCgo8YnI+Cgo8YSBocmVmPSJodHRwczovL2dyb3Vwcy5pby9n
L3Rlc3Rkcml2ZW5kZXZlbG9wbWVudC9lZGl0c3ViLzMyNjg3NTUiPllvdXIgU3Vic2NyaXB0aW9u
PC9hPiB8CjxhIGhyZWY9Im1haWx0bzp0ZXN0ZHJpdmVuZGV2ZWxvcG1lbnQrb3duZXJAZ3JvdXBz
LmlvIj5Db250YWN0IEdyb3VwIE93bmVyPC9hPiB8Cgo8YSBocmVmPSJodHRwczovL2dyb3Vwcy5p
by9nL3Rlc3Rkcml2ZW5kZXZlbG9wbWVudC9sZWF2ZS82MTU2MzIyLzc0NDU1NjM4Ni94eXp6eSI+
VW5zdWJzY3JpYmU8L2E+CgogW2djcHQtdGVzdGRyaXZlbmRldmVsb3BtZW50QG0uZ21hbmUub3Jn
XTxicj4KPGRpdiB3aWR0aD0iMSIgc3R5bGU9ImNvbG9yOndoaXRlO2NsZWFyOmJvdGgiPl8uXyxf
Ll8sXzwvZGl2PgoNCg==
--------------CA6670FE0015518F4DA4FE67--