From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7827986007202045655==" MIME-Version: 1.0 From: Harris, James R Subject: Re: [SPDK] blobstore metadata questions, comments and potential issues Date: Mon, 02 Oct 2017 22:18:28 +0000 Message-ID: <7ECCD09A-6E62-4FF1-871E-F29AB4B9EE36@intel.com> In-Reply-To: 82C9F782B054C94B9FC04A331649C77A68F72191@fmsmsx104.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============7827986007202045655== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Writing the masks to disk on every sync would kill performance. Take a 2TB= SSD for example. By default it will have 2 million metadata pages and 2 m= illion clusters (assuming 1MB cluster size), which can be represented by a = bitmask of size 256KB for each (512KB total). We definitely don=E2=80=99t = want to write that out on every sync operation to every blob. From: SPDK on behalf of Paul E Luse Reply-To: Storage Performance Development Kit Date: Monday, October 2, 2017 at 3:13 PM To: Storage Performance Development Kit Subject: Re: [SPDK] blobstore metadata questions, comments and potential is= sues Thanks for the quick response Jim! What you say will only be true after the= pending patch that I mention below lands though correct? Also, it seems like it would be good to write those masks out on disk on sy= nc() as well as this will result in a clean MD but, of course, that only ma= kes sense once the clean bit suggestion mentioned below is in place. I=E2= =80=99ll take care of that once the current patch lands just to simply revi= ew & merging since it=E2=80=99s not urgent. Thx Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Harris, James R Sent: Monday, October 2, 2017 2:46 PM To: Storage Performance Development Kit Subject: Re: [SPDK] blobstore metadata questions, comments and potential is= sues Hey Paul, The masks on disk are solely an optimization during load. We only write th= e masks out to disk when a Blobstore is unloaded. If Blobstore is not unlo= aded cleanly, we can rebuild both masks with a full walk of all of the meta= data pages. This avoids an extra page write on every metadata operation (c= reate/delete/resize/xattr). I agree that we should defer clearing the clean bit until the first metadat= a operation. That is not in the I/O path so an extra step on create/delete= /resize/xattr would not be cumbersome. -Jim From: SPDK = > on behalf of Paul E Luse > Reply-To: Storage Performance Development Kit > Date: Monday, October 2, 2017 at 2:00 PM To: Storage Performance Development Kit > Subject: [SPDK] blobstore metadata questions, comments and potential issues Guys- Going through the finer details on MD handling (for the first time so forgi= ve misunderstandings) before looking more closely at Cunyn=E2=80=99s patch = (https://review.gerrithub.io/#/c/376470/ ) and I=E2=80=99m seeing some unex= pected, well IMHO, things that I wanted to cover real quick. Mostly they re= late to my very early comments on the patch where we never updated the clea= n bit in MD. Forget blobstore or the patch for a minute, in general I would argue that t= he most efficient way to manage clean/dirty metadata in a system like this = is: - When you init the system you are clean by definition so your on-= disk and in-memory structs should match and your =E2=80=98clean=E2=80=99 bi= t should be 1 in both cases - When you encounter an event that requires a metadata change: o If your in-memory clean=3D=3D0 do nothing wrt on disk sync=E2=80=99ing= because you=E2=80=99re already dirty o If your in-memory clean=3D=3D1 then set to 0 and write the on-disk cle= an to 0 so that (a) you know you don=E2=80=99t need to update on disk clean= w/next MD update and (b) you are protected from power fail because on disk= clean is now 1. Do not sync metadata, this is just an update to that bit = (or in our case a superblock-only write) - In each of these following scenarios do a full sync of the metad= ata and set clean to 1 both in memory and on disk o Just loaded or initialized the system o Unloading the system o Just recovered the system after loading and recognizing that clean was= 0 so you rebuilt everything So when I look through blobstore and see the following I can certainly cont= inue to review the patch as it builds on this but would like to follow it u= p with a patch to make it work like above so that we don=E2=80=99t have win= dows where we are dirty for no reason. But, before that I also have a few questions for things I just don=E2=80=99= t understand. - When we init a BS we claim the MD used cluster in memory but nev= er sync. I assume this is not an oversight because clean is 0 (but if we do= the stuff I mention above this would end with a superblock only update to = set clean to 1) - When we load a BS, (with the patch) we are going to immediately= change clean to 0 (assuming we didn=E2=80=99t come up dirty) and then turn= right around and not only update the superblock to set clean to 0 (just ex= plained how I feel about that) but then we recalc and then rewrite, to disk= the masks that we just read when nothing could have changed? If I read thi= s correctly, besides my comment about us not actually being dirty yet, why = are we updating the on disks masks again? - When an app calls spdk_bs_md_sync_blob after a resize or someth= ing, I don=E2=80=99t see where the masks on disk immediately following the = superblock are ever updated. It appears at least that we are only updating = he metadata for the blob itself and the in memory masks (in the bs struct) = but not the on disk masks. So any scenario where we do a resize & sync (or = xattr and sync) and have a dirty shutdown, even with the recovery code, is = going to end up corrupted right? It seems like the on disk masks that are s= tored just after the superblock need to be written as part of spdk_bs_md_sy= nc_blob() and from what I can tell they=E2=80=99re only updated with unload= today. This is, of course, independent of Cunyin=E2=80=99s patch but I wan= ted to ask about it since that=E2=80=99s the context I=E2=80=99m looking at= it from Sorry for the length email and all the claims/questions. I=E2=80=99m certai= n I have mis-read some of this stuff at least but w/o understanding these p= oints I can=E2=80=99t really responsibly review Cunyin=E2=80=99s patch whic= h is critical I think=E2=80=A6 well, his patch is critical I mean, not my r= eview of it =E2=98=BA -Paul --===============7827986007202045655== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iVGl0bGUiIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPSJLZXl3b3JkcyIgY29udGVu dD0iIj4NCjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUg KGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxlPjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8N CkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCglwYW5vc2UtMToyIDcg MyA5IDIgMiA1IDIgNCA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6V2luZ2RpbmdzOw0K CXBhbm9zZS0xOjUgMCAwIDAgMCAwIDAgMCAwIDA7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWls eToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMgMiA0O30NCkBmb250 LWZhY2UNCgl7Zm9udC1mYW1pbHk6RGVuZ1hpYW47DQoJcGFub3NlLTE6MiAxIDYgMCAzIDEgMSAx IDEgMTt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAx NSA1IDIgMiAyIDQgMyAyIDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFs LCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBpbjsNCgltYXJnaW4tYm90 dG9tOi4wMDAxcHQ7DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseTpDYWxpYnJpO30N CmE6bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNv bG9yOiMwNTYzQzE7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQphOnZpc2l0ZWQsIHNw YW4uTXNvSHlwZXJsaW5rRm9sbG93ZWQNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9y OiM5NTRGNzI7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpwLk1zb0xpc3RQYXJhZ3Jh cGgsIGxpLk1zb0xpc3RQYXJhZ3JhcGgsIGRpdi5Nc29MaXN0UGFyYWdyYXBoDQoJe21zby1zdHls ZS1wcmlvcml0eTozNDsNCgltYXJnaW4tdG9wOjBpbjsNCgltYXJnaW4tcmlnaHQ6MGluOw0KCW1h cmdpbi1ib3R0b206MGluOw0KCW1hcmdpbi1sZWZ0Oi41aW47DQoJbWFyZ2luLWJvdHRvbTouMDAw MXB0Ow0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTt9DQpzcGFuLkVt YWlsU3R5bGUxOA0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbDsNCglmb250LWZhbWlseTpDYWxp YnJpOw0KCWNvbG9yOndpbmRvd3RleHQ7fQ0Kc3Bhbi5FbWFpbFN0eWxlMTkNCgl7bXNvLXN0eWxl LXR5cGU6cGVyc29uYWw7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgljb2xvcjp3aW5kb3d0ZXh0 O30NCnNwYW4uRW1haWxTdHlsZTIwDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOw0KCWZvbnQt ZmFtaWx5OkNhbGlicmk7DQoJY29sb3I6IzFGNDk3RDt9DQpzcGFuLkVtYWlsU3R5bGUyMQ0KCXtt c28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsNCglmb250LWZhbWlseTpDYWxpYnJpOw0KCWNv bG9yOndpbmRvd3RleHQ7fQ0Kc3Bhbi5tc29JbnMNCgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9u bHk7DQoJbXNvLXN0eWxlLW5hbWU6IiI7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsNCglj b2xvcjp0ZWFsO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5 Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6OC41aW4g MTEuMGluOw0KCW1hcmdpbjoxLjBpbiAxLjBpbiAxLjBpbiAxLjBpbjt9DQpkaXYuV29yZFNlY3Rp b24xDQoJe3BhZ2U6V29yZFNlY3Rpb24xO30NCi8qIExpc3QgRGVmaW5pdGlvbnMgKi8NCkBsaXN0 IGwwDQoJe21zby1saXN0LWlkOjMwNDg5MDgwNjsNCgltc28tbGlzdC10eXBlOmh5YnJpZDsNCglt c28tbGlzdC10ZW1wbGF0ZS1pZHM6NjM5MTUzODIwIDIwNTA4OTQ4NzQgNjc2OTg2OTEgNjc2OTg2 OTMgNjc2OTg2ODkgNjc2OTg2OTEgNjc2OTg2OTMgNjc2OTg2ODkgNjc2OTg2OTEgNjc2OTg2OTM7 fQ0KQGxpc3QgbDA6bGV2ZWwxDQoJe21zby1sZXZlbC1zdGFydC1hdDowOw0KCW1zby1sZXZlbC1u dW1iZXItZm9ybWF0OmJ1bGxldDsNCgltc28tbGV2ZWwtdGV4dDotOw0KCW1zby1sZXZlbC10YWIt c3RvcDpub25lOw0KCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCgl0ZXh0LWluZGVu dDotLjI1aW47DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgltc28tZmFyZWFzdC1mb250LWZhbWls eTpDYWxpYnJpO30NCkBsaXN0IGwwOmxldmVsMg0KCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpi dWxsZXQ7DQoJbXNvLWxldmVsLXRleHQ6bzsNCgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsNCglt c28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQoJdGV4dC1pbmRlbnQ6LS4yNWluOw0KCWZv bnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7fQ0KQGxpc3QgbDA6bGV2ZWwzDQoJe21zby1sZXZlbC1u dW1iZXItZm9ybWF0OmJ1bGxldDsNCgltc28tbGV2ZWwtdGV4dDrvgqc7DQoJbXNvLWxldmVsLXRh Yi1zdG9wOm5vbmU7DQoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KCXRleHQtaW5k ZW50Oi0uMjVpbjsNCglmb250LWZhbWlseTpXaW5nZGluZ3M7fQ0KQGxpc3QgbDA6bGV2ZWw0DQoJ e21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCgltc28tbGV2ZWwtdGV4dDrvgrc7DQoJ bXNvLWxldmVsLXRhYi1zdG9wOm5vbmU7DQoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0 Ow0KCXRleHQtaW5kZW50Oi0uMjVpbjsNCglmb250LWZhbWlseTpTeW1ib2w7fQ0KQGxpc3QgbDA6 bGV2ZWw1DQoJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCgltc28tbGV2ZWwtdGV4 dDpvOw0KCW1zby1sZXZlbC10YWItc3RvcDpub25lOw0KCW1zby1sZXZlbC1udW1iZXItcG9zaXRp b246bGVmdDsNCgl0ZXh0LWluZGVudDotLjI1aW47DQoJZm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3 Ijt9DQpAbGlzdCBsMDpsZXZlbDYNCgl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0K CW1zby1sZXZlbC10ZXh0Ou+CpzsNCgltc28tbGV2ZWwtdGFiLXN0b3A6bm9uZTsNCgltc28tbGV2 ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQoJdGV4dC1pbmRlbnQ6LS4yNWluOw0KCWZvbnQtZmFt aWx5OldpbmdkaW5nczt9DQpAbGlzdCBsMDpsZXZlbDcNCgl7bXNvLWxldmVsLW51bWJlci1mb3Jt YXQ6YnVsbGV0Ow0KCW1zby1sZXZlbC10ZXh0Ou+CtzsNCgltc28tbGV2ZWwtdGFiLXN0b3A6bm9u ZTsNCgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQoJdGV4dC1pbmRlbnQ6LS4yNWlu Ow0KCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQpAbGlzdCBsMDpsZXZlbDgNCgl7bXNvLWxldmVsLW51 bWJlci1mb3JtYXQ6YnVsbGV0Ow0KCW1zby1sZXZlbC10ZXh0Om87DQoJbXNvLWxldmVsLXRhYi1z dG9wOm5vbmU7DQoJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KCXRleHQtaW5kZW50 Oi0uMjVpbjsNCglmb250LWZhbWlseToiQ291cmllciBOZXciO30NCkBsaXN0IGwwOmxldmVsOQ0K CXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQoJbXNvLWxldmVsLXRleHQ674KnOw0K CW1zby1sZXZlbC10YWItc3RvcDpub25lOw0KCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVm dDsNCgl0ZXh0LWluZGVudDotLjI1aW47DQoJZm9udC1mYW1pbHk6V2luZ2RpbmdzO30NCm9sDQoJ e21hcmdpbi1ib3R0b206MGluO30NCnVsDQoJe21hcmdpbi1ib3R0b206MGluO30NCi0tPjwvc3R5 bGU+DQo8L2hlYWQ+DQo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgbGFuZz0iRU4tVVMiIGxpbms9IiMw NTYzQzEiIHZsaW5rPSIjOTU0RjcyIj4NCjxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj5Xcml0aW5nIHRoZSBtYXNrcyB0byBkaXNrIG9uIGV2ZXJ5IHN5bmMg d291bGQga2lsbCBwZXJmb3JtYW5jZS4mbmJzcDsgVGFrZSBhIDJUQiBTU0QgZm9yIGV4YW1wbGUu Jm5ic3A7IEJ5IGRlZmF1bHQgaXQgd2lsbCBoYXZlIDIgbWlsbGlvbiBtZXRhZGF0YSBwYWdlcyBh bmQgMiBtaWxsaW9uIGNsdXN0ZXJzIChhc3N1bWluZyAxTUIgY2x1c3RlciBzaXplKSwgd2hpY2gg Y2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgYml0bWFzayBvZg0KIHNpemUgMjU2S0IgZm9yIGVhY2gg KDUxMktCIHRvdGFsKS4mbmJzcDsgV2UgZGVmaW5pdGVseSBkb27igJl0IHdhbnQgdG8gd3JpdGUg dGhhdCBvdXQgb24gZXZlcnkgc3luYyBvcGVyYXRpb24gdG8gZXZlcnkgYmxvYi48bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdiBz dHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6 My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPjxiPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+RnJvbTogPC9zcGFuPg0KPC9i PjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+U1BESyAmbHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjAx Lm9yZyZndDsgb24gYmVoYWxmIG9mIFBhdWwgRSBMdXNlICZsdDtwYXVsLmUubHVzZUBpbnRlbC5j b20mZ3Q7PGJyPg0KPGI+UmVwbHktVG86IDwvYj5TdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3Bt ZW50IEtpdCAmbHQ7c3Bka0BsaXN0cy4wMS5vcmcmZ3Q7PGJyPg0KPGI+RGF0ZTogPC9iPk1vbmRh eSwgT2N0b2JlciAyLCAyMDE3IGF0IDM6MTMgUE08YnI+DQo8Yj5UbzogPC9iPlN0b3JhZ2UgUGVy Zm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+DQo8 Yj5TdWJqZWN0OiA8L2I+UmU6IFtTUERLXSBibG9ic3RvcmUgbWV0YWRhdGEgcXVlc3Rpb25zLCBj b21tZW50cyBhbmQgcG90ZW50aWFsIGlzc3Vlczwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEyLjBwdDtjb2xvcjpibGFjayI+PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0 eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPjxvOnA+Jm5ic3A7 PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1h cmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5UaGFua3MgZm9yIHRo ZSBxdWljayByZXNwb25zZSBKaW0hIFdoYXQgeW91IHNheSB3aWxsIG9ubHkgYmUgdHJ1ZSBhZnRl ciB0aGUgcGVuZGluZyBwYXRjaCB0aGF0IEkgbWVudGlvbiBiZWxvdyBsYW5kcyB0aG91Z2ggY29y cmVjdD8NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9z cGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5BbHNvLCBpdCBzZWVtcyBsaWtl IGl0IHdvdWxkIGJlIGdvb2QgdG8gd3JpdGUgdGhvc2UgbWFza3Mgb3V0IG9uIGRpc2sgb24gc3lu YygpIGFzIHdlbGwgYXMgdGhpcyB3aWxsIHJlc3VsdCBpbiBhIGNsZWFuIE1EIGJ1dCwgb2YgY291 cnNlLCB0aGF0IG9ubHkgbWFrZXMgc2Vuc2Ugb25jZSB0aGUgY2xlYW4gYml0IHN1Z2dlc3Rpb24N CiBtZW50aW9uZWQgYmVsb3cgaXMgaW4gcGxhY2UuJm5ic3A7IEnigJlsbCB0YWtlIGNhcmUgb2Yg dGhhdCBvbmNlIHRoZSBjdXJyZW50IHBhdGNoIGxhbmRzIGp1c3QgdG8gc2ltcGx5IHJldmlldyAm YW1wOyBtZXJnaW5nIHNpbmNlIGl04oCZcyBub3QgdXJnZW50Ljwvc3Bhbj48bzpwPjwvbzpwPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBz dHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJjb2xv cjojMUY0OTdEIj5UaHg8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs IiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPlBh dWw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy Z2luLWxlZnQ6LjVpbiI+PGEgbmFtZT0iX01haWxFbmRDb21wb3NlIj48c3BhbiBzdHlsZT0iY29s b3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvYT48bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8ZGl2 IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGlu ZzozLjBwdCAwaW4gMGluIDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2lu LWxlZnQ6LjVpbiI+PGI+RnJvbTo8L2I+IFNQREsgW21haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMu MDEub3JnXQ0KPGI+T24gQmVoYWxmIE9mIDwvYj5IYXJyaXMsIEphbWVzIFI8YnI+DQo8Yj5TZW50 OjwvYj4gTW9uZGF5LCBPY3RvYmVyIDIsIDIwMTcgMjo0NiBQTTxicj4NCjxiPlRvOjwvYj4gU3Rv cmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0O3NwZGtAbGlzdHMuMDEub3JnJmd0 Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBSZTogW1NQREtdIGJsb2JzdG9yZSBtZXRhZGF0YSBxdWVz dGlvbnMsIGNvbW1lbnRzIGFuZCBwb3RlbnRpYWwgaXNzdWVzPG86cD48L286cD48L3A+DQo8L2Rp dj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4i PiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdp bi1sZWZ0Oi41aW4iPkhleSBQYXVsLDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPlRoZSBtYXNrcyBvbiBkaXNr IGFyZSBzb2xlbHkgYW4gb3B0aW1pemF0aW9uIGR1cmluZyBsb2FkLiZuYnNwOyBXZSBvbmx5IHdy aXRlIHRoZSBtYXNrcyBvdXQgdG8gZGlzayB3aGVuIGEgQmxvYnN0b3JlIGlzIHVubG9hZGVkLiZu YnNwOyBJZiBCbG9ic3RvcmUgaXMgbm90IHVubG9hZGVkIGNsZWFubHksIHdlIGNhbiByZWJ1aWxk IGJvdGggbWFza3Mgd2l0aCBhIGZ1bGwgd2FsayBvZiBhbGwNCiBvZiB0aGUgbWV0YWRhdGEgcGFn ZXMuJm5ic3A7IFRoaXMgYXZvaWRzIGFuIGV4dHJhIHBhZ2Ugd3JpdGUgb24gZXZlcnkgbWV0YWRh dGEgb3BlcmF0aW9uIChjcmVhdGUvZGVsZXRlL3Jlc2l6ZS94YXR0cikuDQo8bzpwPjwvbzpwPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJzcDs8 bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDou NWluIj5JIGFncmVlIHRoYXQgd2Ugc2hvdWxkIGRlZmVyIGNsZWFyaW5nIHRoZSBjbGVhbiBiaXQg dW50aWwgdGhlIGZpcnN0IG1ldGFkYXRhIG9wZXJhdGlvbi4mbmJzcDsgVGhhdCBpcyBub3QgaW4g dGhlIEkvTyBwYXRoIHNvIGFuIGV4dHJhIHN0ZXAgb24gY3JlYXRlL2RlbGV0ZS9yZXNpemUveGF0 dHIgd291bGQgbm90IGJlIGN1bWJlcnNvbWUuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+LUppbTxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZu YnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7 Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4i Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj48Yj48c3Bh biBzdHlsZT0iY29sb3I6YmxhY2siPkZyb206DQo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJjb2xv cjpibGFjayI+U1BESyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5v cmciPnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+Jmd0OyBvbiBiZWhhbGYgb2YgUGF1bCBF IEx1c2UgJmx0OzxhIGhyZWY9Im1haWx0bzpwYXVsLmUubHVzZUBpbnRlbC5jb20iPnBhdWwuZS5s dXNlQGludGVsLmNvbTwvYT4mZ3Q7PGJyPg0KPGI+UmVwbHktVG86IDwvYj5TdG9yYWdlIFBlcmZv cm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEu b3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7PGJyPg0KPGI+RGF0ZTogPC9iPk1vbmRheSwg T2N0b2JlciAyLCAyMDE3IGF0IDI6MDAgUE08YnI+DQo8Yj5UbzogPC9iPlN0b3JhZ2UgUGVyZm9y bWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5v cmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5TdWJqZWN0OiA8L2I+W1NQREtd IGJsb2JzdG9yZSBtZXRhZGF0YSBxdWVzdGlvbnMsIGNvbW1lbnRzIGFuZCBwb3RlbnRpYWwgaXNz dWVzPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+ R3V5cy08bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4t bGVmdDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPkdvaW5nIHRocm91Z2ggdGhlIGZpbmVyIGRldGFpbHMg b24gTUQgaGFuZGxpbmcgKGZvciB0aGUgZmlyc3QgdGltZSBzbyBmb3JnaXZlIG1pc3VuZGVyc3Rh bmRpbmdzKSBiZWZvcmUgbG9va2luZyBtb3JlIGNsb3NlbHkgYXQgQ3VueW7igJlzIHBhdGNoICg8 YSBocmVmPSJodHRwczovL3Jldmlldy5nZXJyaXRodWIuaW8vIy9jLzM3NjQ3MC8iPmh0dHBzOi8v cmV2aWV3LmdlcnJpdGh1Yi5pby8jL2MvMzc2NDcwLzwvYT4NCiApIGFuZCBJ4oCZbSBzZWVpbmcg c29tZSB1bmV4cGVjdGVkLCB3ZWxsIElNSE8sIHRoaW5ncyB0aGF0IEkgd2FudGVkIHRvIGNvdmVy IHJlYWwgcXVpY2suIE1vc3RseSB0aGV5IHJlbGF0ZSB0byBteSB2ZXJ5IGVhcmx5IGNvbW1lbnRz IG9uIHRoZSBwYXRjaCB3aGVyZSB3ZSBuZXZlciB1cGRhdGVkIHRoZSBjbGVhbiBiaXQgaW4gTUQu PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 MS4waW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1hcmdpbi1sZWZ0OjEuMGluIj5Gb3JnZXQgYmxvYnN0b3JlIG9yIHRoZSBwYXRjaCBmb3IgYSBt aW51dGUsIGluIGdlbmVyYWwgSSB3b3VsZCBhcmd1ZSB0aGF0IHRoZSBtb3N0IGVmZmljaWVudCB3 YXkgdG8gbWFuYWdlIGNsZWFuL2RpcnR5IG1ldGFkYXRhIGluIGEgc3lzdGVtIGxpa2UgdGhpcyBp czo8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTGlzdFBhcmFncmFw aCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluO3RleHQtaW5kZW50Oi0uMjVpbjttc28tbGlzdDps MCBsZXZlbDEgbGZvMiI+DQo8IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBzdHlsZT0ibXNvLWxp c3Q6SWdub3JlIj4tPHNwYW4gc3R5bGU9ImZvbnQ6Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFu JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsNCjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPldoZW4geW91IGluaXQgdGhlIHN5c3RlbSB5 b3UgYXJlIGNsZWFuIGJ5IGRlZmluaXRpb24gc28geW91ciBvbi1kaXNrIGFuZCBpbi1tZW1vcnkg c3RydWN0cyBzaG91bGQgbWF0Y2ggYW5kIHlvdXIg4oCYY2xlYW7igJkgYml0IHNob3VsZCBiZSAx IGluIGJvdGggY2FzZXM8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29MaXN0UGFyYWdyYXBo IiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW47dGV4dC1pbmRlbnQ6LS4yNWluO21zby1saXN0Omww IGxldmVsMSBsZm8yIj4NCjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuIHN0eWxlPSJtc28tbGlz dDpJZ25vcmUiPi08c3BhbiBzdHlsZT0iZm9udDo3LjBwdCAmcXVvdDtUaW1lcyBOZXcgUm9tYW4m cXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOw0KPC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+V2hlbiB5b3UgZW5jb3VudGVyIGFuIGV2ZW50 IHRoYXQgcmVxdWlyZXMgYSBtZXRhZGF0YSBjaGFuZ2U6PG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTGlzdFBhcmFncmFwaCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjIuMGluO3RleHQtaW5kZW50 Oi0uMjVpbjttc28tbGlzdDpsMCBsZXZlbDIgbGZvMiI+DQo8IVtpZiAhc3VwcG9ydExpc3RzXT48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPjxzcGFuIHN0 eWxlPSJtc28tbGlzdDpJZ25vcmUiPm88c3BhbiBzdHlsZT0iZm9udDo3LjBwdCAmcXVvdDtUaW1l cyBOZXcgUm9tYW4mcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOw0KPC9zcGFuPjwvc3Bhbj48L3Nw YW4+PCFbZW5kaWZdPklmIHlvdXIgaW4tbWVtb3J5IGNsZWFuPT0wIGRvIG5vdGhpbmcgd3J0IG9u IGRpc2sgc3luY+KAmWluZyBiZWNhdXNlIHlvdeKAmXJlIGFscmVhZHkgZGlydHk8bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29MaXN0UGFyYWdyYXBoIiBzdHlsZT0ibWFyZ2luLWxlZnQ6Mi4w aW47dGV4dC1pbmRlbnQ6LS4yNWluO21zby1saXN0OmwwIGxldmVsMiBsZm8yIj4NCjwhW2lmICFz dXBwb3J0TGlzdHNdPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZx dW90OyI+PHNwYW4gc3R5bGU9Im1zby1saXN0Oklnbm9yZSI+bzxzcGFuIHN0eWxlPSJmb250Ojcu MHB0ICZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQo8L3Nw YW4+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+SWYgeW91ciBpbi1tZW1vcnkgY2xlYW49PTEgdGhl biBzZXQgdG8gMCBhbmQgd3JpdGUgdGhlIG9uLWRpc2sgY2xlYW4gdG8gMCBzbyB0aGF0IChhKSB5 b3Uga25vdyB5b3UgZG9u4oCZdCBuZWVkIHRvIHVwZGF0ZSBvbiBkaXNrIGNsZWFuIHcvbmV4dCBN RCB1cGRhdGUgYW5kIChiKSB5b3UgYXJlIHByb3RlY3RlZCBmcm9tIHBvd2VyIGZhaWwgYmVjYXVz ZSBvbiBkaXNrIGNsZWFuIGlzIG5vdyAxLiZuYnNwOw0KIERvIG5vdCBzeW5jIG1ldGFkYXRhLCB0 aGlzIGlzIGp1c3QgYW4gdXBkYXRlIHRvIHRoYXQgYml0IChvciBpbiBvdXIgY2FzZSBhIHN1cGVy YmxvY2stb25seSB3cml0ZSk8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29MaXN0UGFyYWdy YXBoIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW47dGV4dC1pbmRlbnQ6LS4yNWluO21zby1saXN0 OmwwIGxldmVsMSBsZm8yIj4NCjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFuIHN0eWxlPSJtc28t bGlzdDpJZ25vcmUiPi08c3BhbiBzdHlsZT0iZm9udDo3LjBwdCAmcXVvdDtUaW1lcyBOZXcgUm9t YW4mcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOw0KPC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+SW4gZWFjaCBvZiB0aGVzZSBmb2xsb3dp bmcgc2NlbmFyaW9zIGRvIGEgZnVsbCBzeW5jIG9mIHRoZSBtZXRhZGF0YSBhbmQgc2V0IGNsZWFu IHRvIDEgYm90aCBpbiBtZW1vcnkgYW5kIG9uIGRpc2s8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29MaXN0UGFyYWdyYXBoIiBzdHlsZT0ibWFyZ2luLWxlZnQ6Mi4waW47dGV4dC1pbmRlbnQ6 LS4yNWluO21zby1saXN0OmwwIGxldmVsMiBsZm8yIj4NCjwhW2lmICFzdXBwb3J0TGlzdHNdPjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+PHNwYW4gc3R5 bGU9Im1zby1saXN0Oklnbm9yZSI+bzxzcGFuIHN0eWxlPSJmb250OjcuMHB0ICZxdW90O1RpbWVz IE5ldyBSb21hbiZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQo8L3NwYW4+PC9zcGFuPjwvc3Bh bj48IVtlbmRpZl0+SnVzdCBsb2FkZWQgb3IgaW5pdGlhbGl6ZWQgdGhlIHN5c3RlbTxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb0xpc3RQYXJhZ3JhcGgiIHN0eWxlPSJtYXJnaW4tbGVmdDoy LjBpbjt0ZXh0LWluZGVudDotLjI1aW47bXNvLWxpc3Q6bDAgbGV2ZWwyIGxmbzIiPg0KPCFbaWYg IXN1cHBvcnRMaXN0c10+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3 JnF1b3Q7Ij48c3BhbiBzdHlsZT0ibXNvLWxpc3Q6SWdub3JlIj5vPHNwYW4gc3R5bGU9ImZvbnQ6 Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsNCjwv c3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT5VbmxvYWRpbmcgdGhlIHN5c3RlbTxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb0xpc3RQYXJhZ3JhcGgiIHN0eWxlPSJtYXJnaW4tbGVmdDoy LjBpbjt0ZXh0LWluZGVudDotLjI1aW47bXNvLWxpc3Q6bDAgbGV2ZWwyIGxmbzIiPg0KPCFbaWYg IXN1cHBvcnRMaXN0c10+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3 JnF1b3Q7Ij48c3BhbiBzdHlsZT0ibXNvLWxpc3Q6SWdub3JlIj5vPHNwYW4gc3R5bGU9ImZvbnQ6 Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsNCjwv c3Bhbj48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXT5KdXN0IHJlY292ZXJlZCB0aGUgc3lzdGVtIGFm dGVyIGxvYWRpbmcgYW5kIHJlY29nbml6aW5nIHRoYXQgY2xlYW4gd2FzIDAgc28geW91IHJlYnVp bHQgZXZlcnl0aGluZzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1hcmdpbi1sZWZ0OjEuMGluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+U28gd2hlbiBJIGxvb2sgdGhyb3VnaCBi bG9ic3RvcmUgYW5kIHNlZSB0aGUgZm9sbG93aW5nIEkgY2FuIGNlcnRhaW5seSBjb250aW51ZSB0 byByZXZpZXcgdGhlIHBhdGNoIGFzIGl0IGJ1aWxkcyBvbiB0aGlzIGJ1dCB3b3VsZCBsaWtlIHRv IGZvbGxvdyBpdCB1cCB3aXRoIGEgcGF0Y2ggdG8gbWFrZSBpdCB3b3JrIGxpa2UgYWJvdmUgc28g dGhhdCB3ZSBkb27igJl0IGhhdmUNCiB3aW5kb3dzIHdoZXJlIHdlIGFyZSBkaXJ0eSBmb3Igbm8g cmVhc29uLiA8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs IiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPkJ1dCwgYmVmb3JlIHRoYXQgSSBhbHNvIGhhdmUg YSBmZXcgcXVlc3Rpb25zIGZvciB0aGluZ3MgSSBqdXN0IGRvbuKAmXQgdW5kZXJzdGFuZC48bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBp biI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTGlzdFBhcmFncmFwaCIgc3R5 bGU9Im1hcmdpbi1sZWZ0OjEuNWluO3RleHQtaW5kZW50Oi0uMjVpbjttc28tbGlzdDpsMCBsZXZl bDEgbGZvMiI+DQo8IVtpZiAhc3VwcG9ydExpc3RzXT48c3BhbiBzdHlsZT0ibXNvLWxpc3Q6SWdu b3JlIj4tPHNwYW4gc3R5bGU9ImZvbnQ6Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7 Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsN Cjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPldoZW4gd2UgPGI+aW5pdCBhIEJTPC9iPiB3ZSBjbGFp bSB0aGUgTUQgdXNlZCBjbHVzdGVyIGluIG1lbW9yeSBidXQgbmV2ZXIgc3luYy4gSSBhc3N1bWUg dGhpcyBpcyBub3QgYW4gb3ZlcnNpZ2h0IGJlY2F1c2UgY2xlYW4gaXMgMCAoYnV0IGlmIHdlIGRv IHRoZSBzdHVmZiBJIG1lbnRpb24gYWJvdmUgdGhpcyB3b3VsZCBlbmQgd2l0aCBhIHN1cGVyYmxv Y2sgb25seSB1cGRhdGUgdG8gc2V0IGNsZWFuIHRvDQogMSkgPG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTGlzdFBhcmFncmFwaCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluO3RleHQtaW5k ZW50Oi0uMjVpbjttc28tbGlzdDpsMCBsZXZlbDEgbGZvMiI+DQo8IVtpZiAhc3VwcG9ydExpc3Rz XT48c3BhbiBzdHlsZT0ibXNvLWxpc3Q6SWdub3JlIj4tPHNwYW4gc3R5bGU9ImZvbnQ6Ny4wcHQg JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCjwvc3Bhbj48L3NwYW4+PCFbZW5kaWZdPiZuYnNw O1doZW4gd2U8Yj4gbG9hZCBhIEJTPC9iPiwgKHdpdGggdGhlIHBhdGNoKSB3ZSBhcmUgZ29pbmcg dG8gaW1tZWRpYXRlbHkgY2hhbmdlIGNsZWFuIHRvIDAgKGFzc3VtaW5nIHdlIGRpZG7igJl0IGNv bWUgdXAgZGlydHkpIGFuZCB0aGVuIHR1cm4gcmlnaHQgYXJvdW5kIGFuZCBub3Qgb25seSB1cGRh dGUgdGhlIHN1cGVyYmxvY2sgdG8gc2V0IGNsZWFuIHRvIDAgKGp1c3QgZXhwbGFpbmVkIGhvdyBJ IGZlZWwgYWJvdXQNCiB0aGF0KSBidXQgdGhlbiB3ZSByZWNhbGMgYW5kIHRoZW4gcmV3cml0ZSwg dG8gZGlzayB0aGUgbWFza3MgdGhhdCB3ZSBqdXN0IHJlYWQgd2hlbiBub3RoaW5nIGNvdWxkIGhh dmUgY2hhbmdlZD8gSWYgSSByZWFkIHRoaXMgY29ycmVjdGx5LCBiZXNpZGVzIG15IGNvbW1lbnQg YWJvdXQgdXMgbm90IGFjdHVhbGx5IGJlaW5nIGRpcnR5IHlldCwgd2h5IGFyZSB3ZSB1cGRhdGlu ZyB0aGUgb24gZGlza3MgbWFza3MgYWdhaW4/DQo8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN c29MaXN0UGFyYWdyYXBoIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW47dGV4dC1pbmRlbnQ6LS4y NWluO21zby1saXN0OmwwIGxldmVsMSBsZm8yIj4NCjwhW2lmICFzdXBwb3J0TGlzdHNdPjxzcGFu IHN0eWxlPSJtc28tbGlzdDpJZ25vcmUiPi08c3BhbiBzdHlsZT0iZm9udDo3LjBwdCAmcXVvdDtU aW1lcyBOZXcgUm9tYW4mcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOw0KPC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0+Jm5ic3A7V2hlbiBh biBhcHAgY2FsbHMgPGI+c3Bka19ic19tZF9zeW5jX2Jsb2IgPC9iPmFmdGVyIGEgcmVzaXplIG9y IHNvbWV0aGluZywgSSBkb27igJl0IHNlZSB3aGVyZSB0aGUgbWFza3Mgb24gZGlzayBpbW1lZGlh dGVseSBmb2xsb3dpbmcgdGhlIHN1cGVyYmxvY2sgYXJlIGV2ZXIgdXBkYXRlZC4gSXQNCjxpPmFw cGVhcnM8L2k+IGF0IGxlYXN0IHRoYXQgd2UgYXJlIG9ubHkgdXBkYXRpbmcgaGUgbWV0YWRhdGEg Zm9yIHRoZSBibG9iIGl0c2VsZiBhbmQgdGhlIGluIG1lbW9yeSBtYXNrcyAoaW4gdGhlIGJzIHN0 cnVjdCkgYnV0IG5vdCB0aGUgb24gZGlzayBtYXNrcy4gU28gYW55IHNjZW5hcmlvIHdoZXJlIHdl IGRvIGEgcmVzaXplICZhbXA7IHN5bmMgKG9yIHhhdHRyIGFuZCBzeW5jKSBhbmQgaGF2ZSBhIGRp cnR5IHNodXRkb3duLCBldmVuIHdpdGggdGhlDQogcmVjb3ZlcnkgY29kZSwgaXMgZ29pbmcgdG8g ZW5kIHVwIGNvcnJ1cHRlZCByaWdodD8gSXQgc2VlbXMgbGlrZSB0aGUgb24gZGlzayBtYXNrcyB0 aGF0IGFyZSBzdG9yZWQganVzdCBhZnRlciB0aGUgc3VwZXJibG9jayBuZWVkIHRvIGJlIHdyaXR0 ZW4gYXMgcGFydCBvZg0KPGI+c3Bka19ic19tZF9zeW5jX2Jsb2IoKTwvYj4gYW5kIGZyb20gd2hh dCBJIGNhbiB0ZWxsIHRoZXnigJlyZSBvbmx5IHVwZGF0ZWQgd2l0aCA8Yj4NCnVubG9hZDwvYj4g dG9kYXkuIFRoaXMgaXMsIG9mIGNvdXJzZSwgaW5kZXBlbmRlbnQgb2YgQ3VueWlu4oCZcyBwYXRj aCBidXQgSSB3YW50ZWQgdG8gYXNrIGFib3V0IGl0IHNpbmNlIHRoYXTigJlzIHRoZSBjb250ZXh0 IEnigJltIGxvb2tpbmcgYXQgaXQgZnJvbTxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+U29ycnkgZm9yIHRo ZSBsZW5ndGggZW1haWwgYW5kIGFsbCB0aGUgY2xhaW1zL3F1ZXN0aW9ucy4gSeKAmW0gY2VydGFp biBJIGhhdmUgbWlzLXJlYWQgc29tZSBvZiB0aGlzIHN0dWZmIGF0IGxlYXN0IGJ1dCB3L28gdW5k ZXJzdGFuZGluZyB0aGVzZSBwb2ludHMgSSBjYW7igJl0IHJlYWxseSByZXNwb25zaWJseSByZXZp ZXcgQ3VueWlu4oCZcyBwYXRjaCB3aGljaCBpcw0KPGk+Y3JpdGljYWw8L2k+IEkgdGhpbmvigKYg d2VsbCwgaGlzIHBhdGNoIGlzIGNyaXRpY2FsIEkgbWVhbiwgbm90IG15IHJldmlldyBvZiBpdCA8 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6V2luZ2RpbmdzIj4NCko8L3NwYW4+PG86cD48L286cD48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPiZuYnNw OzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0 OjEuMGluIj4tUGF1bDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1hcmdpbi1sZWZ0OjEuMGluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPiZuYnNwOzxvOnA+ PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGlu Ij4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYm9keT4NCjwv aHRtbD4NCg== --===============7827986007202045655==--