PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlRlc3Qgc3VpdGUgbGV2ZWwgZml4dHVyZTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2ZpeHR1cmUuaHRtbCIgdGl0bGU9IkZpeHR1cmVzIG9yIGxldCBtZSByZXBlYXQgbXlzZWxmIj4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJwZXItdGVzdC1jYXNlLmh0bWwiIHRpdGxlPSJQZXIgdGVzdCBjYXNlIGZpeHR1cmUiPgo8bGluayByZWw9Im5leHQiIGhyZWY9Imdsb2JhbC5odG1sIiB0aXRsZT0iR2xvYmFsIGZpeHR1cmUiPgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0MS4yIiBzcmM9Ii4uLy4uLy4uLy4uL2pzL2Jvb3N0LXRlc3QuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KPHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCB3aWR0aD0iMTAlIj48YSBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIj48aW1nIGFsdD0iSG9tZSIgd2lkdGg9IjIyOSIgaGVpZ2h0PSI2MSIgYm9yZGVyPSIwIiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGVzdC9kb2Nib29rL2ltZy9ib29zdC50ZXN0LmxvZ28ucG5nIj48L2E+PC90ZD4KPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCI+ICZndDsgPGEgaHJlZj0iLi4vLi4vLi4vdXRmLmh0bWwiPlRoZSBVbml0IFRlc3QgRnJhbWV3b3JrPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uL3VzZXItZ3VpZGUuaHRtbCI+VXNlcidzIGd1aWRlPC9hPjxhIGhyZWY9Ii4uLy4uL3Rlc3RpbmctdG9vbHMuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPjxhIGhyZWY9Ii4uL2ZpeHR1cmUuaHRtbCI+Rml4dHVyZXM8L2E+PGEgaHJlZj0iLi4vdGVzdC1vdXRwdXQuaHRtbCI+CiAgICAgICZndDsKICAgICAgPC9hPjxiPlRlc3Qgc3VpdGUgc2hhcmVkPC9iPgo8L3RkPgo8dGQ+PGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGhyZWY9InBlci10ZXN0LWNhc2UuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgaHJlZj0iZ2xvYmFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDUgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0idXRmLnVzZXItZ3VpZGUuZml4dHVyZS50ZXN0LXN1aXRlLXNoYXJlZCI+PC9hPlRlc3Qgc3VpdGUgbGV2ZWwgZml4dHVyZTwvaDU+PC9kaXY+PC9kaXY+PC9kaXY+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgSWYgYWxsIHRlc3QgY2FzZXMgaW4gYSB0ZXN0IHJlcXVpcmUgdGhlIHNhbWUgZml4dHVyZSAoeW91IGNhbiBncm91cCB0ZXN0IGNhc2VzIGluIHRoZSB0ZXN0IHN1aXRlIGJhc2VkIG9uIGEKICAgZml4dHVyZSByZXF1aXJlZCkgeW91IGNhbiBtYWtlIGFub3RoZXIgc3RlcCB0b3dhcmQgYW4gYXV0b21hdGlvbiBvZiBhIHRlc3QgZml4dHVyZSBhc3NpZ25tZW50LiBUbyBhc3NpZ24gdGhlCiAgIHNhbWUgc2hhcmVkIGZpeHR1cmUgZm9yIGFsbCB0ZXN0IGNhc2VzIGluIGEgdGVzdCBzdWl0ZSB1c2UgdGhlIG1hY3JvIEJPT1NUX0ZJWFRVUkVfVEVTVF9TVUlURSBpbiBwbGFjZSBvZiB0aGUKICAgbWFjcm8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vdGVzdC1vcmdhbml6YXRpb24vYXV0by10ZXN0LXN1aXRlLmh0bWwjQk9PU1RfQVVUT19URVNUX1NVSVRFIj5CT09TVF9BVVRPX1RFU1RfU1VJVEU8L2E+PC9jb2RlPiBmb3IgYXV0b21hdGVkIHRlc3Qgc3VpdGUgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbi4KICA8L3A+CjxwcmUgY2xhc3M9ImlubGluZS1zeW5vcHNpcyI+CjxhIG5hbWU9IkJPT1NUX0ZJWFRVUkVfVEVTVF9TVUlURSI+PC9hPkJPT1NUX0ZJWFRVUkVfVEVTVF9TVUlURSg8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zdWl0ZV9uYW1lPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5maXh1cmVfbmFtZTwvZW0+PC9zcGFuPik8L3ByZT4KPHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICBPbmNlIGFnYWluIHRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSB0aGUgbWFjcm8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vdGVzdC1vcmdhbml6YXRpb24vYXV0by10ZXN0LXN1aXRlLmh0bWwjQk9PU1RfQVVUT19URVNUX1NVSVRFIj5CT09TVF9BVVRPX1RFU1RfU1VJVEU8L2E+PC9jb2RlPiB1c2FnZSBpcyB0aGUgcHJlc2VuY2Ugb2YKICAgYW4gZXh0cmEgYXJndW1lbnQgLSB0aGUgZml4dHVyZSBuYW1lLiBBbmQgbm93LCB5b3Ugbm90IG9ubHkgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwdWJsaWMgYW5kIHByb3RlY3RlZCBtZW1iZXJzCiAgIG9mIHRoZSBmaXh0dXJlLCBidXQgYWxzbyBkbyBub3QgbmVlZCB0byByZWZlciB0byB0aGUgZml4dHVyZSBuYW1lIGluIHRlc3QgY2FzZSBkZWZpbml0aW9uLiBBbGwgdGVzdCBjYXNlcyBhc3NpZ25lZAogICB0aGUgc2FtZSBmaXh0dXJlIGF1dG9tYXRpY2FsbHkuCiAgPC9wPgo8ZGl2IGNsYXNzPSJ0aXAiPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IlRpcCI+Cjx0cj4KPHRkIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUiPjxpbWcgYWx0PSJbVGlwXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvdGlwLnBuZyI+PC90ZD4KPHRoIGFsaWduPSJsZWZ0Ij5UaXA8L3RoPgo8L3RyPgo8dHI+PHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHA+CiAgICBJZiBuZWNlc3NhcnkgeW91IGNhbiByZXNldCB0aGUgZml4dHVyZSBmb3IgYSBwYXJ0aWN1bGFyIHRlc3QgY2FzZSB3aXRoIHRoZSB1c2Ugb2YgdGhlIG1hY3JvIAogICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0icGVyLXRlc3QtY2FzZS5odG1sI0JPT1NUX0ZJWFRVUkVfVEVTVF9DQVNFIj5CT09TVF9GSVhUVVJFX1RFU1RfQ0FTRTwvYT48L2NvZGU+LgogICA8L3A+PC90ZD48L3RyPgo8L3RhYmxlPjwvZGl2Pgo8ZGl2IGNsYXNzPSJub3RlIj48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJOb3RlIj4KPHRyPgo8dGQgcm93c3Bhbj0iMiIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSI+PGltZyBhbHQ9IltOb3RlXSIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbm90ZS5wbmciPjwvdGQ+Cjx0aCBhbGlnbj0ibGVmdCI+Tm90ZTwvdGg+CjwvdHI+Cjx0cj48dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD4KICAgIFRoZSBmaXh0dXJlIGFzc2lnbm1lbnQgaXMgImRlZXAiLiBJbiBvdGhlciB3b3JkcyB1bmxlc3MgcmVzZXQgYnkgYW5vdGhlciAKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9InRlc3Qtc3VpdGUtc2hhcmVkLmh0bWwjQk9PU1RfRklYVFVSRV9URVNUX1NVSVRFIj5CT09TVF9GSVhUVVJFX1RFU1RfU1VJVEU8L2E+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJwZXItdGVzdC1jYXNlLmh0bWwjQk9PU1RfRklYVFVSRV9URVNUX0NBU0UiPkJPT1NUX0ZJWFRVUkVfVEVTVF9DQVNFPC9hPjwvY29kZT4gZGVmaW5pdGlvbiB0aGUgCiAgICBzYW1lIGZpeHR1cmUgaXMgYXNzaWduZWQgdG8gYWxsIHRlc3QgY2FzZXMsIGluY2x1ZGluZyBvbmVzIHRoYXQgYmVsb25nIHRvIHRoZSBzdWIgdGVzdCBzdWl0ZXMuCiAgIDwvcD48L3RkPjwvdHI+CjwvdGFibGU+PC9kaXY+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS5maXh0dXJlLnRlc3Qtc3VpdGUtc2hhcmVkLmV4YW1wbGUxOSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAyNC6gVGVzdCBzdWl0ZSBsZXZlbCBmaXh0dXJlPC9iPjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEJPT1NUX1RFU1RfTU9EVUxFIGV4YW1wbGUKI2luY2x1ZGUgJmx0O2Jvb3N0L3Rlc3QvaW5jbHVkZWQvdW5pdF90ZXN0LmhwcCZndDsKCnN0cnVjdCBGIHsKICAgIEYoKSA6IGkoIDAgKSB7IEJPT1NUX1RFU1RfTUVTU0FHRSggInNldHVwIGZpeHR1cmUiICk7IH0KICAgIH5GKCkgICAgICAgICB7IEJPT1NUX1RFU1RfTUVTU0FHRSggInRlYXJkb3duIGZpeHR1cmUiICk7IH0KCiAgICBpbnQgaTsKfTsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9GSVhUVVJFX1RFU1RfU1VJVEUoIHMsIEYgKQoKQk9PU1RfQVVUT19URVNUX0NBU0UoIHRlc3RfY2FzZTEgKQp7CiAgICBCT09TVF9DSEVDSyggaSA9PSAxICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfQ0FTRSggdGVzdF9jYXNlMiApCnsKICAgIEJPT1NUX0NIRUNLX0VRVUFMKCBpLCAwICk7Cn0KCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpCT09TVF9BVVRPX1RFU1RfU1VJVEVfRU5EKCkKCjwvcHJlPgo8dGFibGUgY2xhc3M9InNpbXBsZWxpc3QiIGJvcmRlcj0iMCIgc3VtbWFyeT0iU2ltcGxlIGxpc3QiPjx0cj4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIuLi8uLi8uLi8uLi9zcmMvZXhhbXBsZXMvZXhhbXBsZTE5LmNwcCIgdGFyZ2V0PSJfdG9wIj5Tb3VyY2UgY29kZTwvYT48L2NvZGU+PC90ZD4KPHRkPiB8IDwvdGQ+Cjx0ZD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PGEgaHJlZj0iIyIgdGFyZ2V0PSJfdG9wIiBpZD0iaWQ2NTI5ODQiIG9uY2xpY2s9InRvZ2dsZV9lbGVtZW50KCAnZXhhbXBsZTE5LW91dHB1dCcsICdpZDY1Mjk4NCcsICdTaG93IG91dHB1dCcsICdIaWRlIG91dHB1dCcgKTsgcmV0dXJuIGZhbHNlOyI+U2hvdyBvdXRwdXQ8L2E+PC9jb2RlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHByZSBjbGFzcz0iZXhhbXBsZS1vdXRwdXQiIGlkPSJleGFtcGxlMTktb3V0cHV0Ij4mZ3Q7IGV4YW1wbGUKUnVubmluZyAyIHRlc3QgY2FzZXMuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKdGVzdC5jcHAoMTcpOiBlcnJvciBpbiAidGVzdF9jYXNlMSI6IGNoZWNrIGkgPT0gMSBmYWlsZWQKCioqKiAxIGZhaWx1cmUgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiZXhhbXBsZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KPC9kaXY+Cjx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgo8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgqSAyMDAxLTIwMDcgR2VubmFkaXkgUm96ZW50YWw8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0icGVyLXRlc3QtY2FzZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2ZpeHR1cmUuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ2xvYmFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==