PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgo8aHRtbD48aGVhZD48dGl0bGU+QysrIFN0YW5kYXJkIExpYnJhcnkgRGVmZWN0IFJlcG9ydCBMaXN0PC90aXRsZT4KCjxzdHlsZT5pbnMge2JhY2tncm91bmQtY29sb3I6I0ZGRkZBMH0KZGVsIHtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGQTB9PC9zdHlsZT48L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSIjZmZmZmZmIiB0ZXh0PSIjMDAwMDAwIj4KPHRhYmxlPgo8dGJvZHk+PHRyPgo8dGQgYWxpZ249ImxlZnQiPkRvYy4gbm8uPC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5OMjEzMT0wNi0wMjAxPC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPkRhdGU6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij4yMDA2LTExLTAzPC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPlByb2plY3Q6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Qcm9ncmFtbWluZyBMYW5ndWFnZSBDKys8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+UmVwbHkgdG86PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Ib3dhcmQgSGlubmFudCAmbHQ7aG93YXJkLmhpbm5hbnRAZ21haWwuY29tJmd0OzwvdGQ+CjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPGgxPkMrKyBTdGFuZGFyZCBMaWJyYXJ5IERlZmVjdCBSZXBvcnQgTGlzdCAoUmV2aXNpb24gUjQ1KTwvaDE+CiAgPHA+UmVmZXJlbmNlIElTTy9JRUMgSVMgMTQ4ODI6MTk5OChFKTwvcD4KICA8cD5BbHNvIHNlZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctdG9jLmh0bWwiPlRhYmxlIG9mIENvbnRlbnRzPC9hPiBmb3IgYWxsIGxpYnJhcnkgaXNzdWVzLjwvbGk+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCI+SW5kZXggYnkgU2VjdGlvbjwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sIj5JbmRleCBieSBTdGF0dXM8L2E+IGZvciBhbGwgbGlicmFyeSBpc3N1ZXMuPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIj5MaWJyYXJ5IEFjdGl2ZSBJc3N1ZXMgTGlzdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwiPkxpYnJhcnkgQ2xvc2VkIElzc3VlcyBMaXN0PC9hPjwvbGk+CiAgICA8L3VsPgogIDxwPlRoaXMgZG9jdW1lbnQgY29udGFpbnMgb25seSBsaWJyYXJ5IGlzc3VlcyB3aGljaCBoYXZlIGJlZW4gY2xvc2VkCiAgYnkgdGhlIExpYnJhcnkgV29ya2luZyBHcm91cCAoTFdHKSBhZnRlciBiZWluZyBmb3VuZCB0byBiZSBkZWZlY3RzCiAgaW4gdGhlIHN0YW5kYXJkLiAgVGhhdCBpcywgaXNzdWVzIHdoaWNoIGhhdmUgYSBzdGF0dXMgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiwgb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjUlIiPlJSPC9hPi4gU2VlIHRoZQogIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIj5MaWJyYXJ5IENsb3NlZCBJc3N1ZXMgTGlzdDwvYT4gZm9yIGlzc3VlcyBjbG9zZWQgYXMgbm9uLWRlZmVjdHMuICBTZWUgdGhlCiAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwiPkxpYnJhcnkgQWN0aXZlIElzc3VlcyBMaXN0PC9hPiBmb3IgYWN0aXZlIGlzc3VlcyBhbmQgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZQogIGludHJvZHVjdG9yeSBtYXRlcmlhbCBpbiB0aGF0IGRvY3VtZW50IGFsc28gYXBwbGllcyB0byB0aGlzCiAgZG9jdW1lbnQuPC9wPgo8aDI+UmV2aXNpb24gSGlzdG9yeTwvaDI+Cjx1bD4KPGxpPlI0NTogCjIwMDYtMTEtMDMgcG9zdC1Qb3J0bGFuZCBtYWlsaW5nLgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyMCI+NTIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyMSI+NTIxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzMCI+NTMwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzNSI+NTM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzNyI+NTM3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzOCI+NTM4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU0MCI+NTQwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU0MSI+NTQxPC9hPiB0byBXUC4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNCI+NTA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEyIj41MTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTYiPjUxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0NCI+NTQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ5Ij41NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NTQiPjU1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NSI+NTU1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTU4Ij41NTg8L2E+IHRvIE5BRC4KTW92ZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTY5Ij41Njk8L2E+IHRvIER1cC4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUxOCI+NTE4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIzIj41MjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjQiPjUyNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU0MiI+NTQyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTU2Ij41NTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NTciPjU1NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU1OSI+NTU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTk3Ij41OTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDYiPjYwNjwvYT4gdG8gT3Blbi4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU0MyI+NTQzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTQ1Ij41NDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0OSI+NTQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTk4Ij41OTg8L2E+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjAzIj42MDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDUiPjYwNTwvYT4gdG8gUmVhZHkuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MzEiPjUzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU1MSI+NTUxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjA0Ij42MDQ8L2E+IHRvIFJldmlldy4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1OTMiPjU5MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjA5Ij42MDk8L2E+Lgo8L2xpPgo8bGk+UjQ0OiAKMjAwNi0wOS0wOCBwcmUtUG9ydGxhbmQgbWFpbGluZy4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1ODMiPjU4MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTkyIj41OTI8L2E+Lgo8L2xpPgo8bGk+UjQzOiAKMjAwNi0wNi0yMyBtaWQtdGVybSBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU3NSI+NTc1PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1ODIiPjU4MjwvYT4uClJlb3BlbmVkIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzI1NSI+MjU1PC9hPi4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MjAiPjUyMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDEiPjU0MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0NCI+NTQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTY5Ij41Njk8L2E+IHRvIFRlbnRhdGl2ZWx5IFJlYWR5Lgo8L2xpPgo8bGk+UjQyOiAKMjAwNi0wNC0yMSBwb3N0LUJlcmxpbiBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU2NyI+NTY3PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NzIiPjU3MjwvYT4uCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0OTkiPjQ5OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwMSI+NTAxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA2Ij41MDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDkiPjUwOTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTExIj41MTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTMiPjUxMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNCI+NTE0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE3Ij41MTc8L2E+IHRvIE5BRC4KTW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUwMiI+NTAyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTAzIj41MDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MTUiPjUxNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNiI+NTE2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIyIj41MjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjUiPjUyNTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTI5Ij41Mjk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MzIiPjUzMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzNiI+NTM2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTM5Ij41Mzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NDgiPjU0ODwvYT4gdG8gT3Blbi4KTW92ZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA0Ij41MDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTIiPjUxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MjEiPjUyMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzAiPjUzMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzMSI+NTMxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzNSI+NTM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzNyI+NTM3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzOCI+NTM4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU0MCI+NTQwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ5Ij41NDk8L2E+IHRvIFJlYWR5LgpNb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0NyI+MjQ3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5NCI+Mjk0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM2MiI+MzYyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM2OSI+MzY5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM3MSI+MzcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM3NiI+Mzc2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4NCI+Mzg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3NSI+NDc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3OCI+NDc4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5NSI+NDk1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5NyI+NDk3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUwNSI+NTA1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUwNyI+NTA3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUwOCI+NTA4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUxOSI+NTE5PC9hPiB0byBXUC4KTW92ZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTM0Ij41MzQ8L2E+IHRvIFJldmlldy4KPC9saT4KPGxpPlI0MTogCjIwMDYtMDItMjQgcHJlLUJlcmxpbiBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzNiI+NTM2PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NjYiPjU2NjwvYT4uCk1vdmVkIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM0MiI+MzQyPC9hPiBmcm9tIFJlYWR5IHRvIE9wZW4uClJlb3BlbmVkIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzMwOSI+MzA5PC9hPi4KPC9saT4KPGxpPlI0MDogCjIwMDUtMTItMTYgbWlkLXRlcm0gbWFpbGluZy4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjkiPjUyOTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUzNSI+NTM1PC9hPi4KPC9saT4KPGxpPlIzOTogCjIwMDUtMTAtMTQgcG9zdC1Nb250IFRyZW1ibGFudCBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyNiI+NTI2PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjgiPjUyODwvYT4uCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjgwIj4yODA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDYxIj40NjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY0Ij40NjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY1Ij40NjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY3Ij40Njc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY4Ij40Njg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc0Ij40NzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk2Ij40OTY8L2E+IGZyb20gUmVhZHkgdG8gV1AgYXMgcGVyIHRoZSB2b3RlIGZyb20gTW9udCBUcmVtYmxhbnQuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQ3Ij4yNDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk0Ij4yOTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzNDIiPjM0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjIiPjM2MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjkiPjM2OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNzEiPjM3MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNzYiPjM3NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODQiPjM4NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzUiPjQ3NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzgiPjQ3ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OTUiPjQ5NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OTciPjQ5NzwvYT4gZnJvbSBSZXZpZXcgdG8gUmVhZHkuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0OTgiPjQ5ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNCI+NTA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA2Ij41MDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDkiPjUwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMCI+NTEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTExIj41MTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTIiPjUxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMyI+NTEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE0Ij41MTQ8L2E+IGZyb20gTmV3IHRvIE9wZW4uCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA1Ij41MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA3Ij41MDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA4Ij41MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTE5Ij41MTk8L2E+IGZyb20gTmV3IHRvIFJlYWR5LgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDAiPjUwMDwvYT4gZnJvbSBOZXcgdG8gTkFELgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MTgiPjUxODwvYT4gZnJvbSBOZXcgdG8gUmV2aWV3Lgo8L2xpPgo8bGk+UjM4OiAKMjAwNS0wNy0wMyBwcmUtTW9udCBUcmVtYmxhbnQgbWFpbGluZy4KTWVyZ2VkIG9wZW4gVFIxIGlzc3VlcyBpbiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDQiPjUwNDwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIyIj41MjI8L2E+LgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyMyI+NTIzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjMiPjUyMzwvYT4KPC9saT4KPGxpPlIzNzogCjIwMDUtMDYgbWlkLXRlcm0gbWFpbGluZy4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0OTgiPjQ5ODwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTAzIj41MDM8L2E+Lgo8L2xpPgo8bGk+UjM2OiAKMjAwNS0wNCBwb3N0LUxpbGxlaGFtbWVyIG1haWxpbmcuIEFsbCBpc3N1ZXMgaW4gInJlYWR5IiBzdGF0dXMgZXhjZXB0CmZvciA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NTQiPjQ1NDwvYT4gd2VyZSBtb3ZlZCB0byAiRFIiIHN0YXR1cywgYW5kIGFsbCBpc3N1ZXMKcHJldmlvdXNseSBpbiAiRFIiIHN0YXR1cyB3ZXJlIG1vdmVkIHRvICJXUCIuCjwvbGk+CjxsaT5SMzU6IAoyMDA1LTAzIHByZS1MaWxsZWhhbW1lciBtYWlsaW5nLgo8L2xpPgo8bGk+UjM0OiAKMjAwNS0wMSBtaWQtdGVybSBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0ODgiPjQ4ODwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDk0Ij40OTQ8L2E+Lgo8L2xpPgo8bGk+UjMzOiAKMjAwNC0xMSBwb3N0LVJlZG1vbmQgbWFpbGluZy4gUmVmbGVjdHMgYWN0aW9ucyB0YWtlbiBpbiBSZWRtb25kLgo8L2xpPgo8bGk+UjMyOiAKMjAwNC0wOSBwcmUtUmVkbW9uZCBtYWlsaW5nOiByZWZsZWN0cyBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbnMgYW5kCm5ldyBpc3N1ZXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIDIwMDQtMDcgbWFpbGluZy4gIEFkZGVkCm5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDc5Ij40Nzk8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ4MSI+NDgxPC9hPi4KPC9saT4KPGxpPlIzMTogCjIwMDQtMDcgbWlkLXRlcm0gbWFpbGluZzogcmVmbGVjdHMgbmV3IHByb3Bvc2VkIHJlc29sdXRpb25zIGFuZApuZXcgaXNzdWVzIHJlY2VpdmVkIGFmdGVyIHRoZSBwb3N0LVN5ZG5leSBtYWlsaW5nLiAgQWRkZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NjMiPjQ2MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ3OCI+NDc4PC9hPi4KPC9saT4KPGxpPlIzMDogClBvc3QtU3lkbmV5IG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBTeWRuZXkgbWVldGluZy4KVm90ZWQgYWxsICJSZWFkeSIgaXNzdWVzIGZyb20gUjI5IGludG8gdGhlIHdvcmtpbmcgcGFwZXIuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ2MCI+NDYwPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NjIiPjQ2MjwvYT4uCjwvbGk+CjxsaT5SMjk6IApQcmUtU3lkbmV5IG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NDEiPjQ0MTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ1NyI+NDU3PC9hPi4KPC9saT4KPGxpPlIyODogClBvc3QtS29uYSBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgS29uYSBtZWV0aW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0MzIiPjQzMjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDQwIj40NDA8L2E+Lgo8L2xpPgo8bGk+UjI3OiAKUHJlLUtvbmEgbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQwNCI+NDA0PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0MzEiPjQzMTwvYT4uCjwvbGk+CjxsaT5SMjY6IApQb3N0LU94Zm9yZCBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgT3hmb3JkIG1lZXRpbmcuCkFsbCBpc3N1ZXMgaW4gUmVhZHkgc3RhdHVzIHdlcmUgdm90ZWQgaW50byBEUiBzdGF0dXMuICBBbGwgaXNzdWVzIGluCkRSIHN0YXR1cyB3ZXJlIHZvdGVkIGludG8gV1Agc3RhdHVzLgo8L2xpPgo8bGk+UjI1OiAKUHJlLU94Zm9yZCBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzOTAiPjM5MDwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQwMiI+NDAyPC9hPi4KPC9saT4KPGxpPlIyNDogClBvc3QtU2FudGEgQ3J1eiBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgU2FudGEgQ3J1egptZWV0aW5nLiAgQWxsIFJlYWR5IGlzc3VlcyBmcm9tIFIyMyB3aXRoIHRoZSBleGNlcHRpb24gb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MyI+MjUzPC9hPiwgd2hpY2ggaGFzIGJlZW4gZ2l2ZW4gYSBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbiwgd2VyZQptb3ZlZCB0byBEUiBzdGF0dXMuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODMiPjM4MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4OSI+Mzg5PC9hPi4gIChJc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzg3Ij4zODc8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODkiPjM4OTwvYT4gd2VyZSBkaXNjdXNzZWQKYXQgdGhlIG1lZXRpbmcuKSAgTWFkZSBwcm9ncmVzcyBvbiBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPiBoYXZlIGJlZW4gbW92ZWQgdG8gUmVhZHkgc3RhdHVzLCBhbmQgdGhlIG9ubHkgcmVtYWluaW5nCmNvbmNlcm5zIHdpdGggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiBpbnZvbHZlIHdvcmRpbmcuCjwvbGk+CjxsaT5SMjM6IApQcmUtU2FudGEgQ3J1eiBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNjciPjM2NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzgyIj4zODI8L2E+LgpNb3ZlZCBpc3N1ZXMgaW4gdGhlIFRDIHRvIFRDIHN0YXR1cy4KPC9saT4KPGxpPlIyMjogClBvc3QtQ3VyYedhbyBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzYyIj4zNjI8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2NiI+MzY2PC9hPi4KPC9saT4KPGxpPlIyMTogClByZS1DdXJh52FvIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM1MSI+MzUxPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNjEiPjM2MTwvYT4uCjwvbGk+CjxsaT5SMjA6IApQb3N0LVJlZG1vbmQgbWFpbGluZzsgcmVmbGVjdHMgYWN0aW9ucyB0YWtlbiBpbiBSZWRtb25kLiAgQWRkZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzM2Ij4zMzY8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM1MCI+MzUwPC9hPiwgb2Ygd2hpY2ggaXNzdWVzIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzQ3Ij4zNDc8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM1MCI+MzUwPC9hPiB3ZXJlIGFkZGVkIHNpbmNlIFJlZG1vbmQsIGhlbmNlCm5vdCBkaXNjdXNzZWQgYXQgdGhlIG1lZXRpbmcuICAKCkFsbCBSZWFkeSBpc3N1ZXMgd2VyZSBtb3ZlZCB0byBEUiBzdGF0dXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4NCI+Mjg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0MSI+MjQxPC9hPiwgYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI2NyI+MjY3PC9hPi4KCk5vdGV3b3J0aHkgaXNzdWVzIGRpc2N1c3NlZCBhdCBSZWRtb25kIGluY2x1ZGUgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjAiPjEyMDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwMiI+MjAyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjMzIj4yMzM8L2E+LCAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MCI+MjcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MyI+MjUzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjU0Ij4yNTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4uCjwvbGk+CjxsaT5SMTk6IApQcmUtUmVkbW9uZCBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzIzIj4zMjM8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMzUiPjMzNTwvYT4uCjwvbGk+CjxsaT5SMTg6IApQb3N0LUNvcGVuaGFnZW4gbWFpbGluZzsgcmVmbGVjdHMgYWN0aW9ucyB0YWtlbiBpbiBDb3BlbmhhZ2VuLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMTIiPjMxMjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxNyI+MzE3PC9hPiwgYW5kIGRpc2N1c3NlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzEiPjI3MTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzE0Ij4zMTQ8L2E+LgoKQ2hhbmdlZCBzdGF0dXMgb2YgaXNzdWVzCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDMiPjEwMzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExOCI+MTE4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM2Ij4xMzY8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNTMiPjE1MzwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE2NSI+MTY1PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTcxIj4xNzE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODMiPjE4MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NCI+MTg0PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg1Ij4xODU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODYiPjE4NjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxNCI+MjE0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIxIj4yMjE8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzQiPjIzNDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNyI+MjM3PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQzIj4yNDM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDgiPjI0ODwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MSI+MjUxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUyIj4yNTI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTYiPjI1NjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2MCI+MjYwPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYxIj4yNjE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjIiPjI2MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2MyI+MjYzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY1Ij4yNjU8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjgiPjI2ODwvYT4KdG8gRFIuCgpDaGFuZ2VkIHN0YXR1cyBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5Ij40OTwvYT4gIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDkiPjEwOTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNyI+MTE3PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTgyIj4xODI8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjgiPjIyODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzMCI+MjMwPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMyIj4yMzI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzUiPjIzNTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzOCI+MjM4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4yNDE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDIiPjI0MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MCI+MjUwPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjU5Ij4yNTk8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjQiPjI2NDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NiI+MjY2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNjciPjI2NzwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MSI+MjcxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcyIj4yNzI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzMiPjI3MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3NSI+Mjc1PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjgxIj4yODE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODQiPjI4NDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4NSI+Mjg1PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg2Ij4yODY8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODgiPjI4ODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5MiI+MjkyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk1Ij4yOTU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTciPjI5NzwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5OCI+Mjk4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzAxIj4zMDE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDMiPjMwMzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwNiI+MzA2PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzA3Ij4zMDc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDgiPjMwODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxMiI+MzEyPC9hPgp0byBSZWFkeS4KCkNsb3NlZCBpc3N1ZXMgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzExMSI+MTExPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNzciPjI3NzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjc5Ij4yNzk8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI4NyI+Mjg3PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyODkiPjI4OTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjkzIj4yOTM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMwMiI+MzAyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMTMiPjMxMzwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzE0Ij4zMTQ8L2E+CmFzIE5BRC4KCjwvbGk+CjxsaT5SMTc6IApQcmUtQ29wZW5oYWdlbiBtYWlsaW5nLiAgQ29udmVydGVkIGlzc3VlcyBsaXN0IHRvIFhNTC4gIEFkZGVkIHByb3Bvc2VkCnJlc29sdXRpb25zIGZvciBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ5Ij40OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NiI+NzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOTEiPjkxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNSI+MjM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MCI+MjUwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjY3Ij4yNjc8L2E+LgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzgiPjI3ODwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxMSI+MzExPC9hPi4KPC9saT4KPGxpPlIxNjogIApwb3N0LVRvcm9udG8gbWFpbGluZzsgcmVmbGVjdHMgYWN0aW9ucyB0YWtlbiBpbiBUb3JvbnRvLiBBZGRlZCBuZXcKaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjUiPjI2NTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjc3Ij4yNzc8L2E+LiAgQ2hhbmdlZCBzdGF0dXMgb2YgaXNzdWVzCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzIj4zPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzgiPjg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOSI+OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOSI+MTk8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYiPjI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxIj4zMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MSI+NjE8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjMiPjYzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzg2Ij44NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDgiPjEwODwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTIiPjExMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTQiPjExNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTUiPjExNTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjIiPjEyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjciPjEyNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjkiPjEyOTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzQiPjEzNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzciPjEzNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNDIiPjE0MjwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNDQiPjE0NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNDYiPjE0NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNDciPjE0NzwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNTkiPjE1OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNjQiPjE2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzAiPjE3MDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODEiPjE4MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTkiPjE5OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMDgiPjIwODwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMDkiPjIwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTAiPjIxMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTEiPjIxMTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTIiPjIxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTciPjIxNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjAiPjIyMDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjIiPjIyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjMiPjIyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjQiPjIyNDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjciPjIyNzwvYT4gdG8gIkRSIi4gIFJlb3BlbmVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzIzIj4yMzwvYT4uIFJlb3BlbmVkCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODciPjE4NzwvYT4uIENoYW5nZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzIiPjI8L2E+IGFuZAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0Ij40PC9hPiB0byBOQUQuIEZpeGVkIGEgdHlwbyBpbiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTciPjE3PC9hPi4gRml4ZWQKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwIj43MDwvYT46IHNpZ25hdHVyZSBzaG91bGQgYmUgY2hhbmdlZCBib3RoIHBsYWNlcyBpdAphcHBlYXJzLiBGaXhlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTYwIj4xNjA8L2E+OiBwcmV2aW91cyB2ZXJzaW9uIGRpZG4ndCBmaXgKdGhlIGJ1ZyBpbiBlbm91Z2ggcGxhY2VzLgo8L2xpPgo8bGk+UjE1OiAKcHJlLVRvcm9udG8gbWFpbGluZy4gQWRkZWQgaXNzdWVzCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzIzMyI+MjMzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY0Ij4yNjQ8L2E+LiBTb21lIHNtYWxsIEhUTUwgZm9ybWF0dGluZwpjaGFuZ2VzIHNvIHRoYXQgd2UgcGFzcyBXZWJsaW50IHRlc3RzLgo8L2xpPgo8bGk+UjE0OiAKcG9zdC1Ub2t5byBJSSBtYWlsaW5nOyByZWZsZWN0cyBjb21taXR0ZWUgYWN0aW9ucyB0YWtlbiBpbgpUb2t5by4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjgiPjIyODwvYT4gdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzMiI+MjMyPC9hPi4gKDAwLTAwMTlSMS9OMTI0MikKPC9saT4KPGxpPlIxMzogCnByZS1Ub2t5byBJSSB1cGRhdGVkOiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMiI+MjEyPC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI3Ij4yMjc8L2E+Lgo8L2xpPgo8bGk+UjEyOiAKcHJlLVRva3lvIElJIG1haWxpbmc6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTk5Ij4xOTk8L2E+IHRvCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTEiPjIxMTwvYT4uIEFkZGVkICJhbmQgcGFyYWdyYXBoIDUiIHRvIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uCm9mIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOSI+Mjk8L2E+LiAgQWRkIGZ1cnRoZXIgcmF0aW9uYWxlIHRvIGlzc3VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE3OCI+MTc4PC9hPi4KPC9saT4KPGxpPlIxMTogCnBvc3QtS29uYSBtYWlsaW5nOiBVcGRhdGVkIHRvIHJlZmxlY3QgTFdHIGFuZCBmdWxsIGNvbW1pdHRlZSBhY3Rpb25zCmluIEtvbmEgKDk5LTAwNDgvTjEyMjQpLiBOb3RlIGNoYW5nZWQgcmVzb2x1dGlvbiBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNCI+NDwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzOCI+Mzg8L2E+LiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTk2Ij4xOTY8L2E+CnRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTgiPjE5ODwvYT4uIENsb3NlZCBpc3N1ZXMgbGlzdCBzcGxpdCBpbnRvICJkZWZlY3RzIiBhbmQKImNsb3NlZCIgZG9jdW1lbnRzLiAgQ2hhbmdlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBpc3N1ZQo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0Ij40PC9hPiB0byBOQUQsIGFuZCBjaGFuZ2VkIHRoZSB3b3JkaW5nIG9mIHByb3Bvc2VkIHJlc29sdXRpb24Kb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4Ij4zODwvYT4uCjwvbGk+CjxsaT5SMTA6IApwcmUtS29uYSB1cGRhdGVkLiAgQWRkZWQgcHJvcG9zZWQgcmVzb2x1dGlvbnMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzgzIj44MzwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM4NiI+ODY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOTEiPjkxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzkyIj45MjwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDkiPjEwOTwvYT4uIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxOTAiPjE5MDwvYT4gdG8KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5NSI+MTk1PC9hPi4gKDk5LTAwMzMvRDEyMDksIDE0IE9jdCA5OSkKPC9saT4KPGxpPlI5OiAKcHJlLUtvbmEgbWFpbGluZy4gIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxNDAiPjE0MDwvYT4gdG8KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4OSI+MTg5PC9hPi4gSXNzdWVzIGxpc3Qgc3BsaXQgaW50byBzZXBhcmF0ZSAiYWN0aXZlIiBhbmQKImNsb3NlZCIgZG9jdW1lbnRzLiAoOTktMDAzMC9OMTIwNiwgMjUgQXVnIDk5KQo8L2xpPgo8bGk+Ujg6IApwb3N0LUR1YmxpbiBtYWlsaW5nLiBVcGRhdGVkIHRvIHJlZmxlY3QgTFdHIGFuZCBmdWxsIGNvbW1pdHRlZSBhY3Rpb25zCmluIER1Ymxpbi4gKDk5LTAwMTYvTjExOTMsIDIxIEFwciA5OSkKPC9saT4KPGxpPlI3OiAKcHJlLUR1YmxpbiB1cGRhdGVkOiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzMCI+MTMwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTMxIj4xMzE8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMyIj4xMzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMzIj4xMzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM0Ij4xMzQ8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzUiPjEzNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzYiPjEzNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzciPjEzNzwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEzOCI+MTM4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzOSI+MTM5PC9hPiAoMzEgTWFyIDk5KQo8L2xpPgo8bGk+UjY6IApwcmUtRHVibGluIG1haWxpbmcuIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTI3Ij4xMjc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMjgiPjEyODwvYT4sCmFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTI5Ij4xMjk8L2E+LiAgKDk5LTAwMDcvTjExOTQsIDIyIEZlYiA5OSkKPC9saT4KPGxpPlI1OiAKdXBkYXRlIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTAzIj4xMDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTEyIj4xMTI8L2E+OyBhZGRlZCBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNCI+MTE0PC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTI2Ij4xMjY8L2E+LiBGb3JtYXQgcmV2aXNpb25zIHRvIHByZXBhcmUKZm9yIG1ha2luZyBsaXN0IHB1YmxpYy4gKDMwIERlYyA5OCkKPC9saT4KPGxpPlI0OiAKcG9zdC1TYW50YSBDcnV6IElJIHVwZGF0ZWQ6IElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTEwIj4xMTA8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMTEiPjExMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTIiPjExMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzExMyI+MTEzPC9hPiBhZGRlZCwgc2V2ZXJhbAppc3N1ZXMgY29ycmVjdGVkLiAoMjIgT2N0IDk4KQo8L2xpPgo8bGk+UjM6IApwb3N0LVNhbnRhIENydXogSUk6IElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM5NCI+OTQ8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDkiPjEwOTwvYT4KYWRkZWQsIG1hbnkgaXNzdWVzIHVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgY29uc2Vuc3VzICgxMiBPY3QgOTgpCjwvbGk+CjxsaT5SMjogCnByZS1TYW50YSBDcnV6IElJOiBJc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMiPjczPC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM5MyI+OTM8L2E+IGFkZGVkLAppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTciPjE3PC9hPiB1cGRhdGVkLiAoMjkgU2VwIDk4KQo8L2xpPgo8bGk+UjE6IApDb3JyZWN0aW9uIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NSI+NTU8L2E+IHJlc29sdXRpb24sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MCI+NjA8L2E+IGNvZGUKZm9ybWF0LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjQiPjY0PC9hPiB0aXRsZS4gKDE3IFNlcCA5OCkKPC9saT4KPC91bD4KPGgyPkRlZmVjdCBSZXBvcnRzPC9oMj4KPGhyPgo8YSBuYW1lPSIxIj48aDM+MS4mbmJzcDtDIGxpYnJhcnkgbGlua2FnZSBlZGl0aW5nIG92ZXJzaWdodDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnVzaW5nLmxpbmthZ2UiPiBbbGliLnVzaW5nLmxpbmthZ2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCZW1hbiBEYXdlcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNiBOb3YgMTk5NzwvcD4KPHA+VGhlIGNoYW5nZSBzcGVjaWZpZWQgaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gYmVsb3cgZGlkIG5vdCBtYWtlCml0IGludG8gdGhlIFN0YW5kYXJkLiBUaGlzIGNoYW5nZSB3YXMgYWNjZXB0ZWQgaW4gcHJpbmNpcGxlIGF0IHRoZQpMb25kb24gbWVldGluZywgYW5kIHRoZSBleGFjdCB3b3JkaW5nIGJlbG93IHdhcyBhY2NlcHRlZCBhdCB0aGUKTW9ycmlzdG93biBtZWV0aW5nLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMTcuNC4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIudXNpbmcubGlua2FnZSI+IFtsaWIudXNpbmcubGlua2FnZV08L2E+IHBhcmFncmFwaCAyCmZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBhIG5hbWUgZnJvbSB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5CiAgZGVjbGFyZWQgd2l0aCBleHRlcm5hbCBsaW5rYWdlIGhhcyBlaXRoZXIgZXh0ZXJuICJDIiBvcgogIGV4dGVybiAiQysrIiBsaW5rYWdlLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+V2hldGhlciBhIG5hbWUgZnJvbSB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5IGRlY2xhcmVkIHdpdGggZXh0ZXJuYWwKICBsaW5rYWdlIGhhcyBleHRlcm4gIkMiIG9yIGV4dGVybiAiQysrIiBsaW5rYWdlCiAgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbgogIHVzZSBleHRlcm4gIkMrKyIgbGlua2FnZSBmb3IgdGhpcyBwdXJwb3NlLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjMiPjxoMz4zLiZuYnNwO0F0ZXhpdCByZWdpc3RyYXRpb24gZHVyaW5nIGF0ZXhpdCgpIGNhbGwgaXMgbm90IGRlc2NyaWJlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5jc3RkaW50Ij4gW2xpYi5jc3RkaW50XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xhbWFnZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBEZWMgMTk5NzwvcD4KPHA+V2UgYXBwZWFyIG5vdCB0byBoYXZlIGNvdmVyZWQgYWxsIHRoZSBwb3NzaWJpbGl0aWVzIG9mCiBleGl0IHByb2Nlc3Npbmcgd2l0aCByZXNwZWN0IHRvCmF0ZXhpdCByZWdpc3RyYXRpb24uIDxicj4KPGJyPgpFeGFtcGxlIDE6IChDIGFuZCBDKyspPC9wPgoKPHByZT4gICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogICAgdm9pZCBmMSgpIHsgfQogICAgdm9pZCBmMigpIHsgYXRleGl0KGYxKTsgfQogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgYXRleGl0KGYyKTsgLy8gdGhlIG9ubHkgdXNlIG9mIGYyCiAgICAgICAgcmV0dXJuIDA7IC8vIGZvciBDIGNvbXBhdGliaWxpdHkKICAgIH08L3ByZT4KCjxwPkF0IHByb2dyYW0gZXhpdCwgZjIgZ2V0cyBjYWxsZWQgZHVlIHRvIGl0cyByZWdpc3RyYXRpb24gaW4KbWFpbi4gUnVubmluZyBmMiBjYXVzZXMgZjEgdG8gYmUgbmV3bHkgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGV4aXQKcHJvY2Vzc2luZy4gSXMgdGhpcyBhIHZhbGlkIHByb2dyYW0/IElmIHNvLCB3aGF0IGFyZSBpdHMKc2VtYW50aWNzPzwvcD4KCjxwPgpJbnRlcmVzdGluZ2x5LCBuZWl0aGVyIHRoZSBDIHN0YW5kYXJkLCBub3IgdGhlIEMrKyBkcmFmdCBzdGFuZGFyZCBub3IKdGhlIGZvcnRoY29taW5nIEM5WCBDb21taXR0ZWUgRHJhZnQgc2F5cyBkaXJlY3RseSB3aGV0aGVyIHlvdSBjYW4KcmVnaXN0ZXIgYSBmdW5jdGlvbiB3aXRoIGF0ZXhpdCBkdXJpbmcgZXhpdCBwcm9jZXNzaW5nLjwvcD4KCjxwPgpBbGwgMyBzdGFuZGFyZHMgc2F5IHRoYXQgZnVuY3Rpb25zIGFyZSBydW4gaW4gcmV2ZXJzZSBvcmRlciBvZiB0aGVpcgpyZWdpc3RyYXRpb24uIFNpbmNlIGYxIGlzIHJlZ2lzdGVyZWQgbGFzdCwgaXQgb3VnaHQgdG8gYmUgcnVuIGZpcnN0LApidXQgYnkgdGhlIHRpbWUgaXQgaXMgcmVnaXN0ZXJlZCwgaXQgaXMgdG9vIGxhdGUgdG8gYmUgZmlyc3QuPC9wPgoKPHA+SWYgdGhlIHByb2dyYW0gaXMgdmFsaWQsIHRoZSBzdGFuZGFyZHMgYXJlIHNlbGYtY29udHJhZGljdG9yeSBhYm91dAppdHMgc2VtYW50aWNzLjwvcD4KCjxwPkV4YW1wbGUgMjogKEMrKyBvbmx5KTwvcD4KCjxwcmU+ICAgIAogICAgdm9pZCBGKCkgeyBzdGF0aWMgVCB0OyB9IC8vIHR5cGUgVCBoYXMgYSBkZXN0cnVjdG9yCgogICAgaW50IG1haW4oKQogICAgewogICAgICAgIGF0ZXhpdChGKTsgLy8gdGhlIG9ubHkgdXNlIG9mIEYKICAgIH0KPC9wcmU+Cgo8cD5GdW5jdGlvbiBGIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQgaGFzIGEgbG9jYWwgc3RhdGljIHZhcmlhYmxlIHQsCmFuZCBGIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgZHVyaW5nIGV4aXQgcHJvY2Vzc2luZy4gQSBsb2NhbApzdGF0aWMgb2JqZWN0IGlzIGluaXRpYWxpemVkIHRoZSBmaXJzdCB0aW1lIGNvbnRyb2wgZmxvdyBwYXNzZXMKdGhyb3VnaCBpdHMgZGVmaW5pdGlvbiwgYW5kIGFsbCBzdGF0aWMgb2JqZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZwpleGl0IHByb2Nlc3NpbmcuIElzIHRoZSBjb2RlIHZhbGlkPyBJZiBzbywgd2hhdCBhcmUgaXRzIHNlbWFudGljcz88L3A+Cgo8cD4KU2VjdGlvbiAxOC4zICJTdGFydCBhbmQgdGVybWluYXRpb24iIHNheXMgdGhhdCBpZiBhIGZ1bmN0aW9uCkYgaXMgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgYSBzdGF0aWMgb2JqZWN0IHQgaXMgaW5pdGlhbGl6ZWQsIEYKd2lsbCBub3QgYmUgY2FsbGVkIHVudGlsIGFmdGVyIHQncyBkZXN0cnVjdG9yIGNvbXBsZXRlcy48L3A+Cgo8cD4KSW4gZXhhbXBsZSAyLCBmdW5jdGlvbiBGIGlzIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQgYmVmb3JlIGl0cyBsb2NhbApzdGF0aWMgb2JqZWN0IE8gY291bGQgcG9zc2libHkgYmUgaW5pdGlhbGl6ZWQuIE9uIHRoYXQgYmFzaXMsIGl0IG11c3QKbm90IGJlIGNhbGxlZCBieSBleGl0IHByb2Nlc3NpbmcgdW50aWwgYWZ0ZXIgTydzIGRlc3RydWN0b3IKY29tcGxldGVzLiBCdXQgdGhlIGRlc3RydWN0b3IgY2Fubm90IGJlIHJ1biB1bnRpbCBhZnRlciBGIGlzIGNhbGxlZCwKc2luY2Ugb3RoZXJ3aXNlIHRoZSBvYmplY3QgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkIGluIHRoZSBmaXJzdApwbGFjZS48L3A+Cgo8cD5JZiB0aGUgcHJvZ3JhbSBpcyB2YWxpZCwgdGhlIHN0YW5kYXJkIGlzIHNlbGYtY29udHJhZGljdG9yeSBhYm91dAppdHMgc2VtYW50aWNzLjwvcD4KCjxwPkkgcGxhbiB0byBzdWJtaXQgRXhhbXBsZSAxIGFzIGEgcHVibGljIGNvbW1lbnQgb24gdGhlIEM5WCBDRCwgd2l0aAphIHJlY29tbWVuZGF0aW9uIHRoYXQgdGhlIHJlc3VsdHMgYmUgdW5kZWZpbmVkLiAoQWx0ZXJuYXRpdmU6IG1ha2UgaXQKdW5zcGVjaWZpZWQuIEkgZG9uJ3QgdGhpbmsgaXQgaXMgd29ydGh3aGlsZSB0byBzcGVjaWZ5IHRoZSBjYXNlIHdoZXJlCmYxIGl0c2VsZiByZWdpc3RlcnMgYWRkaXRpb25hbCBmdW5jdGlvbnMsIGVhY2ggb2Ygd2hpY2ggcmVnaXN0ZXJzCnN0aWxsIG1vcmUgZnVuY3Rpb25zLik8L3A+Cgo8cD5JIHRoaW5rIHdlIHNob3VsZCByZXNvbHZlIHRoZSBzaXR1YXRpb24gaW4gdGhlIHdoYXRldmVyIHdheSB0aGUgQwpjb21taXR0ZWUgZGVjaWRlcy4gPC9wPgoKPHA+Rm9yIEV4YW1wbGUgMiwgSSByZWNvbW1lbmQgd2UgZGVjbGFyZSB0aGUgcmVzdWx0cyB1bmRlZmluZWQuPC9wPgoKPHA+PGk+W1NlZSByZWZsZWN0b3IgbWVzc2FnZSBsaWItNjUwMCBmb3IgZnVydGhlciBkaXNjdXNzaW9uLl08L2k+PC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2Ugc2VjdGlvbiAxOC4zLzggZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIEZpcnN0LCBvYmplY3RzIHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gYXJlIGRlc3Ryb3llZCBhbmQKICBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBjYWxsaW5nIGF0ZXhpdCBhcmUgY2FsbGVkLiBPYmplY3RzIHdpdGgKICBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBhcmUgZGVzdHJveWVkIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIHRoZQogIGNvbXBsZXRpb24gb2YgdGhlaXIgY29uc3RydWN0b3IuICAoQXV0b21hdGljIG9iamVjdHMgYXJlIG5vdAogIGRlc3Ryb3llZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGV4aXQoKS4pIEZ1bmN0aW9ucyByZWdpc3RlcmVkIHdpdGgKICBhdGV4aXQgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiB0aGVpciByZWdpc3RyYXRpb24uICBBCiAgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgYW4gb2JqZWN0IG9iajEgb2Ygc3RhdGljCiAgc3RvcmFnZSBkdXJhdGlvbiBpcyBpbml0aWFsaXplZCB3aWxsIG5vdCBiZSBjYWxsZWQgdW50aWwgb2JqMSdzCiAgZGVzdHJ1Y3Rpb24gaGFzIGNvbXBsZXRlZC4gQSBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0IGFmdGVyCiAgYW4gb2JqZWN0IG9iajIgb2Ygc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gaXMgaW5pdGlhbGl6ZWQgd2lsbCBiZQogIGNhbGxlZCBiZWZvcmUgb2JqMidzIGRlc3RydWN0aW9uIHN0YXJ0cy4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIEZpcnN0LCBvYmplY3RzIHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gYXJlIGRlc3Ryb3llZCBhbmQKICBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBjYWxsaW5nIGF0ZXhpdCBhcmUgY2FsbGVkLiBOb24tbG9jYWwgb2JqZWN0cwogIHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gYXJlIGRlc3Ryb3llZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZgogIHRoZSBjb21wbGV0aW9uIG9mIHRoZWlyIGNvbnN0cnVjdG9yLiAoQXV0b21hdGljIG9iamVjdHMgYXJlIG5vdAogIGRlc3Ryb3llZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGV4aXQoKS4pIEZ1bmN0aW9ucyByZWdpc3RlcmVkIHdpdGgKICBhdGV4aXQgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiB0aGVpciByZWdpc3RyYXRpb24sIGV4Y2VwdAogIHRoYXQgYSBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBmdW5jdGlvbnMKICB0aGF0IGhhZCBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IHRoZSB0aW1lIGl0IHdhcyByZWdpc3RlcmVkLiBBCiAgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgYSBub24tbG9jYWwgb2JqZWN0IG9iajEgb2YKICBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBpcyBpbml0aWFsaXplZCB3aWxsIG5vdCBiZSBjYWxsZWQgdW50aWwKICBvYmoxJ3MgZGVzdHJ1Y3Rpb24gaGFzIGNvbXBsZXRlZC4gQSBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0CiAgYWZ0ZXIgYSBub24tbG9jYWwgb2JqZWN0IG9iajIgb2Ygc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gaXMKICBpbml0aWFsaXplZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgb2JqMidzIGRlc3RydWN0aW9uIHN0YXJ0cy4gQSBsb2NhbAogIHN0YXRpYyBvYmplY3Qgb2JqMyBpcyBkZXN0cm95ZWQgYXQgdGhlIHNhbWUgdGltZSBpdCB3b3VsZCBiZSBpZiBhCiAgZnVuY3Rpb24gY2FsbGluZyB0aGUgb2JqMyBkZXN0cnVjdG9yIHdlcmUgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBhdAogIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBvYmozIGNvbnN0cnVjdG9yLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TZWUgOTktMDAzOS9OMTIxNSwgT2N0b2JlciAyMiwgMTk5OSwgYnkgU3RlcGhlbiBELiBDbGFtYWdlIGZvciB0aGUgYW5hbHlzaXMKc3VwcG9ydGluZyB0byB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi48L3A+Cjxocj4KPGEgbmFtZT0iNSI+PGgzPjUuJm5ic3A7U3RyaW5nOjpjb21wYXJlIHNwZWNpZmljYXRpb24gcXVlc3Rpb25hYmxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy42LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmNvbXBhcmUiPiBbbGliLnN0cmluZzo6Y29tcGFyZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0phY2sgUmVldmVzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIERlYyAxOTk3PC9wPgo8cD5BdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGJhc2ljX3N0cmluZyBjbGFzcyBkZWZpbml0aW9uIGlzIHRoZSBzaWduYXR1cmU6IGludApjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIgPSBucG9zKSBjb25zdDsgSW4gdGhlCmZvbGxvd2luZyB0ZXh0IHRoaXMgaXMgZGVmaW5lZCBhczogcmV0dXJucwpiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMscG9zMSxuMSkuY29tcGFyZSgKYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KHMsbjIpOyA8L3A+Cgo8cD5TaW5jZSB0aGUgY29uc3RydWN0b3IgYmFzaWNfc3RyaW5nKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgY29uc3QgQWxsb2NhdG9yJmFtcDsgYQo9IEFsbG9jYXRvcigpKSBjbGVhcmx5IHJlcXVpcmVzIHRoYXQgcyAhPSBOVUxMIGFuZCBuICZsdDsgbnBvcyBhbmQgZnVydGhlciBzdGF0ZXMgdGhhdCBpdAp0aHJvd3MgbGVuZ3RoX2Vycm9yIGlmIG4gPT0gbnBvcywgaXQgYXBwZWFycyB0aGUgY29tcGFyZSgpIHNpZ25hdHVyZSBhYm92ZSBzaG91bGQgYWx3YXlzCnRocm93IGxlbmd0aCBlcnJvciBpZiBpbnZva2VkIGxpa2Ugc286IHN0ci5jb21wYXJlKDEsIHN0ci5zaXplKCktMSwgcyk7IHdoZXJlICdzJyBpcyBzb21lCm51bGwgdGVybWluYXRlZCBjaGFyYWN0ZXIgYXJyYXkuIDwvcD4KCjxwPlRoaXMgYXBwZWFycyB0byBiZSBhIHR5cG8gc2luY2UgdGhlIG9idmlvdXMgaW50ZW50IGlzIHRvIGFsbG93IGVpdGhlciB0aGUgY2FsbCBhYm92ZSBvcgpzb21ldGhpbmcgbGlrZTogc3RyLmNvbXBhcmUoMSwgc3RyLnNpemUoKS0xLCBzLCBzdHJsZW4ocyktMSk7IDwvcD4KCjxwPlRoaXMgd291bGQgaW1wbHkgdGhhdCB3aGF0IHdhcyByZWFsbHkgaW50ZW5kZWQgd2FzIHR3byBzaWduYXR1cmVzIGludCBjb21wYXJlKHNpemVfdHlwZQpwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKSBjb25zdCBpbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdApjaGFyVCogcywgc2l6ZV90eXBlIG4yKSBjb25zdDsgZWFjaCBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0cnVjdG9yLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgY29tcGFyZSBzaWduYXR1cmUgaW4gMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4KKGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmFzaWNfc3RyaW5nIHN5bm9wc2lzKSB3aGljaCByZWFkczo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IGNoYXJUKiBzLAogIHNpemVfdHlwZSBuMiA9IG5wb3MpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5pbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQqIHMpIGNvbnN0Ozxicj4KICBpbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQqIHMsCiAgc2l6ZV90eXBlIG4yKSBjb25zdDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+UmVwbGFjZSB0aGUgcG9ydGlvbiBvZiAyMS4zLjYuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6Y29tcGFyZSI+IFtsaWIuc3RyaW5nOjpjb21wYXJlXTwvYT4KcGFyYWdyYXBocyA1IGFuZCA2IHdoaWNoIHJlYWQ6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNoYXJUICogcywgc2l6ZV90eXBlIG4yCiAgPSBucG9zKSBjb25zdDs8YnI+CiAgPC90dD5SZXR1cm5zOjx0dD48YnI+CiAgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCp0aGlzLCBwb3MsIG4xKS5jb21wYXJlKDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoIHMsIG4yKSk8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQgKiBzKSBjb25zdDs8YnI+CiAgPC90dD5SZXR1cm5zOjx0dD48YnI+CiAgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCp0aGlzLCBwb3MsIG4xKS5jb21wYXJlKDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoIHMgKSk8YnI+CiAgPGJyPgogIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IGNoYXJUICogcywKICBzaXplX3R5cGUgbjIpIGNvbnN0Ozxicj4KICA8L3R0PlJldHVybnM6PHR0Pjxicj4KICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMsIHBvcywgbjEpLmNvbXBhcmUoPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyggcywgbjIpKTwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5FZGl0b3JzIHBsZWFzZSBub3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gc3BsaXR0aW5nIHRoZSBzaWduYXR1cmUsIHRoZSB0aGlyZCBhcmd1bWVudApiZWNvbWVzIGNvbnN0LCBtYXRjaGluZyB0aGUgZXhpc3Rpbmcgc3lub3BzaXMuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+V2hpbGUgdGhlIExXRyBkaXNsaWtlcyBhZGRpbmcgc2lnbmF0dXJlcywgdGhpcyBpcyBhIGNsZWFyIGRlZmVjdCBpbgp0aGUgU3RhbmRhcmQgd2hpY2ggbXVzdCBiZSBmaXhlZC4mbmJzcDsgVGhlIHNhbWUgcHJvYmxlbSB3YXMgYWxzbwppZGVudGlmaWVkIGluIGlzc3VlcyA3IChpdGVtIDUpIGFuZCA4Ny48L3A+Cjxocj4KPGEgbmFtZT0iNyI+PGgzPjcuJm5ic3A7U3RyaW5nIGNsYXVzZSBtaW5vciBwcm9ibGVtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5ncyI+IFtsaWIuc3RyaW5nc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5NzwvcD4KPHA+KDEpIEluIDIxLjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjppbnNlcnQiPiBbbGliLnN0cmluZzo6aW5zZXJ0XTwvYT4sIHRoZSBkZXNjcmlwdGlvbiBvZiB0ZW1wbGF0ZQombHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsgaW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLApJbnB1dEl0ZXJhdG9yKSBtYWtlcyBubyBzZW5zZS4gSXQgcmVmZXJzIHRvIGEgbWVtYmVyIGZ1bmN0aW9uIHRoYXQKZG9lc24ndCBleGlzdC4gSXQgYWxzbyB0YWxrcyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgdm9pZApmdW5jdGlvbi4gPC9wPgoKPHA+KDIpIFNldmVyYWwgdmVyc2lvbnMgb2YgYmFzaWNfc3RyaW5nOjpyZXBsYWNlIGRvbid0IGFwcGVhciBpbiB0aGUKY2xhc3Mgc3lub3BzaXMuIDwvcD4KCjxwPigzKSBiYXNpY19zdHJpbmc6OnB1c2hfYmFjayBhcHBlYXJzIGluIHRoZSBzeW5vcHNpcywgYnV0IGlzIG5ldmVyCmRlc2NyaWJlZCBlbHNld2hlcmUuICBJbiB0aGUgc3lub3BzaXMgaXRzIGFyZ3VtZW50IGlzIGNvbnN0IGNoYXJULAp3aGljaCBkb2Vzbid0IG1ha2VzIG11Y2ggc2Vuc2U7IGl0IHNob3VsZCBwcm9iYWJseSBiZSBjaGFyVCwgb3IKcG9zc2libGUgY29uc3QgY2hhclQmYW1wOy4gPC9wPgoKPHA+KDQpIGJhc2ljX3N0cmluZzo6cG9wX2JhY2sgaXMgbWlzc2luZy4gPC9wPgoKPHA+KDUpIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY2hhclQqIHMsIHNpemVfdHlwZSBuMgo9IG5wb3MpIG1ha2Ugbm8gc2Vuc2UuIEZpcnN0LCBpdCdzIGNvbnN0IGNoYXJUKiBpbiB0aGUgc3lub3BzaXMgYW5kCmNoYXJUKiBpbiB0aGUgZGVzY3JpcHRpb24uIFNlY29uZCwgZ2l2ZW4gd2hhdCBpdCBzYXlzIGluIFJFVFVSTlMsCmxlYXZpbmcgb3V0IHRoZSBmaW5hbCBhcmd1bWVudCB3aWxsIGFsd2F5cyByZXN1bHQgaW4gYW4gZXhjZXB0aW9uCmdldHRpbmcgdGhyb3duLiBUaGlzIGlzIHBhcmFncmFwaHMgNSBhbmQgNiBvZiAKMjEuMy42LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmNvbXBhcmUiPiBbbGliLnN0cmluZzo6Y29tcGFyZV08L2E+PC9wPgoKPHA+KDYpIEluIHRhYmxlIDM3LCBpbiBzZWN0aW9uIDIxLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmNoYXIudHJhaXRzLnJlcXVpcmUiPiBbbGliLmNoYXIudHJhaXRzLnJlcXVpcmVdPC9hPiwKdGhlcmUncyBhIG5vdGUgZm9yIFg6Om1vdmUocywgcCwgbikuIEl0IHNheXMgIkNvcGllcyBjb3JyZWN0bHkKZXZlbiB3aGVyZSBwIGlzIGluIFtzLCBzK24pIi4gVGhpcyBpcyBjb3JyZWN0IGFzIGZhciBhcyBpdCBnb2VzLApidXQgaXQgZG9lc24ndCBnbyBmYXIgZW5vdWdoOyBpdCBzaG91bGQgYWxzbyBndWFyYW50ZWUgdGhhdCB0aGUgY29weQppcyBjb3JyZWN0IGV2ZW4gd2hlcmUgcyBpbiBpbiBbcCwgcCtuKS4gVGhlc2UgYXJlIHR3byBvcnRob2dvbmFsCmd1YXJhbnRlZXMsIGFuZCBuZWl0aGVyIG9uZSBmb2xsb3dzIGZyb20gdGhlIG90aGVyLiBCb3RoIGd1YXJhbnRlZXMKYXJlIG5lY2Vzc2FyeSBpZiBYOjptb3ZlIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNhbWUgc29ydCBvZgpzZW1hbnRpY3MgYXMgbWVtbW92ZSAod2hpY2ggd2FzIGNsZWFybHkgdGhlIGludGVudCksIGFuZCBib3RoCmd1YXJhbnRlZXMgYXJlIG5lY2Vzc2FyeSBpZiBYOjptb3ZlIGlzIGFjdHVhbGx5IHN1cHBvc2VkIHRvIGJlCnVzZWZ1bC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPklURU0gMTogSW4gMjEuMy41LjQgW2xpYi5zdHJpbmc6Omluc2VydF0sIGNoYW5nZSBwYXJhZ3JhcGggMTYgdG8gPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBFRkZFQ1RTOiBFcXVpdmFsZW50IHRvIGluc2VydChwIC0gYmVnaW4oKSwgYmFzaWNfc3RyaW5nKGZpcnN0LCBsYXN0KSkuPGJyPgo8YnI+CklURU0gMjombmJzcDsgTm90IGEgZGVmZWN0OyB0aGUgU3RhbmRhcmQgaXMgY2xlYXIuLiBUaGVyZSBhcmUgdGVuIHZlcnNpb25zIG9mIHJlcGxhY2UoKSBpbgp0aGUgc3lub3BzaXMsIGFuZCB0ZW4gdmVyc2lvbnMgaW4gMjEuMy41LjYgW2xpYi5zdHJpbmc6OnJlcGxhY2VdLjxicj4KPGJyPgpJVEVNIDM6IENoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgcHVzaF9iYWNrIGluIHRoZSBzdHJpbmcgc3lub3BzaXMgKDIxLjMsCltsaWIuYmFzaWMuc3RyaW5nXSkgZnJvbTo8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdm9pZCBwdXNoX2JhY2soY29uc3QgY2hhclQpPGJyPgo8YnI+CnRvPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIHB1c2hfYmFjayhjaGFyVCk8YnI+Cjxicj4KQWRkIHRoZSBmb2xsb3dpbmcgdGV4dCBpbW1lZGlhdGVseSBhZnRlciAyMS4zLjUuMiBbbGliLnN0cmluZzo6YXBwZW5kXSwgcGFyYWdyYXBoIDEwLjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdm9pZCBiYXNpY19zdHJpbmc6OnB1c2hfYmFjayhjaGFyVCBjKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBFRkZFQ1RTOiBFcXVpdmFsZW50IHRvIGFwcGVuZChzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KDEpLCBjKTs8YnI+Cjxicj4KSVRFTSA0OiBOb3QgYSBkZWZlY3QuIFRoZSBvbWlzc2lvbiBhcHBlYXJzIHRvIGhhdmUgYmVlbiBkZWxpYmVyYXRlLjxicj4KPGJyPgpJVEVNIDU6IER1cGxpY2F0ZTsgc2VlIGlzc3VlIDUgKGFuZCA4NykuPGJyPgo8YnI+CklURU0gNjogSW4gdGFibGUgMzcsIFJlcGxhY2U6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAiQ29waWVzIGNvcnJlY3RseSBldmVuIHdoZXJlIHAgaXMgaW4gW3MsIHMrbikuIjxicj4KPGJyPgp3aXRoOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgIkNvcGllcyBjb3JyZWN0bHkgZXZlbiB3aGVyZSB0aGUgcmFuZ2VzIFtwLCBwK24pIGFuZCBbcywKcytuKSBvdmVybGFwLiI8L3A+Cjxocj4KPGEgbmFtZT0iOCI+PGgzPjguJm5ic3A7TG9jYWxlOjpnbG9iYWwgbGFja3MgZ3VhcmFudGVlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuc3RhdGljcyI+IFtsaWIubG9jYWxlLnN0YXRpY3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgRGVjIDE5OTc8L3A+CjxwPkl0IGFwcGVhcnMgdGhlcmUncyBhbiBpbXBvcnRhbnQgZ3VhcmFudGVlIG1pc3NpbmcgZnJvbSBjbGF1c2UKMjIuIFdlJ3JlIHRvbGQgdGhhdCBpbnZva2luZyBsb2NhbGU6Omdsb2JhbChMKSBzZXRzIHRoZSBDIGxvY2FsZSBpZiBMCmhhcyBhIG5hbWUuIEhvd2V2ZXIsIHdlJ3JlIG5vdCB0b2xkIHdoZXRoZXIgb3Igbm90IGludm9raW5nCnNldGxvY2FsZShzKSBzZXRzIHRoZSBnbG9iYWwgQysrIGxvY2FsZS4gPC9wPgoKPHA+VGhlIGludGVudCwgSSB0aGluaywgaXMgdGhhdCBpdCBzaG91bGQgbm90LCBidXQgSSBjYW4ndCBmaW5kIGFueQpzdWNoIHdvcmRzIGFueXdoZXJlLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgc2VudGVuY2UgYXQgdGhlIGVuZCBvZiAyMi4xLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5zdGF0aWNzIj4gW2xpYi5sb2NhbGUuc3RhdGljc108L2E+LApwYXJhZ3JhcGggMjombmJzcDsgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Tm8gbGlicmFyeSBmdW5jdGlvbiBvdGhlciB0aGFuIDx0dD5sb2NhbGU6Omdsb2JhbCgpPC90dD4gc2hhbGwgYWZmZWN0IAogIHRoZSB2YWx1ZSByZXR1cm5lZCBieSA8dHQ+bG9jYWxlKCk8L3R0Pi4gPC9wPgoKPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjkiPjxoMz45LiZuYnNwO09wZXJhdG9yIG5ldygwKSBjYWxscyBzaG91bGQgbm90IHlpZWxkIHRoZSBzYW1lIHBvaW50ZXI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlIj4gW2xpYi5uZXcuZGVsZXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xhbWFnZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IEphbiAxOTk4PC9wPgo8cD5TY290dCBNZXllcnMsIGluIGEgY29tcC5zdGQuYysrIHBvc3Rpbmc6IEkganVzdCBub3RpY2VkIHRoYXQKc2VjdGlvbiAzLjcuMy4xIG9mIENEMiBzZWVtcyB0byBhbGxvdyBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYWxsCmNhbGxzIHRvIG9wZXJhdG9yIG5ldygwKSB5aWVsZCB0aGUgc2FtZSBwb2ludGVyLCBhbiBpbXBsZW1lbnRhdGlvbgp0ZWNobmlxdWUgc3BlY2lmaWNhbGx5IHByb2hpYml0ZWQgYnkgQVJNIDUuMy4zLldhcyB0aGlzIHByb2hpYml0aW9uCnJlYWxseSBsaWZ0ZWQ/IERvZXMgdGhlIEZESVMgYWdyZWUgd2l0aCBDRDIgaW4gdGhlIHJlZ2FyZD8gW0lzc3VlcwpsaXN0IG1haW50YWluZXIncyBub3RlOiB0aGUgSVMgaXMgdGhlIHNhbWUuXTwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIDMuNy4zIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD5BbnkgYWxsb2NhdGlvbiBhbmQvb3IgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGEgQysrIHByb2dyYW0gc2hhbGwKICBjb25mb3JtIHRvIHRoZSBzZW1hbnRpY3Mgc3BlY2lmaWVkIGluIDMuNy4zLjEgYW5kIDMuNy4zLjIuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+QW55IGFsbG9jYXRpb24gYW5kL29yIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBhIEMrKyBwcm9ncmFtLAogIGluY2x1ZGluZyB0aGUgZGVmYXVsdCB2ZXJzaW9ucyBpbiB0aGUgbGlicmFyeSwgc2hhbGwgY29uZm9ybSB0byB0aGUgc2VtYW50aWNzCiAgc3BlY2lmaWVkIGluIDMuNy4zLjEgYW5kIDMuNy4zLjIuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkNoYW5nZSAzLjcuMy4xLzIsIG5leHQtdG8tbGFzdCBzZW50ZW5jZSwgZnJvbSA6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5JZiB0aGUgc2l6ZSBvZiB0aGUgc3BhY2UgcmVxdWVzdGVkIGlzIHplcm8sIHRoZSB2YWx1ZSByZXR1cm5lZCBzaGFsbCBub3QgYmUKICBhIG51bGwgcG9pbnRlciB2YWx1ZSAoNC4xMCkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RXZlbiBpZiB0aGUgc2l6ZSBvZiB0aGUgc3BhY2UgcmVxdWVzdGVkIGlzIHplcm8sIHRoZSByZXF1ZXN0IGNhbiBmYWlsLiBJZgogIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGUgdmFsdWUgcmV0dXJuZWQgc2hhbGwgYmUgYSBub24tbnVsbCBwb2ludGVyIHZhbHVlCiAgKDQuMTApIHAwIGRpZmZlcmVudCBmcm9tIGFueSBwcmV2aW91c2x5IHJldHVybmVkIHZhbHVlIHAxLCB1bmxlc3MgdGhhdCB2YWx1ZQogIHAxIHdhcyBzaW5jZSBwYXNzZWQgdG8gYW4gb3BlcmF0b3IgZGVsZXRlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD41LjMuNC83IGN1cnJlbnRseSByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPldoZW4gdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGluIGEgZGlyZWN0LW5ldy1kZWNsYXJhdG9yIGlzIHplcm8sIHRoZQogIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGFsbG9jYXRlIGFuIGFycmF5IHdpdGggbm8gZWxlbWVudHMuIFRoZQogIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhlIG5ldy1leHByZXNzaW9uIGlzIG5vbi1udWxsLiBbTm90ZTogSWYgdGhlIGxpYnJhcnkKICBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgZGlzdGluY3QgZnJvbSB0aGUKICBwb2ludGVyIHRvIGFueSBvdGhlciBvYmplY3QuXTwvcD4KPC9ibG9ja3F1b3RlPgo8cD5SZXRhaW4gdGhlIGZpcnN0IHNlbnRlbmNlLCBhbmQgZGVsZXRlIHRoZSByZW1haW5kZXIuPC9wPgo8cD4xOC41LjEgY3VycmVudGx5IGhhcyBubyB0ZXh0LiBBZGQgdGhlIGZvbGxvd2luZzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkV4Y2VwdCB3aGVyZSBvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUgcHJvdmlzaW9ucyBvZiAzLjcuMyBhcHBseSB0byB0aGUKICBsaWJyYXJ5IHZlcnNpb25zIG9mIG9wZXJhdG9yIG5ldyBhbmQgb3BlcmF0b3IgZGVsZXRlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UbyAxOC41LjEuMywgYWRkIHRoZSBmb2xsb3dpbmcgdGV4dDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBwcm92aXNpb25zIG9mIDMuNy4zIGRvIG5vdCBhcHBseSB0byB0aGVzZSByZXNlcnZlZCBwbGFjZW1lbnQgZm9ybXMgb2YKICBvcGVyYXRvciBuZXcgYW5kIG9wZXJhdG9yIGRlbGV0ZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNlZSA5OS0wMDQwL04xMjE2LCBPY3RvYmVyIDIyLCAxOTk5LCBieSBTdGVwaGVuIEQuIENsYW1hZ2UgZm9yIHRoZSBhbmFseXNpcwpzdXBwb3J0aW5nIHRvIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLjwvcD4KPGhyPgo8YSBuYW1lPSIxMSI+PGgzPjExLiZuYnNwO0JpdHNldCBtaW5vciBwcm9ibGVtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnRlbXBsYXRlLmJpdHNldCI+IFtsaWIudGVtcGxhdGUuYml0c2V0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEphbiAxOTk4PC9wPgo8cD4oMSkgYml0c2V0Jmx0OyZndDs6Om9wZXJhdG9yW10gaXMgbWVudGlvbmVkIGluIHRoZSBjbGFzcyBzeW5vcHNpcyAoMjMuMy41KSwgYnV0IGl0IGlzCm5vdCBkb2N1bWVudGVkIGluIDIzLjMuNS4yLiA8L3A+Cgo8cD4oMikgVGhlIGNsYXNzIHN5bm9wc2lzIG9ubHkgZ2l2ZXMgYSBzaW5nbGUgc2lnbmF0dXJlIGZvciBiaXRzZXQmbHQ7Jmd0Ozo6b3BlcmF0b3JbXSwKcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcykuIFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuIEl0IG91Z2h0IHRvIGJlIG92ZXJsb2FkZWQKb24gY29uc3QuIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOyBib29sIG9wZXJhdG9yW10oc2l6ZV90IHBvcykgY29uc3QuIDwvcD4KCjxwPigzKSBCaXRzZXQncyBzdHJlYW0gaW5wdXQgZnVuY3Rpb24gKDIzLjMuNS4zKSBvdWdodCB0byBza2lwIGFsbCB3aGl0ZXNwYWNlIGJlZm9yZQp0cnlpbmcgdG8gZXh0cmFjdCAwcyBhbmQgMXMuIFRoZSBzdGFuZGFyZCBkb2Vzbid0IGV4cGxpY2l0bHkgc2F5IHRoYXQsIHRob3VnaC4gVGhpcyBzaG91bGQKZ28gaW4gdGhlIEVmZmVjdHMgY2xhdXNlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JVEVNUyAxIEFORCAyOjxicj4KPGJyPgpJbiB0aGUgYml0c2V0IHN5bm9wc2lzICgyMy4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi50ZW1wbGF0ZS5iaXRzZXQiPiBbbGliLnRlbXBsYXRlLmJpdHNldF08L2E+KSwgCnJlcGxhY2UgdGhlIG1lbWJlciBmdW5jdGlvbiA8YnI+Cjxicj4KPHR0PiZuYnNwOyZuYnNwOyZuYnNwOyByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3QgcG9zKTs8YnI+CjwvdHQ+PGJyPgp3aXRoIHRoZSB0d28gbWVtYmVyIGZ1bmN0aW9uczxicj4KPGJyPgo8dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGJvb2wgb3BlcmF0b3JbXShzaXplX3QgcG9zKSBjb25zdDsgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcyk7IDxicj4KPC90dD48YnI+CkFkZCB0aGUgZm9sbG93aW5nIHRleHQgYXQgdGhlIGVuZCBvZiAyMy4zLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5tZW1iZXJzIj4gW2xpYi5iaXRzZXQubWVtYmVyc108L2E+LCAKaW1tZWRpYXRlbHkgYWZ0ZXIgcGFyYWdyYXBoIDQ1OjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5ib29sIG9wZXJhdG9yW10oc2l6ZV90IHBvcykgY29uc3Q7PC90dD48YnI+CiAgUmVxdWlyZXM6IHBvcyBpcyB2YWxpZDxicj4KICBUaHJvd3M6IG5vdGhpbmc8YnI+CiAgUmV0dXJuczogPHR0PnRlc3QocG9zKTwvdHQ+PGJyPgogIDxicj4KICA8dHQ+Yml0c2V0Jmx0O04mZ3Q7OjpyZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3QgcG9zKTs8L3R0PiA8YnI+CiAgUmVxdWlyZXM6IHBvcyBpcyB2YWxpZDxicj4KICBUaHJvd3M6IG5vdGhpbmc8YnI+CiAgUmV0dXJuczogQW4gb2JqZWN0IG9mIHR5cGUgPHR0PmJpdHNldCZsdDtOJmd0Ozo6cmVmZXJlbmNlPC90dD4gc3VjaCB0aGF0IDx0dD4oKnRoaXMpW3Bvc10KICA9PSB0aGlzLSZndDt0ZXN0KHBvcyk8L3R0PiwgYW5kIHN1Y2ggdGhhdCA8dHQ+KCp0aGlzKVtwb3NdID0gdmFsPC90dD4gaXMgZXF1aXZhbGVudCB0byA8dHQ+dGhpcy0mZ3Q7c2V0KHBvcywKICB2YWwpOzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIEl0ZW0gMyBpcyBub3QgYSBkZWZlY3QuICJGb3JtYXR0ZWQKaW5wdXQiIGltcGxpZXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLiBTZWUgMjcuNi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZF08L2E+Lgo8L3A+Cjxocj4KPGEgbmFtZT0iMTMiPjxoMz4xMy4mbmJzcDtFb3MgcmVmdXNlcyB0byBkaWU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2lsbGlhbSBNLiBNaWxsZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBNYXIgMTk5ODwvcD4KPHA+SW4gMjcuNi4xLjIuMywgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gImVvcyIsIHdoaWNoIGlzCnRoZSBvbmx5IG9uZSBpbiB0aGUgd2hvbGUgZHJhZnQgKGF0IGxlYXN0IHVzaW5nIEFjcm9iYXQgc2VhcmNoKSwgc28KaXQncyB1bmRlZmluZWQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4sIHJlcGxhY2UgImVvcyIgd2l0aAoiY2hhclQoKSI8L3A+Cjxocj4KPGEgbmFtZT0iMTQiPjxoMz4xNC4mbmJzcDtMb2NhbGU6OmNvbWJpbmUgc2hvdWxkIGJlIGNvbnN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVtYmVycyI+IFtsaWIubG9jYWxlLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+bG9jYWxlOjpjb21iaW5lIGlzIHRoZSBvbmx5IG1lbWJlciBmdW5jdGlvbiBvZiBsb2NhbGUgKG90aGVyIHRoYW4gY29uc3RydWN0b3JzIGFuZApkZXN0cnVjdG9yKSB0aGF0IGlzIG5vdCBjb25zdC4gVGhlcmUgaXMgbm8gcmVhc29uIGZvciBpdCBub3QgdG8gYmUgY29uc3QsIGFuZCBnb29kIHJlYXNvbnMKd2h5IGl0IHNob3VsZCBoYXZlIGJlZW4gY29uc3QuIEZ1cnRoZXJtb3JlLCBsZWF2aW5nIGl0IG5vbi1jb25zdCBjb25mbGljdHMgd2l0aCAyMi4xLjEKcGFyYWdyYXBoIDY6ICJBbiBpbnN0YW5jZSBvZiBhIGxvY2FsZSBpcyBpbW11dGFibGUuIiA8L3A+Cgo8cD5IaXN0b3J5OiB0aGlzIG1lbWJlciBmdW5jdGlvbiBvcmlnaW5hbGx5IHdhcyBhIGNvbnN0cnVjdG9yLiBpdCBoYXBwZW5lZCB0aGF0IHRoZQppbnRlcmZhY2UgaXQgc3BlY2lmaWVkIGhhZCBubyBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIHN5bnRheCwgc28gaXQgd2FzIGNoYW5nZWQgdG8gYSBtZW1iZXIKZnVuY3Rpb24uIEFzIGNvbnN0cnVjdG9ycyBhcmUgbmV2ZXIgY29uc3QsIHRoZXJlIHdhcyBubyAiY29uc3QiIGluIHRoZSBpbnRlcmZhY2UKd2hpY2ggd2FzIHRyYW5zZm9ybWVkIGludG8gbWVtYmVyICJjb21iaW5lIi4gSXQgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCBhdCB0aGF0CnRpbWUsIGJ1dCB0aGUgb21pc3Npb24gd2FzIG5vdCBub3RpY2VkLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiBhbmQgYWxzbyBpbiAyMi4xLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tZW1iZXJzIj4gW2xpYi5sb2NhbGUubWVtYmVyc108L2E+LCBhZGQgCiJjb25zdCIgdG8gdGhlIGRlY2xhcmF0aW9uIG9mIG1lbWJlciBjb21iaW5lOiA8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEZhY2V0Jmd0OyBsb2NhbGUgY29tYmluZShjb25zdCBsb2NhbGUmYW1wOyBvdGhlcikgY29uc3Q7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTUiPjxoMz4xNS4mbmJzcDtMb2NhbGU6Om5hbWUgcmVxdWlyZW1lbnQgaW5jb25zaXN0ZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVtYmVycyI+IFtsaWIubG9jYWxlLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+bG9jYWxlOjpuYW1lKCkgaXMgZGVzY3JpYmVkIGFzIHJldHVybmluZyBhIHN0cmluZyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYSBsb2NhbGUKY29uc3RydWN0b3IsIGJ1dCB0aGVyZSBpcyBubyBtYXRjaGluZyBjb25zdHJ1Y3Rvci4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm1lbWJlcnMiPiBbbGliLmxvY2FsZS5tZW1iZXJzXTwvYT4sIHBhcmFncmFwaCA1LCByZXBsYWNlCiI8dHQ+bG9jYWxlKG5hbWUoKSk8L3R0PiIgd2l0aAoiPHR0PmxvY2FsZShuYW1lKCkuY19zdHIoKSk8L3R0PiIuCjwvcD4KPGhyPgo8YSBuYW1lPSIxNiI+PGgzPjE2LiZuYnNwO0JhZCBjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsgZGVjbDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQiPiBbbGliLmxvY2FsZS5jb2RlY3Z0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBuZXcgdmlydHVhbCBtZW1iZXJzIGN0eXBlX2J5bmFtZSZsdDtjaGFyJmd0Ozo6ZG9fd2lkZW4gYW5kIGRvX25hcnJvdyBkaWQgbm90IGdldAplZGl0ZWQgaW4gcHJvcGVybHkuIEluc3RlYWQsIHRoZSBtZW1iZXIgZG9fd2lkZW4gYXBwZWFycyBmb3VyIHRpbWVzLCB3aXRoIHdyb25nIGFyZ3VtZW50Cmxpc3RzLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+VGhlIGNvcnJlY3QgZGVjbGFyYXRpb25zIGZvciB0aGUgb3ZlcmxvYWRlZCBtZW1iZXJzCjx0dD5kb19uYXJyb3c8L3R0PiBhbmQgPHR0PmRvX3dpZGVuPC90dD4gc2hvdWxkIGJlIGNvcGllZCAKZnJvbSAyMi4yLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0LmN0eXBlLnNwZWNpYWwiPiBbbGliLmZhY2V0LmN0eXBlLnNwZWNpYWxdPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMTciPjxoMz4xNy4mbmJzcDtCYWQgYm9vbCBwYXJzaW5nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcHJvY2VzcyBvZiBwYXJzaW5nIGEgdGV4dCBib29sZWFuIHZhbHVlIGZyb20gdGhlIGlucHV0CnN0cmVhbS4gSXQgZG9lcyBub3Qgc2F5IGl0IHJlY29nbml6ZXMgZWl0aGVyIG9mIHRoZSBzZXF1ZW5jZXMgInRydWUiIG9yCiJmYWxzZSIgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgYm9vbCB2YWx1ZTsgaW5zdGVhZCwgaXQgc2F5cyBpdCByZWNvZ25pemVzCm9ubHkgb25lIG9mIHRob3NlIHNlcXVlbmNlcywgYW5kIGNob29zZXMgd2hpY2ggYWNjb3JkaW5nIHRvIHRoZSByZWNlaXZlZCB2YWx1ZSBvZiBhCnJlZmVyZW5jZSBhcmd1bWVudCBpbnRlbmRlZCBmb3IgcmV0dXJuaW5nIHRoZSByZXN1bHQsIGFuZCByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSBvdGhlcgpzZXF1ZW5jZSBpcyBmb3VuZC4gKCEpIEZ1cnRoZXJtb3JlLCBpdCBjbGFpbXMgdG8gZ2V0IHRoZSBuYW1lcyBmcm9tIHRoZSBjdHlwZSZsdDsmZ3Q7CmZhY2V0IHJhdGhlciB0aGFuIHRoZSBudW1wdW5jdCZsdDsmZ3Q7IGZhY2V0LCBhbmQgaXQgZXhhbWluZXMgdGhlICJib29sYWxwaGEiCmZsYWcgd3JvbmdseTsgaXQgZG9lc24ndCBkZWZpbmUgdGhlIHZhbHVlICJsb2MiOyBhbmQgZmluYWxseSwgaXQgY29tcHV0ZXMKd3JvbmdseSB3aGV0aGVyIHRvIHVzZSBudW1lcmljIG9yICJhbHBoYSIgcGFyc2luZy48YnI+Cjxicj4KSSBiZWxpZXZlIHRoZSBjb3JyZWN0IGFsZ29yaXRobSBpcyAiYXMgaWYiOiA8L3A+Cgo8cHJlPiAgLy8gaW4sIGVyciwgdmFsLCBhbmQgc3RyIGFyZSBhcmd1bWVudHMuCiAgZXJyID0gMDsKICBjb25zdCBudW1wdW5jdCZsdDtjaGFyVCZndDsmYW1wOyBucCA9IHVzZV9mYWNldCZsdDtudW1wdW5jdCZsdDtjaGFyVCZndDsgJmd0OyhzdHIuZ2V0bG9jKCkpOwogIGNvbnN0IHN0cmluZ190eXBlIHQgPSBucC50cnVlbmFtZSgpLCBmID0gbnAuZmFsc2VuYW1lKCk7CiAgYm9vbCB0bSA9IHRydWUsIGZtID0gdHJ1ZTsKICBzaXplX3QgcG9zID0gMDsKICB3aGlsZSAodG0gJmFtcDsmYW1wOyBwb3MgJmx0OyB0LnNpemUoKSB8fCBmbSAmYW1wOyZhbXA7IHBvcyAmbHQ7IGYuc2l6ZSgpKSB7CiAgICBpZiAoaW4gPT0gZW5kKSB7IGVyciA9IHN0ci5lb2ZiaXQ7IH0KICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogICAgaWYgKHRtICZhbXA7JmFtcDsgcG9zICZsdDsgdC5zaXplKCkpIHsKICAgICAgaWYgKCFlcnIgJmFtcDsmYW1wOyB0W3Bvc10gPT0gKmluKSBtYXRjaGVkID0gdHJ1ZTsKICAgICAgZWxzZSB0bSA9IGZhbHNlOwogICAgfQogICAgaWYgKGZtICZhbXA7JmFtcDsgcG9zICZsdDsgZi5zaXplKCkpIHsKICAgICAgaWYgKCFlcnIgJmFtcDsmYW1wOyBmW3Bvc10gPT0gKmluKSBtYXRjaGVkID0gdHJ1ZTsKICAgICAgZWxzZSBmbSA9IGZhbHNlOwogICAgfQogICAgaWYgKG1hdGNoZWQpIHsgKytpbjsgKytwb3M7IH0KICAgIGlmIChwb3MgJmd0OyB0LnNpemUoKSkgdG0gPSBmYWxzZTsKICAgIGlmIChwb3MgJmd0OyBmLnNpemUoKSkgZm0gPSBmYWxzZTsKICB9CiAgaWYgKHRtID09IGZtIHx8IHBvcyA9PSAwKSB7IGVyciB8PSBzdHIuZmFpbGJpdDsgfQogIGVsc2UgICAgICAgICAgICAgICAgICAgICAgeyB2YWwgPSB0bTsgfQogIHJldHVybiBpbjs8L3ByZT4KCjxwPk5vdGljZSB0aGlzIHdvcmtzIHJlYXNvbmFibHkgd2hlbiB0aGUgY2FuZGlkYXRlIHN0cmluZ3MgYXJlIGJvdGggZW1wdHksIG9yIGVxdWFsLCBvcgp3aGVuIG9uZSBpcyBhIHN1YnN0cmluZyBvZiB0aGUgb3RoZXIuIFRoZSBwcm9wb3NlZCB0ZXh0IGJlbG93IGNhcHR1cmVzIHRoZSBsb2dpYyBvZiB0aGUKY29kZSBhYm92ZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiwgaW4gdGhlIGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIDE0LApjaGFuZ2UgIiZhbXA7JmFtcDsiIHRvICImYW1wOyIuPC9wPgoKPHA+VGhlbiwgcmVwbGFjZSBwYXJhZ3JhcGhzIDE1IGFuZCAxNiBhcyBmb2xsb3dzOjwvcD4KCjxibG9ja3F1b3RlPgoKICA8cD5PdGhlcndpc2UgdGFyZ2V0IHNlcXVlbmNlcyBhcmUgZGV0ZXJtaW5lZCAiYXMgaWYiIGJ5CiAgY2FsbGluZyB0aGUgbWVtYmVycyA8dHQ+ZmFsc2VuYW1lKCk8L3R0PiBhbmQKICA8dHQ+dHJ1ZW5hbWUoKTwvdHQ+IG9mIHRoZSBmYWNldCBvYnRhaW5lZCBieQogIDx0dD51c2VfZmFjZXQmbHQ7bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7Jm5ic3A7Jmd0OyhzdHIuZ2V0bG9jKCkpPC90dD4uICAKICBTdWNjZXNzaXZlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIDx0dD5baW4sZW5kKTwvdHQ+IChzZWUKICBbbGliLnNlcXVlbmNlLnJlcW10c10pIGFyZSBvYnRhaW5lZCBhbmQgbWF0Y2hlZCBhZ2FpbnN0CiAgY29ycmVzcG9uZGluZyBwb3NpdGlvbnMgaW4gdGhlIHRhcmdldCBzZXF1ZW5jZXMgb25seSBhcyBuZWNlc3NhcnkgdG8KICBpZGVudGlmeSBhIHVuaXF1ZSBtYXRjaC4gVGhlIGlucHV0IGl0ZXJhdG9yIDx0dD5pbjwvdHQ+IGlzCiAgY29tcGFyZWQgdG8gPHR0PmVuZDwvdHQ+IG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gb2J0YWluIGEKICBjaGFyYWN0ZXIuIElmIGFuZCBvbmx5IGlmIGEgdGFyZ2V0IHNlcXVlbmNlIGlzIHVuaXF1ZWx5IG1hdGNoZWQsCiAgPHR0PnZhbDwvdHQ+IGlzIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS48L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8YmxvY2txdW90ZT4KICA8cD5UaGUgPHR0PmluPC90dD4gaXRlcmF0b3IgaXMgYWx3YXlzIGxlZnQgcG9pbnRpbmcgb25lIHBvc2l0aW9uIGJleW9uZCB0aGUgbGFzdCBjaGFyYWN0ZXIKICBzdWNjZXNzZnVsbHkgbWF0Y2hlZC4gSWYgPHR0PnZhbDwvdHQ+IGlzIHNldCwgdGhlbiBlcnIgaXMgc2V0IHRvIDx0dD5zdHIuZ29vZGJpdDwvdHQ+OyBvciB0bwogIDx0dD5zdHIuZW9mYml0PC90dD4gaWYsIHdoZW4gc2Vla2luZyBhbm90aGVyIGNoYXJhY3RlciB0byBtYXRjaCwgaXQgaXMgZm91bmQgdGhhdAogIDx0dD4oaW49PWVuZCk8L3R0Pi4gSWYgPHR0PnZhbDwvdHQ+IGlzIG5vdCBzZXQsIHRoZW4gPGk+ZXJyPC9pPiBpcyBzZXQgdG8gPHR0PnN0ci5mYWlsYml0PC90dD47IG9yIHRvCiAgPHR0PihzdHIuZmFpbGJpdHxzdHIuZW9mYml0KTwvdHQ+aWYKICB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSB3YXMgdGhhdCA8dHQ+KGluPT1lbmQpPC90dD4uIFtFeGFtcGxlOiBmb3IgdGFyZ2V0cwogIDx0dD50cnVlPC90dD46ImEiIGFuZCA8dHQ+ZmFsc2U8L3R0PjoiYWJiIiwgdGhlIGlucHV0IHNlcXVlbmNlICJhIiB5aWVsZHMKICA8dHQ+dmFsPT10cnVlPC90dD4gYW5kIDx0dD5lcnI9PXN0ci5lb2ZiaXQ8L3R0PjsgdGhlIGlucHV0IHNlcXVlbmNlICJhYmMiIHlpZWxkcwogIDx0dD5lcnI9c3RyLmZhaWxiaXQ8L3R0Piwgd2l0aCA8dHQ+aW48L3R0PiBlbmRpbmcgYXQgdGhlICdjJyBlbGVtZW50LiBGb3IgdGFyZ2V0cwogIDx0dD50cnVlPC90dD46IjEiCiAgYW5kIDx0dD5mYWxzZTwvdHQ+OiIwIiwgdGhlIGlucHV0IHNlcXVlbmNlICIxIiB5aWVsZHMgPHR0PnZhbD09dHJ1ZTwvdHQ+CiAgYW5kIDx0dD5lcnI9c3RyLmdvb2RiaXQ8L3R0Pi4gRm9yIGVtcHR5IHRhcmdldHMgKCIiKSwgYW55IGlucHV0IHNlcXVlbmNlIHlpZWxkcwogIDx0dD5lcnI9PXN0ci5mYWlsYml0PC90dD4uIC0tZW5kIGV4YW1wbGVdPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTgiPjxoMz4xOC4mbmJzcDtHZXQoLi4uYm9vbCZhbXA7KSBvbWl0dGVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQubWVtYmVycyI+IFtsaWIuZmFjZXQubnVtLmdldC5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIHRoZSBsaXN0IG9mIG51bV9nZXQmbHQ7Jmd0OyBub24tdmlydHVhbCBtZW1iZXJzIG9uIHBhZ2UgMjItMjMsIHRoZSBtZW1iZXIKdGhhdCBwYXJzZXMgYm9vbCB2YWx1ZXMgd2FzIG9taXR0ZWQgZnJvbSB0aGUgbGlzdCBvZiBkZWZpbml0aW9ucyBvZiBub24tdmlydHVhbAptZW1iZXJzLCB0aG91Z2ggaXQgaXMgbGlzdGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZwp2aXJ0dWFsIGlzIGxpc3RlZCBldmVyeXdoZXJlIGFwcHJvcHJpYXRlLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGF0IHRoZSBiZWdpbm5pbmcgb2YgMjIuMi4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQubWVtYmVycyI+IFtsaWIuZmFjZXQubnVtLmdldC5tZW1iZXJzXTwvYT4KYW5vdGhlciBnZXQgbWVtYmVyIGZvciBib29sJmFtcDssIGNvcGllZCBmcm9tIHRoZSBlbnRyeSBpbiAKMjIuMi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubnVtLmdldCI+IFtsaWIubG9jYWxlLm51bS5nZXRdPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iMTkiPjxoMz4xOS4mbmJzcDsiTm9jb252IiBkZWZpbml0aW9uIHRvbyB2YWd1ZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lIj4gW2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+CkluIHRoZSBkZWZpbml0aW9ucyBvZiBjb2RlY3Z0Jmx0OyZndDs6OmRvX291dCBhbmQgZG9faW4sIHRoZXkgYXJlCnNwZWNpZmllZCB0byByZXR1cm4gbm9jb252IGlmICJubyBjb252ZXJzaW9uIGlzCm5lZWRlZCIuIFRoaXMgZGVmaW5pdGlvbiBpcyB0b28gdmFndWUsIGFuZCBkb2VzIG5vdCBzYXkKbm9ybWF0aXZlbHkgd2hhdCBpcyBkb25lIHdpdGggdGhlIGJ1ZmZlcnMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBlbnRyeSBmb3Igbm9jb252IGluIHRoZSB0YWJsZSB1bmRlciBwYXJhZ3JhcGggNCBpbiBzZWN0aW9uIAo8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiB0byByZWFkOgo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD5ub2NvbnY8L3R0PjogPHR0PmludGVyblQ8L3R0PiBhbmQgPHR0PmV4dGVyblQ8L3R0PiBhcmUgdGhlIHNhbWUgdHlwZSwKICBhbmQgaW5wdXQgc2VxdWVuY2UgaXMgaWRlbnRpY2FsIHRvIGNvbnZlcnRlZCBzZXF1ZW5jZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+Q2hhbmdlIHRoZSBOb3RlIGluIHBhcmFncmFwaCAyIHRvIG5vcm1hdGl2ZSB0ZXh0IGFzIGZvbGxvd3M6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5JZiByZXR1cm5zIDx0dD5ub2NvbnY8L3R0PiwgPHR0PmludGVyblQ8L3R0PiBhbmQgPHR0PmV4dGVyblQ8L3R0PiBhcmUgdGhlCiAgc2FtZSB0eXBlIGFuZCB0aGUgY29udmVydGVkIHNlcXVlbmNlIGlzIGlkZW50aWNhbCB0byB0aGUgaW5wdXQgc2VxdWVuY2UgPHR0Pltmcm9tLGZyb21fbmV4dCk8L3R0Pi4KICA8dHQ+dG9fbmV4dDwvdHQ+IGlzIHNldCBlcXVhbCB0byA8dHQ+dG88L3R0PiwgdGhlIHZhbHVlIG9mIDx0dD5zdGF0ZTwvdHQ+IGlzCiAgdW5jaGFuZ2VkLCBhbmQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBpbiA8dHQ+W3RvLCB0b19saW1pdCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyMCI+PC9hPjxoMz48YSBuYW1lPSIyMCI+MjAuJm5ic3A7VGhvdXNhbmRzX3NlcCByZXR1cm5zIHdyb25nIHR5cGU8L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBzeW5vcHNpcyBmb3IgbnVtcHVuY3QmbHQ7Jmd0Ozo6ZG9fdGhvdXNhbmRzX3NlcCwgYW5kIHRoZQpkZWZpbml0aW9uIG9mIG51bXB1bmN0Jmx0OyZndDs6OnRob3VzYW5kc19zZXAgd2hpY2ggY2FsbHMgaXQsIHNwZWNpZnkKdGhhdCBpdCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBjaGFyX3R5cGUuIEhlcmUgaXQgaXMgZXJyb25lb3VzbHkKZGVzY3JpYmVkIGFzIHJldHVybmluZyBhICJzdHJpbmdfdHlwZSIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4sIGFib3ZlIHBhcmFncmFwaCAyLCBjaGFuZ2UgCiJzdHJpbmdfdHlwZSIgdG8gImNoYXJfdHlwZSIuIDwvcD4KPGhyPgo8YSBuYW1lPSIyMSI+PGgzPjIxLiZuYnNwO0NvZGVjdnRfYnluYW1lJmx0OyZndDsgaW5zdGFudGlhdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIHNlY29uZCB0YWJsZSBpbiB0aGUgc2VjdGlvbiwgY2FwdGlvbmVkICJSZXF1aXJlZAppbnN0YW50aWF0aW9ucyIsIHRoZSBpbnN0YW50aWF0aW9ucyBmb3IgY29kZWN2dF9ieW5hbWUmbHQ7Jmd0OwpoYXZlIGJlZW4gb21pdHRlZC4gVGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBhbGxvdyB1c2VycyB0byBjb25zdHJ1Y3QgYQpsb2NhbGUgYnkgbmFtZSBmcm9tIGZhY2V0cy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBpbiAyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiB0byB0aGUgdGFibGUgY2FwdGlvbmVkCiJSZXF1aXJlZCBpbnN0YW50aWF0aW9ucyIsIGluIHRoZSBjYXRlZ29yeSAiY3R5cGUiCnRoZSBsaW5lcyA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmNvZGVjdnRfYnluYW1lJmx0O2NoYXIsY2hhcixtYnN0YXRlX3QmZ3Q7LApjb2RlY3Z0X2J5bmFtZSZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyA8L3ByZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIyIj48aDM+MjIuJm5ic3A7TWVtYmVyIG9wZW4gdnMuIGZsYWdzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlmc3RyZWFtLm1lbWJlcnMiPiBbbGliLmlmc3RyZWFtLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6b3BlbiBsZWF2ZXMgdW5hbnN3ZXJlZCBxdWVzdGlvbnMgYWJvdXQgaG93IGl0CnJlc3BvbmRzIHRvIG9yIGNoYW5nZXMgZmxhZ3MgaW4gdGhlIGVycm9yIHN0YXR1cyBmb3IgdGhlIHN0cmVhbS4gQSBzdHJpY3QgcmVhZGluZwppbmRpY2F0ZXMgdGhhdCBpdCBpZ25vcmVzIHRoZSBiaXRzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlbSwgd2hpY2ggY29uZnVzZXMgdXNlcnMgd2hvIGRvCm5vdCBleHBlY3QgZW9mYml0IGFuZCBmYWlsYml0IHRvIHJlbWFpbiBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZW4uIFRoZXJlIGFyZSB0aHJlZQpyZWFzb25hYmxlIHJlc29sdXRpb25zOiAxKSBzdGF0dXMgcXVvIDIpIGZhaWwgaWYgZmFpbCgpLCBpZ25vcmUgZW9mYml0IDMpIGNsZWFyIGZhaWxiaXQKYW5kIGVvZmJpdCBvbiBjYWxsIHRvIG9wZW4oKS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjguMS43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pZnN0cmVhbS5tZW1iZXJzIj4gW2xpYi5pZnN0cmVhbS5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDMsIDxpPmFuZDwvaT4gaW4gMjcuOC4xLjEwIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vZnN0cmVhbS5tZW1iZXJzIj4gW2xpYi5vZnN0cmVhbS5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDMsIHVuZGVyIG9wZW4oKSBlZmZlY3RzLCBhZGQgYSBmb290bm90ZToKPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+QSBzdWNjZXNzZnVsIG9wZW4gZG9lcyBub3QgY2hhbmdlIHRoZSBlcnJvciBzdGF0ZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzb21lIHVzZXJzLCBidXQgaXQncyBqdXN0IGFuIGluc3RhbmNlCm9mIGEgZ2VuZXJhbCBydWxlOiBlcnJvciBmbGFncyBhcmUgbmV2ZXIgY2xlYXJlZCBieSB0aGUKaW1wbGVtZW50YXRpb24uIFRoZSBvbmx5IHdheSBlcnJvciBmbGFncyBhcmUgYXJlIGV2ZXIgY2xlYXJlZCBpcyBpZgp0aGUgdXNlciBleHBsaWNpdGx5IGNsZWFycyB0aGVtIGJ5IGhhbmQuPC9wPgoKPHA+VGhlIExXRyBiZWxpZXZlZCB0aGF0IHByZXNlcnZpbmcgdGhpcyBnZW5lcmFsIHJ1bGUgd2FzCmltcG9ydGFudCBlbm91Z2ggc28gdGhhdCBhbiBleGNlcHRpb24gc2hvdWxkbid0IGJlIG1hZGUganVzdCBmb3IgdGhpcwpvbmUgY2FzZS4gIFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgaXNzdWUgY2xhcmlmaWVzIHdoYXQgdGhlIExXRwpiZWxpZXZlcyB0byBoYXZlIGJlZW4gdGhlIG9yaWdpbmFsIGludGVudC48L3A+Cgo8aHI+CjxhIG5hbWU9IjI0Ij48aDM+MjQuJm5ic3A7ImRvX2NvbnZlcnQiIGRvZXNuJ3QgZXhpc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiBjb2RlY3Z0Jmx0OyZndDs6OmRvX291dCBhbmQgZG9faW4gbWVudGlvbnMgYQpzeW1ib2wgImRvX2NvbnZlcnQiIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIHRoZQpzdGFuZGFyZC4gVGhpcyBpcyBhIGxlZnRvdmVyIGZyb20gYW4gZWRpdCwgYW5kIHNob3VsZCBiZSAiZG9faW4KYW5kIGRvX291dCIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4sIHBhcmFncmFwaCAzLCBjaGFuZ2UKImRvX2NvbnZlcnQiIHRvICJkb19pbiBvciBkb19vdXQiLiBBbHNvLCBpbiA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiwgY2hhbmdlICJkb19jb252ZXJ0KCkiIHRvICJkb19pbgpvciBkb19vdXQiLiA8L3A+Cjxocj4KPGEgbmFtZT0iMjUiPjxoMz4yNS4mbmJzcDtTdHJpbmcgb3BlcmF0b3ImbHQ7Jmx0OyB1c2VzIHdpZHRoKCkgdmFsdWUgd3Jvbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIHRoZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRvciZsdDsmbHQ7IGFwcGxpZWQgdG8gc3RyaW5ncywgdGhlIHN0YW5kYXJkIHNheXMgdGhhdCB1c2VzCnRoZSBzbWFsbGVyIG9mIG9zLndpZHRoKCkgYW5kIHN0ci5zaXplKCksIHRvIHBhZCAiYXMgZGVzY3JpYmVkIGluIHN0YWdlIDMiCmVsc2V3aGVyZTsgYnV0IHRoaXMgaXMgaW5jb25zaXN0ZW50LCBhcyB0aGlzIGFsbG93cyBubyBwb3NzaWJpbGl0eSBvZiBzcGFjZSBmb3IgcGFkZGluZy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4gIHBhcmFncmFwaCA0IGZyb206PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAiLi4uIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIHNtYWxsZXIgb2YgPHR0Pm9zLndpZHRoKCk8L3R0PiBhbmQgPHR0PnN0ci5zaXplKCk8L3R0PjsKLi4uIjxicj4KPGJyPgp0bzogPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAiLi4uIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIGxhcmdlciBvZiA8dHQ+b3Mud2lkdGgoKTwvdHQ+IGFuZCA8dHQ+c3RyLnNpemUoKTwvdHQ+OwouLi4iPC9wPgo8aHI+CjxhIG5hbWU9IjI2Ij48aDM+MjYuJm5ic3A7QmFkIHNlbnRyeSBleGFtcGxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbTo6c2VudHJ5Ij4gW2xpYi5pc3RyZWFtOjpzZW50cnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gcGFyYWdyYXBoIDYsIHRoZSBjb2RlIGluIHRoZSBleGFtcGxlOiA8L3A+Cgo8cHJlPiAgdGVtcGxhdGUgJmx0O2NsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBjaGFyX3RyYWl0cyZsdDtjaGFyVCZndDsgJmd0OwogIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0Ozo6c2VudHJ5KAogICAgICAgICAgIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGlzLCBib29sIG5vc2tpcHdzID0gZmFsc2UpIHsKICAgICAgLi4uCiAgICAgIGludF90eXBlIGM7CiAgICAgIHR5cGVkZWYgY3R5cGUmbHQ7Y2hhclQmZ3Q7IGN0eXBlX3R5cGU7CiAgICAgIGNvbnN0IGN0eXBlX3R5cGUmYW1wOyBjdHlwZSA9IHVzZV9mYWNldCZsdDtjdHlwZV90eXBlJmd0Oyhpcy5nZXRsb2MoKSk7CiAgICAgIHdoaWxlICgoYyA9IGlzLnJkYnVmKCktJmd0O3NuZXh0YygpKSAhPSB0cmFpdHM6OmVvZigpKSB7CiAgICAgICAgaWYgKGN0eXBlLmlzKGN0eXBlLnNwYWNlLGMpPT0wKSB7CiAgICAgICAgICBpcy5yZGJ1ZigpLSZndDtzcHV0YmFja2MgKGMpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIC4uLgogICB9PC9wcmU+Cgo8cD5mYWlscyB0byBkZW1vbnN0cmF0ZSBjb3JyZWN0IHVzZSBvZiB0aGUgZmFjaWxpdGllcyBkZXNjcmliZWQuIEluCnBhcnRpY3VsYXIsIGl0IGZhaWxzIHRvIHVzZSB0cmFpdHMgb3BlcmF0b3JzLCBhbmQgc3BlY2lmaWVzIGluY29ycmVjdApzZW1hbnRpY3MuIChFLmcuIGl0IHNwZWNpZmllcyBza2lwcGluZyBvdmVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCnNlcXVlbmNlIHdpdGhvdXQgZXhhbWluaW5nIGl0LikgPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSB0aGUgZXhhbXBsZSBhYm92ZSBmcm9tIDI3LjYuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OnNlbnRyeSI+IFtsaWIuaXN0cmVhbTo6c2VudHJ5XTwvYT4KcGFyYWdyYXBoIDYuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsbHkgcHJvcG9zZWQgcmVwbGFjZW1lbnQgY29kZSBmb3IgdGhlIGV4YW1wbGUgd2FzIG5vdApjb3JyZWN0LiBUaGUgTFdHIHRyaWVkIGluIEtvbmEgYW5kIGFnYWluIGluIFRva3lvIHRvIGNvcnJlY3QgaXQKd2l0aG91dCBzdWNjZXNzLiBJbiBUb2t5bywgYW4gaW1wbGVtZW50b3IgcmVwb3J0ZWQgdGhhdCBhY3R1YWwgd29ya2luZwpjb2RlIHJhbiBvdmVyIG9uZSBwYWdlIGluIGxlbmd0aCBhbmQgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLiBUaGUgTFdHCmRlY2lkZWQgdGhhdCBpdCB3b3VsZCBiZSBjb3VudGVyLXByb2R1Y3RpdmUgdG8gaW5jbHVkZSBzdWNoIGEgbGVuZ3RoeQpleGFtcGxlLCB3aGljaCBtaWdodCB3ZWxsIHN0aWxsIGNvbnRhaW4gZXJyb3JzLjwvcD4KPGhyPgo8YSBuYW1lPSIyNyI+PGgzPjI3LiZuYnNwO1N0cmluZzo6ZXJhc2UocmFuZ2UpIHlpZWxkcyB3cm9uZyBpdGVyYXRvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjplcmFzZSI+IFtsaWIuc3RyaW5nOjplcmFzZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5UaGUgc3RyaW5nOjplcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkgaXMgc3BlY2lmaWVkIHRvIHJldHVybiBhbiBlbGVtZW50IG9uZQpwbGFjZSBiZXlvbmQgdGhlIG5leHQgZWxlbWVudCBhZnRlciB0aGUgbGFzdCBvbmUgZXJhc2VkLiBFLmcuIGZvciB0aGUgc3RyaW5nCiJhYmNkZSIsIGVyYXNpbmcgdGhlIHJhbmdlIFsnYicuLidkJykgd291bGQgeWllbGQgYW4gaXRlcmF0b3IgZm9yIGVsZW1lbnQgJ2UnLAp3aGlsZSAnZCcgaGFzIG5vdCBiZWVuIGVyYXNlZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuNS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjplcmFzZSI+IFtsaWIuc3RyaW5nOjplcmFzZV08L2E+LCBwYXJhZ3JhcGggMTAsIGNoYW5nZTogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+UmV0dXJuczogYW4gaXRlcmF0b3Igd2hpY2ggcG9pbnRzIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBfbGFzdF8gcHJpb3IgdG8KICB0aGUgZWxlbWVudCBiZWluZyBlcmFzZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gcmVhZCA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5SZXR1cm5zOiBhbiBpdGVyYXRvciB3aGljaCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBfbGFzdF8gcHJpb3IgdG8gdGhlCiAgb3RoZXIgZWxlbWVudHMgYmVpbmcgZXJhc2VkLiA8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyOCI+PGgzPjI4LiZuYnNwO0N0eXBlJmx0O2NoYXImZ3Q7aXMgYW1iaWd1b3VzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVycyI+IFtsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdmVjdG9yIGZvcm0gb2YgY3R5cGUmbHQ7Y2hhciZndDs6OmlzIGNhbiBiZSBpbnRlcnByZXRlZCB0byBtZWFuCnNvbWV0aGluZyB2ZXJ5IGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIGludGVuZGVkLiBQYXJhZ3JhcGggNCBzYXlzIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IFRoZSBzZWNvbmQgZm9ybSwgZm9yIGFsbCAqcCBpbiB0aGUgcmFuZ2UgW2xvdywgaGlnaCksIGFzc2lnbnMgdmVjW3AtbG93XSB0bwogIHRhYmxlKClbKHVuc2lnbmVkIGNoYXIpKnBdLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPlRoaXMgaXMgaW50ZW5kZWQgdG8gY29weSB0aGUgdmFsdWUgaW5kZXhlZCBmcm9tIHRhYmxlKClbXSBpbnRvIHRoZSBwbGFjZSBpZGVudGlmaWVkIGluCnZlY1tdLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+LCBwYXJhZ3JhcGggNCwgdG8gcmVhZCA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBUaGUgc2Vjb25kIGZvcm0sIGZvciBhbGwgKnAgaW4gdGhlIHJhbmdlIFtsb3csIGhpZ2gpLCBhc3NpZ25zIGludG8gdmVjW3AtbG93XQogIHRoZSB2YWx1ZSB0YWJsZSgpWyh1bnNpZ25lZCBjaGFyKSpwXS4gPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjkiPjxoMz4yOS4mbmJzcDtJb3NfYmFzZTo6aW5pdCBkb2Vzbid0IGV4aXN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5uYXJyb3cuc3RyZWFtLm9iamVjdHMiPiBbbGliLm5hcnJvdy5zdHJlYW0ub2JqZWN0c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5TZWN0aW9ucyAyNy4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm5hcnJvdy5zdHJlYW0ub2JqZWN0cyI+IFtsaWIubmFycm93LnN0cmVhbS5vYmplY3RzXTwvYT4gYW5kIDI3LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIud2lkZS5zdHJlYW0ub2JqZWN0cyI+IFtsaWIud2lkZS5zdHJlYW0ub2JqZWN0c108L2E+IG1lbnRpb24KYSBmdW5jdGlvbiBpb3NfYmFzZTo6aW5pdCwgd2hpY2ggaXMgbm90IGRlZmluZWQuIFByb2JhYmx5IHRoZXkgbWVhbgpiYXNpY19pb3MmbHQ7Jmd0Ozo6aW5pdCwgZGVmaW5lZCBpbiAyNy40LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuYmFzaWMuaW9zLmNvbnMiPiBbbGliLmJhc2ljLmlvcy5jb25zXTwvYT4sCnBhcmFncmFwaCAzLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+W1IxMjogbW9kaWZpZWQgdG8gaW5jbHVkZSBwYXJhZ3JhcGggNS5dPC9wPgoKPHA+SW4gMjcuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5uYXJyb3cuc3RyZWFtLm9iamVjdHMiPiBbbGliLm5hcnJvdy5zdHJlYW0ub2JqZWN0c108L2E+IHBhcmFncmFwaCAyIGFuZCA1LCBjaGFuZ2UgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+aW9zX2Jhc2U6OmluaXQgPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50byA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5iYXNpY19pb3MmbHQ7Y2hhciZndDs6OmluaXQgPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5BbHNvLCBtYWtlIGEgc2ltaWxhciBjaGFuZ2UgaW4gMjcuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi53aWRlLnN0cmVhbS5vYmplY3RzIj4gW2xpYi53aWRlLnN0cmVhbS5vYmplY3RzXTwvYT4gZXhjZXB0IGl0CnNob3VsZCByZWFkIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmJhc2ljX2lvcyZsdDt3Y2hhcl90Jmd0Ozo6aW5pdCA8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIzMCI+PGgzPjMwLiZuYnNwO1dyb25nIGhlYWRlciBmb3IgTENfKjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggMiBpbXBsaWVzIHRoYXQgdGhlIEMgbWFjcm9zIExDX0NUWVBFIGV0Yy4gYXJlIGRlZmluZWQgaW4gJmx0O2NjdHlwZSZndDssCndoZXJlIHRoZXkgYXJlIGluIGZhY3QgZGVmaW5lZCBlbHNld2hlcmUgdG8gYXBwZWFyIGluICZsdDtjbG9jYWxlJmd0Oy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+LCBwYXJhZ3JhcGggMiwgY2hhbmdlCiImbHQ7Y2N0eXBlJmd0OyIgdG8gcmVhZCAiJmx0O2Nsb2NhbGUmZ3Q7Ii4gPC9wPgo8aHI+CjxhIG5hbWU9IjMxIj48aDM+MzEuJm5ic3A7SW1tdXRhYmxlIGxvY2FsZSB2YWx1ZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggNiwgc2F5cyAiQW4gaW5zdGFuY2Ugb2YgPHR0PmxvY2FsZTwvdHQ+IGlzCjxpPmltbXV0YWJsZTwvaT47IG9uY2UgYSBmYWNldCByZWZlcmVuY2UgaXMgb2J0YWluZWQgZnJvbSBpdCwKLi4uIi4gVGhpcyBoYXMgY2F1c2VkIHNvbWUgY29uZnVzaW9uLCBiZWNhdXNlIGxvY2FsZSB2YXJpYWJsZXMKYXJlIG1hbmlmZXN0bHkgYXNzaWduYWJsZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4gcmVwbGFjZSBwYXJhZ3JhcGggNjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkFuIGluc3RhbmNlIG9mIDx0dD5sb2NhbGU8L3R0PiBpcyBpbW11dGFibGU7IG9uY2UgYSBmYWNldAogIHJlZmVyZW5jZSBpcyBvYnRhaW5lZCBmcm9tIGl0LCB0aGF0IHJlZmVyZW5jZSByZW1haW5zIHVzYWJsZSBhcyBsb25nCiAgYXMgdGhlIGxvY2FsZSB2YWx1ZSBpdHNlbGYgZXhpc3RzLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPk9uY2UgYSBmYWNldCByZWZlcmVuY2UgaXMgb2J0YWluZWQgZnJvbSBhIGxvY2FsZSBvYmplY3QgYnkKICBjYWxsaW5nIHVzZV9mYWNldCZsdDsmZ3Q7LCB0aGF0IHJlZmVyZW5jZSByZW1haW5zIHVzYWJsZSwgYW5kIHRoZQogIHJlc3VsdHMgZnJvbSBtZW1iZXIgZnVuY3Rpb25zIG9mIGl0IG1heSBiZSBjYWNoZWQgYW5kIHJlLXVzZWQsIGFzCiAgbG9uZyBhcyBzb21lIGxvY2FsZSBvYmplY3QgcmVmZXJzIHRvIHRoYXQgZmFjZXQuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMzIiPjxoMz4zMi4mbmJzcDtQYmFja2ZhaWwgZGVzY3JpcHRpb24gaW5jb25zaXN0ZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQucGJhY2siPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LnBiYWNrXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVxdWlyZWQgc3RhdGUgYmVmb3JlIGNhbGxpbmcgdmlydHVhbCBtZW1iZXIKYmFzaWNfc3RyZWFtYnVmJmx0OyZndDs6OnBiYWNrZmFpbCByZXF1aXJlbWVudHMgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIGNvbmRpdGlvbnMKZGVzY3JpYmVkIGluIDI3LjUuMi4yLjQgW2xpYi5zdHJlYW1idWYucHViLnBiYWNrXSB3aGVyZSBtZW1iZXIgc3B1dGJhY2tjIGNhbGxzIGl0LgpTcGVjaWZpY2FsbHksIHRoZSBsYXR0ZXIgc2F5cyBpdCBjYWxscyBwYmFja2ZhaWwgaWY6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyB0cmFpdHM6OmVxKGMsZ3B0cigpWy0xXSkgaXMgZmFsc2UgPC9wPgoKPHA+d2hlcmUgcGJhY2tmYWlsIGNsYWltcyB0byByZXF1aXJlOiA8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgdHJhaXRzOjplcSgqZ3B0cigpLHRyYWl0czo6dG9fY2hhcl90eXBlKGMpKSByZXR1cm5zIGZhbHNlIDwvcD4KCjxwPkl0IGFwcGVhcnMgdGhhdCB0aGUgcGJhY2tmYWlsIGRlc2NyaXB0aW9uIGlzIHdyb25nLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNS4yLjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQucGJhY2siPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LnBiYWNrXTwvYT4sIHBhcmFncmFwaCAxLCBjaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Ijx0dD50cmFpdHM6OmVxKCpncHRyKCksdHJhaXRzOjp0b19jaGFyX3R5cGUoIGMpKTwvdHQ+IjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Ijx0dD50cmFpdHM6OmVxKHRyYWl0czo6dG9fY2hhcl90eXBlKGMpLGdwdHIoKVstMV0pPC90dD4iCiAgPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ob3RlIGRlbGliZXJhdGUgcmVvcmRlcmluZyBvZiBhcmd1bWVudHMgZm9yIGNsYXJpdHkgaW4gYWRkaXRpb24gdG8gdGhlIGNvcnJlY3Rpb24gb2YKdGhlIGFyZ3VtZW50IHZhbHVlLjwvcD4KPGhyPgo8YSBuYW1lPSIzMyI+PGgzPjMzLiZuYnNwO0NvZGVjdnQmbHQ7Jmd0OyBtZW50aW9ucyBmcm9tX3R5cGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIHRoZSB0YWJsZSBkZWZpbmluZyB0aGUgcmVzdWx0cyBmcm9tIGRvX291dCBhbmQgZG9faW4sIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUKcmVzdWx0IDxpPmVycm9yPC9pPiBzYXlzIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmVuY291bnRlcmVkIGEgZnJvbV90eXBlIGNoYXJhY3RlciBpdCBjb3VsZCBub3QgY29udmVydCA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPmJ1dCBmcm9tX3R5cGUgaXMgbm90IGRlZmluZWQuIFRoaXMgY2xlYXJseSBpcyBpbnRlbmRlZCB0byBiZSBhbiBleHRlcm5UIGZvciBkb19pbiwgb3IKYW4gaW50ZXJuVCBmb3IgZG9fb3V0LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gPGZvbnQgY29sb3I9InJlZCI+MjIuMi4xLjUuMjwvZm9udD4gcGFyYWdyYXBoIDQsIHJlcGxhY2UgdGhlIGRlZmluaXRpb24KaW4gdGhlIHRhYmxlIGZvciB0aGUgY2FzZSBvZiBfZXJyb3JfIHdpdGggPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+ZW5jb3VudGVyZWQgYSBjaGFyYWN0ZXIgaW4gPHR0Pltmcm9tLGZyb21fZW5kKTwvdHQ+IHRoYXQgaXQgY291bGQgbm90IGNvbnZlcnQuIDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM0Ij48aDM+MzQuJm5ic3A7VHJ1ZS9mYWxzZW5hbWUoKSBub3QgaW4gY3R5cGUmbHQ7Jmd0OzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIHBhcmFncmFwaCAxOSwgRWZmZWN0czosIG1lbWJlcnMgdHJ1ZW5hbWUoKSBhbmQgZmFsc2VuYW1lIGFyZSB1c2VkIGZyb20gZmFjZXQKY3R5cGUmbHQ7Y2hhclQmZ3Q7LCBidXQgaXQgaGFzIG5vIHN1Y2ggbWVtYmVycy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBhIHByb2JsZW0gaW4KMjIuMi4yLjEuMiwgYWRkcmVzc2VkIGluICg0KS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCAxOSwgaW4gdGhlIEVmZmVjdHM6CmNsYXVzZSBmb3IgbWVtYmVyIHB1dCguLi4uLCBib29sKSwgcmVwbGFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCnN0cmluZ190eXBlIHZhbHVlIHMgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5jb25zdCBudW1wdW5jdCZhbXA7IG5wID0gdXNlX2ZhY2V0Jmx0O251bXB1bmN0Jmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYyk7CnN0cmluZ190eXBlIHMgPSB2YWwgPyBucC50cnVlbmFtZSgpIDogbnAuZmFsc2VuYW1lKCk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMzUiPjxoMz4zNS4mbmJzcDtObyBtYW5pcHVsYXRvciB1bml0YnVmIGluIHN5bm9wc2lzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW1zLmJhc2UiPiBbbGliLmlvc3RyZWFtcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIDI3LjQuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mbXRmbGFncy5tYW5pcCI+IFtsaWIuZm10ZmxhZ3MubWFuaXBdPC9hPiwgd2UgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGEgbWFuaXB1bGF0b3IKbmFtZWQgInVuaXRidWYiLiBVbmxpa2Ugb3RoZXIgbWFuaXB1bGF0b3JzLCBpdCdzIG5vdCBsaXN0ZWQKaW4gc3lub3BzaXMuIFNpbWlsYXJseSBmb3IgIm5vdW5pdGJ1ZiIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gdGhlIHN5bm9wc2lzIGZvciAmbHQ7aW9zJmd0OyBpbiAyNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbXMuYmFzZSI+IFtsaWIuaW9zdHJlYW1zLmJhc2VdPC9hPiwgYWZ0ZXIKdGhlIGVudHJ5IGZvciAibm91cHBlcmNhc2UiLCB0aGUgcHJvdG90eXBlczogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5pb3NfYmFzZSZhbXA7IHVuaXRidWYoaW9zX2Jhc2UmYW1wOyBzdHIpOwppb3NfYmFzZSZhbXA7IG5vdW5pdGJ1Zihpb3NfYmFzZSZhbXA7IHN0cik7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMzYiPjxoMz4zNi4mbmJzcDtJd29yZCAmYW1wOyBwd29yZCBzdG9yYWdlIGxpZmV0aW1lIG9taXR0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2Uuc3RvcmFnZSI+IFtsaWIuaW9zLmJhc2Uuc3RvcmFnZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5JbiB0aGUgZGVmaW5pdGlvbnMgZm9yIGlvc19iYXNlOjppd29yZCBhbmQgcHdvcmQsIHRoZSBsaWZldGltZSBvZiB0aGUgc3RvcmFnZSBpcwpzcGVjaWZpZWQgYmFkbHksIHNvIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gd2hpY2ggb25seSBrZWVwcyB0aGUgbGFzdCB2YWx1ZSBzdG9yZWQgYXBwZWFycwp0byBjb25mb3JtLiBJbiBwYXJ0aWN1bGFyLCBpdCBzYXlzOiA8L3A+Cgo8cD5UaGUgcmVmZXJlbmNlIHJldHVybmVkIG1heSBiZWNvbWUgaW52YWxpZCBhZnRlciBhbm90aGVyIGNhbGwgdG8gdGhlIG9iamVjdCdzIGl3b3JkCm1lbWJlciB3aXRoIGEgZGlmZmVyZW50IGluZGV4IC4uLiA8L3A+Cgo8cD5UaGlzIGlzIG5vdCBpZGxlIHNwZWN1bGF0aW9uOyBhdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gd2FzIGRvbmUgdGhpcyB3YXkuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgaW4gMjcuNC4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLnN0b3JhZ2UiPiBbbGliLmlvcy5iYXNlLnN0b3JhZ2VdPC9hPiwgaW4gYm90aCBwYXJhZ3JhcGggMiBhbmQgYWxzbyBpbgpwYXJhZ3JhcGggNCwgcmVwbGFjZSB0aGUgc2VudGVuY2U6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSByZWZlcmVuY2UgcmV0dXJuZWQgbWF5IGJlY29tZSBpbnZhbGlkIGFmdGVyIGFub3RoZXIgY2FsbCB0byB0aGUgb2JqZWN0J3MgaXdvcmQKICBbcHdvcmRdIG1lbWJlciB3aXRoIGEgZGlmZmVyZW50IGluZGV4LCBhZnRlciBhIGNhbGwgdG8gaXRzIGNvcHlmbXQgbWVtYmVyLCBvciB3aGVuIHRoZQogIG9iamVjdCBpcyBkZXN0cm95ZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHJlZmVyZW5jZSByZXR1cm5lZCBpcyBpbnZhbGlkIGFmdGVyIGFueSBvdGhlciBvcGVyYXRpb25zIG9uIHRoZSBvYmplY3QuIEhvd2V2ZXIsCiAgdGhlIHZhbHVlIG9mIHRoZSBzdG9yYWdlIHJlZmVycmVkIHRvIGlzIHJldGFpbmVkLCBzbyB0aGF0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gY29weWZtdCwKICBjYWxsaW5nIGl3b3JkIFtwd29yZF0gd2l0aCB0aGUgc2FtZSBpbmRleCB5aWVsZHMgYW5vdGhlciByZWZlcmVuY2UgdG8gdGhlIHNhbWUgdmFsdWUuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+c3Vic3RpdHV0aW5nICJpd29yZCIgb3IgInB3b3JkIiBhcyBhcHByb3ByaWF0ZS4gPC9wPgo8aHI+CjxhIG5hbWU9IjM3Ij48aDM+MzcuJm5ic3A7TGVmdG92ZXIgImdsb2JhbCIgcmVmZXJlbmNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIG92ZXJ2aWV3IG9mIGxvY2FsZSBzZW1hbnRpY3MsIHBhcmFncmFwaCA0LCBpcyB0aGUgc2VudGVuY2UgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SWYgRmFjZXQgaXMgbm90IHByZXNlbnQgaW4gYSBsb2NhbGUgKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwgbG9jYWxlKSwgaXQgdGhyb3dzCiAgdGhlIHN0YW5kYXJkIGV4Y2VwdGlvbiBiYWRfY2FzdC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRlZmluaXRpb24gb2YgdXNlX2ZhY2V0Jmx0OyZndDssIGFuZCByZXByZXNlbnRzIHNlbWFudGljcwpmcm9tIGFuIG9sZCBkcmFmdC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4sIHBhcmFncmFwaCA0LCBkZWxldGUgdGhlIHBhcmVudGhlc2l6ZWQKZXhwcmVzc2lvbiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4ob3IsIGZhaWxpbmcgdGhhdCwgaW4gdGhlIGdsb2JhbCBsb2NhbGUpIDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM4Ij48aDM+MzguJm5ic3A7RmFjZXQgZGVmaW5pdGlvbiBpbmNvbXBsZXRlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmdsb2JhbC50ZW1wbGF0ZXMiPiBbbGliLmxvY2FsZS5nbG9iYWwudGVtcGxhdGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkl0IGhhcyBiZWVuIG5vdGljZWQgYnkgRXNhIFB1bGtraW5lbiB0aGF0IHRoZSBkZWZpbml0aW9uIG9mCiJmYWNldCIgaXMgaW5jb21wbGV0ZS4gSW4gcGFydGljdWxhciwgYSBjbGFzcyBkZXJpdmVkIGZyb20KYW5vdGhlciBmYWNldCwgYnV0IHdoaWNoIGRvZXMgbm90IGRlZmluZSBhIG1lbWJlciA8aT5pZDwvaT4sIGNhbm5vdApzYWZlbHkgc2VydmUgYXMgdGhlIGFyZ3VtZW50IDxpPkY8L2k+IHRvIHVzZV9mYWNldCZsdDtGJmd0Oyhsb2MpLApiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgcmVmZXJlbmNlIHRvIHRoZSBmYWNldCBpbnN0YW5jZQpzdG9yZWQgaW4gPGk+bG9jPC9pPiBpcyBzYWZlbHkgY29udmVydGlibGUgdG8gPGk+RjwvaT4uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgZGVmaW5pdGlvbiBvZiBzdGQ6OnVzZV9mYWNldCZsdDsmZ3Q7KCksIHJlcGxhY2UgdGhlIHRleHQgaW4gcGFyYWdyYXBoIDEgd2hpY2gKcmVhZHM6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkdldCBhIHJlZmVyZW5jZSB0byBhIGZhY2V0IG9mIGEgbG9jYWxlLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVzOiA8dHQ+RmFjZXQ8L3R0PiBpcyBhIGZhY2V0IGNsYXNzIHdob3NlIGRlZmluaXRpb24KICBjb250YWlucyB0aGUgcHVibGljIHN0YXRpYyBtZW1iZXIgPHR0PmlkPC90dD4gYXMgZGVmaW5lZCBpbiAyMi4xLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmZhY2V0Ij4gW2xpYi5sb2NhbGUuZmFjZXRdPC9hPi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCktvbmE6IHN0cmlrZSBhcyBvdmVyc3BlY2lmaWNhdGlvbiB0aGUgdGV4dCAiKG5vdCBpbmhlcml0cykiCmZyb20gdGhlIG9yaWdpbmFsIHJlc29sdXRpb24sIHdoaWNoIHJlYWQgIi4uLiB3aG9zZSBkZWZpbml0aW9uCmNvbnRhaW5zIChub3QgaW5oZXJpdHMpIHRoZSBwdWJsaWMgc3RhdGljIG1lbWJlcgo8dHQ+aWQ8L3R0Pi4uLiIKXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjM5Ij48aDM+MzkuJm5ic3A7aXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDsmZ3Q7OjpvcGVyYXRvcisrKGludCkgZGVmaW5pdGlvbiBnYXJibGVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNS4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKysiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKytdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+Rm9sbG93aW5nIHRoZSBkZWZpbml0aW9uIG9mIGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Jmd0Ozo6b3BlcmF0b3IrKyhpbnQpIGluIHBhcmFncmFwaAozLCB0aGUgc3RhbmRhcmQgY29udGFpbnMgdGhyZWUgbGluZXMgb2YgZ2FyYmFnZSB0ZXh0IGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgZWRpdC4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5pc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgdG1wID0gKnRoaXM7CnNidWZfLSZndDtzYnVtcGMoKTsKcmV0dXJuKHRtcCk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuNS4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKysiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKytdPC9hPiwgZGVsZXRlIHRoZSB0aHJlZSBsaW5lcyBvZiBjb2RlIGF0IHRoZQplbmQgb2YgcGFyYWdyYXBoIDMuIDwvcD4KPGhyPgo8YSBuYW1lPSI0MCI+PGgzPjQwLiZuYnNwO01lYW5pbmdsZXNzIG5vcm1hdGl2ZSBwYXJhZ3JhcGggaW4gZXhhbXBsZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldHMuZXhhbXBsZXMiPiBbbGliLmZhY2V0cy5leGFtcGxlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggMyBvZiB0aGUgbG9jYWxlIGV4YW1wbGVzIGlzIGEgZGVzY3JpcHRpb24gb2YgcGFydCBvZiBhbgppbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWUgdGhhdCBoYXMgbG9zdCBpdHMgcmVmZXJlbnQsIGFuZCBkb2Vzbid0IG1lYW4KYW55dGhpbmcuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5EZWxldGUgMjIuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXRzLmV4YW1wbGVzIj4gW2xpYi5mYWNldHMuZXhhbXBsZXNdPC9hPiBwYXJhZ3JhcGggMyB3aGljaCBiZWdpbnMgIlRoaXMKaW5pdGlhbGl6YXRpb24vaWRlbnRpZmljYXRpb24gc3lzdGVtIGRlcGVuZHMuLi4iLCBvciAoYXQgdGhlCmVkaXRvcidzIG9wdGlvbikgcmVwbGFjZSBpdCB3aXRoIGEgcGxhY2UtaG9sZGVyIHRvIGtlZXAgdGhlIHBhcmFncmFwaApudW1iZXJpbmcgdGhlIHNhbWUuIDwvcD4KPGhyPgo8YSBuYW1lPSI0MSI+PGgzPjQxLiZuYnNwO0lvc19iYXNlIG5lZWRzIGNsZWFyKCksIGV4Y2VwdGlvbnMoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UiPiBbbGliLmlvcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiBpb3NfYmFzZTo6aXdvcmQoKSBhbmQgcHdvcmQoKSBpbiAyNy40LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLm1lbWJlcnMuc3RhdGljIj4gW2xpYi5pb3MubWVtYmVycy5zdGF0aWNdPC9hPiwgc2F5IHRoYXQgaWYgdGhleSBmYWlsLCB0aGV5ICJzZXQgYmFkYml0LAp3aGljaCBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIi4gSG93ZXZlciwgaW9zX2Jhc2Ugb2ZmZXJzIG5vCmludGVyZmFjZSB0byBzZXQgb3IgdG8gdGVzdCBiYWRiaXQ7IHRob3NlIGludGVyZmFjZXMgYXJlIGRlZmluZWQgaW4KYmFzaWNfaW9zJmx0OyZndDsuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGRlc2NyaXB0aW9uIGluIDI3LjQuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZS5zdG9yYWdlIj4gW2xpYi5pb3MuYmFzZS5zdG9yYWdlXTwvYT4gaW4KcGFyYWdyYXBoIDIsIGFuZCBhbHNvIGluIHBhcmFncmFwaCA0LCBhcyBmb2xsb3dzLiBSZXBsYWNlPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SWYgdGhlIGZ1bmN0aW9uIGZhaWxzIGl0IHNldHMgYmFkYml0LCB3aGljaCBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW5kIDx0dD4qdGhpczwvdHQ+IGlzIGEgYmFzZSBzdWItb2JqZWN0IG9mCiAgYSA8dHQ+YmFzaWNfaW9zJmx0OyZndDs8L3R0PiBvYmplY3Qgb3Igc3ViLW9iamVjdCwgdGhlIGVmZmVjdCBpcwogIGVxdWl2YWxlbnQgdG8gY2FsbGluZyA8dHQ+YmFzaWNfaW9zJmx0OyZndDs6OnNldHN0YXRlKGJhZGJpdCk8L3R0PgogIG9uIHRoZSBkZXJpdmVkIG9iamVjdCAod2hpY2ggbWF5IHRocm93IDx0dD5mYWlsdXJlPC90dD4pLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IExXRyByZXZpZXdlZCB3b3JkaW5nOyBzZXRzdGF0ZShmYWlsYml0KSBjaGFuZ2VkIHRvCnNldHN0YXRlKGJhZGJpdCkuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjQyIj48aDM+NDIuJm5ic3A7U3RyaW5nIGN0b3JzIHNwZWNpZnkgd3JvbmcgZGVmYXVsdCBhbGxvY2F0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGJhc2ljX3N0cmluZyZsdDsmZ3Q7IGNvcHkgY29uc3RydWN0b3I6IDwvcD4KCjxwcmU+YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICBzaXplX3R5cGUgbiA9IG5wb3MsIGNvbnN0IEFsbG9jYXRvciZhbXA7IGEgPSBBbGxvY2F0b3IoKSk7IDwvcHJlPgoKPHA+c3BlY2lmaWVzIGFuIEFsbG9jYXRvciBhcmd1bWVudCBkZWZhdWx0IHZhbHVlIHRoYXQgaXMKY291bnRlci1pbnR1aXRpdmUuIFRoZSBuYXR1cmFsIGNob2ljZSBmb3IgYSB0aGUgYWxsb2NhdG9yIHRvIGNvcHkgZnJvbQppcyBzdHIuZ2V0X2FsbG9jYXRvcigpLiBUaG91Z2ggdGhpcyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluCmRlZmF1bHQtYXJndW1lbnQgbm90YXRpb24sIG92ZXJsb2FkaW5nIHN1ZmZpY2VzLiA8L3A+Cgo8cD5BbHRlcm5hdGl2ZWx5LCB0aGUgb3RoZXIgY29udGFpbmVycyBpbiBDbGF1c2UgMjMgKGRlcXVlLCBsaXN0LAp2ZWN0b3IpIGRvIG5vdCBoYXZlIHRoaXMgZm9ybSBvZiBjb25zdHJ1Y3Rvciwgc28gaXQgaXMgaW5jb25zaXN0ZW50LAphbmQgYW4gZXZpZGVudCBzb3VyY2Ugb2YgY29uZnVzaW9uLCBmb3IgYmFzaWNfc3RyaW5nJmx0OyZndDsgdG8gaGF2ZQppdCwgc28gaXQgbWlnaHQgYmV0dGVyIGJlIHJlbW92ZWQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4gSW4gMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4sIHJlcGxhY2UgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBjb3B5CmNvbnN0cnVjdG9yIGFzIGZvbGxvd3M6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0cik7CmJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuID0gbnBvcywKICAgICAgICAgICAgIGNvbnN0IEFsbG9jYXRvciZhbXA7IGEgPSBBbGxvY2F0b3IoKSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkluIDIxLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5jb25zIj4gW2xpYi5zdHJpbmcuY29uc108L2E+LCByZXBsYWNlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uCmFzIGFib3ZlLiBBZGQgdG8gcGFyYWdyYXBoIDUsIEVmZmVjdHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SW4gdGhlIGZpcnN0IGZvcm0sIHRoZSBBbGxvY2F0b3IgdmFsdWUgdXNlZCBpcyBjb3BpZWQgZnJvbQogIDx0dD5zdHIuZ2V0X2FsbG9jYXRvcigpPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoZSBjb25zdHJ1Y3RvciBpcyBhY3R1YWxseSBicm9rZW4sIHJhdGhlciB0aGFuCmp1c3QgYW4gdW5mb3J0dW5hdGUgZGVzaWduIGNob2ljZS48L3A+Cgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQgdHdvIG90aGVyIHBvc3NpYmxlIHJlc29sdXRpb25zOjwvcD4KCjxwPkEuIEluIDIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+LCByZXBsYWNlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgY29weQpjb25zdHJ1Y3RvciBhcyBmb2xsb3dzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICBzaXplX3R5cGUgbiA9IG5wb3MpOwpiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zLAogICAgICAgICAgICAgc2l6ZV90eXBlIG4sIGNvbnN0IEFsbG9jYXRvciZhbXA7IGEpOyA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4sIHJlcGxhY2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KYXMgYWJvdmUuIEFkZCB0byBwYXJhZ3JhcGggNSwgRWZmZWN0czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+V2hlbiBubyA8dHQ+QWxsb2NhdG9yPC90dD4gYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBzdHJpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlCiAgdmFsdWUgPHR0PnN0ci5nZXRfYWxsb2NhdG9yKCk8L3R0Pi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5CLiBJbiAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiwgYW5kIGFsc28gaW4gMjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4sIHJlcGxhY2UKdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFzIGZvbGxvd3M6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICBzaXplX3R5cGUgbiA9IG5wb3MpOyA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gcmVmbGVjdHMgdGhlIG9yaWdpbmFsIGludGVudCBvZiB0aGUgTFdHLiBJdAp3YXMgYWxzbyBub3RlZCBieSBQZXRlIEJlY2tlciB0aGF0IHRoaXMgZml4ICJ3aWxsIGNhdXNlCmEgc21hbGwgYW1vdW50IG9mIGV4aXN0aW5nIGNvZGUgdG8gbm93IHdvcmsgY29ycmVjdGx5LiI8L3A+Cgo8cD48aT5bCktvbmE6IGlzc3VlIGVkaXRpbmcgc25hZnUgZml4ZWQgLSB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBub3cgY29ycmVjdGx5CnJlZmxlY3RzIHRoZSBMV0cgY29uc2Vuc3VzLgpdPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSI0NCI+PGgzPjQ0LiZuYnNwO0lvc3RyZWFtcyB1c2Ugb3BlcmF0b3I9PSBvbiBpbnRfdHlwZSB2YWx1ZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW5wdXQub3V0cHV0Ij4gW2xpYi5pbnB1dC5vdXRwdXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+TWFueSBvZiB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIGlvc3RyZWFtcyBzcGVjaWZ5IHRoYXQgY2hhcmFjdGVyCnZhbHVlcyBvciB0aGVpciBpbnRfdHlwZSBlcXVpdmFsZW50cyBhcmUgY29tcGFyZWQgdXNpbmcgb3BlcmF0b3JzID09Cm9yICE9LCB0aG91Z2ggaW4gb3RoZXIgcGxhY2VzIHRyYWl0czo6ZXEoKSBvciB0cmFpdHM6OmVxX2ludF90eXBlIGlzCnNwZWNpZmllZCB0byBiZSB1c2VkIHRocm91Z2hvdXQuIFRoaXMgaXMgYW4gaW5jb25zaXN0ZW5jeTsgd2Ugc2hvdWxkCmNoYW5nZSB1c2VzIG9mID09IGFuZCAhPSB0byB1c2UgdGhlIHRyYWl0cyBtZW1iZXJzIGluc3RlYWQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGk+W1ByZS1Lb25hOiBEaWV0bWFyIHN1cHBsaWVkIHdvcmRpbmddPC9pPjwvcD4KCjxwPkxpc3Qgb2YgY2hhbmdlcyB0byBjbGF1c2UgMjc6PC9wPgo8b2w+CjxsaT4KICAgSW4gbGliLmJhc2ljLmlvcy5tZW1iZXJzIHBhcmFncmFwaCAxMyAocG9zdGNvbmRpdGlvbiBjbGF1c2UgZm9yCiAgICdmaWxsKGNUKScpIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgZmlsbGNoID09IGZpbGwoKQo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShmaWxsY2gsIGZpbGwoKSkKPC9ibG9ja3F1b3RlPgoKCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDcgKGVmZmVjdHMgY2xhdXNlIGZvcgogICAnZ2V0KGNULHN0cmVhbXNpemUsY1QpJyksIHRoaXJkIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBjID09IGRlbGltIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKICA8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIHBhcmFncmFwaCAxMiAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgICdnZXQoYmFzaWNfc3RyZWFtYnVmJmx0O2NULFRyJmd0OyZhbXA7LGNUKScpLCB0aGlyZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYyA9PSBkZWxpbSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxKGMsIGRlbGltKSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjCjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDE3IChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2dldGxpbmUoY1Qsc3RyZWFtc2l6ZSxjVCknKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBjID09IGRlbGltIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKICA8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIHBhcmFncmFwaCAyNCAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgICdpZ25vcmUoaW50LGludF90eXBlKScpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPgogICAgIGMgPT0gZGVsaW0gZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcV9pbnRfdHlwZShjLCBkZWxpbSkgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dAogICAgIGNoYXJhY3RlciBjCjwvYmxvY2txdW90ZT4KICAKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCBwYXJhZ3JhcGggMjUgKG5vdGVzIGNsYXVzZSBmb3IKICAgJ2lnbm9yZShpbnQsaW50X3R5cGUpJyksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgVGhlIGxhc3QgY29uZGl0aW9uIHdpbGwgbmV2ZXIgb2NjdXIgaWYgZGVsaW0gPT0gdHJhaXRzOjplb2YoKQo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgVGhlIGxhc3QgY29uZGl0aW9uIHdpbGwgbmV2ZXIgb2NjdXIgaWYKICAgICB0cmFpdHM6OmVxX2ludF90eXBlKGRlbGltLCB0cmFpdHM6OmVvZigpKS4KPC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS5zZW50cnkgcGFyYWdyYXBoIDYgKGV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZQogICBzZW50cnkgY29uc3RydWN0b3IpIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgd2hpbGUgKChjID0gaXMucmRidWYoKS0mZ3Q7c25leHRjKCkpICE9IHRyYWl0czo6ZW9mKCkpIHsKPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHdoaWxlICghdHJhaXRzOjplcV9pbnRfdHlwZShjID0gaXMucmRidWYoKS0mZ3Q7c25leHRjKCksIHRyYWl0czo6ZW9mKCkpKSB7CjwvYmxvY2txdW90ZT4KCjwvbGk+Cjwvb2w+Cgo8cD5MaXN0IG9mIGNoYW5nZXMgdG8gQ2hhcHRlciAyMTo8L3A+Cgo8b2w+CjxsaT4KICAgSW4gbGliLnN0cmluZzo6ZmluZCBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yIGZpbmQoKSksCiAgIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OnJmaW5kIHBhcmFncmFwaCAxIChlZmZlY3RzIGNsYXVzZSBmb3IgcmZpbmQoKSksCiAgIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQuZmlyc3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2ZpcnN0X29mKCkpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPgogICAgIGF0KHhwb3MrSSkgPT0gc3RyLmF0KEkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxKGF0KHhwb3MrSSksIHN0ci5hdChJKSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuc3RyaW5nOjpmaW5kLmxhc3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2xhc3Rfb2YoKSksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQuZmlyc3Qubm90Lm9mIHBhcmFncmFwaCAxIChlZmZlY3RzIGNsYXVzZSBmb3IKICAgZmluZF9maXJzdF9ub3Rfb2YoKSksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CjwvbGk+Cgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQubGFzdC5ub3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2xhc3Rfbm90X29mKCkpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPgogICAgIGF0KHhwb3MrSSkgPT0gc3RyLmF0KEkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxKGF0KHhwb3MrSSksIHN0ci5hdChJKSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgo8L2xpPgoKPGxpPgogICBJbiBsaWIuc3RyaW5nLmlvcyBwYXJhZ3JhcGggNSAoZWZmZWN0cyBjbGF1c2UgZm9yIGdldGxpbmUoKSksCiAgIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYyA9PSBkZWxpbSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjIAo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShjLCBkZWxpbSkgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYyAKPC9ibG9ja3F1b3RlPgo8L2xpPgoKPC9vbD4KCjxwPk5vdGVzOjwvcD4KPHVsPgo8bGk+CiAgRml4aW5nIHRoaXMgaXNzdWUgaGlnaGxpZ2h0cyBhbm90aGVyIHNsb3BweW5lc3MgaW4KICBsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCBwYXJhZ3JhcGggMjQ6IHRoaXMgY2xhdXNlIG1lbnRpb25zIGEgImNoYXJhY3RlciIKICB3aGljaCBpcyB0aGVuIGNvbXBhcmVkIHRvIGFuICdpbnRfdHlwZScgKHNlZSBpdGVtIDUuIGluIHRoZSBsaXN0CiAgYmVsb3cpLiBJdCBpcyBub3QgY2xlYXIgd2hldGhlciB0aGlzIHJlcXVpcmVzIGV4cGxpY2l0IHdvcmRzIGFuZAogIGlmIHNvIHdoYXQgdGhlc2Ugd29yZHMgYXJlIHN1cHBvc2VkIHRvIGJlLiBBIHNpbWlsYXIgaXNzdWUgZXhpc3RzLAogIEJUVywgZm9yIG9wZXJhdG9yKigpIG9mIGlzdHJlYW1idWZfaXRlcmF0b3Igd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0CiAgb2Ygc2dldGMoKSBhcyBhIGNoYXJhY3RlciB0eXBlIChzZWUgbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKgogIHBhcmFncmFwaCAxKSwgYW5kIGZvciBvcGVyYXRvcisrKCkgb2YgaXN0cmVhbWJ1Zl9pdGVyYXRvciB3aGljaAogIHBhc3NlcyB0aGUgcmVzdWx0IG9mIHNidW1wYygpIHRvIGEgY29uc3RydWN0b3IgdGFraW5nIGEgY2hhcl90eXBlCiAgKHNlZSBsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6b3BlcmF0b3IrKyBwYXJhZ3JhcGggMykuIFNpbWlsYXJpbHksIHRoZQogIGFzc2lnbm1lbnQgb3BlcmF0b3Igb3N0cmVhbWJ1Zl9pdGVyYXRvciBwYXNzZXMgYSBjaGFyX3R5cGUgdG8gYSBmdW5jdGlvbgogIHRha2luZyBhbiBpbnRfdHlwZSAoc2VlIGxpYi5vc3RyZWFtYnVmLml0ZXIub3BzIHBhcmFncmFwaCAxKS4KPC9saT4KPGxpPgogIEl0IGlzIGluY29uc2lzdGVudCB0byB1c2UgY29tcGFyaXNvbnMgdXNpbmcgdGhlIHRyYWl0cyBmdW5jdGlvbnMgaW4KICBDaGFwdGVyIDI3IHdoaWxlIG5vdCB1c2luZyB0aGVtIGluIENoYXB0ZXIgMjEsIGVzcGVjaWFsbHkgYXMgc29tZQogIG9mIHRoZSBpbmNvbnNpc3RlbnQgdXNlcyBhY3R1YWxseSBpbnZvbHZlIHN0cmVhbXMgKGVnLiBnZXRsaW5lKCkgb24KICBzdHJlYW1zKS4gVG8gYXZvaWQgbGVhdmluZyB0aGlzIGlzc3VlIG9wZW4gc3RpbGwgbG9uZ2VyIGR1ZSB0byB0aGlzCiAgaW5jb25zaXN0ZW5jeSAoaXQgaXMgb3BlbiBzaW5jZSAxOTk4KSwgYSBsaXN0IG9mIGNoYW5nZXMgdG8gQ2hhcHRlcgogIDIxIGlzIGJlbG93Lgo8L2xpPgo8bGk+CiAgSW4gQ2hhcHRlciAyNCB0aGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2l0aCBzdGF0ZW1lbnRzIGxpa2UgInRoZSBlbmQKICBvZiBzdHJlYW0gaXMgcmVhY2hlZCAoc3RyZWFtYnVmX3R5cGU6OnNnZXRjKCkgcmV0dXJucyB0cmFpdHM6OmVvZigpKSIKICAobGliLmlzdHJlYW1idWYuaXRlcmF0b3IgcGFyYWdyYXBoIDEsIGxpYi5vc3RyZWFtYnVmLml0ZXIub3BzCiAgcGFyYWdyYXBoIDUpLiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgdGhlc2Ugc2hvdWxkIGJlIGNsYXJpZmllZCB0byB1c2UKICB0cmFpdHM6OmVxX2ludF90eXBlKCkgZm9yIGRldGVjdGluZyB0cmFpdHM6OmVvZigpLgo8L2xpPgo8L3VsPgoKPGhyPgo8YSBuYW1lPSI0NiI+PGgzPjQ2LiZuYnNwO01pbm9yIEFubmV4IEQgZXJyb3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHIuc3Ryc3RyZWFtcyI+IFtkZXByLnN0ci5zdHJzdHJlYW1zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QnJlbmRhbiBLZWhvZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsgMSBKdW4gMTk5ODwvcD4KPHA+U2VlIGxpYi02NTIyIGFuZCBlZGl0LTgxNC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIEQuNy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHJzdHJlYW1idWYiPiBbZGVwci5zdHJzdHJlYW1idWZdPC9hPiAoc2luY2Ugc3RyZWFtYnVmIGlzIGEgdHlwZWRlZiBvZgpiYXNpY19zdHJlYW1idWYmbHQ7Y2hhciZndDspIGZyb206PC9wPgoKPHByZT4gICAgICAgICB2aXJ0dWFsIHN0cmVhbWJ1ZiZsdDtjaGFyJmd0Oyogc2V0YnVmKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7PC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgICAgICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcywgc3RyZWFtc2l6ZSBuKTs8L3ByZT4KCjxwPkluIEQuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHJzdHJlYW0iPiBbZGVwci5zdHJzdHJlYW1dPC9hPiBpbnNlcnQgdGhlIHNlbWljb2xvbiBub3cgbWlzc2luZyBhZnRlcgppbnRfdHlwZTo8L3A+Cgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICBjbGFzcyBzdHJzdHJlYW0KICAgICAgICAgOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW0mbHQ7Y2hhciZndDsgewogICAgICAgcHVibGljOgogICAgICAgICAvLyBUeXBlcwogICAgICAgICB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6aW50X3R5cGUgaW50X3R5cGUKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6cG9zX3R5cGUgcG9zX3R5cGU7PC9wcmU+Cjxocj4KPGEgbmFtZT0iNDciPjxoMz40Ny4mbmJzcDtJbWJ1ZSgpIGFuZCBnZXRsb2MoKSBSZXR1cm5zIGNsYXVzZXMgc3dhcHBlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZS5sb2NhbGVzIj4gW2xpYi5pb3MuYmFzZS5sb2NhbGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1biAxOTk4PC9wPgo8cD5TZWN0aW9uIDI3LjQuMi4zIHNwZWNpZmllcyBob3cgaW1idWUoKSBhbmQgZ2V0bG9jKCkgd29yay4gVGhhdApzZWN0aW9uIGhhcyB0d28gUkVUVVJOUyBjbGF1c2VzLCBhbmQgdGhleSBtYWtlIG5vIHNlbnNlIGFzCnN0YXRlZC4gVGhleSBtYWtlIHBlcmZlY3Qgc2Vuc2UsIHRob3VnaCwgaWYgeW91IHN3YXAgdGhlbS4gQW0gSQpjb3JyZWN0IGluIHRoaW5raW5nIHRoYXQgcGFyYWdyYXBocyAyIGFuZCA0IGp1c3QgZ290IG1peGVkIHVwIGJ5CmFjY2lkZW50PzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy40LjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UubG9jYWxlcyI+IFtsaWIuaW9zLmJhc2UubG9jYWxlc108L2E+IHN3YXAgcGFyYWdyYXBocyAyIGFuZCA0LjwvcD4KPGhyPgo8YSBuYW1lPSI0OCI+PGgzPjQ4LiZuYnNwO1VzZSBvZiBub24tZXhpc3RlbnQgZXhjZXB0aW9uIGNvbnN0cnVjdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zOjpmYWlsdXJlIj4gW2xpYi5pb3M6OmZhaWx1cmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgSnVuIDE5OTg8L3A+CjxwPjI3LjQuMi4xLjEsIHBhcmFncmFwaCAyLCBzYXlzIHRoYXQgY2xhc3MgZmFpbHVyZSBpbml0aWFsaXplcyB0aGUKYmFzZSBjbGFzcywgZXhjZXB0aW9uLCB3aXRoIGV4Y2VwdGlvbihtc2cpLiBDbGFzcyBleGNlcHRpb24gKHNlZQoxOC42LjEpIGhhcyBubyBzdWNoIGNvbnN0cnVjdG9yLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIDI3LjQuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvczo6ZmFpbHVyZSI+IFtsaWIuaW9zOjpmYWlsdXJlXTwvYT4sIHBhcmFncmFwaCAyLCB3aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RUZGRUNUUzogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgPHR0PmZhaWx1cmU8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSI0OSI+PGgzPjQ5LiZuYnNwO1VuZGVyc3BlY2lmaWNhdGlvbiBvZiBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5tZW1iZXJzLnN0YXRpYyI+IFtsaWIuaW9zLm1lbWJlcnMuc3RhdGljXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1biAxOTk4PC9wPgo8cD5Ud28gcHJvYmxlbXM8L3A+Cgo8cD4oMSkgMjcuNC4yLjQgZG9lc24ndCBzYXkgd2hhdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGYpCnJldHVybnMuIERvZXMgaXQgcmV0dXJuIGYsIG9yIGRvZXMgaXQgcmV0dXJuIHRoZSBwcmV2aW91cwpzeW5jaHJvbml6YXRpb24gc3RhdGU/IE15IGd1ZXNzIGlzIHRoZSBsYXR0ZXIsIGJ1dCB0aGUgc3RhbmRhcmQKZG9lc24ndCBzYXkgc28uPC9wPgoKPHA+KDIpIDI3LjQuMi40IGRvZXNuJ3Qgc2F5IHdoYXQgaXQgbWVhbnMgZm9yIHN0cmVhbXMgdG8gYmUKc3luY2hyb25pemVkIHdpdGggc3RkaW8uICBBZ2Fpbiwgb2YgY291cnNlLCBJIGNhbiBtYWtlIHNvbWUKZ3Vlc3Nlcy4gKEFuZCBJJ20gdW5oYXBweSBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRob3NlCmd1ZXNzZXMsIGJ1dCB0aGF0J3MgYW5vdGhlciBtYXR0ZXIuKTwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZvbGxvd2luZyBzZW50ZW5jZSBpbiAyNy40LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLm1lbWJlcnMuc3RhdGljIj4gW2xpYi5pb3MubWVtYmVycy5zdGF0aWNdPC9hPgpyZXR1cm5zIGNsYXVzZSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD50cnVlPC90dD4gaWYgdGhlIHN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgKDI3LjMpIGFyZQogIHN5bmNocm9uaXplZCBhbmQgb3RoZXJ3aXNlIHJldHVybnMgPHR0PmZhbHNlPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgc3RhbmRhcmQgaW9zdHJlYW0KICBvYmplY3RzICgyNy4zKSB3YXMgc3luY2hyb25pemVkIGFuZCBvdGhlcndpc2UgcmV0dXJucwogIDx0dD5mYWxzZTwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWRkIHRoZSBmb2xsb3dpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgMjcuNC4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5tZW1iZXJzLnN0YXRpYyI+IFtsaWIuaW9zLm1lbWJlcnMuc3RhdGljXTwvYT4sCnBhcmFncmFwaCAyOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5XaGVuIGEgc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0IHN0ciBpcyA8aT5zeW5jaHJvbml6ZWQ8L2k+IHdpdGggYQpzdGFuZGFyZCBzdGRpbyBzdHJlYW0gZiwgdGhlIGVmZmVjdCBvZiBpbnNlcnRpbmcgYSBjaGFyYWN0ZXIgYyBieTwvcD4KPHByZT4gIGZwdXRjKGYsIGMpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y8L3A+CjxwcmU+ICBzdHIucmRidWYoKS0mZ3Q7c3B1dGMoYyk7CjwvcHJlPgoKPHA+Zm9yIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzOyB0aGUgZWZmZWN0IG9mIGV4dHJhY3RpbmcgYQpjaGFyYWN0ZXIgYyBieTwvcD4KPHByZT4gIGMgPSBmZ2V0YyhmKTsKPC9wcmU+Cgo8cD5pcyB0aGUgc2FtZSBhcyB0aGUgZWZmZWN0IG9mOjwvcD4KPHByZT4gIGMgPSBzdHIucmRidWYoKS0mZ3Q7c2J1bXBjKGMpOwo8L3ByZT4KCjxwPmZvciBhbnkgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnM7IGFuZCB0aGUgZWZmZWN0IG9mIHB1c2hpbmcKYmFjayBhIGNoYXJhY3RlciBjIGJ5PC9wPgo8cHJlPiAgdW5nZXRjKGMsIGYpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y8L3A+CjxwcmU+ICBzdHIucmRidWYoKS0mZ3Q7c3B1dGJhY2tjKGMpOwo8L3ByZT4KCjxwPmZvciBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4gIFs8aT5Gb290bm90ZTwvaT46IFRoaXMgaW1wbGllcwp0aGF0IG9wZXJhdGlvbnMgb24gYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5CndpdGggb3BlcmF0aW9ucyBvbiB0aGUgY29ycmVzcG9uZGluZyBzdGRpbyBzdHJlYW0uICBJbiBwcmFjdGljYWwKdGVybXMsIHN5bmNocm9uaXphdGlvbiB1c3VhbGx5IG1lYW5zIHRoYXQgYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QKYW5kIGEgc3RhbmRhcmQgc3RkaW8gb2JqZWN0IHNoYXJlIGEgYnVmZmVyLiA8aT4tLUVuZCBGb290bm90ZTwvaT5dPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IFBKUCBhbmQgTWF0dCBjb250cmlidXRlZCB0aGUgZGVmaW5pdGlvbgpvZiAic3luY2hyb25pemF0aW9uIl08L2k+PC9wPgoKPHA+PGk+W3Bvc3QtQ29wZW5oYWdlbjogcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgcmV2aXNlZCBzbGlnaHRseToKdGV4dCB3YXMgYWRkZWQgaW4gdGhlIG5vbi1ub3JtYXRpdmUgZm9vdG5vdGUgdG8gc2F5IHRoYXQgb3BlcmF0aW9ucwpvbiB0aGUgdHdvIHN0cmVhbXMgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5Ll08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjUwIj48aDM+NTAuJm5ic3A7Q29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBvZiBpb3NfYmFzZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UiPiBbbGliLmlvcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1biAxOTk4PC9wPgo8cD5BcyB3cml0dGVuLCBpb3NfYmFzZSBoYXMgYSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhbiBhc3NpZ25tZW50Cm9wZXJhdG9yLiAoTm90aGluZyBpbiB0aGUgc3RhbmRhcmQgc2F5cyBpdCBkb2Vzbid0IGhhdmUgb25lLCBhbmQgYWxsCmNsYXNzZXMgaGF2ZSBjb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMgdW5sZXNzIHlvdQp0YWtlIHNwZWNpZmljIHN0ZXBzIHRvIGF2b2lkIHRoZW0uKSBIb3dldmVyLCBub3RoaW5nIGluIDI3LjQuMiBzYXlzCndoYXQgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgZG8uIDwvcD4KCjxwPk15IGd1ZXNzIGlzIHRoYXQgdGhpcyB3YXMgYW4gb3ZlcnNpZ2h0LCB0aGF0IGlvc19iYXNlIGlzLCBsaWtlCmJhc2ljX2lvcywgbm90IHN1cHBvc2VkIHRvIGhhdmUgYSBjb3B5IGNvbnN0cnVjdG9yIG9yIGFuIGFzc2lnbm1lbnQKb3BlcmF0b3IuPC9wPgoKPHA+CkplcnJ5IFNjaHdhcnogY29tbWVudHM6IFllcywgaXRzIGFuIG92ZXJzaWdodCwgYnV0IGluIHRoZSBvcHBvc2l0ZQpzZW5zZSB0byB3aGF0IHlvdSdyZSBzdWdnZXN0aW5nLiBBdCBvbmUgcG9pbnQgdGhlcmUgd2FzIGEgZGVmaW5pdGUKaW50ZW50aW9uIHRoYXQgeW91IGNvdWxkIGNvcHkgaW9zX2Jhc2UuIEl0J3MgYW4gZWFzeSB3YXkgdG8gc2F2ZSB0aGUKZW50aXJlIHN0YXRlIG9mIGEgc3RyZWFtIGZvciBmdXR1cmUgdXNlLiBBcyB5b3Ugbm90ZSwgdG8gY2Fycnkgb3V0CnRoYXQgaW50ZW50aW9uIHdvdWxkIGhhdmUgcmVxdWlyZWQgYSBleHBsaWNpdCBkZXNjcmlwdGlvbiBvZiB0aGUKc2VtYW50aWNzIChlLmcuIHdoYXQgaGFwcGVucyB0byB0aGUgaWFycmF5IGFuZCBwYXJyYXkgc3R1ZmYpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiwgY2xhc3MgaW9zX2Jhc2UsIHNwZWNpZnkgdGhlIGNvcHkKY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBtZW1iZXJzIGFzIGJlaW5nIHByaXZhdGUuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGUgZGlmZmljdWx0eSBvZiBzcGVjaWZ5aW5nIGNvcnJlY3Qgc2VtYW50aWNzCm91dHdlaWdocyBhbnkgYmVuZWZpdCBvZiBhbGxvd2luZyBpb3NfYmFzZSBvYmplY3RzIHRvIGJlIGNvcHlhYmxlLjwvcD4KPGhyPgo8YSBuYW1lPSI1MSI+PGgzPjUxLiZuYnNwO1JlcXVpcmVtZW50IHRvIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBtaXNzaW5nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZpZCBWYW5kZXZvb3JkZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdW4gMTk5ODwvcD4KPHA+VGhlIHN0ZDo6c29ydCBhbGdvcml0aG0gY2FuIGluIGdlbmVyYWwgb25seSBzb3J0IGEgZ2l2ZW4gc2VxdWVuY2UKYnkgbW92aW5nIGFyb3VuZCB2YWx1ZXMuIFRoZSBsaXN0Jmx0OyZndDs6OnNvcnQoKSBtZW1iZXIgb24gdGhlIG90aGVyCmhhbmQgY291bGQgbW92ZSBhcm91bmQgdmFsdWVzIG9yIGp1c3QgdXBkYXRlIGludGVybmFsIHBvaW50ZXJzLiBFaXRoZXIKbWV0aG9kIGNhbiBsZWF2ZSBpdGVyYXRvcnMgaW50byB0aGUgbGlzdCZsdDsmZ3Q7IGRlcmVmZXJlbmNhYmxlLCBidXQKdGhleSB3b3VsZCBwb2ludCB0byBkaWZmZXJlbnQgdGhpbmdzLiA8L3A+Cgo8cD5Eb2VzIHRoZSBGRElTIG1hbmRhdGUgYW55d2hlcmUgd2hpY2ggbWV0aG9kIHNob3VsZCBiZSB1c2VkIGZvcgpsaXN0Jmx0OyZndDs6OnNvcnQoKT88L3A+Cgo8cD5NYXR0IEF1c3Rlcm4gY29tbWVudHM6PC9wPgoKPHA+SSB0aGluayB5b3UndmUgZm91bmQgYW4gb21pc3Npb24gaW4gdGhlIHN0YW5kYXJkLiA8L3A+Cgo8cD5UaGUgbGlicmFyeSB3b3JraW5nIGdyb3VwIGRpc2N1c3NlZCB0aGlzIHBvaW50LCBhbmQgdGhlcmUgd2FzCnN1cHBvc2VkIHRvIGJlIGEgZ2VuZXJhbCByZXF1aXJlbWVudCBzYXlpbmcgdGhhdCBsaXN0LCBzZXQsIG1hcCwKbXVsdGlzZXQsIGFuZCBtdWx0aW1hcCBtYXkgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzLCBvciBjaGFuZ2UgdGhlCnZhbHVlcyB0aGF0IGl0ZXJhdG9ycyBwb2ludCB0bywgZXhjZXB0IHdoZW4gYW4gb3BlcmF0aW9uIGRvZXMgaXQKZXhwbGljaXRseS4gU28sIGZvciBleGFtcGxlLCBpbnNlcnQoKSBkb2Vzbid0IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycwphbmQgZXJhc2UoKSBhbmQgcmVtb3ZlKCkgb25seSBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUKZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgZXJhc2VkLiA8L3A+Cgo8cD5JIGxvb2tlZCBmb3IgdGhhdCBnZW5lcmFsIHJlcXVpcmVtZW50IGluIHRoZSBGRElTLCBhbmQsIHdoaWxlIEkKZm91bmQgYSBsaW1pdGVkIGZvcm0gb2YgaXQgZm9yIHRoZSBzb3J0ZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgSQpkaWRuJ3QgZmluZCBpdCBmb3IgbGlzdC4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IGdvdCBvbWl0dGVkLiA8L3A+Cgo8cD5UaGUgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRoYXQgbGlzdCZsdDsmZ3Q7Ojpzb3J0IGRvZXMgbm90CmludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZXMgdGhhdCBhbnkKaXRlcmF0b3IgcG9pbnRzIHRvLiBUaGVyZSB3b3VsZCBiZSBubyByZWFzb24gdG8gaGF2ZSB0aGUgbWVtYmVyCmZ1bmN0aW9uIG90aGVyd2lzZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgbmV3IHBhcmFncmFwaCBhdCB0aGUgZW5kIG9mIDIzLjE6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgKGVpdGhlciBleHBsaWNpdGx5IG9yIGJ5IGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGVybXMgb2YKICBvdGhlciBmdW5jdGlvbnMpLCBpbnZva2luZyBhIGNvbnRhaW5lciBtZW1iZXIgZnVuY3Rpb24gb3IgcGFzc2luZyBhIGNvbnRhaW5lciBhcyBhbgogIGFyZ3VtZW50IHRvIGEgbGlicmFyeSBmdW5jdGlvbiBzaGFsbCBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgdG8sIG9yIGNoYW5nZSB0aGUgdmFsdWVzIG9mLAogIG9iamVjdHMgd2l0aGluIHRoYXQgY29udGFpbmVyLiA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgd2FzIFVTIGlzc3VlIENEMi0yMy0wMTE7IGl0IHdhcyBhY2NlcHRlZCBpbiBMb25kb24gYnV0IHRoZQpjaGFuZ2Ugd2FzIG5vdCBtYWRlIGR1ZSB0byBhbiBlZGl0aW5nIG92ZXJzaWdodC4gVGhlIHdvcmRpbmcgaW4gdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gYmVsb3cgaXMgc29tZXdoYXQgdXBkYXRlZCBmcm9tIENEMi0yMy0wMTEsCnBhcnRpY3VsYXJseSB0aGUgYWRkaXRpb24gb2YgdGhlIHBocmFzZSAib3IgY2hhbmdlIHRoZSB2YWx1ZXMKb2YiPC9wPgo8aHI+CjxhIG5hbWU9IjUyIj48aDM+NTIuJm5ic3A7U21hbGwgSS9PIHByb2JsZW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3Mub3BlcmF0aW9ucyI+IFtsaWIuZnBvcy5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1biAxOTk4PC9wPgo8cD5GaXJzdCwgMjcuNC40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5jb25zIj4gW2xpYi5iYXNpYy5pb3MuY29uc108L2E+LCB0YWJsZSA4OS4gVGhpcyBpcyBwcmV0dHkgb2J2aW91czoKaXQgc2hvdWxkIGJlIHRpdGxlZCAiYmFzaWNfaW9zJmx0OyZndDsoKSBlZmZlY3RzIiwgbm90CiJpb3NfYmFzZSgpIGVmZmVjdHMiLiA8L3A+Cgo8cD5bVGhlIHNlY29uZCBpdGVtIGlzIGEgZHVwbGljYXRlOyBzZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNiI+NjwvYT4gZm9yCnJlc29sdXRpb24uXTwvcD4KCjxwPlNlY29uZCwgMjcuNC4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3Mub3BlcmF0aW9ucyI+IFtsaWIuZnBvcy5vcGVyYXRpb25zXTwvYT4gdGFibGUgODggLiBUaGVyZSBhcmUgYSBjb3VwbGUKZGlmZmVyZW50IHRoaW5ncyB3cm9uZyB3aXRoIGl0LCBzb21lIG9mIHdoaWNoIEkndmUgYWxyZWFkeSBkaXNjdXNzZWQKd2l0aCBKZXJyeSwgYnV0IHRoZSBtb3N0IG9idmlvdXMgbWVjaGFuaWNhbCBzb3J0IG9mIGVycm9yIGlzIHRoYXQgaXQKdXNlcyBleHByZXNzaW9ucyBsaWtlIFAoaSkgYW5kIHAoaSksIHdpdGhvdXQgZXZlciBkZWZpbmluZyB3aGF0IHNvcnQKb2YgdGhpbmcgImkiIGlzLgo8L3A+Cgo8cD4oVGhlIG90aGVyIHByb2JsZW0gaXMgdGhhdCBpdCByZXF1aXJlcyBzdXBwb3J0IGZvciBzdHJlYW1wb3MKYXJpdGhtZXRpYy4gVGhpcyBpcyBpbXBvc3NpYmxlIG9uIHNvbWUgc3lzdGVtcywgaS5lLiBvbmVzIHdoZXJlIGZpbGUKcG9zaXRpb24gaXMgYSBjb21wbGljYXRlZCBzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4ganVzdCBhIG51bWJlci4gSmVycnkKdGVsbHMgbWUgdGhhdCB0aGUgaW50ZW50aW9uIHdhcyB0byByZXF1aXJlIHN5bnRhY3RpYyBzdXBwb3J0IGZvcgpzdHJlYW1wb3MgYXJpdGhtZXRpYywgYnV0IHRoYXQgaXQgd2Fzbid0IGFjdHVhbGx5IHN1cHBvc2VkIHRvIGRvCmFueXRoaW5nIG1lYW5pbmdmdWwgZXhjZXB0IG9uIHBsYXRmb3JtcywgbGlrZSBVbml4LCB3aGVyZSBnZW51aW5lCmFyaXRobWV0aWMgaXMgcG9zc2libGUuKSA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiB0YWJsZSA4OSB0aXRsZSBmcm9tCiJpb3NfYmFzZSgpIGVmZmVjdHMiIHRvICJiYXNpY19pb3MmbHQ7Jmd0OygpCmVmZmVjdHMiLiA8L3A+Cjxocj4KPGEgbmFtZT0iNTMiPjxoMz41My4mbmJzcDtCYXNpY19pb3MgZGVzdHJ1Y3RvciB1bnNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVuIDE5OTg8L3A+CjxwPlRoZXJlJ3Mgbm90aGluZyBpbiAyNy40LjQgc2F5aW5nIHdoYXQgYmFzaWNfaW9zJ3MgZGVzdHJ1Y3RvciBkb2VzLgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYmFzaWNfaW9zOjp+YmFzaWNfaW9zKCkgZGVzdHJveXMKcmRidWYoKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGFmdGVyIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dmlydHVhbCB+YmFzaWNfaW9zKCk7PC90dD48L3A+CiAgPHA+PGI+Tm90ZXM8L2I+OiBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdCBkZXN0cm95IDx0dD5yZGJ1ZigpPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPiAKPHA+VGhlIExXRyByZXZpZXdlZCB0aGUgYWRkaXRpb25hbCBxdWVzdGlvbiBvZiB3aGV0aGVyIG9yIG5vdAo8dHQ+cmRidWYoMCk8L3R0PiBtYXkgc2V0IDx0dD5iYWRiaXQ8L3R0Pi4gIFRoZSBhbnN3ZXIgaXMKY2xlYXJseSB5ZXM7IGl0IG1heSBiZSBzZXQgdmlhIDx0dD5jbGVhcigpPC90dD4uICBTZWUgMjcuNC40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5tZW1iZXJzIj4gW2xpYi5iYXNpYy5pb3MubWVtYmVyc108L2E+LCBwYXJhZ3JhcGggNi4gIFRoaXMgaXNzdWUgd2FzIHJldmlld2VkIGF0IGxlbmd0aApieSB0aGUgTFdHLCB3aGljaCByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYQpmb290bm90ZSB3aGljaCBpbmNvcnJlY3RseSBzYWlkICI8dHQ+cmRidWYoMCk8L3R0PiBkb2VzIG5vdCBzZXQKPHR0PmJhZGJpdDwvdHQ+Ii48L3A+Cjxocj4KPGEgbmFtZT0iNTQiPjxoMz41NC4mbmJzcDtCYXNpY19zdHJlYW1idWYncyBkZXN0cnVjdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi5jb25zIj4gW2xpYi5zdHJlYW1idWYuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBKdW4gMTk5ODwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2lzIGZvciBiYXNpY19zdHJlYW1idWYgc2hvd3MgYSAodmlydHVhbCkKZGVzdHJ1Y3RvciwgYnV0IHRoZSBzdGFuZGFyZCBkb2Vzbid0IHNheSB3aGF0IHRoYXQgZGVzdHJ1Y3RvciBkb2VzLiBNeQphc3N1bXB0aW9uIGlzIHRoYXQgaXQgZG9lcyBub3RoaW5nLCBidXQgdGhlIHN0YW5kYXJkIHNob3VsZCBzYXkgc28KZXhwbGljaXRseS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhZnRlciAyNy41LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLmNvbnMiPiBbbGliLnN0cmVhbWJ1Zi5jb25zXTwvYT4gcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnZpcnR1YWwmbmJzcDsgfmJhc2ljX3N0cmVhbWJ1ZigpOzwvdHQ+PC9wPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBOb25lLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjU1Ij48aDM+NTUuJm5ic3A7SW52YWxpZCBzdHJlYW0gcG9zaXRpb24gaXMgdW5kZWZpbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEp1biAxOTk4PC9wPgo8cD5TZXZlcmFsIG1lbWJlciBmdW5jdGlvbnMgaW4gY2xhdXNlIDI3IGFyZSBkZWZpbmVkIGluIGNlcnRhaW4KY2lyY3Vtc3RhbmNlcyB0byByZXR1cm4gYW4gImludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiwgYSB0ZXJtCnRoYXQgaXMgZGVmaW5lZCBub3doZXJlIGluIHRoZSBzdGFuZGFyZC4gVHdvIHBsYWNlcyAoMjcuNS4yLjQuMiwKcGFyYWdyYXBoIDQsIGFuZCAyNy44LjEuNCwgcGFyYWdyYXBoIDE1KSBjb250YWluIGEgY3Jvc3MtcmVmZXJlbmNlIHRvCmEgZGVmaW5pdGlvbiBpbiBfbGliLmlvc3RyZWFtcy5kZWZpbml0aW9uc18sIGEgbm9uZXhpc3RlbnQKc2VjdGlvbi4gPC9wPgoKPHA+SSBzdXNwZWN0IHRoYXQgdGhlIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uIGlzIGp1c3Qgc3VwcG9zZWQgdG8gYmUKcG9zX3R5cGUoLTEpLiAgUHJvYmFibHkgYmVzdCB0byBzYXkgZXhwbGljaXRseSBpbiAoZm9yIGV4YW1wbGUpCjI3LjUuMi40LjIgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc190eXBlKC0xKSwgcmF0aGVyIHRoYW4gdG8gdXNlCnRoZSB0ZXJtICJpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiIsIGRlZmluZSB0aGF0IHRlcm0Kc29tZXdoZXJlLCBhbmQgdGhlbiBwdXQgaW4gYSBjcm9zcy1yZWZlcmVuY2UuIDwvcD4KCjxwPlRoZSBwaHJhc2UgImludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiBhcHBlYXJzIHRlbiB0aW1lcyBpbgp0aGUgQysrIFN0YW5kYXJkLiAgSW4gc2V2ZW4gcGxhY2VzIGl0IHJlZmVycyB0byBhIHJldHVybiB2YWx1ZSwgYW5kIGl0CnNob3VsZCBiZSBjaGFuZ2VkLiBJbiB0aHJlZSBwbGFjZXMgaXQgcmVmZXJzIHRvIGFuIGFyZ3VtZW50LCBhbmQgaXQKc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBIZXJlIGFyZSB0aGUgdGhyZWUgcGxhY2VzIHdoZXJlICJpbnZhbGlkCnN0cmVhbSBwb3NpdGlvbiIgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTQ8YnI+CiAgMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDE0PGJyPgogIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTcKICA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy41LjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5idWZmZXIiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl08L2E+LCBwYXJhZ3JhcGggNCwgY2hhbmdlICJSZXR1cm5zIGFuCm9iamVjdCBvZiBjbGFzcyBwb3NfdHlwZSB0aGF0IHN0b3JlcyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbgooX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfKSIgdG8gIlJldHVybnMKPHR0PnBvc190eXBlKG9mZl90eXBlKC0xKSk8L3R0PiIuCjwvcD4KCjxwPkluIDI3LjUuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyXTwvYT4sIHBhcmFncmFwaCA2LCBjaGFuZ2UgIlJldHVybnMKYW4gb2JqZWN0IG9mIGNsYXNzIHBvc190eXBlIHRoYXQgc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtCnBvc2l0aW9uIiB0byAiUmV0dXJucyA8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii48L3A+Cgo8cD5JbiAyNy43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLnZpcnR1YWxzIj4gW2xpYi5zdHJpbmdidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDEzLCBjaGFuZ2UgInRoZSBvYmplY3QKc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiB0byAidGhlIHJldHVybiB2YWx1ZSBpcwo8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii4gPC9wPgoKPHA+SW4gMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDEzLCBjaGFuZ2UgInJldHVybnMgYW4KaW52YWxpZCBzdHJlYW0gcG9zaXRpb24gKDI3LjQuMykiIHRvICJyZXR1cm5zCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iIDwvcD4KCjxwPkluIDI3LjguMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLnZpcnR1YWxzIj4gW2xpYi5maWxlYnVmLnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCAxNSwgY2hhbmdlICJPdGhlcndpc2UKcmV0dXJucyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiAoX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfKSIKdG8gIk90aGVyd2lzZSByZXR1cm5zIDx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iCjwvcD4KCjxwPkluIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTUsIGNoYW5nZSAidGhlIG9iamVjdApzdG9yZXMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iIHRvICJ0aGUgcmV0dXJuIHZhbHVlIGlzCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iIDwvcD4KCjxwPkluIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTgsIGNoYW5nZSAidGhlIG9iamVjdApzdG9yZXMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iIHRvICJ0aGUgcmV0dXJuIHZhbHVlIGlzCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iPC9wPgo8aHI+CjxhIG5hbWU9IjU2Ij48aDM+NTYuJm5ic3A7U2hvd21hbnljJ3MgcmV0dXJuIHR5cGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1ZiI+IFtsaWIuc3RyZWFtYnVmXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IEp1biAxOTk4PC9wPgo8cD5UaGUgY2xhc3Mgc3VtbWFyeSBmb3IgYmFzaWNfc3RyZWFtYnVmJmx0OyZndDssIGluIDI3LjUuMiwgc2F5cyB0aGF0CnNob3dtYW55YyBoYXMgcmV0dXJuIHR5cGUgaW50LiBIb3dldmVyLCAyNy41LjIuNC4zIHNheXMgdGhhdCBpdHMKcmV0dXJuIHR5cGUgaXMgc3RyZWFtc2l6ZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSA8dHQ+c2hvd21hbnljPC90dD4ncyByZXR1cm4gdHlwZSBpbiB0aGUKMjcuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYiPiBbbGliLnN0cmVhbWJ1Zl08L2E+IGNsYXNzIHN1bW1hcnkgdG8gPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+Cjxocj4KPGEgbmFtZT0iNTciPjxoMz41Ny4mbmJzcDtNaXN0YWtlIGluIGNoYXJfdHJhaXRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jaGFyLnRyYWl0cy5zcGVjaWFsaXphdGlvbnMud2NoYXIudCI+IFtsaWIuY2hhci50cmFpdHMuc3BlY2lhbGl6YXRpb25zLndjaGFyLnRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MSBKdWwgMTk5ODwvcD4KPHA+MjEuMS4zLjIsIHBhcmFncmFwaCAzLCBzYXlzICJUaGUgdHlwZXMgc3RyZWFtcG9zIGFuZAp3c3RyZWFtcG9zIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG5vIHNoaWZ0CmVuY29kaW5nIGluIG5hcnJvdy1vcmllbnRlZCBpb3N0cmVhbXMgYnV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIHNoaWZ0CmVuY29kaW5ncyBpbiB3aWRlLW9yaWVudGVkIHN0cmVhbXMiLiA8L3A+Cgo8cD5UaGF0J3Mgd3Jvbmc6IHRoZSB0d28gYXJlIHRoZSBzYW1lIHR5cGUuIFRoZSAmbHQ7aW9zZndkJmd0OyBzdW1tYXJ5CmluIDI3LjIgc2F5cyB0aGF0IHN0cmVhbXBvcyBhbmQgd3N0cmVhbXBvcyBhcmUsIHJlc3BlY3RpdmVseSwgc3lub255bXMKZm9yIGZwb3MmbHQ7Y2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6OnN0YXRlX3R5cGUmZ3Q7IGFuZApmcG9zJmx0O2NoYXJfdHJhaXRzJmx0O3djaGFyX3QmZ3Q7OjpzdGF0ZV90eXBlJmd0OywgYW5kLCBmbGlwcGluZyBiYWNrCnRvIGNsYXVzZSAyMSwgd2Ugc2VlIGluIDIxLjEuMy4xIGFuZCAyMS4xLjMuMiB0aGF0CmNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7OjpzdGF0ZV90eXBlIGFuZApjaGFyX3RyYWl0cyZsdDt3Y2hhcl90Jmd0Ozo6c3RhdGVfdHlwZSBtdXN0IGJvdGggYmUgbWJzdGF0ZV90LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIHRoZSBzZW50ZW5jZSBpbiAyMS4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmNoYXIudHJhaXRzLnNwZWNpYWxpemF0aW9ucy53Y2hhci50Ij4gW2xpYi5jaGFyLnRyYWl0cy5zcGVjaWFsaXphdGlvbnMud2NoYXIudF08L2E+IHBhcmFncmFwaCAzIHdoaWNoCmJlZ2lucyAiVGhlIHR5cGVzIHN0cmVhbXBvcyBhbmQgd3N0cmVhbXBvcyBtYXkgYmUKZGlmZmVyZW50Li4uIiAuIDwvcD4KPGhyPgo8YSBuYW1lPSI1OSI+PGgzPjU5LiZuYnNwO0FtYmlndWl0eSBpbiBzcGVjaWZpY2F0aW9uIG9mIGdidW1wPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLmdldC5hcmVhIj4gW2xpYi5zdHJlYW1idWYuZ2V0LmFyZWFdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggSnVsIDE5OTg8L3A+CjxwPjI3LjUuMi4zLjEgc2F5cyB0aGF0IGJhc2ljX3N0cmVhbWJ1Zjo6Z2J1bXAoKSAiQWR2YW5jZXMgdGhlCm5leHQgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlIGJ5IG4uIiA8L3A+Cgo8cD5UaGUgc3RyYWlnaHRmb3J3YXJkIGludGVycHJldGF0aW9uIGlzIHRoYXQgaXQgaXMganVzdCBncHRyKCkgKz0Kbi4gQW4gYWx0ZXJuYXRpdmUgaW50ZXJwcmV0YXRpb24sIHRob3VnaCwgaXMgdGhhdCBpdCBiZWhhdmVzIGFzIGlmIGl0CmNhbGxzIHNidW1wYyBuIHRpbWVzLiAoVGhlIGlzc3VlLCBvZiBjb3Vyc2UsIGlzIHdoZXRoZXIgaXQgbWlnaHQgZXZlcgpjYWxsIHVuZGVyZmxvdy4pIFRoZXJlIGlzIGEgc2ltaWxhciBhbWJpZ3VpdHkgaW4gdGhlIGNhc2Ugb2YKcGJ1bXAuIDwvcD4KCjxwPihUaGUgImNsYXNzaWMiIEFUJmFtcDtUIGltcGxlbWVudGF0aW9uIHVzZWQgdGhlCmZvcm1lciBpbnRlcnByZXRhdGlvbi4pPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy41LjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYuZ2V0LmFyZWEiPiBbbGliLnN0cmVhbWJ1Zi5nZXQuYXJlYV08L2E+IHBhcmFncmFwaCA0IGdidW1wIGVmZmVjdHMgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBBZHZhbmNlcyB0aGUgbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UgYnkgbi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEFkZHMgPHR0Pm48L3R0PiB0byB0aGUgbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5NYWtlIHRoZSBzYW1lIGNoYW5nZSB0byAyNy41LjIuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYucHV0LmFyZWEiPiBbbGliLnN0cmVhbWJ1Zi5wdXQuYXJlYV08L2E+IHBhcmFncmFwaCA0IHBidW1wCmVmZmVjdHMuPC9wPgo8aHI+CjxhIG5hbWU9IjYwIj48aDM+NjAuJm5ic3A7V2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggMSBvZiAyNy42LjEuMi4xIGNvbnRhaW5zIGdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhbGwKZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gU29tZSBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gc2VjdGlvbgoyNy42LjEuMiBleHBsaWNpdGx5IHNheSB0aGF0IHRob3NlIHJlcXVpcmVtZW50cyBhcHBseSAoIkJlaGF2ZXMKbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIgKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKSIpLCBidXQKb3RoZXJzIGRvbid0LiBUaGUgcXVlc3Rpb246IGlzIDI3LjYuMS4yLjEgc3VwcG9zZWQgdG8gYXBwbHkgdG8KZXZlcnl0aGluZyBpbiAyNy42LjEuMiwgb3Igb25seSB0byB0aG9zZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQKZXhwbGljaXRseSBzYXkgImJlaGF2ZXMgbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIiPyBPcgp0byBwdXQgaXQgZGlmZmVyZW50bHk6IGFyZSB3ZSB0byBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIHRoYXQgYXBwZWFycwppbiBhIHNlY3Rpb24gY2FsbGVkICJGb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIiByZWFsbHkgaXMgYQpmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/IEkgYXNzdW1lIHRoYXQgMjcuNi4xLjIuMSBpcyBpbnRlbmRlZCB0bwphcHBseSB0byB0aGUgYXJpdGhtZXRpYyBleHRyYWN0b3JzICgyNy42LjEuMi4yKSwgYnV0IEkgYXNzdW1lIHRoYXQgaXQKaXMgbm90IGludGVuZGVkIHRvIGFwcGx5IHRvIGV4dHJhY3RvcnMgbGlrZSA8L3A+Cgo8cHJlPiAgICBiYXNpY19pc3RyZWFtJmFtcDsgb3BlcmF0b3ImZ3Q7Jmd0OyhiYXNpY19pc3RyZWFtJmFtcDsgKCpwZikoYmFzaWNfaXN0cmVhbSZhbXA7KSk7PC9wcmU+Cgo8cD5hbmQgPC9wPgoKPHByZT4gICAgYmFzaWNfaXN0cmVhbSZhbXA7IG9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtbWJ1ZiopOzwvcHJlPgoKPHA+VGhlcmUgaXMgYSBzaW1pbGFyIGFtYmlndWl0eSBmb3IgdW5mb3JtYXR0ZWQgaW5wdXQsIGZvcm1hdHRlZCBvdXRwdXQsIGFuZCB1bmZvcm1hdHRlZApvdXRwdXQuIDwvcD4KCjxwPkNvbW1lbnRzIGZyb20gSnVkeSBXYXJkOiBJdCBzZWVtcyBsaWtlIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlCmJhc2ljX2lzdHJlYW0gYW5kIGJhc2ljX29zdHJlYW0gb3BlcmF0b3IgJmx0OyZsdDsoKSdzIHRoYXQgYXJlIHVzZWQKZm9yIHRoZSBtYW5pcHVsYXRvcnMgYW5kIHN0cmVhbWJ1ZiogYXJlIGluIHRoZSB3cm9uZyBzZWN0aW9uIGFuZApzaG91bGQgaGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgc2VjdGlvbiBvciBiZSBtb2RpZmllZCB0byBtYWtlIGl0IGNsZWFyCnRoYXQgdGhlICJDb21tb24gcmVxdWlyZW1lbnRzIiBsaXN0ZWQgaW4gc2VjdGlvbiAyNy42LjEuMi4xCihmb3IgYmFzaWNfaXN0cmVhbSkgYW5kIHNlY3Rpb24gMjcuNi4yLjUuMSAoZm9yIGJhc2ljX29zdHJlYW0pIGRvIG5vdAphcHBseSB0byB0aGVtLiA8L3A+Cgo8cD5BZGRpdGlvbmFsIGNvbW1lbnRzIGZyb20gRGlldG1hciBL/GhsOiBJdCBhcHBlYXJzIHRvIGJlIHNvbWV3aGF0Cm5vbnNlbnNpY2FsIHRvIGNvbnNpZGVyIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiAyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4gcGFyYWdyYXBocyAxIHRvIDUgdG8gYmUgIkZvcm1hdHRlZCBpbnB1dApmdW5jdGlvbiIgYnV0IHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBhIHNlY3Rpb24KbGFiZWxlZCAiRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyIgaXQgaXMgdW5jbGVhciB0byBtZQp3aGV0aGVyIHRoZXNlIG9wZXJhdG9ycyBhcmUgY29uc2lkZXJlZCBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIHdoaWNoCmhhdmUgdG8gY29uZm9ybSB0byB0aGUgImNvbW1vbiByZXF1aXJlbWVudHMiIGZyb20gMjcuNi4xLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPjogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYWxsIG1hbmlwdWxhdG9ycywgbm90Cmp1c3QgPHR0PndzPC90dD4sIHdvdWxkIHNraXAgd2hpdGVzcGFjZSB1bmxlc3MgPHR0Pm5vc2tpcHdzPC90dD4gaXMKc2V0ICguLi4gYnV0IHNldHRpbmcgPHR0Pm5vc2tpcHdzPC90dD4gdXNpbmcgdGhlIG1hbmlwdWxhdG9yIHN5bnRheAp3b3VsZCBhbHNvIHNraXAgd2hpdGVzcGFjZSA6LSk8L3A+IDxwPkl0IGlzIG5vdCBjbGVhciB3aGljaCBmdW5jdGlvbnMKYXJlIHRvIGJlIGNvbnNpZGVyZWQgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zLiBBcyB3cml0dGVuLCBpdCBzZWVtcwp0aGF0IGFsbCBmdW5jdGlvbnMgaW4gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiBhcmUgdW5mb3JtYXR0ZWQgaW5wdXQKZnVuY3Rpb25zLiBIb3dldmVyLCBpdCBkb2VzIG5vdCByZWFsbHkgbWFrZSBtdWNoIHNlbnNlIHRvIGNvbnN0cnVjdCBhCnNlbnRyeSBvYmplY3QgZm9yIDx0dD5nY291bnQoKTwvdHQ+LCA8dHQ+c3luYygpPC90dD4sIC4uLiBBbHNvIGl0IGlzCnVuY2xlYXIgd2hhdCBoYXBwZW5zIHRvIHRoZSA8dHQ+Z2NvdW50KCk8L3R0PiBpZgplZy4gPHR0Pmdjb3VudCgpPC90dD4sIDx0dD5wdXRiYWNrKCk8L3R0PiwgPHR0PnVuZ2V0KCk8L3R0Piwgb3IKPHR0PnN5bmMoKTwvdHQ+IGlzIGNhbGxlZDogVGhlc2UgZnVuY3Rpb25zIGRvbid0IGV4dHJhY3QgY2hhcmFjdGVycywKc29tZSBvZiB0aGVtIGV2ZW4gInVuZXh0cmFjdCIgYSBjaGFyYWN0ZXIuIFNob3VsZCB0aGlzIHN0aWxsCmJlIHJlZmxlY3RlZCBpbiA8dHQ+Z2NvdW50KCk8L3R0Pj8gT2YgY291cnNlLCBpdCBjb3VsZCBiZSByZWFkIGFzIGlmCmFmdGVyIGEgY2FsbCB0byA8dHQ+Z2NvdW50KCk8L3R0PiA8dHQ+Z2NvdW50KCk8L3R0PiByZXR1cm4gPHR0PjA8L3R0PgoodGhlIGxhc3QgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24sIDx0dD5nY291bnQoKTwvdHQ+LCBkaWRuJ3QKZXh0cmFjdCBhbnkgY2hhcmFjdGVyKSBhbmQgYWZ0ZXIgYSBjYWxsIHRvIDx0dD5wdXRiYWNrKCk8L3R0Pgo8dHQ+Z2NvdW50KCk8L3R0PiByZXR1cm5zIDx0dD4tMTwvdHQ+ICh0aGUgbGFzdCB1bmZvcm1hdHRlZCBpbnB1dApmdW5jdGlvbiA8dHQ+cHV0YmFjaygpPC90dD4gZGlkICJleHRyYWN0IiBiYWNrIGludG8gdGhlCnN0cmVhbSkuIENvcnJlc3BvbmRpbmdseSBmb3IgPHR0PnVuZ2V0KCk8L3R0Pi4gSXMgdGhpcyB3aGF0IGlzCmludGVuZGVkPyAgSWYgc28sIHRoaXMgc2hvdWxkIGJlIGNsYXJpZmllZC4gT3RoZXJ3aXNlLCBhIGNvcnJlc3BvbmRpbmcKY2xhcmlmaWNhdGlvbiBzaG91bGQgYmUgdXNlZC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMS4yLjIgW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXSwgcGFyYWdyYXBoIDEuCkNoYW5nZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgc2VudGVuY2UgZnJvbSAiVGhlIGNvbnZlcnNpb24Kb2NjdXJzIiB0byAiVGhlc2UgZXh0cmFjdG9ycyBiZWhhdmUgYXMgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLiAgQWZ0ZXIgYSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLAp0aGUgY29udmVyc2lvbiBvY2N1cnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuCkFkZCBhbiBlZmZlY3RzIGNsYXVzZS4gICJFZmZlY3RzOiBOb25lLiAgVGhpcyBleHRyYWN0b3IgZG9lcwpub3QgYmVoYXZlIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4KMjcuNi4xLjIuMSkuCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IENhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjIuMywgW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXSwgcGFyYWdyYXBoIDQuICBDaGFuZ2UgdGhlCmVmZmVjdHMgY2xhdXNlIHRvICJFZmZlY3RzOiBDYWxscyBwZigqdGhpcykuICBUaGlzIGV4dHJhY3RvciBkb2VzIG5vdApiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKS4KPC9wPgoKPHA+CkluIDI3LjYuMS4yLjMsIFtsaWIuaXN0cmVhbTo6ZXh0cmFjdG9yc10sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKZmlyc3QgdHdvIHNlbnRlbmNlcyBmcm9tICJJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwKd2hpY2ggbWF5IHRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBFeHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gKnRoaXMuLi4iIHRvICJCZWhhdmVzIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjIuMSkuICBJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwgd2hpY2ggbWF5CnRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKY29uc3RydWN0ZWQsIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSAqdGhpcy4uLiIuCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyLiAgQWRkIGFuCmVmZmVjdHMgY2xhdXNlLiAgIkVmZmVjdHM6IG5vbmUuIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIGRvZXMgbm90IGJlaGF2ZQphcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzLiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cyBhCmNoYXJhY3RlciIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMgYQpjaGFyYWN0ZXIiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDUuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzIGEKY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cyBhCmNoYXJhY3RlciIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNy4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxMCwgYmVjYXVzZSBpdCByZWZlcnMgdG8gcGFyYWdyYXBoIDcuXQo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxNS5dCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDE3LiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cwpjaGFyYWN0ZXJzIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cwpjaGFyYWN0ZXJzIgo8L3A+Cgo8cD4KW05vIGNoYW5nZSBuZWVkZWQgaW4gcGFyYWdyYXBoIDIzLl0KPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjQuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzCmNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjMsIHBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGV4dHJhY3RzCmNoYXJhY3RlcnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyNy4gIEFkZCBhbgpFZmZlY3RzIGNsYXVzZTogIkVmZmVjdHM6IEJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5Cm9iamVjdCwgcmVhZHMgYnV0IGRvZXMgbm90IGV4dHJhY3QgdGhlIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyLiIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjguICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzIiB0bwpCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDMwLiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIWdvb2QoKSBjYWxscyIgdG8KIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywKcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgIWdvb2QoKSBjYWxscyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMzIuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzLi4uIiB0bwoiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLApwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiAhZ29vZCgpCmNhbGxzLi4uIiAgQWRkIGEgbmV3IHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgdGhlIEVmZmVjdHMgY2xhdXNlOgoiW05vdGU6IHRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgbm8gY2hhcmFjdGVycywgc28gdGhlIHZhbHVlIHJldHVybmVkCmJ5IHRoZSBuZXh0IGNhbGwgdG8gZ2NvdW50KCkgaXMgMC5dIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzNC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmICFnb29kKCkgY2FsbHMiIHRvCiJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiLgpBZGQgYSBuZXcgc2VudGVuY2UgdG8gdGhlIGVuZCBvZiB0aGUgRWZmZWN0cyBjbGF1c2U6ICJbTm90ZTogdGhpcwpmdW5jdGlvbiBleHRyYWN0cyBubyBjaGFyYWN0ZXJzLCBzbyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIG5leHQKY2FsbCB0byBnY291bnQoKSBpcyAwLl0iCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDM2LiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIXJkYnVmKCkgaXMiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgcmRidWYoKSBpcyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBiZWZvcmUgcGFyYWdyYXBoIDM3LiAgQWRkIGFuCkVmZmVjdHMgY2xhdXNlOiAiRWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGNvdW50IHRoZQpudW1iZXIgb2YgY2hhcmFjdGVycyBleHRyYWN0ZWQgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsdWUgcmV0dXJuZWQKYnkgc3Vic2VxdWVudCBjYWxscyB0byBnY291bnQoKS4iICBDaGFuZ2UgdGhlIGZpcnN0IHNlbnRlbmNlIG9mCnBhcmFncmFwaCAzNyBmcm9tICJpZiBmYWlsKCkiIHRvICJhZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LAppZiBmYWlsKCkiLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzOC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmIGZhaWwoKSIgdG8gIkJlaGF2ZXMKYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoCjEpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkCmFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8KZ2NvdW50KCkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiBmYWlsKCkKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNDAuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiBmYWlsKCkiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgZmFpbCgpCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4yIFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY10sIHBhcmFncmFwaCAxLiAgQ2hhbmdlCnRoZSBiZWdpbm5pbmcgb2YgdGhlIHRoaXJkIHNlbnRlbmNlIGZyb20gIlRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24iCnRvICJUaGVzZSBleHRyYWN0b3JzIGJlaGF2ZSBhcyBmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiAgQWZ0ZXIgdGhlIHNlbnRyeSBvYmplY3QgaXMgY29uc3RydWN0ZWQsIHRoZQpjb252ZXJzaW9uIG9jY3VycyIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuICBBZGQgYW4KZWZmZWN0cyBjbGF1c2U6ICJFZmZlY3RzOiBOb25lLiBEb2VzIG5vdCBiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgb3V0cHV0CmZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4yLjUuMSkuIi4KPC9wPgoKPHA+CkluIDI3LjYuMi41LjMgW2xpYi5vc3RyZWFtLmluc2VydGVyc10sIHBhcmFncmFwaCAyLiAgQ2hhbmdlIHRoZQplZmZlY3RzIGNsYXVzZSB0byAiRWZmZWN0czogY2FsbHMgcGYoKnRoaXMpLiAgVGhpcyBleHRyYWN0b3IgZG9lcyBub3QKYmVoYXZlIGFzIGEgZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBwYXJhZ3JhcGggNC4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IGNhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4iLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjUuMyBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzXSwgcGFyYWdyYXBoIDYuICBDaGFuZ2UgdGhlIGZpcnN0CnNlbnRlbmNlIGZyb20gIklmIHNiIiB0byAiQmVoYXZlcyBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4gIEFmdGVyIHRoZSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLCBpZgpzYiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNiBbbGliLm9zdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUgZmlyc3QKc2VudGVuY2UgZnJvbSAiSW5zZXJ0cyB0aGUgY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZApvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNiwgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIKY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIi4KPC9wPgoKPHA+CkluIDI3LjYuMi42IFtsaWIub3N0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCA1LiAgQ2hhbmdlIHRoZSBmaXJzdApzZW50ZW5jZSBmcm9tICJPYnRhaW5zIGNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkCm91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuICBBZnRlcgpjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBvYnRhaW5zIGNoYXJhY3RlcnMiLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjYgW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDcuICBBZGQgYSBuZXcKc2VudGVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoOiAiRG9lcyBub3QgYmVoYXZlIGFzIGFuCnVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuIgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TZWUgSjE2Lzk5LTAwNDM9PVdHMjEvTjEyMTksIFByb3Bvc2VkIFJlc29sdXRpb24gdG8gTGlicmFyeSBJc3N1ZSA2MCwKYnkgSnVkeSBXYXJkIGFuZCBNYXR0IEF1c3Rlcm4uICBUaGlzIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgc2VjdGlvbgpWSSBvZiB0aGF0IHBhcGVyLjwvcD4KPGhyPgo8YSBuYW1lPSI2MSI+PGgzPjYxLiZuYnNwO0FtYmlndWl0eSBpbiBpb3N0cmVhbXMgZXhjZXB0aW9uIHBvbGljeTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIHNlY3Rpb24gb24gdW5mb3JtYXR0ZWQgaW5wdXQgKDI3LjYuMS4zKQpzYXlzIHRoYXQgZXZlcnkgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gY2F0Y2hlcyBhbGwgZXhjZXB0aW9ucyB0aGF0CndlcmUgdGhyb3duIGR1cmluZyBpbnB1dCwgc2V0cyBiYWRiaXQsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgcmV0aHJvd3MKdGhlIGV4Y2VwdGlvbi4gVGhhdCBzZWVtcyBjbGVhciBlbm91Z2guIFNldmVyYWwgb2YgdGhlIHNwZWNpZmljCmZ1bmN0aW9ucywgaG93ZXZlciwgc3VjaCBhcyBnZXQoKSBhbmQgcmVhZCgpLCBhcmUgZG9jdW1lbnRlZCBpbiBzb21lCmNpcmN1bXN0YW5jZXMgYXMgc2V0dGluZyBlb2ZiaXQgYW5kL29yIGZhaWxiaXQuIChUaGUgc3RhbmRhcmQgbm90ZXMsCmNvcnJlY3RseSwgdGhhdCBzZXR0aW5nIGVvZmJpdCBvciBmYWlsYml0IGNhbiBzb21ldGltZXMgcmVzdWx0IGluIGFuCmV4Y2VwdGlvbiBiZWluZyB0aHJvd24uKSBUaGUgcXVlc3Rpb246IGlmIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKdGhyb3dzIGFuIGV4Y2VwdGlvbiB0cmlnZ2VyZWQgYnkgc2V0dGluZyBmYWlsYml0LCBpcyB0aGlzIGFuIGV4Y2VwdGlvbgoidGhyb3duIGR1cmluZyBpbnB1dCIgYW5kIGhlbmNlIGNvdmVyZWQgYnkgMjcuNi4xLjMsIG9yIGRvZXMKMjcuNi4xLjMgb25seSByZWZlciB0byBhIGxpbWl0ZWQgY2xhc3Mgb2YgZXhjZXB0aW9ucz8gSnVzdCB0byBtYWtlCnRoaXMgY29uY3JldGUsIHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBzbmlwcGV0LiA8L3A+Cgo8cHJlPiAgCiAgY2hhciBidWZmZXJbTl07CiAgaXN0cmVhbSBpczsKICAuLi4KICBpcy5leGNlcHRpb25zKGlzdHJlYW06OmZhaWxiaXQpOyAvLyBUaHJvdyBvbiBmYWlsYml0IGJ1dCBub3Qgb24gYmFkYml0LgogIGlzLnJlYWQoYnVmZmVyLCBOKTs8L3ByZT4KCjxwPk5vdyBzdXBwb3NlIHdlIHJlYWNoIEVPRiBiZWZvcmUgd2UndmUgcmVhZCBOIGNoYXJhY3RlcnMuIFdoYXQKaW9zdGF0ZSBiaXRzIGNhbiB3ZSBleHBlY3QgdG8gYmUgc2V0LCBhbmQgd2hhdCBleGNlcHRpb24gKGlmIGFueSkgd2lsbApiZSB0aHJvd24/IDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNi4xLjMsIHBhcmFncmFwaCAxLCBhZnRlciB0aGUgc2VudGVuY2UgdGhhdCBiZWdpbnMKIklmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uLi4iLCBhZGQgdGhlIGZvbGxvd2luZwpwYXJlbnRoZXRpY2FsIGNvbW1lbnQ6ICIoRXhjZXB0aW9ucyB0aHJvd24gZnJvbSAKPHR0PmJhc2ljX2lvcyZsdDsmZ3Q7OjpjbGVhcigpPC90dD4gYXJlIG5vdCBjYXVnaHQgb3IgcmV0aHJvd24uKSIKPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBsb29rZWQgdG8gdHdvIGFsdGVybmF0aXZlIHdvcmRpbmdzLCBhbmQgY2hvb3NlIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIGFzIGJldHRlciBzdGFuZGFyZGVzZS48L3A+Cjxocj4KPGEgbmFtZT0iNjIiPjxoMz42Mi4mbmJzcDs8dHQ+U3luYzwvdHQ+J3MgcmV0dXJuIHZhbHVlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzeW5jKCkgKDI3LjYuMS4zLCBwYXJhZ3JhcGggMzYpIHNheXMgdGhhdCBpdAoiY2FsbHMgcmRidWYoKS0mZ3Q7cHVic3luYygpIGFuZCwgaWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIC0xCi4uLiByZXR1cm5zIHRyYWl0czo6ZW9mKCkuIiA8L3A+Cgo8cD5UaGF0IGxvb2tzIHN1c3BpY2lvdXMsIGJlY2F1c2UgdHJhaXRzOjplb2YoKSBpcyBvZiB0eXBlCnRyYWl0czo6aW50X3R5cGUgd2hpbGUgdGhlIHJldHVybiB0eXBlIG9mIHN5bmMoKSBpcyBpbnQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+LCBwYXJhZ3JhcGggMzYsIGNoYW5nZSAicmV0dXJucwo8dHQ+dHJhaXRzOjplb2YoKTwvdHQ+IiB0byAicmV0dXJucyA8dHQ+LTE8L3R0PiIuCjwvcD4KPGhyPgo8YSBuYW1lPSI2MyI+PGgzPjYzLiZuYnNwO0V4Y2VwdGlvbi1oYW5kbGluZyBwb2xpY3kgZm9yIHVuZm9ybWF0dGVkIG91dHB1dDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEF1ZyAxOTk4PC9wPgo8cD5DbGF1c2UgMjcgZGV0YWlscyBhbiBleGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGZvciBmb3JtYXR0ZWQgaW5wdXQsCnVuZm9ybWF0dGVkIGlucHV0LCBhbmQgZm9ybWF0dGVkIG91dHB1dC4gSXQgc2F5cyBub3RoaW5nIGZvcgp1bmZvcm1hdHRlZCBvdXRwdXQgKDI3LjYuMi42KS4gMjcuNi4yLjYgc2hvdWxkIGVpdGhlciBpbmNsdWRlIHRoZSBzYW1lCmtpbmQgb2YgZXhjZXB0aW9uLWhhbmRsaW5nIHBvbGljeSBhcyBpbiB0aGUgb3RoZXIgdGhyZWUgcGxhY2VzLCBvcgplbHNlIGl0IHNob3VsZCBoYXZlIGEgZm9vdG5vdGUgc2F5aW5nIHRoYXQgdGhlIG9taXNzaW9uIGlzCmRlbGliZXJhdGUuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNi4yLjYsIHBhcmFncmFwaCAxLCByZXBsYWNlIHRoZSBsYXN0IHNlbnRlbmNlICgiSW4gYW55CmNhc2UsIHRoZSB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gZW5kcyBieSBkZXN0cm95aW5nIHRoZSBzZW50cnkKb2JqZWN0LCB0aGVuIHJldHVybmluZyB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgZm9ybWF0dGVkIG91dHB1dApmdW5jdGlvbi4iKSB3aXRoIHRoZSBmb2xsb3dpbmcgdGV4dDoKPC9wPgo8YmxvY2txdW90ZT4KSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgb3V0cHV0LCB0aGVuIDx0dD5pb3M6OmJhZGJpdDwvdHQ+IGlzCnR1cm5lZCBvbiBbRm9vdG5vdGU6IHdpdGhvdXQgY2F1c2luZyBhbiA8dHQ+aW9zOjpmYWlsdXJlPC90dD4gdG8gYmUKdGhyb3duLl0gaW4gPHR0Pip0aGlzPC90dD4ncyBlcnJvciBzdGF0ZS4gSWYgPHR0PihleGNlcHRpb25zKCkgJmFtcDsKYmFkYml0KSAhPSAwPC90dD4gdGhlbiB0aGUgZXhjZXB0aW9uIGlzIHJldGhyb3duLiAgSW4gYW55IGNhc2UsIHRoZQp1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gZW5kcyBieSBkZXN0cm95aW5nIHRoZSBzZW50cnkgb2JqZWN0LAp0aGVuLCBpZiBubyBleGNlcHRpb24gd2FzIHRocm93biwgcmV0dXJuaW5nIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yCnRoZSBmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9uLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBleGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mIGZvcm1hdHRlZAppbnB1dCwgdW5mb3JtYXR0ZWQgaW5wdXQsIGFuZCBmb3JtYXR0ZWQgb3V0cHV0Lgo8L3A+Cjxocj4KPGEgbmFtZT0iNjQiPjxoMz42NC4mbmJzcDtFeGNlcHRpb24gaGFuZGxpbmcgaW4gPHR0PmJhc2ljX2lzdHJlYW06Om9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtYnVmKik8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEF1ZyAxOTk4IDwvcD4KPHA+MjcuNi4xLjIuMywgcGFyYWdyYXBoIDEzLCBpcyBhbWJpZ3VvdXMuIEl0IGNhbiBiZSBpbnRlcnByZXRlZCB0d28KZGlmZmVyZW50IHdheXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzZWNvbmQgc2VudGVuY2UgaXMgcmVhZCBhcyBhbgplbGFib3JhdGlvbiBvZiB0aGUgZmlyc3QuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIDI3LjYuMS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OmV4dHJhY3RvcnMiPiBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdPC9hPiwgcGFyYWdyYXBoIDEzLCB3aGljaCBiZWdpbnMKIklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMgLi4uIiB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMsIGl0IGNhbGxzCiAgPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4sIHdoaWNoIG1heSB0aHJvdwogIDx0dD5pb3NfYmFzZTo6ZmFpbHVyZTwvdHQ+ICgyNy40LjQuMykuIElmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMKICBiZWNhdXNlIGl0IGNhdWdodCBhbiBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4dHJhY3RpbmcgY2hhcmFjdGVycwogIGZyb20gPHR0PnNiPC90dD4gYW5kIDx0dD5mYWlsYml0PC90dD4gaXMgb24gaW4gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+CiAgKDI3LjQuNC4zKSwgdGhlbiB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBpcyByZXRocm93bi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNjYiPjxoMz42Ni4mbmJzcDtTdHJzdHJlYW1idWY6OnNldGJ1ZjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOCBBdWcgMTk5ODwvcD4KPHA+RC43LjEuMywgcGFyYWdyYXBoIDE5LCBzYXlzIHRoYXQgc3Ryc3RyZWFtYnVmOjpzZXRidWYKIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzIGRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcwpkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIi4gVGhpcyBpcyBvYnZpb3VzbHkgYW4gaW5jb3JyZWN0CmN1dC1hbmQtcGFzdGUgZnJvbSBiYXNpY19zdHJlYW1idWYuIFRoZXJlIGFyZSBubyBjbGFzc2VzIGRlcml2ZWQgZnJvbQpzdHJzdHJlYW1idWYuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5ELjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHMiPiBbZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDE5LCByZXBsYWNlIHRoZSBzZXRidWYgZWZmZWN0cwpjbGF1c2Ugd2hpY2ggY3VycmVudGx5IHNheXMgIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzCmRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcyBkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIgp3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLCBleGNlcHQgdGhhdAogIDx0dD5zZXRidWYoMCwwKTwvdHQ+IGhhcyBubyBlZmZlY3QuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNjgiPjxoMz42OC4mbmJzcDtFeHRyYWN0b3JzIGZvciBjaGFyKiBzaG91bGQgc3RvcmUgbnVsbCBhdCBlbmQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEp1bCAxOTk4PC9wPgo8cD5FeHRyYWN0b3JzIGZvciBjaGFyKiAoMjcuNi4xLjIuMykgZG8gbm90IHN0b3JlIGEgbnVsbCBjaGFyYWN0ZXIKYWZ0ZXIgdGhlIGV4dHJhY3RlZCBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hlcmVhcyB0aGUgdW5mb3JtYXR0ZWQKZnVuY3Rpb25zIGxpa2UgZ2V0KCkgZG8uIFdoeSBpcyB0aGlzPzwvcD4KCjxwPkNvbW1lbnQgZnJvbSBKZXJyeSBTY2h3YXJ6OiBUaGVyZSBpcyBhcHBhcmVudGx5IGFuIGVkaXRpbmcKZ2xpdGNoLiBZb3UnbGwgbm90aWNlIHRoYXQgdGhlIGxhc3QgaXRlbSBvZiB0aGUgbGlzdCBvZiB3aGF0IHN0b3BzCmV4dHJhY3Rpb24gZG9lc24ndCBtYWtlIGFueSBzZW5zZS4gSXQgd2FzIHN1cHBvc2VkIHRvIGJlIHRoZSBsaW5lIHRoYXQKc2FpZCBhIG51bGwgaXMgc3RvcmVkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4yNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4sIHBhcmFncmFwaCA3LCBjaGFuZ2UgdGhlIGxhc3QgbGlzdAppdGVtIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgQSBudWxsIGJ5dGUgKDx0dD5jaGFyVCgpPC90dD4pIGluIHRoZSBuZXh0IHBvc2l0aW9uLCB3aGljaCBtYXkgYmUKICB0aGUgZmlyc3QgcG9zaXRpb24gaWYgbm8gY2hhcmFjdGVycyB3ZXJlIGV4dHJhY3RlZC4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gYmVjb21lIGEgbmV3IHBhcmFncmFwaCB3aGljaCByZWFkczo8L3A+Cgo8YmxvY2txdW90ZT4KICBPcGVyYXRvciZndDsmZ3Q7IHRoZW4gc3RvcmVzIGEgbnVsbCBieXRlICg8dHQ+Y2hhclQoKTwvdHQ+KSBpbiB0aGUKICBuZXh0IHBvc2l0aW9uLCB3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHBvc2l0aW9uIGlmIG5vIGNoYXJhY3RlcnMgd2VyZQogIGV4dHJhY3RlZC4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjY5Ij48aDM+NjkuJm5ic3A7TXVzdCBlbGVtZW50cyBvZiBhIHZlY3RvciBiZSBjb250aWd1b3VzPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5hZGFwdG9ycyI+IFtsaWIuY29udGFpbmVyLmFkYXB0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBKdWwgMTk5ODwvcD4KPHA+VGhlIGlzc3VlIGlzIHRoaXM6IE11c3QgdGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIGJlIGluIGNvbnRpZ3VvdXMgbWVtb3J5PzwvcD4KCjxwPihQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgZW50aXJlbHkgc2VwYXJhdGUgZnJvbSB0aGUgcXVlc3Rpb24gb2YKd2hldGhlciBhIHZlY3RvciBpdGVyYXRvciBpcyByZXF1aXJlZCB0byBiZSBhIHBvaW50ZXI7IHRoZSBhbnN3ZXIgdG8KdGhhdCBxdWVzdGlvbiBpcyBjbGVhcmx5ICJubywiIGFzIGl0IHdvdWxkIHJ1bGUgb3V0CmRlYnVnZ2luZyBpbXBsZW1lbnRhdGlvbnMpPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlIGVuZCBvZiAyMy4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIuYWRhcHRvcnMiPiBbbGliLmNvbnRhaW5lci5hZGFwdG9yc108L2E+LApwYXJhZ3JhcGggMS4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIGFyZSBzdG9yZWQgY29udGlndW91c2x5LCBtZWFuaW5nIHRoYXQgaWYKICB2IGlzIGEgPHR0PnZlY3RvciZsdDtULCBBbGxvY2F0b3ImZ3Q7PC90dD4gd2hlcmUgVCBpcyBzb21lIHR5cGUKICBvdGhlciB0aGFuIDx0dD5ib29sPC90dD4sIHRoZW4gaXQgb2JleXMgdGhlIGlkZW50aXR5IDx0dD4mYW1wO3Zbbl0KICA9PSAmYW1wO3ZbMF0gKyBuPC90dD4gZm9yIGFsbCA8dHQ+MCAmbHQ7PSBuICZsdDsgdi5zaXplKCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgZmVlbHMgdGhhdCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgdGhlIGFuc3dlciBpcyBjbGVhcmx5CiJ5ZXMiLiAgVGhlcmUgd2FzIGNvbnNpZGVyYWJsZSBkaXNjdXNzaW9uIGFzIHRvIHRoZSBiZXN0IHdheQp0byBleHByZXNzIHRoZSBjb25jZXB0IG9mICJjb250aWd1b3VzIiwgd2hpY2ggaXMgbm90CmRpcmVjdGx5IGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkLiAgRGlzY3Vzc2lvbiBpbmNsdWRlZDo8L3A+Cgo8dWw+CiAgPGxpPkFuIG9wZXJhdGlvbmFsIGRlZmluaXRpb24gc2ltaWxhciB0byB0aGUgYWJvdmUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyAKICAgIGFscmVhZHkgdXNlZCBmb3IgdmFsYXJyYXkgKDxmb250IGNvbG9yPSJyZWQiPjI2LjMuMi4zPC9mb250PikuPC9saT4KICA8bGk+VGhlcmUgaXMgbm8gbmVlZCB0byBleHBsaWNpdGx5IGNvbnNpZGVyIGEgdXNlci1kZWZpbmVkIG9wZXJhdG9yJmFtcDsgCiAgICBiZWNhdXNlIGVsZW1lbnRzIG11c3QgYmUgY29weWNvbnN0cnVjdGlibGUgKDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gcGFyYSAzKSAKICAgIGFuZCBjb3B5Y29uc3RydWN0aWJsZSAoMjAuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5jb3B5Y29uc3RydWN0aWJsZSI+IFtsaWIuY29weWNvbnN0cnVjdGlibGVdPC9hPikgc3BlY2lmaWVzCiAgICByZXF1aXJlbWVudHMgZm9yIG9wZXJhdG9yJmFtcDsuPC9saT4KICA8bGk+VGhlcmUgaXMgbm8gaXNzdWUgb2Ygb25lLXBhc3QtdGhlLWVuZCBiZWNhdXNlIG9mIGxhbmd1YWdlIHJ1bGVzLjwvbGk+CjwvdWw+Cjxocj4KPGEgbmFtZT0iNzAiPjxoMz43MC4mbmJzcDtVbmNhdWdodF9leGNlcHRpb24oKSBtaXNzaW5nIHRocm93KCkgc3BlY2lmaWNhdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5zdXBwb3J0LmV4Y2VwdGlvbiI+IFtsaWIuc3VwcG9ydC5leGNlcHRpb25dPC9hPiwgMTguNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudW5jYXVnaHQiPiBbbGliLnVuY2F1Z2h0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xhbWFnZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDtVbmtub3duPC9wPgo8cD5JbiBhcnRpY2xlIDNFMDRAcHJhdGlxdWUuZnIsIFZhbGVudGluIEJvbm5hcmQgd3JpdGVzOiA8L3A+Cgo8cD51bmNhdWdodF9leGNlcHRpb24oKSBkb2Vzbid0IGhhdmUgYSB0aHJvdyBzcGVjaWZpY2F0aW9uLjwvcD4KCjxwPkl0IGlzIGludGVudGlvbmFsID8gRG9lcyBpdCBtZWFucyB0aGF0IG9uZSBzaG91bGQgYmUgcHJlcGFyZWQgdG8KaGFuZGxlIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdW5jYXVnaHRfZXhjZXB0aW9uKCkgPzwvcD4KCjxwPnVuY2F1Z2h0X2V4Y2VwdGlvbigpIGlzIGNhbGxlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcgY29udGV4dHMgd2hlcmUKZXhjZXB0aW9uIHNhZmV0eSBpcyB2ZXJ5IGltcG9ydGFudC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMTUuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZXhjZXB0Lmh0bWwjZXhjZXB0LnVuY2F1Z2h0Ij4gW2V4Y2VwdC51bmNhdWdodF08L2E+LCBwYXJhZ3JhcGggMSwgMTguNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnN1cHBvcnQuZXhjZXB0aW9uIj4gW2xpYi5zdXBwb3J0LmV4Y2VwdGlvbl08L2E+LCBhbmQgMTguNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudW5jYXVnaHQiPiBbbGliLnVuY2F1Z2h0XTwvYT4sIGFkZCAidGhyb3coKSIgdG8gdW5jYXVnaHRfZXhjZXB0aW9uKCkuPC9wPgo8aHI+CjxhIG5hbWU9IjcxIj48aDM+NzEuJm5ic3A7RG9fZ2V0X21vbnRobmFtZSBzeW5vcHNpcyBtaXNzaW5nIGFyZ3VtZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5nZXQiPiBbbGliLmxvY2FsZS50aW1lLmdldF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMyBBdWcgMTk5ODwvcD4KPHA+VGhlIGxvY2FsZSBmYWNldCBtZW1iZXIgPHR0PnRpbWVfZ2V0Jmx0OyZndDs6OmRvX2dldF9tb250aG5hbWU8L3R0PgppcyBkZXNjcmliZWQgaW4gMjIuMi41LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS50aW1lLmdldC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLnRpbWUuZ2V0LnZpcnR1YWxzXTwvYT4gd2l0aCBmaXZlIGFyZ3VtZW50cywKY29uc2lzdGVudCB3aXRoIGRvX2dldF93ZWVrZGF5IGFuZCB3aXRoIGl0cyBzcGVjaWZpZWQgdXNlIGJ5IG1lbWJlcgpnZXRfbW9udGhuYW1lLiBIb3dldmVyLCBpbiB0aGUgc3lub3BzaXMsIGl0IGlzIHNwZWNpZmllZCBpbnN0ZWFkIHdpdGgKZm91ciBhcmd1bWVudHMuIFRoZSBtaXNzaW5nIGFyZ3VtZW50IGlzIHRoZSAiZW5kIiBpdGVyYXRvcgp2YWx1ZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5nZXQiPiBbbGliLmxvY2FsZS50aW1lLmdldF08L2E+LCBhZGQgYW4gImVuZCIgYXJndW1lbnQgdG8KdGhlIGRlY2xhcmF0aW9uIG9mIG1lbWJlciBkb19tb250aG5hbWUgYXMgZm9sbG93czo8L3A+Cgo8cHJlPiAgdmlydHVhbCBpdGVyX3R5cGUgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgcywgaXRlcl90eXBlIGVuZCwgaW9zX2Jhc2UmYW1wOywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCB0bSogdCkgY29uc3Q7PC9wcmU+Cjxocj4KPGEgbmFtZT0iNzQiPjxoMz43NC4mbmJzcDtHYXJibGVkIHRleHQgZm9yIDx0dD5jb2RlY3Z0Ojpkb19tYXhfbGVuZ3RoPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs4IFNlcCAxOTk4PC9wPgo8cD5UaGUgdGV4dCBvZiA8dHQ+Y29kZWN2dDo6ZG9fbWF4X2xlbmd0aDwvdHQ+J3MgIlJldHVybnMiCmNsYXVzZSAoMjIuMi4xLjUuMiwgcGFyYWdyYXBoIDExKSBpcyBnYXJibGVkLiBJdCBoYXMgdW5iYWxhbmNlZApwYXJlbnRoZXNlcyBhbmQgYSBzcHVyaW91cyA8Yj5uPC9iPi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiBwYXJhZ3JhcGggMTEgd2l0aCB0aGUKZm9sbG93aW5nOjwvcD4KCjxibG9ja3F1b3RlPgogIDxiPlJldHVybnM8L2I+OiBUaGUgbWF4aW11bSB2YWx1ZSB0aGF0CiAgPHR0PmRvX2xlbmd0aChzdGF0ZSwgZnJvbSwgZnJvbV9lbmQsIDEpPC90dD4gY2FuIHJldHVybiBmb3IgYW55CiAgdmFsaWQgcmFuZ2UgPHR0Pltmcm9tLCBmcm9tX2VuZCk8L3R0PiBhbmQgPHR0PnN0YXRlVDwvdHQ+IHZhbHVlCiAgPHR0PnN0YXRlPC90dD4uIFRoZSBzcGVjaWFsaXphdGlvbiA8dHQ+Y29kZWN2dCZsdDtjaGFyLCBjaGFyLAogIG1ic3RhdGVfdCZndDs6OmRvX21heF9sZW5ndGgoKTwvdHQ+IHJldHVybnMgMS4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9Ijc1Ij48aDM+NzUuJm5ic3A7Q29udHJhZGljdGlvbiBpbiA8dHQ+Y29kZWN2dDo6bGVuZ3RoPC90dD4ncyBhcmd1bWVudCB0eXBlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lIj4gW2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDsgTWF0dApBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOyAxOCBTZXAgMTk5ODwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2VzIGZvciBjbGFzc2VzIDx0dD5jb2RlY3Z0Jmx0OyZndDs8L3R0PiAoMjIuMi4xLjUpCmFuZCA8dHQ+Y29kZWN2dF9ieW5hbWUmbHQ7Jmd0OzwvdHQ+ICgyMi4yLjEuNikgc2F5IHRoYXQgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyA8dHQ+bGVuZ3RoPC90dD4gYW5kCjx0dD5kb19sZW5ndGg8L3R0PiBpcyBvZiB0eXBlIDx0dD5jb25zdCBzdGF0ZVQmYW1wOzwvdHQ+LiBUaGUgbWVtYmVyCmZ1bmN0aW9uIGRlc2NyaXB0aW9ucywgaG93ZXZlciAoMjIuMi4xLjUuMSwgcGFyYWdyYXBoIDY7IDIyLjIuMS41LjIsCnBhcmFncmFwaCA5KSBzYXkgdGhhdCB0aGUgdHlwZSBpcyA8dHQ+c3RhdGVUJmFtcDs8L3R0Pi4gIEVpdGhlciB0aGUKc3lub3BzaXMgb3IgdGhlIHN1bW1hcnkgbXVzdCBiZSBjaGFuZ2VkLiA8L3A+Cgo8cD5JZiAoYXMgSSBiZWxpZXZlKSB0aGUgbWVtYmVyIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBhcmUgY29ycmVjdCwKdGhlbiB3ZSBtdXN0IGFsc28gYWRkIHRleHQgc2F5aW5nIGhvdyA8dHQ+ZG9fbGVuZ3RoPC90dD4gY2hhbmdlcyBpdHMKPHR0PnN0YXRlVDwvdHQ+IGFyZ3VtZW50LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+LCBhbmQgYWxzbyBpbiA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNjwvZm9udD4sCmNoYW5nZSB0aGUgPHR0PnN0YXRlVDwvdHQ+IGFyZ3VtZW50IHR5cGUgb24gYm90aCBtZW1iZXIKPHR0Pmxlbmd0aCgpPC90dD4gYW5kIG1lbWJlciA8dHQ+ZG9fbGVuZ3RoKCk8L3R0PiBmcm9tIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5jb25zdCBzdGF0ZVQmYW1wOzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5zdGF0ZVQmYW1wOzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiwgYWRkIHRvIHRoZSBkZWZpbml0aW9uIGZvciBtZW1iZXIKPHR0PmRvX2xlbmd0aDwvdHQ+IGEgcGFyYWdyYXBoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IFRoZSBlZmZlY3Qgb24gdGhlIDx0dD5zdGF0ZTwvdHQ+IGFyZ3VtZW50IGlzIGBgYXMgaWYnJwogIGl0IGNhbGxlZCA8dHQ+ZG9faW4oc3RhdGUsIGZyb20sIGZyb21fZW5kLCBmcm9tLCB0bywgdG8rbWF4LAogIHRvKTwvdHQ+IGZvciA8dHQ+dG88L3R0PiBwb2ludGluZyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdAogIDx0dD5tYXg8L3R0PiBlbGVtZW50cy48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSI3NiI+PGgzPjc2LiZuYnNwO0NhbiBhIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgYWx3YXlzIGNvbnZlcnQgb25lIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBTZXAgMTk5ODwvcD4KPHA+VGhpcyBpc3N1ZSBjb25jZXJucyB0aGUgcmVxdWlyZW1lbnRzIG9uIGNsYXNzZXMgZGVyaXZlZCBmcm9tCjx0dD5jb2RlY3Z0PC90dD4sIGluY2x1ZGluZyB1c2VyLWRlZmluZWQgY2xhc3Nlcy4gV2hhdCBhcmUgdGhlCnJlc3RyaWN0aW9ucyBvbiB0aGUgY29udmVyc2lvbiBmcm9tIGV4dGVybmFsIGNoYXJhY3RlcnMKKGUuZy4gPHR0PmNoYXI8L3R0PikgdG8gaW50ZXJuYWwgY2hhcmFjdGVycyAoZS5nLiA8dHQ+d2NoYXJfdDwvdHQ+KT8KT3IsIGFsdGVybmF0aXZlbHksIHdoYXQgYXNzdW1wdGlvbnMgYWJvdXQgPHR0PmNvZGVjdnQ8L3R0PiBmYWNldHMgY2FuCnRoZSBJL08gbGlicmFyeSBtYWtlPyA8L3A+Cgo8cD5UaGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGNvbnZlcnQgZnJvbSBpbnRlcm5hbApjaGFyYWN0ZXJzIHRvIGV4dGVybmFsIGNoYXJhY3RlcnMgb25lIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWUsCmFuZCB3aGV0aGVyLCBnaXZlbiBhIHZhbGlkIHNlcXVlbmNlIG9mIGV4dGVybmFsIGNoYXJhY3RlcnMsIGl0J3MKcG9zc2libGUgdG8gcGljayBvZmYgaW50ZXJuYWwgY2hhcmFjdGVycyBvbmUgYXQgYSB0aW1lLiBPciwgdG8gcHV0IGl0CmRpZmZlcmVudGx5OiBnaXZlbiBhIHNlcXVlbmNlIG9mIGV4dGVybmFsIGNoYXJhY3RlcnMgYW5kIHRoZQpjb3JyZXNwb25kaW5nIHNlcXVlbmNlIG9mIGludGVybmFsIGNoYXJhY3RlcnMsIGRvZXMgYSBwb3NpdGlvbiBpbiB0aGUKaW50ZXJuYWwgc2VxdWVuY2UgY29ycmVzcG9uZCB0byBzb21lIHBvc2l0aW9uIGluIHRoZSBleHRlcm5hbApzZXF1ZW5jZT8gPC9wPgoKPHA+VG8gbWFrZSB0aGlzIGNvbmNyZXRlLCBzdXBwb3NlIHRoYXQgPHR0PltmaXJzdCwgbGFzdCk8L3R0PiBpcyBhCnNlcXVlbmNlIG9mIDxpPk08L2k+IGV4dGVybmFsIGNoYXJhY3RlcnMgYW5kIHRoYXQgPHR0PltpZmlyc3QsCmlsYXN0KTwvdHQ+IGlzIHRoZSBjb3JyZXNwb25kaW5nIHNlcXVlbmNlIG9mIDxpPk48L2k+IGludGVybmFsCmNoYXJhY3RlcnMsIHdoZXJlIDxpPk4gJmd0OyAxPC9pPi4gVGhhdCBpcywgPHR0Pm15X2VuY29kaW5nLmluKCk8L3R0PiwKYXBwbGllZCB0byA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+LCB5aWVsZHMgPHR0PltpZmlyc3QsCmlsYXN0KTwvdHQ+LiBOb3cgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZXJlIG5lY2Vzc2FyaWx5IGV4aXN0IGEKc3Vic2VxdWVuY2Ugb2YgZXh0ZXJuYWwgY2hhcmFjdGVycywgPHR0PltmaXJzdCwgbGFzdF8xKTwvdHQ+LCBzdWNoCnRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2VxdWVuY2Ugb2YgaW50ZXJuYWwgY2hhcmFjdGVycyBpcyB0aGUgc2luZ2xlCmNoYXJhY3RlciA8dHQ+KmlmaXJzdDwvdHQ+Pwo8L3A+Cgo8cD4oV2hhdCBhICJubyIgYW5zd2VyIHdvdWxkIG1lYW4gaXMgdGhhdAo8dHQ+bXlfZW5jb2Rpbmc8L3R0PiB0cmFuc2xhdGVzIHNlcXVlbmNlcyBvbmx5IGFzIGJsb2Nrcy4gVGhlcmUncyBhCnNlcXVlbmNlIG9mIDxpPk08L2k+IGV4dGVybmFsIGNoYXJhY3RlcnMgdGhhdCBtYXBzIHRvIGEgc2VxdWVuY2Ugb2YKPGk+TjwvaT4gaW50ZXJuYWwgY2hhcmFjdGVycywgYnV0IHRoYXQgZXh0ZXJuYWwgc2VxdWVuY2UgaGFzIG5vCnN1YnNlcXVlbmNlIHRoYXQgbWFwcyB0byA8aT5OLTE8L2k+IGludGVybmFsIGNoYXJhY3RlcnMuKSA8L3A+Cgo8cD5Tb21lIG9mIHRoZSB3b3JkaW5nIGluIHRoZSBzdGFuZGFyZCwgc3VjaCBhcyB0aGUgZGVzY3JpcHRpb24gb2YKPHR0PmNvZGVjdnQ6OmRvX21heF9sZW5ndGg8L3R0PiAoPGZvbnQgY29sb3I9InJlZCI+MjIuMi4xLjUuMjwvZm9udD4sCnBhcmFncmFwaCAxMSkgYW5kIDx0dD5iYXNpY19maWxlYnVmOjp1bmRlcmZsb3c8L3R0PiAoMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDMpIHN1Z2dlc3RzIHRoYXQgaXQgbXVzdCBhbHdheXMgYmUKcG9zc2libGUgdG8gcGljayBvZmYgaW50ZXJuYWwgY2hhcmFjdGVycyBvbmUgYXQgYSB0aW1lIGZyb20gYSBzZXF1ZW5jZQpvZiBleHRlcm5hbCBjaGFyYWN0ZXJzLiBIb3dldmVyLCB0aGlzIGlzIG5ldmVyIGV4cGxpY2l0bHkgc3RhdGVkIG9uZQp3YXkgb3IgdGhlIG90aGVyLiA8L3A+Cgo8cD5UaGlzIGlzc3VlIHNlZW1zIChhbmQgaXMpIHF1aXRlIHRlY2huaWNhbCwgYnV0IGl0IGlzIGltcG9ydGFudCBpZgp3ZSBleHBlY3QgdXNlcnMgdG8gcHJvdmlkZSB0aGVpciBvd24gZW5jb2RpbmcgZmFjZXRzLiBUaGlzIGlzIGFuIGFyZWEKd2hlcmUgdGhlIHN0YW5kYXJkIGxpYnJhcnkgY2FsbHMgdXNlci1zdXBwbGllZCBjb2RlLCBzbyBhIHdlbGwtZGVmaW5lZApzZXQgb2YgcmVxdWlyZW1lbnRzIGZvciB0aGUgdXNlci1zdXBwbGllZCBjb2RlIGlzIGNydWNpYWwuIFVzZXJzIG11c3QKYmUgYXdhcmUgb2YgdGhlIGFzc3VtcHRpb25zIHRoYXQgdGhlIGxpYnJhcnkgbWFrZXMuIFRoaXMgaXNzdWUgYWZmZWN0cwpwb3NpdGlvbmluZyBvcGVyYXRpb25zIG9uIDx0dD5iYXNpY19maWxlYnVmPC90dD4sIHVuYnVmZmVyZWQgaW5wdXQsCmFuZCBzZXZlcmFsIG9mIDx0dD5jb2RlY3Z0PC90dD4ncyBtZW1iZXIgZnVuY3Rpb25zLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdGV4dCBhcyBhIG5ldyBwYXJhZ3JhcGgsIGZvbGxvd2luZyA8Zm9udCBjb2xvcj0icmVkIj4yMi4yLjEuNS4yPC9mb250PiBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+QSA8dHQ+Y29kZWN2dDwvdHQ+IGZhY2V0IHRoYXQgaXMgdXNlZCBieSA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+CigyNy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlLnN0cmVhbXMiPiBbbGliLmZpbGUuc3RyZWFtc108L2E+KSBtdXN0IGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgaWY8L3A+CjxwcmU+ICAgIGRvX291dChzdGF0ZSwgZnJvbSwgZnJvbV9lbmQsIGZyb21fbmV4dCwgdG8sIHRvX2xpbSwgdG9fbmV4dCkKPC9wcmU+CndvdWxkIHJldHVybiA8dHQ+b2s8L3R0Piwgd2hlcmUgPHR0PmZyb20gIT0gZnJvbV9lbmQ8L3R0PiwgdGhlbiAKPHByZT4gICAgZG9fb3V0KHN0YXRlLCBmcm9tLCBmcm9tICsgMSwgZnJvbV9uZXh0LCB0bywgdG9fZW5kLCB0b19uZXh0KQo8L3ByZT4KbXVzdCBhbHNvIHJldHVybiA8dHQ+b2s8L3R0PiwgYW5kIHRoYXQgaWYKPHByZT4gICAgZG9faW4oc3RhdGUsIGZyb20sIGZyb21fZW5kLCBmcm9tX25leHQsIHRvLCB0b19saW0sIHRvX25leHQpCjwvcHJlPgp3b3VsZCByZXR1cm4gPHR0Pm9rPC90dD4sIHdoZXJlIDx0dD50byAhPSB0b19saW08L3R0PiwgdGhlbgo8cHJlPiAgICBkb19pbihzdGF0ZSwgZnJvbSwgZnJvbV9lbmQsIGZyb21fbmV4dCwgdG8sIHRvICsgMSwgdG9fbmV4dCkKPC9wcmU+CjxwPm11c3QgYWxzbyByZXR1cm4gPHR0Pm9rPC90dD4uICBbPGk+Rm9vdG5vdGU6PC9pPiBJbmZvcm1hbGx5LCB0aGlzCm1lYW5zIHRoYXQgPHR0PmJhc2ljX2ZpbGVidWY8L3R0PiBhc3N1bWVzIHRoYXQgdGhlIG1hcHBpbmcgZnJvbQppbnRlcm5hbCB0byBleHRlcm5hbCBjaGFyYWN0ZXJzIGlzIDEgdG8gTjogYSA8dHQ+Y29kZWN2dDwvdHQ+IHRoYXQgaXMKdXNlZCBieSA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IG11c3QgYmUgYWJsZSB0byB0cmFuc2xhdGUgY2hhcmFjdGVycwpvbmUgaW50ZXJuYWwgY2hhcmFjdGVyIGF0IGEgdGltZS4gIDxpPi0tRW5kIEZvb3Rub3RlPC9pPl08L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBNaW5vciBjaGFuZ2UgaW4gcHJvcG9zZWQgcmVzb2x1dGlvbi4gIE9yaWdpbmFsCnByb3Bvc2VkIHJlc29sdXRpb24gdGFsa2VkIGFib3V0ICJzdWNjZXNzIiwgd2l0aCBhIHBhcmVudGhldGljYWwKY29tbWVudCB0aGF0IHN1Y2Nlc3MgbWVhbnQgcmV0dXJuaW5nIDx0dD5vazwvdHQ+LiAgTmV3IHdvcmRpbmcKcmVtb3ZlcyBhbGwgdGFsayBhYm91dCAic3VjY2VzcyIsIGFuZCBqdXN0IHRhbGtzIGFib3V0IHRoZQpyZXR1cm4gdmFsdWUuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KCiAgPHA+VGhlIHByb3Bvc2VkIHJlc29sdWlvbiBzYXlzIHRoYXQgY29udmVyc2lvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbmUKICBpbnRlcm5hbCBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAgVGhpcyBydWxlcyBvdXQgc29tZSBlbmNvZGluZ3MgdGhhdAogIHdvdWxkIG90aGVyd2lzZSBiZSBsZWdhbC4gIFRoZSBhbHRlcm5hdGl2ZSBhbnN3ZXIgd291bGQgbWVhbiB0aGVyZQogIHdvdWxkIGJlIHNvbWUgaW50ZXJuYWwgcG9zaXRpb25zIHRoYXQgZG8gbm90IGNvcnJlc3BvbmQgdG8gYW55CiAgZXh0ZXJuYWwgZmlsZSBwb3NpdGlvbi48L3A+CiAgPHA+CiAgQW4gZXhhbXBsZSBvZiBhbiBlbmNvZGluZyB0aGF0IHRoaXMgcnVsZXMgb3V0IGlzIG9uZSB3aGVyZSB0aGUKICA8dHQ+aW50ZXJuVDwvdHQ+IGFuZCA8dHQ+ZXh0ZXJuVDwvdHQ+IGFyZSBvZiB0aGUgc2FtZSB0eXBlLCBhbmQKICB3aGVyZSB0aGUgaW50ZXJuYWwgc2VxdWVuY2UgPHR0PmMxIGMyPC90dD4gY29ycmVzcG9uZHMgdG8gdGhlCiAgZXh0ZXJuYWwgc2VxdWVuY2UgPHR0PmMyIGMxPC90dD4uCiAgPC9wPgogIDxwPkl0IHdhcyBnZW5lcmFsbHkgYWdyZWVkIHRoYXQgPHR0PmJhc2ljX2ZpbGVidWY8L3R0PiByZWxpZXMKICBvbiB0aGlzIHByb3BlcnR5OiBpdCB3YXMgZGVzaWduZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdAogIHRoZSBleHRlcm5hbC10by1pbnRlcm5hbCBtYXBwaW5nIGlzIE4tdG8tMSwgYW5kIGl0IGlzIG5vdCBjbGVhcgogIHRoYXQgPHR0PmJhc2ljX2ZpbGVidWY8L3R0PiBpcyBpbXBsZW1lbnRhYmxlIHdpdGhvdXQgdGhhdCAKICByZXN0cmljdGlvbi4KICA8L3A+CiAgPHA+CiAgVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgZXhwcmVzc2VkIGFzIGEgcmVzdHJpY3Rpb24gb24KICA8dHQ+Y29kZWN2dDwvdHQ+IHdoZW4gdXNlZCBieSA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+LCByYXRoZXIKICB0aGFuIGEgYmxhbmtldCByZXN0cmljdGlvbiBvbiBhbGwgPHR0PmNvZGVjdnQ8L3R0PiBmYWNldHMsCiAgYmVjYXVzZSA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IGlzIHRoZSBvbmx5IG90aGVyIHBhcnQgb2YgdGhlIAogIGxpYnJhcnkgdGhhdCB1c2VzIDx0dD5jb2RlY3Z0PC90dD4uICBJZiBhIHVzZXIgd2FudHMgdG8gZGVmaW5lCiAgYSA8dHQ+Y29kZWN2dDwvdHQ+IGZhY2V0IHRoYXQgaW1wbGVtZW50cyBhIG1vcmUgZ2VuZXJhbCBOLXRvLU0KICBtYXBwaW5nLCB0aGVyZSBpcyBubyByZWFzb24gdG8gcHJvaGliaXQgaXQsIHNvIGxvbmcgYXMgdGhlIHVzZXIKICBkb2VzIG5vdCBleHBlY3QgPHR0PmJhc2ljX2ZpbGVidWY8L3R0PiB0byBiZSBhYmxlIHRvIHVzZSBpdC4KICA8L3A+Cjxocj4KPGEgbmFtZT0iNzgiPjxoMz43OC4mbmJzcDtUeXBvOiBldmVudF9jYWxsX2JhY2s8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlIj4gW2xpYi5pb3MuYmFzZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05pY28gSm9zdXR0aXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjkgU2VwIDE5OTg8L3A+CjxwPnR5cG86IGV2ZW50X2NhbGxfYmFjayBzaG91bGQgYmUgZXZlbnRfY2FsbGJhY2sgJm5ic3A7IDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgMjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiBzeW5vcHNpcyBjaGFuZ2UKImV2ZW50X2NhbGxfYmFjayIgdG8gImV2ZW50X2NhbGxiYWNrIi4gPC9wPgo8aHI+CjxhIG5hbWU9Ijc5Ij48aDM+NzkuJm5ic3A7SW5jb25zaXN0ZW50IGRlY2xhcmF0aW9uIG9mIHBvbGFyKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5zeW5vcHNpcyI+IFtsaWIuY29tcGxleC5zeW5vcHNpc108L2E+LCAyNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC52YWx1ZS5vcHMiPiBbbGliLmNvbXBsZXgudmFsdWUub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+SW4gMjYuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXguc3lub3BzaXMiPiBbbGliLmNvbXBsZXguc3lub3BzaXNdPC9hPiBwb2xhciBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOywgY29uc3QgVCZhbXA7KTsgPC9wcmU+Cgo8cD5JbiAyNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC52YWx1ZS5vcHMiPiBbbGliLmNvbXBsZXgudmFsdWUub3BzXTwvYT4gaXQgaXMgZGVjbGFyZWQgYXMgZm9sbG93czo8L3A+CjxwcmU+ICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgY29tcGxleCZsdDtUJmd0OyBwb2xhcihjb25zdCBUJmFtcDsgcmhvLCBjb25zdCBUJmFtcDsgdGhldGEgPSAwKTsgPC9wcmU+Cgo8cD5UaHVzIHdoZXRoZXIgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgaXMgbm90IGNsZWFyLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjYuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXguc3lub3BzaXMiPiBbbGliLmNvbXBsZXguc3lub3BzaXNdPC9hPiBjaGFuZ2U6PC9wPgo8cHJlPiAgIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgcG9sYXIoY29uc3QgVCZhbXA7LCBjb25zdCBUJmFtcDspOzwvcHJlPgoKPHA+dG86PC9wPgo8cHJlPiAgIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgcG9sYXIoY29uc3QgVCZhbXA7IHJobywgY29uc3QgVCZhbXA7IHRoZXRhID0gMCk7IDwvcHJlPgo8aHI+CjxhIG5hbWU9IjgwIj48aDM+ODAuJm5ic3A7R2xvYmFsIE9wZXJhdG9ycyBvZiBjb21wbGV4IGRlY2xhcmVkIHR3aWNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNmZW52LnN5biI+IFtsaWIuY2ZlbnYuc3luXTwvYT4sIDI2LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5mZW52Ij4gW2xpYi5mZW52XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+Qm90aCAyNi4yLjEgYW5kIDI2LjIuMiBjb250YWluIGRlY2xhcmF0aW9ucyBvZiBnbG9iYWwgb3BlcmF0b3JzIGZvcgpjbGFzcyBjb21wbGV4LiBUaGlzIHJlZHVuZGFuY3kgc2hvdWxkIGJlIHJlbW92ZWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlZHVjZSByZWR1bmRhbmN5IGFjY29yZGluZyB0byB0aGUgZ2VuZXJhbCBzdHlsZSBvZiB0aGUgc3RhbmRhcmQuIDwvcD4KPGhyPgo8YSBuYW1lPSI4MyI+PGgzPjgzLiZuYnNwO1N0cmluZzo6bnBvcyB2cy4gc3RyaW5nOjptYXhfc2l6ZSgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+TWFueSBzdHJpbmcgbWVtYmVyIGZ1bmN0aW9ucyB0aHJvdyBpZiBzaXplIGlzIGdldHRpbmcgb3IgZXhjZWVkaW5nCm5wb3MuIEhvd2V2ZXIsIEkgd29uZGVyIHdoeSB0aGV5IGRvbid0IHRocm93IGlmIHNpemUgaXMgZ2V0dGluZyBvcgpleGNlZWRpbmcgbWF4X3NpemUoKSBpbnN0ZWFkIG9mIG5wb3MuICBNYXkgYmUgbnBvcyBpcyBrbm93biBhdCBjb21waWxlCnRpbWUsIHdoaWxlIG1heF9zaXplKCkgaXMga25vd24gYXQgcnVudGltZS4gSG93ZXZlciwgd2hhdCBoYXBwZW5zIGlmCnNpemUgZXhjZWVkcyBtYXhfc2l6ZSgpIGJ1dCBub3QgbnBvcywgdGhlbj8gSXQgc2VlbXMgdGhlIHN0YW5kYXJkCmxhY2tzIHNvbWUgY2xhcmlmaWNhdGlvbnMgaGVyZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWZ0ZXIgMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4gcGFyYWdyYXBoIDQgKCJUaGUgZnVuY3Rpb25zCmRlc2NyaWJlZCBpbiB0aGlzIGNsYXVzZS4uLiIpIGFkZCBhIG5ldyBwYXJhZ3JhcGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Rm9yIGFueSBzdHJpbmcgb3BlcmF0aW9uLCBpZiBhcyBhIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLCA8dHQ+IHNpemUoKTwvdHQ+IHdvdWxkIGV4Y2VlZAogIDx0dD4gbWF4X3NpemUoKTwvdHQ+IHRoZW4KICB0aGUgb3BlcmF0aW9uIHRocm93cyA8dHQ+bGVuZ3RoX2Vycm9yPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIGxlbmd0aF9lcnJvciBpcyB0aGUgY29ycmVjdCBleGNlcHRpb24gdG8gdGhyb3cuPC9wPgo8aHI+CjxhIG5hbWU9Ijg2Ij48aDM+ODYuJm5ic3A7U3RyaW5nIGNvbnN0cnVjdG9ycyBkb24ndCBkZXNjcmliZSBleGNlcHRpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+VGhlIGNvbnN0cnVjdG9yIGZyb20gYSByYW5nZTo8L3A+Cgo8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7IAogICAgICAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBiZWdpbiwgSW5wdXRJdGVyYXRvciBlbmQsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSA9IEFsbG9jYXRvcigpKTs8L3ByZT4KCjxwPmxhY2tzIGEgdGhyb3dzIGNsYXVzZS4gSG93ZXZlciwgSSB3b3VsZCBleHBlY3QgdGhhdCBpdCB0aHJvd3MKYWNjb3JkaW5nIHRvIHRoZSBvdGhlciBjb25zdHJ1Y3RvcnMgaWYgdGhlIG51bWJlcnMgb2YgY2hhcmFjdGVycyBpbgp0aGUgcmFuZ2UgZXF1YWxzIG5wb3MgKG9yIGV4Y2VlZHMgbWF4X3NpemUoKSwgc2VlIGFib3ZlKS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5jb25zIj4gW2xpYi5zdHJpbmcuY29uc108L2E+LCBTdHJpa2UgdGhyb3dzIHBhcmFncmFwaHMgZm9yCmNvbnN0cnVjdG9ycyB3aGljaCBzYXkgIlRocm93czogbGVuZ3RoX2Vycm9yIGlmIG4gPT0KbnBvcy4iPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhyb3dzIGNsYXVzZXMgZm9yIGxlbmd0aF9lcnJvciBpZiBuID09IG5wb3MgYXJlIG5vIGxvbmdlciBuZWVkZWQKYmVjYXVzZSB0aGV5IGFyZSBzdWJzdW1lZCBieSB0aGUgZ2VuZXJhbCB3b3JkaW5nIGFkZGVkIGJ5IHRoZQpyZXNvbHV0aW9uIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODMiPjgzPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iOTAiPjxoMz45MC4mbmJzcDtJbmNvcnJlY3QgZGVzY3JpcHRpb24gb2Ygb3BlcmF0b3IgJmd0OyZndDsgZm9yIHN0cmluZ3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+VGhlIGVmZmVjdCBvZiBvcGVyYXRvciAmZ3Q7Jmd0OyBmb3Igc3RyaW5ncyBjb250YWluIHRoZSBmb2xsb3dpbmcgaXRlbTo8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlzc3BhY2UoYyxnZXRsb2MoKSk8L3R0PiBpcyB0cnVlIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQKY2hhcmFjdGVyIGMuPC9wPgoKPHA+SGVyZSA8dHQ+Z2V0bG9jKCk8L3R0PiBoYXMgdG8gYmUgcmVwbGFjZWQgYnkgPHR0PmlzLmdldGxvYygpPC90dD4uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4gcGFyYWdyYXBoIDEgRWZmZWN0cyBjbGF1c2UgcmVwbGFjZTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aXNzcGFjZShjLGdldGxvYygpKTwvdHQ+IGlzIHRydWUgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0Pmlzc3BhY2UoYyxpcy5nZXRsb2MoKSk8L3R0PiBpcyB0cnVlIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iOTEiPjxoMz45MS4mbmJzcDtEZXNjcmlwdGlvbiBvZiBvcGVyYXRvciZndDsmZ3Q7IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZyZsdDsmZ3Q7IG1pZ2h0IGNhdXNlIGVuZGxlc3MgbG9vcDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5PcGVyYXRvciAmZ3Q7Jmd0OyBhbmQgZ2V0bGluZSgpIGZvciBzdHJpbmdzIHJlYWQgdW50aWwgZW9mKCkKaW4gdGhlIGlucHV0IHN0cmVhbSBpcyB0cnVlLiBIb3dldmVyLCB0aGlzIG1pZ2h0IG5ldmVyIGhhcHBlbiwgaWYgdGhlCnN0cmVhbSBjYW4ndCByZWFkIGFueW1vcmUgd2l0aG91dCByZWFjaGluZyBFT0YuIFNvIHNob3VsZG4ndCBpdCBiZQpjaGFuZ2VkIGludG8gdGhhdCBpdCByZWFkcyB1bnRpbCAhZ29vZCgpID8gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiwgcGFyYWdyYXBoIDEsIHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBrIHdlcmUKY29uc3RydWN0ZWQgYnkgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7OjpzZW50cnkgayggaXMpLiBJZgpib29sKCBrKSBpcyB0cnVlLCBpdCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZyBzdHIuYXBwZW5kKDEsIGMpLiBJZgppcy53aWR0aCgpIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgbWF4aW11bSBudW1iZXIgbiBvZiBjaGFyYWN0ZXJzCmFwcGVuZGVkIGlzIGlzLndpZHRoKCk7IG90aGVyd2lzZSBuIGlzIHN0ci5tYXhfc2l6ZSgpLiBDaGFyYWN0ZXJzIGFyZQpleHRyYWN0ZWQgYW5kIGFwcGVuZGVkIHVudGlsIGFueSBvZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKPC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KPGJsb2NrcXVvdGU+CkVmZmVjdHM6IEJlaGF2ZXMgYXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKDI3LjYuMS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4pLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgdGhlCnNlbnRyeSBjb252ZXJ0cyB0byB0cnVlLCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cwpjaGFyYWN0ZXJzIGZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZwpzdHIuYXBwZW5kKDEsYykuIElmIGlzLndpZHRoKCkgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBtYXhpbXVtCm51bWJlciBuIG9mIGNoYXJhY3RlcnMgYXBwZW5kZWQgaXMgaXMud2lkdGgoKTsgb3RoZXJ3aXNlIG4gaXMKc3RyLm1heF9zaXplKCkuIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBhbmQgYXBwZW5kZWQgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4sIHBhcmFncmFwaCA2LCByZXBsYWNlPC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBieSB0eXBlbmFtZQpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDs6OnNlbnRyeSBrKCBpcywgdHJ1ZSkuIElmIGJvb2woIGspIGlzIHRydWUsCml0IGNhbGxzIHN0ci5lcmFzZSgpIGFuZCB0aGVuIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSBpcyBhbmQgYXBwZW5kcwp0aGVtIHRvIHN0ciBhcyBpZiBieSBjYWxsaW5nIHN0ci5hcHBlbmQoMSwgYykgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L2Jsb2NrcXVvdGU+CjxwPndpdGg6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsdWUgcmV0dXJuZWQKYnkgc3Vic2VxdWVudCBjYWxscyB0byBiYXNpY19pc3RyZWFtJmx0OyZndDs6Omdjb3VudCgpLiAgQWZ0ZXIKY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgdGhlIHNlbnRyeSBjb252ZXJ0cyB0byB0cnVlLCBjYWxscwpzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cyBjaGFyYWN0ZXJzIGZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0bwpzdHIgYXMgaWYgYnkgY2FsbGluZyBzdHIuYXBwZW5kKDEsYykgdW50aWwgYW55IG9mIHRoZSBmb2xsb3dpbmcKb2NjdXJzOgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogTWFkZSBjaGFuZ2VzIGluIHByb3Bvc2VkIHJlc29sdXRpb24uICA8dHQ+b3BlcmF0b3ImZ3Q7Jmd0OzwvdHQ+CnNob3VsZCBiZSBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiwgbm90IGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uLgo8dHQ+Z2V0bGluZTwvdHQ+IHNob3VsZCBub3QgYmUgcmVxdWlyZWQgdG8gc2V0IDx0dD5nY291bnQ8L3R0Piwgc2luY2UKdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciA8dHQ+Z2NvdW50PC90dD4gdG8gYmUgc2V0IGV4Y2VwdCBieSBvbmUgb2YKPHR0PmJhc2ljX2lzdHJlYW08L3R0PidzIG1lbWJlciBmdW5jdGlvbnMuXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogTmljbyBhZ3JlZXMgd2l0aCBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSByZWFsIGlzc3VlIGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhlc2Ugc3RyaW5nIGlucHV0IGZ1bmN0aW9ucwpnZXQgdGhlaXIgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLCByYXRoZXIgdGhhbiBieSBjYWxsaW5nIGFuCmlzdHJlYW0ncyBtZW1iZXIgZnVuY3Rpb25zLCBhIHN0cmVhbWJ1ZiBzaWduYWxzIGZhaWx1cmUgZWl0aGVyIGJ5CnJldHVybmluZyBlb2Ygb3IgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uOyB0aGVyZSBhcmUgbm8gb3RoZXIKcG9zc2liaWxpdGllcy4gIFRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlc2UgdHdvCmZ1bmN0aW9ucyBkbyBnZXQgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLjwvcD4KPGhyPgo8YSBuYW1lPSI5MiI+PGgzPjkyLiZuYnNwO0luY29tcGxldGUgQWxnb3JpdGhtIFJlcXVpcmVtZW50czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05pY28gSm9zdXR0aXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjkgU2VwIDE5OTg8L3A+CjxwPlRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzdGF0ZSwgaG93IG9mdGVuIGEgZnVuY3Rpb24gb2JqZWN0IGlzIGNvcGllZCwKY2FsbGVkLCBvciB0aGUgb3JkZXIgb2YgY2FsbHMgaW5zaWRlIGFuIGFsZ29yaXRobS4gVGhpcyBtYXkgbGVhZCB0bwpzdXJwcmlzaW5nL2J1Z2d5IGJlaGF2aW9yLiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IDwvcD4KCjxwcmU+Y2xhc3MgTnRoIHsgICAgLy8gZnVuY3Rpb24gb2JqZWN0IHRoYXQgcmV0dXJucyB0cnVlIGZvciB0aGUgbnRoIGVsZW1lbnQgCiAgcHJpdmF0ZTogCiAgICBpbnQgbnRoOyAgICAgLy8gZWxlbWVudCB0byByZXR1cm4gdHJ1ZSBmb3IgCiAgICBpbnQgY291bnQ7ICAgLy8gZWxlbWVudCBjb3VudGVyIAogIHB1YmxpYzogCiAgICBOdGggKGludCBuKSA6IG50aChuKSwgY291bnQoMCkgeyAKICAgIH0gCiAgICBib29sIG9wZXJhdG9yKCkgKGludCkgeyAKICAgICAgICByZXR1cm4gKytjb3VudCA9PSBudGg7IAogICAgfSAKfTsgCi4uLi4gCi8vIHJlbW92ZSB0aGlyZCBlbGVtZW50IAogICAgbGlzdCZsdDtpbnQmZ3Q7OjppdGVyYXRvciBwb3M7IAogICAgcG9zID0gcmVtb3ZlX2lmKGNvbGwuYmVnaW4oKSxjb2xsLmVuZCgpLCAgLy8gcmFuZ2UgCiAgICAgICAgICAgICAgICAgICAgTnRoKDMpKSwgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgY3JpdGVyaW9uIAogICAgY29sbC5lcmFzZShwb3MsY29sbC5lbmQoKSk7IDwvcHJlPgoKPHA+VGhpcyBjYWxsLCBpbiBmYWN0IHJlbW92ZXMgdGhlIDNyZCA8Yj5BTkQgdGhlIDZ0aDwvYj4gZWxlbWVudC4gVGhpcwpoYXBwZW5zIGJlY2F1c2UgdGhlIHVzdWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbGdvcml0aG0gY29waWVzIHRoZQpmdW5jdGlvbiBvYmplY3QgaW50ZXJuYWxseTogPC9wPgoKPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgRm9yd0l0ZXIsIGNsYXNzIFByZWRpY2F0ZSZndDsgCkZvcndJdGVyIHN0ZDo6cmVtb3ZlX2lmKEZvcndJdGVyIGJlZywgRm9yd0l0ZXIgZW5kLCBQcmVkaWNhdGUgb3ApIAp7IAogICAgYmVnID0gZmluZF9pZihiZWcsIGVuZCwgb3ApOyAKICAgIGlmIChiZWcgPT0gZW5kKSB7IAogICAgICAgIHJldHVybiBiZWc7IAogICAgfSAKICAgIGVsc2UgeyAKICAgICAgICBGb3J3SXRlciBuZXh0ID0gYmVnOyAKICAgICAgICByZXR1cm4gcmVtb3ZlX2NvcHlfaWYoKytuZXh0LCBlbmQsIGJlZywgb3ApOyAKICAgIH0gCn0gPC9wcmU+Cgo8cD5UaGUgYWxnb3JpdGhtIHVzZXMgZmluZF9pZigpIHRvIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzaG91bGQKYmUgcmVtb3ZlZC4gSG93ZXZlciwgaXQgdGhlbiB1c2VzIGEgY29weSBvZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9iamVjdAp0byBwcm9jZXNzIHRoZSByZXN1bHRpbmcgZWxlbWVudHMgKGlmIGFueSkuIEhlcmUsIE50aCBpcyB1c2VkIGFnYWluCmFuZCByZW1vdmVzIGFsc28gdGhlIHNpeHRoIGVsZW1lbnQuIFRoaXMgYmVoYXZpb3IgY29tcHJvbWlzZXMgdGhlCmFkdmFudGFnZSBvZiBmdW5jdGlvbiBvYmplY3RzIGJlaW5nIGFibGUgdG8gaGF2ZSBhIHN0YXRlLiBXaXRob3V0IGFueQpjb3N0IGl0IGNvdWxkIGJlIGF2b2lkZWQgKGp1c3QgaW1wbGVtZW50IGl0IGRpcmVjdGx5IGluc3RlYWQgb2YKY2FsbGluZyBmaW5kX2lmKCkpLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggZm9sbG93aW5nIDI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+IHBhcmFncmFwaCA4OjwvcD4KPGJsb2NrcXVvdGU+CltOb3RlOiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxnb3JpdGhtcyB0aGF0IHRha2UgZnVuY3Rpb24Kb2JqZWN0cyBhcyBhcmd1bWVudHMgYXJlIHBlcm1pdHRlZCB0byBjb3B5IHRob3NlIGZ1bmN0aW9uIG9iamVjdHMKZnJlZWx5LiAgUHJvZ3JhbW1lcnMgZm9yIHdob20gb2JqZWN0IGlkZW50aXR5IGlzIGltcG9ydGFudCBzaG91bGQKY29uc2lkZXIgdXNpbmcgYSB3cmFwcGVyIGNsYXNzIHRoYXQgcG9pbnRzIHRvIGEgbm9uY29waWVkCmltcGxlbWVudGF0aW9uIG9iamVjdCwgb3Igc29tZSBlcXVpdmFsZW50IHNvbHV0aW9uLl0KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0R1YmxpbjogUGV0ZSBCZWNrZXIgZmVsdCB0aGF0IHRoaXMgbWF5IG5vdCBiZSBhIGRlZmVjdCwKYnV0IHJhdGhlciBzb21ldGhpbmcgdGhhdCBwcm9ncmFtbWVycyBuZWVkIHRvIGJlIGVkdWNhdGVkIGFib3V0LgpUaGVyZSB3YXMgZGlzY3Vzc2lvbiBvZiBhZGRpbmcgd29yZGluZyB0byB0aGUgZWZmZWN0IHRoYXQgdGhlIG51bWJlcgphbmQgb3JkZXIgb2YgY2FsbHMgdG8gZnVuY3Rpb24gb2JqZWN0cywgaW5jbHVkaW5nIHByZWRpY2F0ZXMsIG5vdAphZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXTwvaT48L3A+Cgo8cD48aT5bUHJlLUtvbmE6IE5pY28gY29tbWVudHM6IEl0IHNlZW1zIHRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKaGF2ZSBhIGNsZWFyIHN0YXRlbWVudCBvZiAicHJlZGljYXRlIiBpbiB0aGUKc3RhbmRhcmQuIFBlb3BsZSBpbmNsdWRpbmcgbWUgc2VlbWVkIHRvIHRoaW5rICJhIGZ1bmN0aW9uCnJldHVybmluZyBhIEJvb2xlYW4gdmFsdWUgYW5kIGJlaW5nIGFibGUgdG8gYmUgY2FsbGVkIGJ5IGFuIFNUTAphbGdvcml0aG0gb3IgYmUgdXNlZCBhcyBzb3J0aW5nIGNyaXRlcmlvbiBvciAuLi4gaXMgYQpwcmVkaWNhdGUiLiBCdXQgYSBwcmVkaWNhdGUgaGFzIG1vcmUgcmVxdWlyZW1lbnRzOiBJdCBzaG91bGQKbmV2ZXIgY2hhbmdlIGl0cyBiZWhhdmlvciBkdWUgdG8gYSBjYWxsIG9yIGJlaW5nIGNvcGllZC4gSU1ITyB3ZSBoYXZlCnRvIHN0YXRlIHRoaXMgaW4gdGhlIHN0YW5kYXJkLiBJZiB5b3UgbGlrZSwgc2VlIHNlY3Rpb24gOC4xLjQgb2YgbXkKbGlicmFyeSBib29rIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24uXTwvaT48L3A+Cgo8cD48aT5bS29uYTogTmljbyB3aWxsIHByb3ZpZGUgd29yZGluZyB0byB0aGUgZWZmZWN0IHRoYXQgInVubGVzcwpvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBhbmQgY2FsbHMgdG8gZnVuY3Rpb24Kb2JqZWN0cyBieSBhbGdvcml0aG1zIGlzIHVuc3BlY2lmaWVkIi4mbmJzcDsgQ29uc2lkZXIgcGxhY2luZyBpbgoyNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZ29yaXRobXMiPiBbbGliLmFsZ29yaXRobXNdPC9hPiBhZnRlciBwYXJhZ3JhcGggOS5dPC9pPjwvcD4KCjxwPjxpPltTYW50YSBDcnV6OiBUaGUgc3RhbmRhcmQgZG9lc24ndCBjdXJyZW50bHkgZ3VhcmFudGVlIHRoYXQKICBmdW5jdGlvbnMgb2JqZWN0IHdvbid0IGJlIGNvcGllZCwgYW5kIHdoYXQgaXNuJ3QgZm9yYmlkZGVuIGlzCiAgYWxsb3dlZC4gIEl0IGlzIGJlbGlldmVkIChlc3BlY2lhbGx5IHNpbmNlIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlcmUKICB3cml0dGVuIGluIGNvbmNlcnQgd2l0aCB0aGUgc3RhbmRhcmQgZG8gbWFrZSBjb3BpZXMgb2YgZnVuY3Rpb24KICBvYmplY3RzKSB0aGF0IHRoaXMgd2FzIGludGVudGlvbmFsLiAgVGh1cywgbm8gbm9ybWF0aXZlIGNoYW5nZSBpcwogIG5lZWRlZC4gIFdoYXQgd2Ugc2hvdWxkIHB1dCBpbiBpcyBhIG5vbi1ub3JtYXRpdmUgbm90ZSBzdWdnZXN0aW5nIHRvCiAgcHJvZ3JhbW1lcnMgdGhhdCBpZiB0aGV5IHdhbnQgdG8gZ3VhcmFudGVlIHRoZSBsYWNrIG9mIGNvcHlpbmcgdGhleQogIHNob3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgdGhlIDx0dD5yZWY8L3R0PiB3cmFwcGVyLl08L2k+PC9wPgoKPHA+PGk+W094Zm9yZDogTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCjxocj4KPGEgbmFtZT0iOTgiPjxoMz45OC4mbmJzcDtJbnB1dCBpdGVyYXRvciByZXF1aXJlbWVudHMgYXJlIGJhZGx5IHdyaXR0ZW48L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlucHV0Lml0ZXJhdG9ycyI+IFtsaWIuaW5wdXQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+VGFibGUgNzIgaW4gMjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pbnB1dC5pdGVyYXRvcnMiPiBbbGliLmlucHV0Lml0ZXJhdG9yc108L2E+IHNwZWNpZmllcyBzZW1hbnRpY3MgZm9yCjx0dD4qcisrPC90dD4gb2Y6PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7IDx0dD57IFQgdG1wID0gKnI7ICsrcjsgcmV0dXJuIHRtcDsgfTwvdHQ+PC9wPgoKPHA+VGhlcmUgYXJlIHR3byBwcm9ibGVtcyB3aXRoIHRoaXMuICBGaXJzdCwgdGhlIHJldHVybiB0eXBlIGlzCnNwZWNpZmllZCB0byBiZSAiVCIsIGFzIG9wcG9zZWQgdG8gc29tZXRoaW5nIGxpa2UgImNvbnZlcnRpYmxlIHRvIFQiLgpUaGlzIGlzIHRvbyBzcGVjaWZpYzogd2Ugd2FudCB0byBhbGxvdyAqcisrIHRvIHJldHVybiBhbiBsdmFsdWUuPC9wPgoKPHA+U2Vjb25kLCB3cml0aW5nIHRoZSBzZW1hbnRpY3MgaW4gdGVybXMgb2YgY29kZSBtaXNsZWFkaW5nbHkKc3VnZ2VzdHMgdGhhdCB0aGUgZWZmZWN0cyAqcisrIHNob3VsZCBwcmVjaXNlbHkgcmVwbGljYXRlIHRoZSBiZWhhdmlvcgpvZiB0aGlzIGNvZGUsIGluY2x1ZGluZyBzaWRlIGVmZmVjdHMuICAoRG9lcyB0aGlzIG1lYW4gdGhhdCAqcisrCnNob3VsZCBpbnZva2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZXhhY3RseSBhcyBtYW55IHRpbWVzIGFzIHRoZSBzYW1wbGUKY29kZSBhYm92ZSB3b3VsZD8pIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzM0Ij4zMzQ8L2E+IGZvciBhIHNpbWlsYXIKcHJvYmxlbS48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CkluIFRhYmxlIDcyIGluIDI0LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaW5wdXQuaXRlcmF0b3JzIj4gW2xpYi5pbnB1dC5pdGVyYXRvcnNdPC9hPiwgY2hhbmdlIHRoZSByZXR1cm4gdHlwZQpmb3IgPHR0PipyKys8L3R0PiBmcm9tIDx0dD5UPC90dD4gdG8gImNvbnZlcnRpYmxlIHRvIFQiLgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpc3N1ZSBoYXMgdHdvIHBhcnRzOiB0aGUgcmV0dXJuIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzCiAgdGhlIGNvcHkgY29uc3RydWN0b3IgaXMgaW52b2tlZC48L3A+Cgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoZSB0aGUgZmlyc3QgcGFydCBpcyBhIHJlYWwgaXNzdWUuICBJdCdzCiAgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIHJldHVybiB0eXBlIHRvIGJlIHNwZWNpZmllZCBzbyBtdWNoIG1vcmUKICBwcmVjaXNlbHkgZm9yICpyKysgdGhhbiBpdCBpcyBmb3IgKnIuICBJbiBwYXJ0aWN1bGFyLCBpZiByIGlzIG9mCiAgKHNheSkgdHlwZSA8dHQ+aW50KjwvdHQ+LCB0aGVuICpyKysgaXNuJ3QgPHR0PmludDwvdHQ+LAogIGJ1dCA8dHQ+aW50JmFtcDs8L3R0Pi48L3A+Cgo8cD5UaGUgTFdHIGRvZXMgbm90IGJlbGlldmUgdGhhdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb3B5CiAgY29uc3RydWN0b3IgaXMgaW52b2tlZCBpcyBhIHJlYWwgaXNzdWUuICBUaGlzIGNhbiB2YXJ5IGluIGFueSBjYXNlLAogIGJlY2F1c2Ugb2YgbGFuZ3VhZ2UgcnVsZXMgb24gY29weSBjb25zdHJ1Y3RvciBlbGlzaW9uLiAgVGhhdCdzIHRvbwogIG11Y2ggdG8gcmVhZCBpbnRvIHRoZXNlIHNlbWFudGljcyBjbGF1c2VzLjwvcD4KCjxwPkFkZGl0aW9uYWxseSwgYXMgRGF2ZSBBYnJhaGFtcyBwb2ludGVkIG91dCAoYysrc3RkLWxpYi0xMzcwMyk6IHNpbmNlIAogICB3ZSdyZSB0b2xkICgyNC4xLzMpIHRoYXQgZm9yd2FyZCBpdGVyYXRvcnMgc2F0aXNmeSBhbGwgdGhlIHJlcXVpcmVtZW50cwogICBvZiBpbnB1dCBpdGVyYXRvcnMsIHdlIGNhbid0IGltcG9zZSBhbnkgcmVxdWlyZW1lbnRzIGluIHRoZSBJbnB1dAogICBJdGVyYXRvciByZXF1aXJlbWVudHMgdGFibGUgdGhhdCBmb3J3YXJkIGl0ZXJhdG9ycyBkb24ndCBzYXRpc2Z5LjwvcD4KPGhyPgo8YSBuYW1lPSIxMDMiPjxoMz4xMDMuJm5ic3A7c2V0OjppdGVyYXRvciBpcyByZXF1aXJlZCB0byBiZSBtb2RpZmlhYmxlLCBidXQgdGhpcyBhbGxvd3MgbW9kaWZpY2F0aW9uIG9mIGtleXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FGTk9SJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgT2N0IDE5OTg8L3A+CjxwPlNldDo6aXRlcmF0b3IgaXMgZGVzY3JpYmVkIGFzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgd2l0aCBhCnJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50OyB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50IHNheXMKdGhhdCBjb25zdF9pdGVyYXRvciBpcyBhbiBpdGVyYXRvciBwb2ludGluZyB0byBjb25zdCBUIGFuZCBpdGVyYXRvciBhbgppdGVyYXRvciBwb2ludGluZyB0byBULjwvcD4KCjxwPjIzLjEuMiBwYXJhZ3JhcGggMiBpbXBsaWVzIHRoYXQgdGhlIGtleXMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCB0bwpicmVhayB0aGUgb3JkZXJpbmcgb2YgZWxlbWVudHMuIEJ1dCB0aGF0IGlzIG5vdCBjbGVhcmx5CnNwZWNpZmllZC4gRXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZSBjdXJyZW50IHN0YW5kYXJkIHJlcXVpcmVzCnRoYXQgaXRlcmF0b3IgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgYmUgZGlmZmVyZW50IGZyb20KY29uc3RfaXRlcmF0b3IuIFNldCwgZm9yIGV4YW1wbGUsIGhhcyB0aGUgZm9sbG93aW5nOiA8L3A+Cgo8cD48dHQ+dHlwZWRlZiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGl0ZXJhdG9yOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIFNlZSBfbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNfPC90dD48L3A+Cgo8cD4yMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IGFjdHVhbGx5IHJlcXVpcmVzIHRoYXQgaXRlcmF0b3IgdHlwZSBwb2ludGluZwp0byBUICh0YWJsZSA2NSkuIERpc2FsbG93aW5nIHVzZXIgbW9kaWZpY2F0aW9uIG9mIGtleXMgYnkgY2hhbmdpbmcgdGhlCnN0YW5kYXJkIHRvIHJlcXVpcmUgYW4gaXRlcmF0b3IgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lciB0byBiZSB0aGUKc2FtZSBhcyBjb25zdF9pdGVyYXRvciB3b3VsZCBiZSBvdmVya2lsbCBzaW5jZSB0aGF0IHdpbGwgdW5uZWNlc3NhcmlseQpzaWduaWZpY2FudGx5IHJlc3RyaWN0IHRoZSB1c2FnZSBvZiBhc3NvY2lhdGl2ZSBjb250YWluZXIuIEEgY2xhc3MgdG8KYmUgdXNlZCBhcyBlbGVtZW50cyBvZiBzZXQsIGZvciBleGFtcGxlLCBjYW4gbm8gbG9uZ2VyIGJlIG1vZGlmaWVkCmVhc2lseSB3aXRob3V0IGVpdGhlciByZWRlc2lnbmluZyB0aGUgY2xhc3MgKHVzaW5nIG11dGFibGUgb24gZmllbGRzCnRoYXQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggb3JkZXJpbmcpLCBvciB1c2luZyBjb25zdF9jYXN0LCB3aGljaApkZWZlYXRzIHJlcXVpcmluZyBpdGVyYXRvciB0byBiZSBjb25zdF9pdGVyYXRvci4gVGhlIHByb3Bvc2VkIHNvbHV0aW9uCmdvZXMgaW4gbGluZSB3aXRoIHRydXN0aW5nIHVzZXIga25vd3Mgd2hhdCBoZSBpcyBkb2luZy4gPC9wPgoKPHA+PGI+T3RoZXIgT3B0aW9ucyBFdmFsdWF0ZWQ6PC9iPiA8L3A+Cgo8cD5PcHRpb24gQS4mbmJzcDsmbmJzcDsgSW4gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiwgcGFyYWdyYXBoIDIsIGFmdGVyCmZpcnN0IHNlbnRlbmNlLCBhbmQgYmVmb3JlICJJbiBhZGRpdGlvbiwuLi4iLCBhZGQgb25lIGxpbmU6CjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPk1vZGlmaWNhdGlvbiBvZiBrZXlzIHNoYWxsIG5vdCBjaGFuZ2UgdGhlaXIgc3RyaWN0IHdlYWsgb3JkZXJpbmcuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+T3B0aW9uIEIuJm5ic3A7QWRkIHRocmVlIG5ldyBzZW50ZW5jZXMgdG8gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCA1OiAiS2V5cyBpbiBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIKICBhcmUgaW1tdXRhYmxlLiIgQXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNjogIkZvcgogIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgd2hlcmUgdGhlIHZhbHVlIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGtleQogIHR5cGUsIGJvdGggPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZQogIGNvbnN0YW50IGl0ZXJhdG9ycy4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBvciBub3QKICA8dHQ+aXRlcmF0b3I8L3R0PiBhbmQgPHR0PmNvbnN0X2l0ZXJhdG9yPC90dD4gYXJlIHRoZSBzYW1lCiAgdHlwZS4iPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5PcHRpb24gQy4mbmJzcDtUbyAyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+LCBwYXJhZ3JhcGggMywgd2hpY2gKY3VycmVudGx5IHJlYWRzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSBwaHJhc2UgYGBlcXVpdmFsZW5jZSBvZiBrZXlzJycgbWVhbnMgdGhlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIGltcG9zZWQgYnkgdGhlCiAgY29tcGFyaXNvbiBhbmQgbm90IHRoZSBvcGVyYXRvcj09IG9uIGtleXMuIFRoYXQgaXMsIHR3byBrZXlzIGsxIGFuZCBrMiBpbiB0aGUgc2FtZQogIGNvbnRhaW5lciBhcmUgY29uc2lkZXJlZCB0byBiZSBlcXVpdmFsZW50IGlmIGZvciB0aGUgY29tcGFyaXNvbiBvYmplY3QgY29tcCwgY29tcChrMSwgazIpCiAgPT0gZmFsc2UgJmFtcDsmYW1wOyBjb21wKGsyLCBrMSkgPT0gZmFsc2UuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4mbmJzcDsgYWRkIHRoZSBmb2xsb3dpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Rm9yIGFueSB0d28ga2V5cyBrMSBhbmQgazIgaW4gdGhlIHNhbWUgY29udGFpbmVyLCBjb21wKGsxLCBrMikgc2hhbGwgcmV0dXJuIHRoZSBzYW1lCiAgdmFsdWUgd2hlbmV2ZXIgaXQgaXMgZXZhbHVhdGVkLiBbTm90ZTogSWYgazIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kIGxhdGVyCiAgcmVpbnNlcnRlZCwgY29tcChrMSwgazIpIG11c3Qgc3RpbGwgcmV0dXJuIGEgY29uc2lzdGVudCB2YWx1ZSBidXQgdGhpcyB2YWx1ZSBtYXkgYmUKICBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgdGhlIGZpcnN0IHRpbWUgazEgYW5kIGsyIHdlcmUgaW4gdGhlIHNhbWUgY29udGFpbmVyLiBUaGlzIGlzCiAgaW50ZW5kZWQgdG8gYWxsb3cgdXNhZ2UgbGlrZSBhIHN0cmluZyBrZXkgdGhhdCBjb250YWlucyBhIGZpbGVuYW1lLCB3aGVyZSBjb21wIGNvbXBhcmVzCiAgZmlsZSBjb250ZW50czsgaWYgazIgaXMgcmVtb3ZlZCwgdGhlIGZpbGUgaXMgY2hhbmdlZCwgYW5kIHRoZSBzYW1lIGsyIChmaWxlbmFtZSkgaXMKICByZWluc2VydGVkLCBjb21wKGsxLCBrMikgbXVzdCBhZ2FpbiByZXR1cm4gYSBjb25zaXN0ZW50IHZhbHVlIGJ1dCB0aGlzIHZhbHVlIG1heSBiZQogIGRpZmZlcmVudCB0aGFuIGl0IHdhcyB0aGUgcHJldmlvdXMgdGltZSBrMiB3YXMgaW4gdGhlIGNvbnRhaW5lci5dPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdG8gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBhdAp0aGUgaW5kaWNhdGVkIGxvY2F0aW9uOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkF0IHRoZSBlbmQgb2YgcGFyYWdyYXBoIDM6ICJGb3IgYW55IHR3byBrZXlzIGsxIGFuZCBrMiBpbiB0aGUgc2FtZSBjb250YWluZXIsCiAgY2FsbGluZyBjb21wKGsxLCBrMikgc2hhbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZQogIHZhbHVlLiI8L3A+CiAgPHA+QXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNTogIktleXMgaW4gYW4gYXNzb2NpYXRpdmUgY29udGFpbmVyIGFyZSBpbW11dGFibGUuIjwvcD4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCA2OiAiRm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgd2hlcmUgdGhlIHZhbHVlIHR5cGUgaXMgdGhlCiAgc2FtZSBhcyB0aGUga2V5IHR5cGUsIGJvdGggPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZSBjb25zdGFudAogIGl0ZXJhdG9ycy4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBvciBub3QgPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+CiAgYXJlIHRoZSBzYW1lIHR5cGUuIjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2V2ZXJhbCBhcmd1bWVudHMgd2VyZSBhZHZhbmNlZCBmb3IgYW5kIGFnYWluc3QgYWxsb3dpbmcgc2V0IGVsZW1lbnRzIHRvIGJlCm11dGFibGUgYXMgbG9uZyBhcyB0aGUgb3JkZXJpbmcgd2FzIG5vdCBlZmZlY3RlZC4gVGhlIGFyZ3VtZW50IHdoaWNoIHN3YXllZCB0aGUKTFdHIHdhcyBvbmUgb2Ygc2FmZXR5OyBpZiBlbGVtZW50cyB3ZXJlIG11dGFibGUsIHRoZXJlIHdvdWxkIGJlIG5vIGNvbXBpbGUtdGltZQp3YXkgdG8gZGV0ZWN0IG9mIGEgc2ltcGxlIHVzZXIgb3ZlcnNpZ2h0IHdoaWNoIGNhdXNlZCBvcmRlcmluZyB0byBiZQptb2RpZmllZC4gIFRoZXJlIHdhcyBhIHJlcG9ydCB0aGF0IHRoaXMgaGFkIGFjdHVhbGx5IGhhcHBlbmVkIGluIHByYWN0aWNlLAphbmQgaGFkIGJlZW4gcGFpbmZ1bCB0byBkaWFnbm9zZS4gIElmIHVzZXJzIG5lZWQgdG8gbW9kaWZ5IGVsZW1lbnRzLAppdCBpcyBwb3NzaWJsZSB0byB1c2UgbXV0YWJsZSBtZW1iZXJzIG9yIGNvbnN0X2Nhc3QuPC9wPgoKPHA+U2ltcGx5IHJlcXVpcmluZyB0aGF0IGtleXMgYmUgaW1tdXRhYmxlIGlzIG5vdCBzdWZmaWNpZW50LCBiZWNhdXNlIHRoZSBjb21wYXJpc29uCm9iamVjdCBtYXkgaW5kaXJlY3RseSAodmlhIHBvaW50ZXJzKSBvcGVyYXRlIG9uIHZhbHVlcyBvdXRzaWRlIG9mIHRoZSBrZXlzLjwvcD4KCjxwPgpUaGUgdHlwZXMgPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZSBwZXJtaXR0ZWQKdG8gYmUgZGlmZmVyZW50IHR5cGVzIHRvIGFsbG93IGZvciBwb3RlbnRpYWwgZnV0dXJlIHdvcmsgaW4gd2hpY2ggc29tZQptZW1iZXIgZnVuY3Rpb25zIG1pZ2h0IGJlIG92ZXJsb2FkZWQgYmV0d2VlbiB0aGUgdHdvIHR5cGVzLiAgTm8gc3VjaAptZW1iZXIgZnVuY3Rpb25zIGV4aXN0IG5vdywgYW5kIHRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB1c2VyIGZ1bmN0aW9uYWxpdHkKd2lsbCBub3QgYmUgaW1wYWlyZWQgYnkgcGVybWl0dGluZyB0aGUgdHdvIHR5cGVzIHRvIGJlIHRoZSBzYW1lLiAgQQpmdW5jdGlvbiB0aGF0IG9wZXJhdGVzIG9uIGJvdGggaXRlcmF0b3IgdHlwZXMgY2FuIGJlIGRlZmluZWQgZm9yIAo8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PiBhbG9uZSwgYW5kIGNhbiByZWx5IG9uIHRoZSBhdXRvbWF0aWMKY29udmVyc2lvbiBmcm9tIDx0dD5pdGVyYXRvcjwvdHQ+IHRvIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+Lgo8L3A+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgY3JhZnRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBhbmQgcmF0aW9uYWxlLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjEwNiI+PGgzPjEwNi4mbmJzcDtOdW1lcmljIGxpYnJhcnkgcHJpdmF0ZSBtZW1iZXJzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgubWVtYmVyLm9wcyI+IFtsaWIuY29tcGxleC5tZW1iZXIub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+VGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgd2hvbGUgc3RhbmRhcmQgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGhhcyB0byBkb2N1bWVudApzb21ldGhpbmcgcHJpdmF0ZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB0aGUgY29tbWVudCB3aGljaCBzYXlzICIvLyByZW1haW5kZXIgaW1wbGVtZW50YXRpb24gZGVmaW5lZCIgZnJvbToKPC9wPgoKPHVsPgogIDxsaT4yNi4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5tZW1iZXIub3BzIj4gW2xpYi5jb21wbGV4Lm1lbWJlci5vcHNdPC9hPgo8L2xpPgogIDxsaT4yNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC52YWx1ZS5vcHMiPiBbbGliLmNvbXBsZXgudmFsdWUub3BzXTwvYT4KPC9saT4KICA8bGk+MjYuMy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgudHJhbnNjZW5kZW50YWxzIj4gW2xpYi5jb21wbGV4LnRyYW5zY2VuZGVudGFsc108L2E+CjwvbGk+CiAgPGxpPjI2LjMuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jbXBseC5vdmVyIj4gW2xpYi5jbXBseC5vdmVyXTwvYT4KPC9saT4KPC91bD4KPGhyPgo8YSBuYW1lPSIxMDgiPjxoMz4xMDguJm5ic3A7TGlmZXRpbWUgb2YgZXhjZXB0aW9uOjp3aGF0KCkgcmV0dXJuIHVuc3BlY2lmaWVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudHlwZS5pbmZvIj4gW2xpYi50eXBlLmluZm9dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBRk5PUiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgo8cD5JbiAxOC42LjEsIHBhcmFncmFwaHMgOC05LCB0aGUgbGlmZXRpbWUgb2YgdGhlIHJldHVybiB2YWx1ZSBvZgpleGNlcHRpb246OndoYXQoKSBpcyBsZWZ0IHVuc3BlY2lmaWVkLiBUaGlzIGlzc3VlIGhhcyBpbXBsaWNhdGlvbnMKd2l0aCBleGNlcHRpb24gc2FmZXR5IG9mIGV4Y2VwdGlvbiBoYW5kbGluZzogc29tZSBleGNlcHRpb25zIHNob3VsZApub3QgdGhyb3cgYmFkX2FsbG9jLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gMTguNi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIudHlwZS5pbmZvIj4gW2xpYi50eXBlLmluZm9dPC9hPiBwYXJhZ3JhcGggOSAoZXhjZXB0aW9uOjp3aGF0IG5vdGVzCmNsYXVzZSkgdGhlIHNlbnRlbmNlOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSByZXR1cm4gdmFsdWUgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgZXhjZXB0aW9uIG9iamVjdCBmcm9tIHdoaWNoIGl0IGlzIG9idGFpbmVkIGlzCiAgZGVzdHJveWVkIG9yIGEgbm9uLWNvbnN0IG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBpcyBjYWxsZWQuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JZiBhbiBleGNlcHRpb24gb2JqZWN0IGhhcyBub24tY29uc3QgbWVtYmVycywgdGhleSBtYXkgYmUgdXNlZAp0byBzZXQgaW50ZXJuYWwgc3RhdGUgdGhhdCBzaG91bGQgYWZmZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nCnJldHVybmVkIGJ5IDx0dD53aGF0KCk8L3R0Pi4KPC9wPgo8aHI+CjxhIG5hbWU9IjEwOSI+PGgzPjEwOS4mbmJzcDtNaXNzaW5nIGJpbmRlcnMgZm9yIG5vbi1jb25zdCBzZXF1ZW5jZSBlbGVtZW50czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjUuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYXJpdGhtZXRpYy5vcGVyYXRpb25zIj4gW2xpYi5hcml0aG1ldGljLm9wZXJhdGlvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCamFybmUgU3Ryb3VzdHJ1cCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgoKPHA+VGhlcmUgYXJlIG5vIHZlcnNpb25zIG9mIGJpbmRlcnMgdGhhdCBhcHBseSB0byBub24tY29uc3QgZWxlbWVudHMKb2YgYSBzZXF1ZW5jZS4gVGhpcyBtYWtlcyBleGFtcGxlcyBsaWtlIGZvcl9lYWNoKCkgdXNpbmcgYmluZDJuZCgpIG9uCnBhZ2UgNTIxIG9mICJUaGUgQysrIFByb2dyYW1taW5nIExhbmd1YWdlICgzcmQpIgpub24tY29uZm9ybWluZy4gU3VpdGFibGUgdmVyc2lvbnMgb2YgdGhlIGJpbmRlcnMgbmVlZCB0byBiZSBhZGRlZC48L3A+Cgo8cD5GdXJ0aGVyIGRpc2N1c3Npb24gZnJvbSBOaWNvOjwvcD4KCjxwPldoYXQgaXMgcHJvYmFibHkgbWVhbnQgaGVyZSBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6PC9wPgoKPHByZT5jbGFzcyBFbGVtIHsgCiAgcHVibGljOiAKICAgIHZvaWQgcHJpbnQgKGludCBpKSBjb25zdCB7IH0gCiAgICB2b2lkIG1vZGlmeSAoaW50IGkpIHsgfSAKfTsgPC9wcmU+CjxwcmU+aW50IG1haW4oKSAKeyAKICAgIHZlY3RvciZsdDtFbGVtJmd0OyBjb2xsKDIpOyAKICAgIGZvcl9lYWNoIChjb2xsLmJlZ2luKCksIGNvbGwuZW5kKCksIGJpbmQybmQobWVtX2Z1bl9yZWYoJmFtcDtFbGVtOjpwcmludCksNDIpKTsgICAgLy8gT0sgCiAgICBmb3JfZWFjaCAoY29sbC5iZWdpbigpLCBjb2xsLmVuZCgpLCBiaW5kMm5kKG1lbV9mdW5fcmVmKCZhbXA7RWxlbTo6bW9kaWZ5KSw0MikpOyAgIC8vIEVSUk9SIAp9PC9wcmU+Cgo8cD5UaGUgZXJyb3IgcmVzdWx0cyBmcm9tIHRoZSBmYWN0IHRoYXQgYmluZDJuZCgpIHBhc3NlcyBpdHMgZmlyc3QKYXJndW1lbnQgKHRoZSBhcmd1bWVudCBvZiB0aGUgc2VxdWVuY2UpIGFzIGNvbnN0YW50IHJlZmVyZW5jZS4gU2VlIHRoZQpmb2xsb3dpbmcgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBPcGVyYXRpb24mZ3Q7IApjbGFzcyBiaW5kZXIybmQgCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb24mbHQ7dHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlJmd0OyB7IApwcm90ZWN0ZWQ6IAogIE9wZXJhdGlvbiBvcDsgCiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsgCnB1YmxpYzogCiAgYmluZGVyMm5kKGNvbnN0IE9wZXJhdGlvbiZhbXA7IG8sIAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJmFtcDsgdikgCiAgICAgIDogb3AobyksIHZhbHVlKHYpIHt9IDwvcHJlPgogIDxwcmU+IHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUgCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmYW1wOyB4KSBjb25zdCB7IAogICAgcmV0dXJuIG9wKHgsIHZhbHVlKTsgCiAgfSAKfTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIHNvbHV0aW9uIGlzIHRvIG92ZXJsb2FkIG9wZXJhdG9yICgpIG9mIGJpbmQybmQgZm9yIG5vbi1jb25zdGFudCBhcmd1bWVudHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgT3BlcmF0aW9uJmd0OyAKY2xhc3MgYmluZGVyMm5kIAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSZndDsgeyAKcHJvdGVjdGVkOiAKICBPcGVyYXRpb24gb3A7IAogIHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7IApwdWJsaWM6IAogIGJpbmRlcjJuZChjb25zdCBPcGVyYXRpb24mYW1wOyBvLCAKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHYpIAogICAgICA6IG9wKG8pLCB2YWx1ZSh2KSB7fSA8L3ByZT4KICA8cHJlPiB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlIAogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3QgeyAKICAgIHJldHVybiBvcCh4LCB2YWx1ZSk7IAogIH0gCiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSAKICBvcGVyYXRvcigpKHR5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0IHsgCiAgICByZXR1cm4gb3AoeCwgdmFsdWUpOyAKICB9IAp9OzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxiPkhvd2FyZCBiZWxpZXZlcyB0aGVyZSBpcyBhIGZsYXc8L2I+IGluIHRoaXMgcmVzb2x1dGlvbi4KU2VlIGMrK3N0ZC1saWItOTEyNy4gIFdlIG1heSBuZWVkIHRvIHJlb3BlbiB0aGlzIGlzc3VlLjwvcD4KCjxwPkluIDxmb250IGNvbG9yPSJyZWQiPjIwLjUuNi4xPC9mb250PiBpbiB0aGUgZGVjbGFyYXRpb24gb2YgYmluZGVyMXN0IGFmdGVyOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGU8YnI+CiAgJm5ic3A7b3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+aW5zZXJ0OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGU8YnI+CiAgJm5ic3A7b3BlcmF0b3IoKSh0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gPGZvbnQgY29sb3I9InJlZCI+MjAuNS42LjM8L2ZvbnQ+IGluIHRoZSBkZWNsYXJhdGlvbiBvZiBiaW5kZXIybmQgYWZ0ZXI6PC9wPgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZTxicj4KICAmbmJzcDtvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPmluc2VydDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkodHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBUaGUgTFdHIGRpc2N1c3NlZCB0aGlzIGF0IHNvbWUgbGVuZ3RoLkl0IHdhcyBhZ3JlZWQgdGhhdAp0aGlzIGlzIGEgbWlzdGFrZSBpbiB0aGUgZGVzaWduLCBidXQgdGhlcmUgd2FzIG5vIGNvbnNlbnN1cyBvbiB3aGV0aGVyCml0IHdhcyBhIGRlZmVjdCBpbiB0aGUgU3RhbmRhcmQuICBTdHJhdyB2b3RlOiBOQUQgLSA1LiAgQWNjZXB0CnByb3Bvc2VkIHJlc29sdXRpb24gLSAzLiAgTGVhdmUgb3BlbiAtIDYuXTwvaT48L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogSXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCB0aGlzIHdhcyBhIGRlZmVjdC4KU3RyYXAgcG9sbDogTkFEIC0gMC4gIEFjY2VwdCBwcm9wb3NlZCByZXNvbHV0aW9uIC0gMTAuIApMZWF2ZSBvcGVuIC0gMS5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMTEwIj48aDM+MTEwLiZuYnNwO2lzdHJlYW1idWZfaXRlcmF0b3I6OmVxdWFsIG5vdCBjb25zdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvciI+IFtsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcl08L2E+LCAyNC41LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWwiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IE9jdCAxOTk4PC9wPgo8cD5NZW1iZXIgaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDsmZ3Q7OjplcXVhbCBpcyBub3QgZGVjbGFyZWQKImNvbnN0IiwgeWV0IDI0LjUuMy42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjpvcD09Ij4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjpvcD09XTwvYT4gc2F5cyB0aGF0IG9wZXJhdG9yPT0sCndoaWNoIGlzIGNvbnN0LCBjYWxscyBpdC4gVGhpcyBpcyBjb250cmFkaWN0b3J5LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yXTwvYT4gYW5kIGFsc28gaW4gMjQuNS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbF08L2E+LApyZXBsYWNlOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+Ym9vbCBlcXVhbChpc3RyZWFtYnVmX2l0ZXJhdG9yJmFtcDsgYik7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5ib29sIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImYW1wOyBiKSBjb25zdDs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjExMiI+PGgzPjExMi4mbmJzcDtNaW5vciB0eXBvIGluIDx0dD5vc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4gY29uc3RydWN0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIub3N0cmVhbWJ1Zi5pdGVyLmNvbnMiPiBbbGliLm9zdHJlYW1idWYuaXRlci5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE9jdCAxOTk4PC9wPgo8cD5UaGUgPGI+cmVxdWlyZXM8L2I+IGNsYXVzZSBmb3IgPHR0Pm9zdHJlYW1idWZfaXRlcmF0b3I8L3R0PidzCmNvbnN0cnVjdG9yIGZyb20gYW4gPHR0Pm9zdHJlYW1fdHlwZTwvdHQ+ICgyNC41LjQuMSwgcGFyYWdyYXBoIDEpCnJlYWRzICI8aT5zPC9pPiBpcyBub3QgbnVsbCIuIEhvd2V2ZXIsIDxpPnM8L2k+IGlzIGEKcmVmZXJlbmNlLCBhbmQgcmVmZXJlbmNlcyBjYW4ndCBiZSBudWxsLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuNS40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW1idWYuaXRlci5jb25zIj4gW2xpYi5vc3RyZWFtYnVmLml0ZXIuY29uc108L2E+OjwvcD4KCjxwPk1vdmUgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIDEsIHdoaWNoIHJlYWRzICJSZXF1aXJlczogcyBpcyBub3QKbnVsbC4iLCBmcm9tIHRoZSBmaXJzdCBjb25zdHJ1Y3RvciB0byB0aGUgc2Vjb25kIGNvbnN0cnVjdG9yLjwvcD4KCjxwPkluc2VydCBhIG5ldyBwYXJhZ3JhcGggMSBSZXF1aXJlcyBjbGF1c2UgZm9yIHRoZSBmaXJzdCBjb25zdHJ1Y3RvcgpyZWFkaW5nOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjxiPlJlcXVpcmVzPC9iPjogPHR0PnMucmRidWYoKTwvdHQ+IGlzIG5vdCBudWxsLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjExNCI+PGgzPjExNC4mbmJzcDtQbGFjZW1lbnQgZm9ybXMgZXhhbXBsZSBpbiBlcnJvciB0d2ljZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjUuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5wbGFjZW1lbnQiPiBbbGliLm5ldy5kZWxldGUucGxhY2VtZW50XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7U3RldmUgQ2xhbWFnZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOCBPY3QgMTk5ODwvcD4KPHA+U2VjdGlvbiAxOC41LjEuMyBjb250YWlucyB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IDwvcD4KCjxwcmU+W0V4YW1wbGU6IFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nIGFuIG9iamVjdCBhdCBhIGtub3duIGFkZHJlc3M6CiAgICAgICAgY2hhciBwbGFjZVtzaXplb2YoU29tZXRoaW5nKV07CiAgICAgICAgU29tZXRoaW5nKiBwID0gbmV3IChwbGFjZSkgU29tZXRoaW5nKCk7CiAtZW5kIGV4YW1wbGVdPC9wcmU+Cgo8cD5GaXJzdCBjb2RlIGxpbmU6ICJwbGFjZSIgbmVlZCBub3QgaGF2ZSBhbnkgc3BlY2lhbCBhbGlnbm1lbnQsIGFuZCB0aGUKZm9sbG93aW5nIGNvbnN0cnVjdG9yIGNvdWxkIGZhaWwgZHVlIHRvIG1pc2FsaWduZWQgZGF0YS48L3A+Cgo8cD5TZWNvbmQgY29kZSBsaW5lOiBBcmVuJ3QgdGhlIHBhcmVucyBvbiBTb21ldGhpbmcoKSBpbmNvcnJlY3Q/Jm5ic3A7IFtEdWJsaW46IHRoZSBMV0cKYmVsaWV2ZXMgdGhlICgpIGFyZSBjb3JyZWN0Ll08L3A+Cgo8cD5FeGFtcGxlcyBhcmUgbm90IG5vcm1hdGl2ZSwgYnV0IG5ldmVydGhlbGVzcyBzaG91bGQgbm90IHNob3cgY29kZSB0aGF0IGlzIGludmFsaWQgb3IKbGlrZWx5IHRvIGZhaWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgdGhlIDx1PiBmaXJzdCBsaW5lIG9mIGNvZGU8L3U+IGluIHRoZSBleGFtcGxlIGluIAoxOC41LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUucGxhY2VtZW50Ij4gW2xpYi5uZXcuZGVsZXRlLnBsYWNlbWVudF08L2E+IHdpdGg6CjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+dm9pZCogcGxhY2UgPSBvcGVyYXRvciBuZXcoc2l6ZW9mKFNvbWV0aGluZykpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTE1Ij48aDM+MTE1LiZuYnNwO1R5cG8gaW4gc3Ryc3RyZWFtIGNvbnN0cnVjdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNy40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbS5jb25zIj4gW2RlcHIuc3Ryc3RyZWFtLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgTm92IDE5OTg8L3A+CjxwPkQuNy40LjEgc3Ryc3RyZWFtIGNvbnN0cnVjdG9ycyBwYXJhZ3JhcGggMiBzYXlzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyBzdHJzdHJlYW0sIGluaXRpYWxpemluZyB0aGUgYmFzZSBjbGFzcyB3aXRoCiAgaW9zdHJlYW0oJmFtcDsgc2IpIGFuZCBpbml0aWFsaXppbmcgc2Igd2l0aCBvbmUgb2YgdGhlIHR3byBjb25zdHJ1Y3RvcnM6IDwvcD4KICA8cD4tIElmIG1vZGUmYW1wO2FwcD09MCwgdGhlbiBzIHNoYWxsIGRlc2lnbmF0ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSBvZiBuCiAgZWxlbWVudHMuIFRoZSBjb25zdHJ1Y3RvciBpcyBzdHJzdHJlYW1idWYocywgbiwgcykuIDwvcD4KICA8cD4tIElmIG1vZGUmYW1wO2FwcD09MCwgdGhlbiBzIHNoYWxsIGRlc2lnbmF0ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSBvZiBuCiAgZWxlbWVudHMgdGhhdCBjb250YWlucyBhbiBOVEJTIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgZGVzaWduYXRlZCBieSBzLiBUaGUgY29uc3RydWN0b3IgaXMKICBzdHJzdHJlYW1idWYocywgbiwgcytzdGQ6OnN0cmxlbihzKSkuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5Ob3RpY2UgdGhlIHNlY29uZCBjb25kaXRpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0LiBJIHRoaW5rIHRoZSBzZWNvbmQgY29uZGl0aW9uCnNob3VsZCBiZSAiSWYgbW9kZSZhbXA7YXBwPT1hcHAiLCBvciAibW9kZSZhbXA7YXBwIT0wIiwgbWVhbmluZyB0aGF0CnRoZSBhcHBlbmQgYml0IGlzIHNldC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gRC43LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIub3N0cnN0cmVhbS5jb25zIj4gW2RlcHIub3N0cnN0cmVhbS5jb25zXTwvYT4gcGFyYWdyYXBoIDIgYW5kIEQuNy40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbS5jb25zIj4gW2RlcHIuc3Ryc3RyZWFtLmNvbnNdPC9hPgpwYXJhZ3JhcGggMiwgY2hhbmdlIHRoZSBmaXJzdCBjb25kaXRpb24gdG8gPHR0Pihtb2RlJmFtcDthcHApPT0wPC90dD4KYW5kIHRoZSBzZWNvbmQgY29uZGl0aW9uIHRvIDx0dD4obW9kZSZhbXA7YXBwKSE9MDwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIxMTciPjxoMz4xMTcuJm5ic3A7PHR0PmJhc2ljX29zdHJlYW08L3R0PiB1c2VzIG5vbmV4aXN0ZW50IDx0dD5udW1fcHV0PC90dD4gbWVtYmVyIGZ1bmN0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMi41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWMiPiBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgTm92IDE5OTg8L3A+CjxwPlRoZSA8Yj5lZmZlY3RzPC9iPiBjbGF1c2UgZm9yIG51bWVyaWMgaW5zZXJ0ZXJzIHNheXMgdGhhdAppbnNlcnRpb24gb2YgYSB2YWx1ZSA8dHQ+eDwvdHQ+LCB3aG9zZSB0eXBlIGlzIGVpdGhlciA8dHQ+Ym9vbDwvdHQ+LAo8dHQ+c2hvcnQ8L3R0PiwgPHR0PnVuc2lnbmVkIHNob3J0PC90dD4sIDx0dD5pbnQ8L3R0PiwgPHR0PnVuc2lnbmVkCmludDwvdHQ+LCA8dHQ+bG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQgbG9uZzwvdHQ+LCA8dHQ+ZmxvYXQ8L3R0PiwKPHR0PmRvdWJsZTwvdHQ+LCA8dHQ+bG9uZyBkb3VibGU8L3R0Piwgb3IgPHR0PmNvbnN0IHZvaWQqPC90dD4sIGlzCmRlbGVnYXRlZCB0byA8dHQ+bnVtX3B1dDwvdHQ+LCBhbmQgdGhhdCBpbnNlcnRpb24gaXMgcGVyZm9ybWVkIGFzIGlmCnRocm91Z2ggdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50OiA8L3A+Cgo8cHJlPmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7IAogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksIHZhbCkuIGZhaWxlZCgpOzwvcHJlPgoKPHA+VGhpcyBkb2Vzbid0IHdvcmssIGJlY2F1c2UgPHR0Pm51bV9wdXQmbHQ7Jmd0OzwvdHQ+OjpwdXQgaXMgb25seQpvdmVybG9hZGVkIGZvciB0aGUgdHlwZXMgPHR0PmJvb2w8L3R0PiwgPHR0Pmxvbmc8L3R0PiwgPHR0PnVuc2lnbmVkCmxvbmc8L3R0PiwgPHR0PmRvdWJsZTwvdHQ+LCA8dHQ+bG9uZyBkb3VibGU8L3R0PiwgYW5kIDx0dD5jb25zdAp2b2lkKjwvdHQ+LiBUaGF0IGlzLCB0aGUgY29kZSBmcmFnbWVudCBpbiB0aGUgc3RhbmRhcmQgaXMgaW5jb3JyZWN0CihpdCBpcyBkaWFnbm9zZWQgYXMgYW1iaWd1b3VzIGF0IGNvbXBpbGUgdGltZSkgZm9yIHRoZSB0eXBlcwo8dHQ+c2hvcnQ8L3R0PiwgPHR0PnVuc2lnbmVkIHNob3J0PC90dD4sIDx0dD5pbnQ8L3R0PiwgPHR0PnVuc2lnbmVkCmludDwvdHQ+LCBhbmQgPHR0PmZsb2F0PC90dD4uIDwvcD4KCjxwPldlIG11c3QgZWl0aGVyIGFkZCBuZXcgbWVtYmVyIGZ1bmN0aW9ucyB0byA8dHQ+bnVtX3B1dDwvdHQ+LCBvcgplbHNlIGNoYW5nZSB0aGUgZGVzY3JpcHRpb24gaW4gPHR0Pm9zdHJlYW08L3R0PiBzbyB0aGF0IGl0IG9ubHkgY2FsbHMKZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IHRoZXJlLiBJIHByZWZlciB0aGUgbGF0dGVyLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAyNy42LjIuNS4yLCBwYXJhZ3JhcGggMSB3aXRoIHRoZSBmb2xsb3dpbmc6IDwvcD4KCjxibG9ja3F1b3RlPgo8cD4KVGhlIGNsYXNzZXMgbnVtX2dldCZsdDsmZ3Q7IGFuZCBudW1fcHV0Jmx0OyZndDsgaGFuZGxlIGxvY2FsZa1kZXBlbmRlbnQgbnVtZXJpYwpmb3JtYXR0aW5nIGFuZCBwYXJzaW5nLiAgVGhlc2UgaW5zZXJ0ZXIgZnVuY3Rpb25zIHVzZSB0aGUgaW1idWVkCmxvY2FsZSB2YWx1ZSB0byBwZXJmb3JtIG51bWVyaWMgZm9ybWF0dGluZy4gIFdoZW4gdmFsIGlzIG9mIHR5cGUgYm9vbCwKbG9uZywgdW5zaWduZWQgbG9uZywgZG91YmxlLCBsb25nIGRvdWJsZSwgb3IgY29uc3Qgdm9pZCosIHRoZQpmb3JtYXR0aW5nIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIGl0IHBlcmZvcm1lZCB0aGUgZm9sbG93aW5nIGNvZGUKZnJhZ21lbnQ6CjwvcD4KCjxwcmU+Ym9vbCBmYWlsZWQgPSB1c2VfZmFjZXQmbHQ7CiAgIG51bV9wdXQmbHQ7Y2hhclQsb3N0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsKICAgJmd0OyhnZXRsb2MoKSkucHV0KCp0aGlzLCAqdGhpcywgZmlsbCgpLCB2YWwpLiBmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSBzaG9ydCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdApwZXJmb3JtZWQgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmlvc19iYXNlOjpmbXRmbGFncyBiYXNlZmxhZ3MgPSBpb3NfYmFzZTo6ZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6YmFzZWZpZWxkOwpib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksCiAgICAgIGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6b2N0IHx8IGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6aGV4CiAgICAgICAgID8gc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsoc3RhdGljX2Nhc3QmbHQ7dW5zaWduZWQgc2hvcnQmZ3Q7KHZhbCkpCiAgICAgICAgIDogc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsodmFsKSkuIGZhaWxlZCgpOwo8L3ByZT4KCjxwPgpXaGVuIHZhbCBpcyBvZiB0eXBlIGludCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdCBwZXJmb3JtZWQKdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmlvc19iYXNlOjpmbXRmbGFncyBiYXNlZmxhZ3MgPSBpb3NfYmFzZTo6ZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6YmFzZWZpZWxkOwpib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksCiAgICAgIGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6b2N0IHx8IGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6aGV4CiAgICAgICAgID8gc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsoc3RhdGljX2Nhc3QmbHQ7dW5zaWduZWQgaW50Jmd0Oyh2YWwpKQogICAgICAgICA6IHN0YXRpY19jYXN0Jmx0O2xvbmcmZ3Q7KHZhbCkpLiBmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSB1bnNpZ25lZCBzaG9ydCBvciB1bnNpZ25lZCBpbnQgdGhlIGZvcm1hdHRpbmcgY29udmVyc2lvbgpvY2N1cnMgYXMgaWYgaXQgcGVyZm9ybWVkIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKPC9wPgoKPHByZT5ib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksIHN0YXRpY19jYXN0Jmx0O3Vuc2lnbmVkIGxvbmcmZ3Q7KHZhbCkpLgpmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSBmbG9hdCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdApwZXJmb3JtZWQgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7CiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwgc3RhdGljX2Nhc3QmbHQ7ZG91YmxlJmd0Oyh2YWwpKS4KZmFpbGVkKCk7CjwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtVG9yb250bzogVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIHByb3Bvc2VkCnJlc29sdXRpb247IFBKUCBwcm92aWRlZCB0aGUgbmV3IHdvcmRpbmcuICBUaGUgZGlmZmVyZW5jZXMgYXJlIGluCnNpZ25lZCBzaG9ydCBhbmQgaW50IG91dHB1dC5dPC9pPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyB0byBjYXN0IGludCBhbmQgc2hvcnQgdG8gbG9uZywKdW5zaWduZWQgaW50IGFuZCB1bnNpZ25lZCBzaG9ydCB0byB1bnNpZ25lZCBsb25nLCBhbmQgZmxvYXQgdG8gZG91YmxlLAp0aHVzIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHVzZSBub25leGlzdGVudCBudW1fcHV0Jmx0OyZndDsKbWVtYmVyIGZ1bmN0aW9ucy4gIFRoZSBjdXJyZW50IHByb3Bvc2VkIHJlc29sdXRpb24gaXMgbW9yZQpjb21wbGljYXRlZCwgYnV0IGdpdmVzIG1vcmUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgaGV4IGFuZCBvY3RhbCBvdXRwdXQKb2Ygc2lnbmVkIHNob3J0IGFuZCBzaWduZWQgaW50LiAgKE9uIGEgc3lzdGVtIHdpdGggMTYtYml0IHNob3J0LCBmb3IKZXhhbXBsZSwgcHJpbnRpbmcgc2hvcnQoLTEpIGluIGhleCBmb3JtYXQgc2hvdWxkIHlpZWxkIDB4ZmZmZi4pPC9wPgo8aHI+CjxhIG5hbWU9IjExOCI+PGgzPjExOC4mbmJzcDs8dHQ+YmFzaWNfaXN0cmVhbTwvdHQ+IHVzZXMgbm9uZXhpc3RlbnQgPHR0Pm51bV9nZXQ8L3R0PiBtZW1iZXIgZnVuY3Rpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpYyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBOb3YgMTk5ODwvcD4KPHA+Rm9ybWF0dGVkIGlucHV0IGlzIGRlZmluZWQgZm9yIHRoZSB0eXBlcyA8dHQ+c2hvcnQ8L3R0PiwgPHR0PnVuc2lnbmVkIHNob3J0PC90dD4sIDx0dD5pbnQ8L3R0PiwKPHR0PnVuc2lnbmVkIGludDwvdHQ+LCA8dHQ+bG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQgbG9uZzwvdHQ+LCA8dHQ+ZmxvYXQ8L3R0PiwgPHR0PmRvdWJsZTwvdHQ+LAo8dHQ+bG9uZyBkb3VibGU8L3R0PiwgPHR0PmJvb2w8L3R0PiwgYW5kIDx0dD52b2lkKjwvdHQ+LiBBY2NvcmRpbmcgdG8gc2VjdGlvbiAyNy42LjEuMi4yLApmb3JtYXR0ZWQgaW5wdXQgb2YgYSB2YWx1ZSA8dHQ+eDwvdHQ+IGlzIGRvbmUgYXMgaWYgYnkgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50OiA8L3A+Cgo8cHJlPnR5cGVkZWYgbnVtX2dldCZsdDsgY2hhclQsaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsgbnVtZ2V0OyAKaW9zdGF0ZSBlcnIgPSAwOyAKdXNlX2ZhY2V0Jmx0OyBudW1nZXQgJmd0Oyhsb2MpLmdldCgqdGhpcywgMCwgKnRoaXMsIGVyciwgdmFsKTsgCnNldHN0YXRlKGVycik7PC9wcmU+Cgo8cD5BY2NvcmRpbmcgdG8gc2VjdGlvbiAyMi4yLjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLmdldC5tZW1iZXJzIj4gW2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnNdPC9hPiwgaG93ZXZlciwKPHR0Pm51bV9nZXQmbHQ7Jmd0Ozo6Z2V0KCk8L3R0PiBpcyBvbmx5IG92ZXJsb2FkZWQgZm9yIHRoZSB0eXBlcwo8dHQ+Ym9vbDwvdHQ+LCA8dHQ+bG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQgc2hvcnQ8L3R0PiwgPHR0PnVuc2lnbmVkCmludDwvdHQ+LCA8dHQ+dW5zaWduZWQgbG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQgbG9uZzwvdHQ+LAo8dHQ+ZmxvYXQ8L3R0PiwgPHR0PmRvdWJsZTwvdHQ+LCA8dHQ+bG9uZyBkb3VibGU8L3R0PiwgYW5kCjx0dD52b2lkKjwvdHQ+LiBDb21wYXJpbmcgdGhlIGxpc3RzIGZyb20gdGhlIHR3byBzZWN0aW9ucywgd2UgZmluZAp0aGF0IDI3LjYuMS4yLjIgaXMgdXNpbmcgYSBub25leGlzdGVudCBmdW5jdGlvbiBmb3IgdHlwZXMKPHR0PnNob3J0PC90dD4gYW5kIDx0dD5pbnQ8L3R0Pi4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWNdPC9hPiBBcml0aG1ldGljIEV4dHJhY3RvcnMsIHJlbW92ZSB0aGUKdHdvIGxpbmVzICgxc3QgYW5kIDNyZCkgd2hpY2ggcmVhZDo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+b3BlcmF0b3ImZ3Q7Jmd0OyhzaG9ydCZhbXA7IHZhbCk7Ci4uLgpvcGVyYXRvciZndDsmZ3Q7KGludCZhbXA7IHZhbCk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkFuZCBhZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHRoYXQgc2VjdGlvbiAoMjcuNi4xLjIuMikgOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+b3BlcmF0b3ImZ3Q7Jmd0OyhzaG9ydCZhbXA7IHZhbCk7PC9wcmU+CiAgPHA+VGhlIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIHBlcmZvcm1lZCBieSB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQgKHVzaW5nCiAgdGhlIHNhbWUgbm90YXRpb24gYXMgZm9yIHRoZSBwcmVjZWRpbmcgY29kZSBmcmFnbWVudCk6PC9wPgogIDxwcmU+ICB0eXBlZGVmIG51bV9nZXQmbHQ7IGNoYXJULGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7IG51bWdldDsKICBpb3N0YXRlIGVyciA9IDA7CiAgbG9uZyBsdmFsOwogIHVzZV9mYWNldCZsdDsgbnVtZ2V0ICZndDsobG9jKS5nZXQoKnRoaXMsIDAsICp0aGlzLCBlcnIsIGx2YWwpOwogICAgICAgIGlmIChlcnIgPT0gMAogICAgICAgICAgICAgICAgJmFtcDsmYW1wOyAobHZhbCAmbHQ7IG51bWVyaWNfbGltaXRzJmx0O3Nob3J0Jmd0Ozo6bWluKCkgfHwgbnVtZXJpY19saW1pdHMmbHQ7c2hvcnQmZ3Q7OjptYXgoKSAmbHQ7IGx2YWwpKQogICAgICAgICAgICAgICAgZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgc2V0c3RhdGUoZXJyKTs8L3ByZT4KICA8cHJlPm9wZXJhdG9yJmd0OyZndDsoaW50JmFtcDsgdmFsKTs8L3ByZT4KICA8cD5UaGUgY29udmVyc2lvbiBvY2N1cnMgYXMgaWYgcGVyZm9ybWVkIGJ5IHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudCAodXNpbmcKICB0aGUgc2FtZSBub3RhdGlvbiBhcyBmb3IgdGhlIHByZWNlZGluZyBjb2RlIGZyYWdtZW50KTo8L3A+CiAgPHByZT4gIHR5cGVkZWYgbnVtX2dldCZsdDsgY2hhclQsaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsgbnVtZ2V0OwogIGlvc3RhdGUgZXJyID0gMDsKICBsb25nIGx2YWw7CiAgdXNlX2ZhY2V0Jmx0OyBudW1nZXQgJmd0Oyhsb2MpLmdldCgqdGhpcywgMCwgKnRoaXMsIGVyciwgbHZhbCk7CiAgICAgICAgaWYgKGVyciA9PSAwCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IChsdmFsICZsdDsgbnVtZXJpY19saW1pdHMmbHQ7aW50Jmd0Ozo6bWluKCkgfHwgbnVtZXJpY19saW1pdHMmbHQ7aW50Jmd0Ozo6bWF4KCkgJmx0OyBsdmFsKSkKICAgICAgICAgICAgICAgIGVyciA9IGlvc19iYXNlOjpmYWlsYml0OwogIHNldHN0YXRlKGVycik7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltQb3N0LVRva3lvOiBQSlAgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTE5Ij48aDM+MTE5LiZuYnNwO1Nob3VsZCB2aXJ0dWFsIGZ1bmN0aW9ucyBiZSBhbGxvd2VkIHRvIHN0cmVuZ3RoZW4gdGhlIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPlNlY3Rpb24gMTcuNC40LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZyI+IFtsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ108L2E+IHN0YXRlczogPC9wPgoKPHA+IkFuIGltcGxlbWVudGF0aW9uIG1heSBzdHJlbmd0aGVuIHRoZSBleGNlcHRpb24tc3BlY2lmaWNhdGlvbgpmb3IgYSBmdW5jdGlvbiBieSByZW1vdmluZyBsaXN0ZWQgZXhjZXB0aW9ucy4iIDwvcD4KCjxwPlRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgYW4gaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0byBkbyB0aGlzIGZvcgp2aXJ0dWFsIGZ1bmN0aW9ucywgdGhlbiBhIGxpYnJhcnkgdXNlciBjYW5ub3Qgd3JpdGUgYSBjbGFzcyB0aGF0CnBvcnRhYmx5IGRlcml2ZXMgZnJvbSB0aGF0IGNsYXNzLiA8L3A+Cgo8cD5Gb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBub3QgY29tcGlsZSBpZiBpb3NfYmFzZTo6ZmFpbHVyZTo6fmZhaWx1cmUKaGFkIGFuIGVtcHR5IGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uOiA8L3A+Cgo8cHJlPiNpbmNsdWRlICZsdDtpb3MmZ3Q7CiNpbmNsdWRlICZsdDtzdHJpbmcmZ3Q7CgpjbGFzcyBEIDogcHVibGljIHN0ZDo6aW9zX2Jhc2U6OmZhaWx1cmUgewpwdWJsaWM6CiAgICAgICAgRChjb25zdCBzdGQ6OnN0cmluZyZhbXA7KTsKICAgICAgICB+RCgpOyAvLyBlcnJvciAtIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIAogICAgICAgICAgICAgIC8vIG92ZXJyaWRkZW4gdmlydHVhbCBmdW5jdGlvbiBpb3NfYmFzZTo6ZmFpbHVyZTo6fmZhaWx1cmUoKQp9OzwvcHJlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBTZWN0aW9uIDE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiBmcm9tOjwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAibWF5IHN0cmVuZ3RoZW4gdGhlCmV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIGZvciBhIGZ1bmN0aW9uIjwvcD4KCjxwPnRvOjwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAibWF5IHN0cmVuZ3RoZW4gdGhlCmV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIGZvciBhIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIi4gPC9wPgo8aHI+CjxhIG5hbWU9IjEyMCI+PGgzPjEyMC4mbmJzcDtDYW4gYW4gaW1wbGVtZW50b3IgYWRkIHNwZWNpYWxpemF0aW9ucz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXNlcnZlZC5uYW1lcyI+IFtsaWIucmVzZXJ2ZWQubmFtZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+Cgo8cD5UaGUgb3JpZ2luYWwgaXNzdWUgYXNrZWQgd2hldGhlciBhIGxpYnJhcnkgaW1wbGVtZW50b3IgY291bGQKc3BlY2lhbGl6ZSBzdGFuZGFyZCBsaWJyYXJ5IHRlbXBsYXRlcyBmb3IgYnVpbHQtaW4gdHlwZXMuICAoVGhpcyB3YXMKYW4gaXNzdWUgYmVjYXVzZSB1c2VycyBhcmUgcGVybWl0dGVkIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUKc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXMuKTwvcD4KCjxwPlNwZWNpYWxpemF0aW9ucyBhcmUgbm8gbG9uZ2VyIGEgcHJvYmxlbSwgYmVjYXVzZSBvZiB0aGUgcmVzb2x1dGlvbgp0byBjb3JlIGlzc3VlIDI1OS4gIFVuZGVyIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLCBpdCB3aWxsIGJlIGxlZ2FsCmZvciBhIHRyYW5zbGF0aW9uIHVuaXQgdG8gY29udGFpbiBib3RoIGEgc3BlY2lhbGl6YXRpb24gYW5kIGFuCmV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgdGhlIHNhbWUgdGVtcGxhdGUsIHByb3ZpZGVkIHRoYXQgdGhlCnNwZWNpYWxpemF0aW9uIGNvbWVzIGZpcnN0LiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBleHBsaWNpdAppbnN0YW50aWF0aW9uIHdpbGwgYmUgaWdub3JlZC4gIEZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiBsaWJyYXJ5IGlzc3VlCjEyMCBhc3N1bWVzIHRoYXQgdGhlIGNvcmUgMjU5IHJlc29sdXRpb24gd2lsbCBiZSBhZG9wdGVkLjwvcD4KCjxwPkhvd2V2ZXIsIGFzIG5vdGVkIGluIGxpYi03MDQ3LCBvbmUgcGllY2Ugb2YgdGhpcyBpc3N1ZSBzdGlsbApyZW1haW5zOiB3aGF0IGhhcHBlbnMgaWYgYSBzdGFuZGFyZCBsaWJyYXJ5IGltcGxlbWVudG9yIGV4cGxpY2l0bHkKaW5zdGFudGlhdGVzIGEgc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXM/ICBJdCdzIGlsbGVnYWwgZm9yIGEgcHJvZ3JhbQp0byBjb250YWluIHR3byBkaWZmZXJlbnQgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNhbWUgdGVtcGxhdGUKZm9yIHRoZSBzYW1lIHR5cGUgaW4gdHdvIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB1bml0cyAoT0RSIHZpb2xhdGlvbiksCmFuZCB0aGUgY29yZSB3b3JraW5nIGdyb3VwIGRvZXNuJ3QgYmVsaWV2ZSBpdCBpcyBwcmFjdGljYWwgdG8gcmVsYXgKdGhhdCByZXN0cmljdGlvbi48L3A+Cgo8cD5UaGUgaXNzdWUsIHRoZW4sIGlzOiBhcmUgdXNlcnMgYWxsb3dlZCB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlCnN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGZvciBub24tdXNlciBkZWZpbmVkIHR5cGVzPyAgVGhlIHN0YXR1cyBxdW8KYW5zd2VyIGlzICd5ZXMnLiAgQ2hhbmdpbmcgaXQgdG8gJ25vJyB3b3VsZCBnaXZlIGxpYnJhcnkgaW1wbGVtZW50b3JzCm1vcmUgZnJlZWRvbS48L3A+Cgo8cD5UaGlzIGlzIGFuIGlzc3VlIGJlY2F1c2UsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBsaWJyYXJ5CmltcGxlbWVudG9ycyBvZnRlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgc3RhbmRhcmQgbGlicmFyeQp0ZW1wbGF0ZXMuICAoZm9yIGV4YW1wbGUsIHN0ZDo6YmFzaWNfc3RyaW5nJmx0O2NoYXImZ3Q7KSAgRG9lcyBnaXZpbmcKdXNlcnMgZnJlZWRvbSB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGZvcgpub24tdXNlciBkZWZpbmVkIHR5cGVzIG1ha2UgaXQgaW1wb3NzaWJsZSBvciBwYWluZnVsbHkgZGlmZmljdWx0IGZvcgpsaWJyYXJ5IGltcGxlbWVudG9ycyB0byBkbyB0aGlzPzwvcD4KCjxwPkpvaG4gU3BpY2VyIHN1Z2dlc3RzLCBpbiBsaWItODk1NywgdGhhdCBsaWJyYXJ5IGltcGxlbWVudG9ycyBoYXZlIGEKbWVjaGFuaXNtIHRoZXkgY2FuIHVzZSBmb3IgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgdGhhdCBkb2Vzbid0CnByZXZlbnQgdXNlcnMgZnJvbSBwZXJmb3JtaW5nIHRoZWlyIG93biBleHBsaWNpdCBpbnN0YW50aWF0aW9uczogcHV0CmVhY2ggZXhwbGljaXQgaW5zdGFudGlhdGlvbiBpbiBpdHMgb3duIG9iamVjdCBmaWxlLiAgKERpZmZlcmVudApzb2x1dGlvbnMgbWlnaHQgYmUgbmVjZXNzYXJ5IGZvciBVbml4IERTT3Mgb3IgTVMtV2luZG93cyBETExzLikgIE9uCnNvbWUgcGxhdGZvcm1zLCBsaWJyYXJ5IGltcGxlbWVudG9ycyBtaWdodCBub3QgbmVlZCB0byBkbyBhbnl0aGluZwpzcGVjaWFsOiB0aGUgInVuZGVmaW5lZCBiZWhhdmlvciIgdGhhdCByZXN1bHRzIGZyb20gaGF2aW5nIHR3bwpkaWZmZXJlbnQgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgbWlnaHQgYmUgaGFybWxlc3MuPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogIDxwPkFwcGVuZCB0byAxNy40LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXNlcnZlZC5uYW1lcyI+IFtsaWIucmVzZXJ2ZWQubmFtZXNdPC9hPiBwYXJhZ3JhcGggMTogPC9wPgogIDxibG9ja3F1b3RlPgogICAgQSBwcm9ncmFtIG1heSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGFueSB0ZW1wbGF0ZXMgaW4gdGhlIHN0YW5kYXJkCiAgICBsaWJyYXJ5IG9ubHkgaWYgdGhlIGRlY2xhcmF0aW9uIGRlcGVuZHMgb24gdGhlIG5hbWUgb2YgYSB1c2VyLWRlZmluZWQKICAgIHR5cGUgb2YgZXh0ZXJuYWwgbGlua2FnZSBhbmQgdGhlIGluc3RhbnRpYXRpb24gbWVldHMgdGhlIHN0YW5kYXJkIGxpYnJhcnkKICAgIHJlcXVpcmVtZW50cyBmb3IgdGhlIG9yaWdpbmFsIHRlbXBsYXRlLgogIDwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBjaGFuZ2VkIHRoZSB3b3JkaW5nIGZyb20gImEgdXNlci1kZWZpbmVkIG5hbWUiIHRvICJ0aGUgbmFtZSBvZgogIGEgdXNlci1kZWZpbmVkIHR5cGUiXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBjb25zaWRlcmVkIGFub3RoZXIgcG9zc2libGUgcmVzb2x1dGlvbjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkluIGxpZ2h0IG9mIHRoZSByZXNvbHV0aW9uIHRvIGNvcmUgaXNzdWUgMjU5LCBubyBub3JtYXRpdmUgY2hhbmdlcwogIGluIHRoZSBsaWJyYXJ5IGNsYXVzZXMgYXJlIG5lY2Vzc2FyeS4gIEFkZCB0aGUgZm9sbG93aW5nIG5vbi1ub3JtYXRpdmUKICBub3RlIHRvIHRoZSBlbmQgb2YgMTcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzZXJ2ZWQubmFtZXMiPiBbbGliLnJlc2VydmVkLm5hbWVzXTwvYT4gcGFyYWdyYXBoIDE6PC9wPgogIDxibG9ja3F1b3RlPgogICAgWzxpPk5vdGU6PC9pPiBBIHByb2dyYW0gbWF5IGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgc3RhbmRhcmQgbGlicmFyeQogICAgdGVtcGxhdGVzLCBldmVuIHdoZW4gYW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbiBkb2VzIG5vdCBkZXBlbmQgb24KICAgIGEgdXNlci1kZWZpbmVkIG5hbWUuIDxpPi0tZW5kIG5vdGU8L2k+XQogIDwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIExXRyByZWplY3RlZCB0aGlzIGJlY2F1c2UgaXQgd2FzIGJlbGlldmVkIHRoYXQgaXQgd291bGQgbWFrZQogIGl0IHVubmVjZXNzYXJpbHkgZGlmZmljdWx0IGZvciBsaWJyYXJ5IGltcGxlbWVudG9ycyB0byB3cml0ZQogIGhpZ2gtcXVhbGl0eSBpbXBsZW1lbnRhdGlvbnMuICBBIHByb2dyYW0gbWF5IG5vdCBpbmNsdWRlIGFuCiAgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBvZiB0aGUgc2FtZSB0ZW1wbGF0ZSwgZm9yIHRoZSBzYW1lIHRlbXBsYXRlCiAgYXJndW1lbnRzLCBpbiB0d28gZGlmZmVyZW50IHRyYW5zbGF0aW9uIHVuaXRzLiAgSWYgdXNlcnMgYXJlCiAgYWxsb3dlZCB0byBwcm92aWRlIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIG9mIFN0YW5kYXJkIExpYnJhcnkKICB0ZW1wbGF0ZXMgZm9yIGJ1aWx0LWluIHR5cGVzLCB0aGVuIGxpYnJhcnkgaW1wbGVtZW50b3JzIGFyZW4ndCwKICBhdCBsZWFzdCBub3Qgd2l0aG91dCBub25wb3J0YWJsZSB0cmlja3MuPC9wPgoKPHA+VGhlIG1vc3Qgc2VyaW91cyBwcm9ibGVtIGlzIGEgY2xhc3MgdGVtcGxhdGUgdGhhdCBoYXMgd3JpdGVhYmxlCiAgc3RhdGljIG1lbWJlciB2YXJpYWJsZXMuICBVbmZvcnR1bmF0ZWx5LCBzdWNoIGNsYXNzIHRlbXBsYXRlcyBhcmUKICBpbXBvcnRhbnQgYW5kLCBpbiBleGlzdGluZyBTdGFuZGFyZCBMaWJyYXJ5IGltcGxlbWVudGF0aW9ucywgYXJlCiAgb2Z0ZW4gZXhwbGljaXRseSBzcGVjaWFsaXplZCBieSBsaWJyYXJ5IGltcGxlbWVudG9yczogbG9jYWxlIGZhY2V0cywKICB3aGljaCBoYXZlIGEgd3JpdGVhYmxlIHN0YXRpYyBtZW1iZXIgdmFyaWFibGUgPHR0PmlkPC90dD4uICBJZiBhCiAgdXNlcidzIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gY29sbGlkZWQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb25zCiAgZXhwbGljaXQgaW5zdGFudGlhdGlvbiwgaW9zdHJlYW0gaW5pdGlhbGl6YXRpb24gY291bGQgY2F1c2UgbG9jYWxlcwogIHRvIGJlIGNvbnN0cnVjdGVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS48L3A+Cgo8cD5PbmUgcHJvcG9zZWQgaW1wbGVtZW50YXRpb24gdGVjaG5pcXVlIHdhcyBmb3IgU3RhbmRhcmQgTGlicmFyeQogIGltcGxlbWVudG9ycyB0byBwcm92aWRlIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGluIHNlcGFyYXRlIG9iamVjdAogIGZpbGVzLCBzbyB0aGF0IHRoZXkgd291bGQgbm90IGJlIHBpY2tlZCB1cCBieSB0aGUgbGlua2VyIHdoZW4gdGhlCiAgdXNlciBhbHNvIHByb3ZpZGVzIGFuIGV4cGxpY2l0IGluc3RhbnRpYXRpb24uICBIb3dldmVyLCB0aGlzCiAgdGVjaG5pcXVlIG9ubHkgYXBwbGllcyBmb3IgU3RhbmRhcmQgTGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgdGhhdAogIGFyZSBwYWNrYWdlZCBhcyBzdGF0aWMgYXJjaGl2ZXMuICBNb3N0IFN0YW5kYXJkIExpYnJhcnkKICBpbXBsZW1lbnRhdGlvbnMgbm93YWRheXMgYXJlIHBhY2thZ2VkIGFzIGR5bmFtaWMgbGlicmFyaWVzLCBzbyB0aGlzCiAgdGVjaG5pcXVlIHdvdWxkIG5vdCBhcHBseS48L3A+Cgo8cD5UaGUgQ29tbWl0dGVlIGlzIG5vdyBjb25zaWRlcmluZyBzdGFuZGFyZGl6YXRpb24gb2YgZHluYW1pYwogIGxpbmtpbmcuICBJZiB0aGVyZSBhcmUgc3VjaCBjaGFuZ2VzIGluIHRoZSBmdXR1cmUsIGl0IG1heSBiZQogIGFwcHJvcHJpYXRlIHRvIHJldmlzaXQgdGhpcyBpc3N1ZSBsYXRlci48L3A+Cjxocj4KPGEgbmFtZT0iMTIyIj48aDM+MTIyLiZuYnNwO3N0cmVhbWJ1Zi93c3RyZWFtYnVmIGRlc2NyaXB0aW9uIHNob3VsZCBub3Qgc2F5IHRoZXkgYXJlIHNwZWNpYWxpemF0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmIj4gW2xpYi5zdHJlYW1idWZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPlNlY3Rpb24gMjcuNS4yIGRlc2NyaWJlcyB0aGUgc3RyZWFtYnVmIGNsYXNzZXMgdGhpcyB3YXk6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+VGhlIGNsYXNzIHN0cmVhbWJ1ZiBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWYKc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGNoYXIuIDwvcD4KCjxwPlRoZSBjbGFzcyB3c3RyZWFtYnVmIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgdGhlIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgpzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgd2NoYXJfdC4gPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+VGhpcyBpbXBsaWVzIHRoYXQgdGhlc2UgY2xhc3NlcyBtdXN0IGJlIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucywgbm90IHR5cGVkZWZzLiA8L3A+Cgo8cD5JdCBkb2Vzbid0IHNlZW0gdGhpcyB3YXMgaW50ZW5kZWQsIHNpbmNlIFNlY3Rpb24gMjcuNSBoYXMgdGhlbSBkZWNsYXJlZCBhcyB0eXBlZGVmcy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSAyNy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1ZiI+IFtsaWIuc3RyZWFtYnVmXTwvYT4gcGFyYWdyYXBocyAyIGFuZCAzICh0aGUgYWJvdmUgdHdvCnNlbnRlbmNlcykuIDwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSA8dHQ+c3RyZWFtYnVmPC90dD4gIHN5bm9wc2lzIGFscmVhZHkgaGFzIGEgZGVjbGFyYXRpb24gZm9yIHRoZQp0eXBlZGVmcyBhbmQgdGhhdCBpcyBzdWZmaWNpZW50LiA8L3A+Cjxocj4KPGEgbmFtZT0iMTIzIj48aDM+MTIzLiZuYnNwO1Nob3VsZCB2YWxhcnJheSBoZWxwZXIgYXJyYXlzIGZpbGwgZnVuY3Rpb25zIGJlIGNvbnN0PzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjUuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnNsaWNlLmFyci5maWxsIj4gW2xpYi5zbGljZS5hcnIuZmlsbF08L2E+LCAyNi41LjcuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5nc2xpY2UuYXJyYXkuZmlsbCI+IFtsaWIuZ3NsaWNlLmFycmF5LmZpbGxdPC9hPiwgMjYuNS44LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubWFzay5hcnJheS5maWxsIj4gW2xpYi5tYXNrLmFycmF5LmZpbGxdPC9hPiwgMjYuNS45LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuaW5kaXJlY3QuYXJyYXkuZmlsbCI+IFtsaWIuaW5kaXJlY3QuYXJyYXkuZmlsbF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5OCA8L3A+CjxwPk9uZSBvZiB0aGUgb3BlcmF0b3I9IGluIHRoZSB2YWxhcnJheSBoZWxwZXIgYXJyYXlzIGlzIGNvbnN0IGFuZCBvbmUKaXMgbm90LiBGb3IgZXhhbXBsZSwgbG9vayBhdCBzbGljZV9hcnJheS4gVGhpcyBvcGVyYXRvcj0gaW4gU2VjdGlvbgoyNi41LjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5zbGljZS5hcnIuYXNzaWduIj4gW2xpYi5zbGljZS5hcnIuYXNzaWduXTwvYT4gaXMgY29uc3Q6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+dm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXkmbHQ7VCZndDsmYW1wOykgY29uc3Q7PC90dD4gPC9wPgoKPHA+YnV0IHRoaXMgb25lIGluIFNlY3Rpb24gMjYuNS41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuc2xpY2UuYXJyLmZpbGwiPiBbbGliLnNsaWNlLmFyci5maWxsXTwvYT4gaXMgbm90OiA8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgPHR0PnZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7IDwvdHQ+PC9wPgoKPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzZW1hbnRpY3MgZm9yIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgc2ltaWxhci4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4yNi41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5XTwvYT4gVGVtcGxhdGUgY2xhc3Mgc2xpY2VfYXJyYXk8L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+SW4gdGhlIGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gZm9yIHNsaWNlX2FycmF5LCByZXBsYWNlIHRoZSBtZW1iZXIKICAgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+d2l0aDwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi41LjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5zbGljZS5hcnIuZmlsbCI+IFtsaWIuc2xpY2UuYXJyLmZpbGxdPC9hPiBzbGljZV9hcnJheSBmaWxsIGZ1bmN0aW9uPC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkNoYW5nZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+dG88L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuNS43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLmdzbGljZS5hcnJheSI+IFtsaWIudGVtcGxhdGUuZ3NsaWNlLmFycmF5XTwvYT4gVGVtcGxhdGUgY2xhc3MgZ3NsaWNlX2FycmF5PC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkluIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGZvciBnc2xpY2VfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5maWxsIj4gW2xpYi5nc2xpY2UuYXJyYXkuZmlsbF08L2E+IGdzbGljZV9hcnJheSBmaWxsIGZ1bmN0aW9uPC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkNoYW5nZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+dG88L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuNS44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLm1hc2suYXJyYXkiPiBbbGliLnRlbXBsYXRlLm1hc2suYXJyYXldPC9hPiBUZW1wbGF0ZSBjbGFzcyBtYXNrX2FycmF5PC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkluIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGZvciBtYXNrX2FycmF5LCByZXBsYWNlIHRoZSBtZW1iZXIKICAgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+d2l0aDwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi41LjguNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5tYXNrLmFycmF5LmZpbGwiPiBbbGliLm1hc2suYXJyYXkuZmlsbF08L2E+IG1hc2tfYXJyYXkgZmlsbCBmdW5jdGlvbjwvcD4KPGJsb2NrcXVvdGU+CgogICA8cD5DaGFuZ2UgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspOwogICAgPC9wcmU+CiAgIDxwPnRvPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheSI+IFtsaWIudGVtcGxhdGUuaW5kaXJlY3QuYXJyYXldPC9hPiBUZW1wbGF0ZSBjbGFzcyBpbmRpcmVjdF9hcnJheTwvcD4KPGJsb2NrcXVvdGU+CgogICA8cD5JbiB0aGUgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBmb3IgaW5kaXJlY3RfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuOS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmluZGlyZWN0LmFycmF5LmZpbGwiPiBbbGliLmluZGlyZWN0LmFycmF5LmZpbGxdPC9hPiBpbmRpcmVjdF9hcnJheSBmaWxsIGZ1bmN0aW9uPC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkNoYW5nZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+dG88L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxpPltSZWRtb25kOiBSb2JlcnQgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGVyZSdzIG5vIGdvb2QgcmVhc29uIGZvciBvbmUgdmVyc2lvbiBvZiBvcGVyYXRvcj0gYmVpbmcgY29uc3QgYW5kCmFub3RoZXIgb25lIG5vdC4gIEJlY2F1c2Ugb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MyI+MjUzPC9hPiwgdGhpcyBub3cKbWF0dGVyczogdGhlc2UgZnVuY3Rpb25zIGFyZSBub3cgY2FsbGFibGUgaW4gbW9yZSBjaXJjdW1zdGFuY2VzLiAgSW4KbWFueSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMsIGJvdGggdmVyc2lvbnMgYXJlIGFscmVhZHkgY29uc3QuPC9wPgo8aHI+CjxhIG5hbWU9IjEyNCI+PGgzPjEyNC4mbmJzcDtjdHlwZV9ieW5hbWUmbHQ7Y2hhclQmZ3Q7Ojpkb19zY2FuX2lzICZhbXA7IGRvX3NjYW5fbm90IHJldHVybiB0eXBlIHNob3VsZCBiZSBjb25zdCBjaGFyVCo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jdHlwZS5ieW5hbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPkluIFNlY3Rpb24gMjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lIj4gW2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lXTwvYT4KY3R5cGVfYnluYW1lJmx0O2NoYXJUJmd0Ozo6ZG9fc2Nhbl9pcygpIGFuZCBkb19zY2FuX25vdCgpIGFyZSBkZWNsYXJlZAp0byByZXR1cm4gYSBjb25zdCBjaGFyKiBub3QgYSBjb25zdCBjaGFyVCouIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgU2VjdGlvbiAyMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jdHlwZS5ieW5hbWVdPC9hPiA8dHQ+ZG9fc2Nhbl9pcygpPC90dD4gYW5kCjx0dD5kb19zY2FuX25vdCgpPC90dD4gdG8gcmV0dXJuIGEgPHR0PiBjb25zdApjaGFyVCo8L3R0Pi4gPC9wPgo8aHI+CjxhIG5hbWU9IjEyNSI+PGgzPjEyNS4mbmJzcDt2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3IhKCkgcmV0dXJuIHR5cGUgaXMgaW5jb25zaXN0ZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgiPiBbbGliLmNvbXBsZXhdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPkluIFNlY3Rpb24gMjYuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgiPiBbbGliLmNvbXBsZXhdPC9hPiB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3IhKCkgaXMKZGVjbGFyZWQgdG8gcmV0dXJuIGEgdmFsYXJyYXkmbHQ7VCZndDssIGJ1dCBpbiBTZWN0aW9uIDxmb250IGNvbG9yPSJyZWQiPjI2LjMuMi41PC9mb250PiBpdCBpcyBkZWNsYXJlZCB0byByZXR1cm4gYSB2YWxhcnJheSZsdDtib29sJmd0Oy4gVGhlCmxhdHRlciBhcHBlYXJzIHRvIGJlIGNvcnJlY3QuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgaW4gU2VjdGlvbiAyNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleCI+IFtsaWIuY29tcGxleF08L2E+IHRoZSBkZWNsYXJhdGlvbiBvZgo8dHQ+b3BlcmF0b3IhKCk8L3R0PiBzbyB0aGF0IHRoZSByZXR1cm4gdHlwZSBpcwo8dHQ+dmFsYXJyYXkmbHQ7Ym9vbCZndDs8L3R0Pi4gPC9wPgo8aHI+CjxhIG5hbWU9IjEyNiI+PGgzPjEyNi4mbmJzcDt0eXBvcyBpbiBFZmZlY3RzIGNsYXVzZSBvZiBjdHlwZTo6ZG9fbmFycm93KCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgRGVjIDE5OTg8L3A+CjxwPlR5cG9zIGluIDIyLjIuMS4xLjIgbmVlZCB0byBiZSBmaXhlZC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gU2VjdGlvbiAyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiBjaGFuZ2U6IDwvcD4KCjxwcmU+ICAgZG9fd2lkZW4oZG9fbmFycm93KGMpLDApID09IGM8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICAgZG9fd2lkZW4oZG9fbmFycm93KGMsMCkpID09IGM8L3ByZT4KCjxwPmFuZCBjaGFuZ2U6PC9wPgoKPHByZT4gICAoaXMoTSxjKSB8fCAhY3RjLmlzKE0sIGRvX25hcnJvdyhjKSxkZmF1bHQpICk8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICAgKGlzKE0sYykgfHwgIWN0Yy5pcyhNLCBkb19uYXJyb3coYyxkZmF1bHQpKSApPC9wcmU+Cjxocj4KPGEgbmFtZT0iMTI3Ij48aDM+MTI3LiZuYnNwO2F1dG9fcHRyJmx0OyZndDsgY29udmVyc2lvbiBpc3N1ZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC40LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLm1ldGEudW5hcnkiPiBbbGliLm1ldGEudW5hcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHcmVnIENvbHZpbiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBGZWIgMTk5OTwvcD4KPHA+VGhlcmUgYXJlIHR3byBwcm9ibGVtcyB3aXRoIHRoZSBjdXJyZW50IDx0dD5hdXRvX3B0cjwvdHQ+IHdvcmRpbmcKaW4gdGhlIHN0YW5kYXJkOiA8L3A+Cgo8cD5GaXJzdCwgdGhlIDx0dD5hdXRvX3B0cl9yZWY8L3R0PiBkZWZpbml0aW9uIGNhbm5vdCBiZSBuZXN0ZWQKYmVjYXVzZSA8dHQ+YXV0b19wdHImbHQ7RGVyaXZlZCZndDs6OmF1dG9fcHRyX3JlZjwvdHQ+IGlzIHVucmVsYXRlZCB0bwo8dHQ+YXV0b19wdHImbHQ7QmFzZSZndDs6OmF1dG9fcHRyX3JlZjwvdHQ+LiAgPGk+QWxzbyBzdWJtaXR0ZWQgYnkKTmF0aGFuIE15ZXJzLCB3aXRoIHRoZSBzYW1lIHByb3Bvc2VkIHJlc29sdXRpb24uPC9pPjwvcD4KCjxwPlNlY29uZCwgdGhlcmUgaXMgbm8gPHR0PmF1dG9fcHRyPC90dD4gYXNzaWdubWVudCBvcGVyYXRvciB0YWtpbmcgYW4KPHR0PmF1dG9fcHRyX3JlZjwvdHQ+IGFyZ3VtZW50LiA8L3A+Cgo8cD5JIGhhdmUgZGlzY3Vzc2VkIHRoZXNlIHByb2JsZW1zIHdpdGggbXkgcHJvcG9zYWwgY29hdXRob3IsIEJpbGwKR2liYm9ucywgYW5kIHdpdGggc29tZSBjb21waWxlciBhbmQgbGlicmFyeSBpbXBsZW1lbnRvcnMsIGFuZCB3ZQpiZWxpZXZlIHRoYXQgdGhlc2UgcHJvYmxlbXMgYXJlIG5vdCBkZXNpcmVkIG9yIGRlc2lyYWJsZSBpbXBsaWNhdGlvbnMKb2YgdGhlIHN0YW5kYXJkLiA8L3A+Cgo8cD4yNSBBdWcgMTk5OTogVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gbm93IHJlZmxlY3RzIGNoYW5nZXMgc3VnZ2VzdGVkCmJ5IERhdmUgQWJyYWhhbXMsIHdpdGggR3JlZyBDb2x2aW4ncyBjb25jdXJyZW5jZTsgMSkgY2hhbmdlZAoiYXNzaWdubWVudCBvcGVyYXRvciIgdG8gInB1YmxpYyBhc3NpZ25tZW50Cm9wZXJhdG9yIiwgMikgY2hhbmdlZCBlZmZlY3RzIHRvIHNwZWNpZnkgdXNlIG9mIHJlbGVhc2UoKSwgMykKbWFkZSB0aGUgY29udmVyc2lvbiB0byBhdXRvX3B0cl9yZWYgY29uc3QuIDwvcD4KCjxwPjIgRmViIDIwMDA6IExpc2EgTGlwcGluY290dCBjb21tZW50czogW1RoZSByZXNvbHV0aW9uIG9mXSB0aGlzIGlzc3VlCnN0YXRlcyB0aGF0IHRoZSBjb252ZXJzaW9uIGZyb20gYXV0b19wdHIgdG8gYXV0b19wdHJfcmVmIHNob3VsZApiZSBjb25zdC4gIFRoaXMgaXMgbm90IGFjY2VwdGFibGUsIGJlY2F1c2UgaXQgd291bGQgYWxsb3cKaW5pdGlhbGl6YXRpb24gYW5kIGFzc2lnbm1lbnQgZnJvbSBfYW55XyBjb25zdCBhdXRvX3B0ciEgIEl0IGFsc28KaW50cm9kdWNlcyBhbiBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5IGluIHdyaXRpbmcgdGhpcyBjb252ZXJzaW9uCmZ1bmN0aW9uIC0tIG5hbWVseSwgc29tZXdoZXJlIGFsb25nIHRoZSBsaW5lLCBhIGNvbnN0X2Nhc3Qgd2lsbCBiZQpuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoYXQgY29uc3Qgc28gdGhhdCByZWxlYXNlKCkgbWF5IGJlIGNhbGxlZC4gIFRoaXMKbWF5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgWzcuMS41LjEvNF0uIFRoZSBjb252ZXJzaW9uCm9wZXJhdG9yIGRvZXMgbm90IGhhdmUgdG8gYmUgY29uc3QsIGJlY2F1c2UgYSBub24tY29uc3QgaW1wbGljaXQKb2JqZWN0IHBhcmFtZXRlciBtYXkgYmUgYm91bmQgdG8gYW4gcnZhbHVlIFsxMy4zLjMuMS40LzNdClsxMy4zLjEvNV0uIDwvcD4KCiAgPHA+VG9reW86IFRoZSBMV0cgcmVtb3ZlZCB0aGUgZm9sbG93aW5nIGZyb20gdGhlIHByb3Bvc2VkIHJlc29sdXRpb246PC9wPgoKICA8cD5JbiAyMC40LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLm1ldGEudW5hcnkiPiBbbGliLm1ldGEudW5hcnldPC9hPiwgcGFyYWdyYXBoIDIsIGFuZCAyMC40LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIubWV0YS51bmFyeS5wcm9wIj4gW2xpYi5tZXRhLnVuYXJ5LnByb3BdPC9hPiwgCiAgcGFyYWdyYXBoIDIsIG1ha2UgdGhlIGNvbnZlcnNpb24gdG8gYXV0b19wdHJfcmVmIGNvbnN0OjwvcD4KICA8YmxvY2txdW90ZT4KICAgIDxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgWSZndDsgb3BlcmF0b3IgYXV0b19wdHJfcmVmJmx0O1kmZ3Q7KCkgY29uc3QgdGhyb3coKTs8L3ByZT4KICA8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjAuNC41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLnVuYXJ5Ij4gW2xpYi5tZXRhLnVuYXJ5XTwvYT4sIHBhcmFncmFwaCAyLCBtb3ZlCnRoZSA8dHQ+YXV0b19wdHJfcmVmPC90dD4gZGVmaW5pdGlvbiB0byBuYW1lc3BhY2Ugc2NvcGUuPC9wPgoKPHA+SW4gMjAuNC41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLnVuYXJ5Ij4gW2xpYi5tZXRhLnVuYXJ5XTwvYT4sIHBhcmFncmFwaCAyLCBhZGQKYSBwdWJsaWMgYXNzaWdubWVudCBvcGVyYXRvciB0byB0aGUgPHR0PmF1dG9fcHRyPC90dD4gZGVmaW5pdGlvbjogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5hdXRvX3B0ciZhbXA7IG9wZXJhdG9yPShhdXRvX3B0cl9yZWYmbHQ7WCZndDsgcikgdGhyb3coKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+QWxzbyBhZGQgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gMjAuNC41LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLm1ldGEudW5hcnkucHJvcCI+IFtsaWIubWV0YS51bmFyeS5wcm9wXTwvYT46IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YXV0b19wdHImYW1wOyBvcGVyYXRvcj0oYXV0b19wdHJfcmVmJmx0O1gmZ3Q7IHIpIHRocm93KCk8L3ByZT4KCiAgPGI+RWZmZWN0czo8L2I+IENhbGxzIDx0dD5yZXNldChwLnJlbGVhc2UoKSk8L3R0PiBmb3IgdGhlIDx0dD5hdXRvX3B0cgogIHA8L3R0PiB0aGF0IDx0dD5yPC90dD4gaG9sZHMgYSByZWZlcmVuY2UgdG8uPGJyPgogIDxiPlJldHVybnM6IDwvYj48dHQ+KnRoaXM8L3R0Pi4KCjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxMjkiPjxoMz4xMjkuJm5ic3A7TmVlZCBlcnJvciBpbmRpY2F0aW9uIGZyb20gc2Vla3AoKSBhbmQgc2Vla2coKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4sIDI3LjYuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnNlZWtzIj4gW2xpYi5vc3RyZWFtLnNlZWtzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEZlYiAxOTk5PC9wPgo8cD5DdXJyZW50bHksIHRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IGhvdyBzZWVrZygpIGFuZCBzZWVrcCgpCmluZGljYXRlIGZhaWx1cmUuIFRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBzZXQgZmFpbGJpdCwgYW5kIHRoZXkgY2FuJ3QKcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24gYmVjYXVzZSB0aGV5IG11c3QgcmV0dXJuICp0aGlzLCBpLmUuIHRoZQpzdHJlYW0uIEhlbmNlLCBpdCBpcyB1bmRlZmluZWQgd2hhdCBoYXBwZW5zIGlmIHRoZXkgZmFpbC4gQW5kIHRoZXkKPGk+Y2FuPC9pPiBmYWlsLCBmb3IgaW5zdGFuY2UsIHdoZW4gYSBmaWxlIHN0cmVhbSBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUKdW5kZXJseWluZyBmaWxlIChpc19vcGVuKCk9PWZhbHNlKSBvciB3aGVuIGEgd2lkZSBjaGFyYWN0ZXIgZmlsZQpzdHJlYW0gbXVzdCBwZXJmb3JtIGEgc3RhdGUtZGVwZW5kZW50IGNvZGUgY29udmVyc2lvbiwgZXRjLiA8L3A+Cgo8cD5UaGUgc3RyZWFtIGZ1bmN0aW9ucyBzZWVrZygpIGFuZCBzZWVrcCgpIHNob3VsZCBzZXQgZmFpbGJpdCBpbiB0aGUKc3RyZWFtIHN0YXRlIGluIGNhc2Ugb2YgZmFpbHVyZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIHRoZSBFZmZlY3RzOiBjbGF1c2Ugb2YmbmJzcDsgc2Vla2coKSBpbiAKMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiBhbmQgdG8gdGhlIEVmZmVjdHM6IGNsYXVzZSBvZiBzZWVrcCgpIGluCjI3LjYuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnNlZWtzIj4gW2xpYi5vc3RyZWFtLnNlZWtzXTwvYT46IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkluIGNhc2Ugb2YgZmFpbHVyZSwgdGhlIGZ1bmN0aW9uIGNhbGxzIDx0dD5zZXRzdGF0ZShmYWlsYml0KTwvdHQ+ICh3aGljaCBtYXkgdGhyb3cgPHR0Pmlvc19iYXNlOjpmYWlsdXJlPC90dD4pLgogIDwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2V0dGluZyBmYWlsYml0IGlzIHRoZSB1c3VhbCBlcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtIGZvciBzdHJlYW1zPC9wPgo8aHI+CjxhIG5hbWU9IjEzMCI+PGgzPjEzMC4mbmJzcDtSZXR1cm4gdHlwZSBvZiBjb250YWluZXI6OmVyYXNlKGl0ZXJhdG9yKSBkaWZmZXJzIGZvciBhc3NvY2lhdGl2ZSBjb250YWluZXJzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiwgMjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2VxdWVuY2UucmVxbXRzIj4gW2xpYi5zZXF1ZW5jZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgTWFyIDE5OTk8L3A+CjxwPlRhYmxlIDY3ICgyMy4xLjEpIHNheXMgdGhhdCBjb250YWluZXI6OmVyYXNlKGl0ZXJhdG9yKSByZXR1cm5zIGFuCml0ZXJhdG9yLiBUYWJsZSA2OSAoMjMuMS4yKSBzYXlzIHRoYXQgaW4gYWRkaXRpb24gdG8gdGhpcyByZXF1aXJlbWVudCwKYXNzb2NpYXRpdmUgY29udGFpbmVycyBhbHNvIHNheSB0aGF0IGNvbnRhaW5lcjo6ZXJhc2UoaXRlcmF0b3IpCnJldHVybnMgdm9pZC4gIFRoYXQncyBub3QgYW4gYWRkaXRpb247IGl0J3MgYSBjaGFuZ2UgdG8gdGhlCnJlcXVpcmVtZW50cywgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMKZmFpbCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGNvbnRhaW5lcnMuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4KSW4gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiwgaW4gVGFibGUgNjkgQXNzb2NpYXRpdmUgY29udGFpbmVyCnJlcXVpcmVtZW50cywgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiA8dHQ+YS5lcmFzZShxKTwvdHQ+IGZyb20KPHR0PnZvaWQ8L3R0PiB0byA8dHQ+aXRlcmF0b3I8L3R0Pi4gIENoYW5nZSB0aGUKYXNzZXJ0aW9uL25vdC9wcmUvcG9zdC1jb25kaXRpb24gZnJvbSAiZXJhc2VzIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8KYnkgPHR0PnE8L3R0PiIgdG8gImVyYXNlcyB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IDx0dD5xPC90dD4uClJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHEKcHJpb3IgdG8gdGhlIGVsZW1lbnQgYmVpbmcgZXJhc2VkLiBJZiBubyBzdWNoIGVsZW1lbnQgZXhpc3RzLCBhLmVuZCgpCmlzIHJldHVybmVkLiIKPC9wPgoKPHA+CkluIDIzLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFzc29jaWF0aXZlLnJlcW10cyI+IFtsaWIuYXNzb2NpYXRpdmUucmVxbXRzXTwvYT4sIGluIFRhYmxlIDY5IEFzc29jaWF0aXZlIGNvbnRhaW5lcgpyZXF1aXJlbWVudHMsIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgPHR0PmEuZXJhc2UocTEsIHEyKTwvdHQ+CmZyb20gPHR0PnZvaWQ8L3R0PiB0byA8dHQ+aXRlcmF0b3I8L3R0Pi4gIENoYW5nZSB0aGUKYXNzZXJ0aW9uL25vdC9wcmUvcG9zdC1jb25kaXRpb24gZnJvbSAiZXJhc2VzIHRoZSBlbGVtZW50cyBpbiB0aGUKcmFuZ2UgPHR0PltxMSwgcTIpPC90dD4iIHRvICJlcmFzZXMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSA8dHQ+W3ExLApxMik8L3R0Pi4gIFJldHVybnMgcTIuIgo8L3A+Cgo8cD4KSW4gMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiwgaW4gdGhlIDx0dD5tYXA8L3R0PiBjbGFzcyBzeW5vcHNpczsgYW5kIAppbiAyMy4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tdWx0aW1hcCI+IFtsaWIubXVsdGltYXBdPC9hPiwgaW4gdGhlIDx0dD5tdWx0aW1hcDwvdHQ+IGNsYXNzIHN5bm9wc2lzOyBhbmQKaW4gMjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2V0Ij4gW2xpYi5zZXRdPC9hPiwgaW4gdGhlIDx0dD5zZXQ8L3R0PiBjbGFzcyBzeW5vcHNpczsgYW5kCmluIDIzLjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLm11bHRpc2V0Ij4gW2xpYi5tdWx0aXNldF08L2E+LCBpbiB0aGUgPHR0Pm11bHRpc2V0PC90dD4gY2xhc3Mgc3lub3BzaXM6CmNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmaXJzdCA8dHQ+ZXJhc2U8L3R0PiBvdmVybG9hZCB0bwo8L3A+CjxwcmU+ICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcG9zaXRpb24pOwo8L3ByZT4KPHA+YW5kIGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSB0aGlyZCA8dHQ+ZXJhc2U8L3R0PiBvdmVybG9hZCB0bzwvcD4KPHByZT4gIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KTsgCjwvcHJlPgoKCjxwPjxpPltQcmUtS29uYTogcmVvcGVuZWQgYXQgdGhlIHJlcXVlc3Qgb2YgSG93YXJkIEhpbm5hbnRdPC9pPjwvcD4KCjxwPjxpPltQb3N0LUtvbmE6IHRoZSBMV0cgYWdyZWVzIHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUKPHR0Pml0ZXJhdG9yPC90dD4sIG5vdCA8dHQ+dm9pZDwvdHQ+LiAgKEFsZXggU3RlcGFub3YgYWdyZWVzIHRvby4pCk1hdHQgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxwPjxpPlsKIFN5ZG5leTogdGhlIHByb3Bvc2VkIHdvcmRpbmcgd2VudCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLCBidXQgaXQKIHdhc24ndCBnb29kIGVub3VnaC4gV2Ugd2FudCB0byByZXR1cm4gYW4gaXRlcmF0b3IgZnJvbSB0aGUgcmFuZ2UgZm9ybQogb2YgZXJhc2UgYXMgd2VsbCBhcyB0aGUgc2luZ2xlLWl0ZXJhdG9yIGZvcm0uIEFsc28sIHRoZSB3b3JkaW5nIGlzCiBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgd29yZGluZyB3ZSBoYXZlIGZvciBzZXF1ZW5jZXM7IHRoZXJlJ3Mgbm8KIGdvb2QgcmVhc29uIGZvciBoYXZpbmcgYSBkaWZmZXJlbmNlLiAgTWF0dCBwcm92aWRlZCBuZXcgd29yZGluZywKIHdoaWNoIHdlIHdpbGwgcmV2aWV3IGF0IHRoZSBuZXh0IG1lZXRpbmcuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIxMzIiPjxoMz4xMzIuJm5ic3A7bGlzdDo6cmVzaXplIGRlc2NyaXB0aW9uIHVzZXMgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLmNhcGFjaXR5Ij4gW2xpYi5kZXF1ZS5jYXBhY2l0eV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgTWFyIDE5OTk8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiByZWFkczo8L3A+Cgo8cD4tMS0gRWZmZWN0czo8L3A+Cgo8cHJlPiAgICAgICAgIGlmIChzeiAmZ3Q7IHNpemUoKSkKICAgICAgICAgICBpbnNlcnQoZW5kKCksIHN6LXNpemUoKSwgYyk7CiAgICAgICAgIGVsc2UgaWYgKHN6ICZsdDsgc2l6ZSgpKQogICAgICAgICAgIGVyYXNlKGJlZ2luKCkrc3osIGVuZCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgZG8gbm90aGluZzwvcHJlPgoKPHA+T2J2aW91c2x5IGxpc3Q6OnJlc2l6ZSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIzLjIuMi4yIHBhcmFncmFwaCAxIHRvOjwvcD4KCjxwPkVmZmVjdHM6PC9wPgoKPHByZT4gICAgICAgICBpZiAoc3ogJmd0OyBzaXplKCkpCiAgICAgICAgICAgaW5zZXJ0KGVuZCgpLCBzei1zaXplKCksIGMpOwogICAgICAgICBlbHNlIGlmIChzeiAmbHQ7IHNpemUoKSkKICAgICAgICAgewogICAgICAgICAgIGl0ZXJhdG9yIGkgPSBiZWdpbigpOwogICAgICAgICAgIGFkdmFuY2UoaSwgc3opOwogICAgICAgICAgIGVyYXNlKGksIGVuZCgpKTsKICAgICAgICAgfTwvcHJlPgoKPHA+PGk+W0R1YmxpbjogVGhlIExXRyBhc2tlZCBIb3dhcmQgdG8gZGlzY3VzcyBleGNlcHRpb24gc2FmZXR5IG9mZmxpbmUKd2l0aCBEYXZpZCBBYnJhaGFtcy4gVGhleSBoYWQgYSBkaXNjdXNzaW9uIGFuZCBiZWxpZXZlIHRoZXJlIGlzCm5vIGlzc3VlIG9mIGV4Y2VwdGlvbiBzYWZldHkgd2l0aCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxMzMiPjxoMz4xMzMuJm5ic3A7bWFwIG1pc3NpbmcgZ2V0X2FsbG9jYXRvcigpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE1hciAxOTk5PC9wPgo8cD5UaGUgdGl0bGUgc2F5cyBpdCBhbGwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCBpbiAyMy4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAiPiBbbGliLm1hcF08L2E+LCBwYXJhZ3JhcGggMiwKYWZ0ZXIgb3BlcmF0b3I9IGluIHRoZSBtYXAgZGVjbGFyYXRpb246PC9wPgoKPHByZT4gICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0OzwvcHJlPgo8aHI+CjxhIG5hbWU9IjEzNCI+PGgzPjEzNC4mbmJzcDt2ZWN0b3IgY29uc3RydWN0b3JzIG92ZXIgc3BlY2lmaWVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5xdWV1ZSI+IFtsaWIucXVldWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE1hciAxOTk5PC9wPgo8cD5UaGUgY29tcGxleGl0eSBkZXNjcmlwdGlvbiBzYXlzOiAiSXQgZG9lcyBhdCBtb3N0IDJOIGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yCm9mIFQgYW5kIGxvZ04gcmVhbGxvY2F0aW9ucyBpZiB0aGV5IGFyZSBqdXN0IGlucHV0IGl0ZXJhdG9ycyAuLi4iLjwvcD4KCjxwPlRoaXMgYXBwZWFycyB0byBiZSBvdmVybHkgcmVzdHJpY3RpdmUsIGRpY3RhdGluZyB0aGUgcHJlY2lzZSBtZW1vcnkvcGVyZm9ybWFuY2UKdHJhZGVvZmYgZm9yIHRoZSBpbXBsZW1lbnRvci48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIzLjIuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIucXVldWUiPiBbbGliLnF1ZXVlXTwvYT4sIHBhcmFncmFwaCAxIHRvOjwvcD4KCjxwPi0xLSBDb21wbGV4aXR5OiBUaGUgY29uc3RydWN0b3IgdGVtcGxhdGUgJmx0O2NsYXNzCklucHV0SXRlcmF0b3ImZ3Q7IHZlY3RvcihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCm1ha2VzIG9ubHkgTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBUICh3aGVyZSBOIGlzIHRoZQpkaXN0YW5jZSBiZXR3ZWVuIGZpcnN0IGFuZCBsYXN0KSBhbmQgbm8gcmVhbGxvY2F0aW9ucyBpZiBpdGVyYXRvcnMKZmlyc3QgYW5kIGxhc3QgYXJlIG9mIGZvcndhcmQsIGJpZGlyZWN0aW9uYWwsIG9yIHJhbmRvbSBhY2Nlc3MKY2F0ZWdvcmllcy4gSXQgbWFrZXMgb3JkZXIgTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBUIGFuZApvcmRlciBsb2dOIHJlYWxsb2NhdGlvbnMgaWYgdGhleSBhcmUganVzdCBpbnB1dCBpdGVyYXRvcnMuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPiJhdCBtb3N0IDJOIGNhbGxzIiBpcyBjb3JyZWN0IG9ubHkgaWYgdGhlIGdyb3d0aCBmYWN0b3IKaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIuCjwvcD4KPGhyPgo8YSBuYW1lPSIxMzYiPjxoMz4xMzYuJm5ic3A7c2Vla3AsIHNlZWtnIHNldHRpbmcgd3Jvbmcgc3RyZWFtcz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgTWFyIDE5OTk8L3A+CjxwPkkgbWF5IGJlIG1pc3VuZGVyc3RhbmRpbmcgdGhlIGludGVudCwgYnV0IHNob3VsZCBub3Qgc2Vla2cgc2V0IG9ubHkKdGhlIGlucHV0IHN0cmVhbSBhbmQgc2Vla3Agc2V0IG9ubHkgdGhlIG91dHB1dCBzdHJlYW0/IFRoZSBkZXNjcmlwdGlvbgpzZWVtcyB0byBzYXkgdGhhdCBlYWNoIHNob3VsZCBzZXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMuIElmCnRoYXQncyByZWFsbHkgdGhlIGludGVudCwgSSB3aXRoZHJhdyB0aGlzIHByb3Bvc2FsLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBzZWN0aW9uIDI3LjYuMS4zIGNoYW5nZTo8L3A+Cgo8cHJlPmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtnKHBvc190eXBlIHBvcyk7CkVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrcG9zKHBvcykuIDwvcHJlPgoKPHA+VG86PC9wPgoKPHByZT5iYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrZyhwb3NfdHlwZSBwb3MpOwpFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla3Bvcyhwb3MsIGlvc19iYXNlOjppbikuIDwvcHJlPgoKPHA+SW4gc2VjdGlvbiAyNy42LjEuMyBjaGFuZ2U6PC9wPgoKPHByZT5iYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrZyhvZmZfdHlwZSZhbXA7IG9mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgZGlyKTsKRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtvZmYob2ZmLCBkaXIpLiA8L3ByZT4KCjxwPlRvOjwvcD4KCjxwcmU+YmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgc2Vla2cob2ZmX3R5cGUmYW1wOyBvZmYsIGlvc19iYXNlOjpzZWVrZGlyIGRpcik7CkVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrb2ZmKG9mZiwgZGlyLCBpb3NfYmFzZTo6aW4pLiA8L3ByZT4KCjxwPkluIHNlY3Rpb24gMjcuNi4yLjQsIHBhcmFncmFwaCAyIGNoYW5nZTo8L3A+Cgo8cHJlPi0yLSBFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla3Bvcyhwb3MpLiA8L3ByZT4KCjxwPlRvOjwvcD4KCjxwcmU+LTItIEVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrcG9zKHBvcywgaW9zX2Jhc2U6Om91dCkuIDwvcHJlPgoKPHA+SW4gc2VjdGlvbiAyNy42LjIuNCwgcGFyYWdyYXBoIDQgY2hhbmdlOjwvcD4KCjxwcmU+LTQtIEVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrb2ZmKG9mZiwgZGlyKS4gPC9wcmU+Cgo8cD5Ubzo8L3A+Cgo8cHJlPi00LSBFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla29mZihvZmYsIGRpciwgaW9zX2Jhc2U6Om91dCkuIDwvcHJlPgoKPHA+PGk+W0R1YmxpbjogRGlldG1hciBL/GhsIHRoaW5rcyB0aGlzIGlzIHByb2JhYmx5IGNvcnJlY3QsIGJ1dCB3b3VsZApsaWtlIHRoZSBvcGluaW9uIG9mIG1vcmUgaW9zdHJlYW0gZXhwZXJ0cyBiZWZvcmUgdGFraW5nIGFjdGlvbi5dPC9pPjwvcD4KCjxwPjxpPltUb2t5bzogUmV2aWV3ZWQgYnkgdGhlIExXRy4gUEpQIG5vdGVkIHRoYXQgYWx0aG91Z2ggaGlzIGRvY3MgYXJlCmluY29ycmVjdCwgaGlzIGltcGxlbWVudGF0aW9uIGFscmVhZHkgaW1wbGVtZW50cyB0aGUgUHJvcG9zZWQKUmVzb2x1dGlvbi5dPC9pPjwvcD4KCjxwPjxpPltQb3N0LVRva3lvOiBNYXR0IEF1c3Rlcm4gY29tbWVudHM6PGJyPgpJcyBpdCBhIHByb2JsZW0gd2l0aCBiYXNpY19pc3RyZWFtIGFuZCBiYXNpY19vc3RyZWFtLCBvciBpcyBpdCBhIHByb2JsZW0Kd2l0aCBiYXNpY19zdHJpbmdidWY/CldlIGNvdWxkIHJlc29sdmUgdGhlIGlzc3VlIGVpdGhlciBieSBjaGFuZ2luZyBiYXNpY19pc3RyZWFtIGFuZApiYXNpY19vc3RyZWFtLCBvciBieSBjaGFuZ2luZyBiYXNpY19zdHJpbmdidWYuIEkgcHJlZmVyIHRoZSBsYXR0ZXIKY2hhbmdlIChvciBtYXliZSBib3RoIGNoYW5nZXMpOiBJIGRvbid0IHNlZSBhbnkgcmVhc29uIGZvciB0aGUgc3RhbmRhcmQgdG8KcmVxdWlyZSB0aGF0IHN0ZDo6c3RyaW5nYnVmIHMoc3RkOjpzdHJpbmcoImZvbyIpLCBzdGQ6Omlvc19iYXNlOjppbik7CnMucHVic2Vla29mZigwLCBzdGQ6Omlvc19iYXNlOjpiZWcpOyBtdXN0IGZhaWwuPGJyPgpUaGlzIHJlcXVpcmVtZW50IGlzIGEgYml0IHdlaXJkLiBUaGVyZSdzIG5vIHNpbWlsYXIgcmVxdWlyZW1lbnQKZm9yIGJhc2ljX3N0cmVhbWJ1ZiZsdDsmZ3Q7OjpzZWVrcG9zLCBvciBmb3IgYmFzaWNfZmlsZWJ1ZiZsdDsmZ3Q7OjpzZWVrb2ZmIG9yCmJhc2ljX2ZpbGVidWYmbHQ7Jmd0Ozo6c2Vla3Bvcy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxMzciPjxoMz4xMzcuJm5ic3A7RG8gdXNlX2ZhY2V0IGFuZCBoYXNfZmFjZXQgbG9vayBpbiB0aGUgZ2xvYmFsIGxvY2FsZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBNYXIgMTk5OTwvcD4KPHA+U2VjdGlvbiAyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+IHNheXM6PC9wPgoKPHA+LTQtIEluIHRoZSBjYWxsIHRvIHVzZV9mYWNldCZsdDtGYWNldCZndDsobG9jKSwgdGhlIHR5cGUgYXJndW1lbnQKY2hvb3NlcyBhIGZhY2V0LCBtYWtpbmcgYXZhaWxhYmxlIGFsbCBtZW1iZXJzIG9mIHRoZSBuYW1lZCB0eXBlLiBJZgpGYWNldCBpcyBub3QgcHJlc2VudCBpbiBhIGxvY2FsZSAob3IsIGZhaWxpbmcgdGhhdCwgaW4gdGhlIGdsb2JhbApsb2NhbGUpLCBpdCB0aHJvd3MgdGhlIHN0YW5kYXJkIGV4Y2VwdGlvbiBiYWRfY2FzdC4gQSBDKysgcHJvZ3JhbSBjYW4KY2hlY2sgaWYgYSBsb2NhbGUgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgZmFjZXQgd2l0aCB0aGUgdGVtcGxhdGUKZnVuY3Rpb24gaGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0OygpLiA8L3A+Cgo8cD5UaGlzIGNvbnRyYWRpY3RzIHRoZSBzcGVjaWZpY2F0aW9uIGdpdmVuIGluIHNlY3Rpb24gCjIyLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5nbG9iYWwudGVtcGxhdGVzIj4gW2xpYi5sb2NhbGUuZ2xvYmFsLnRlbXBsYXRlc108L2E+Ogo8YnI+PGJyPgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MmbmJzcDsgRmFjZXQmZ3Q7IGNvbnN0Jm5ic3A7IEZhY2V0JmFtcDsgdXNlX2ZhY2V0KGNvbnN0CmxvY2FsZSZhbXA7Jm5ic3A7IGxvYyk7IDxicj4KPGJyPgotMS0gR2V0IGEgcmVmZXJlbmNlIHRvIGEgZmFjZXQgb2YgYSBsb2NhbGUuIDxicj4KLTItIFJldHVybnM6IGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZhY2V0IG9mIGxvYywgaWYgcHJlc2VudC4gPGJyPgotMy0gVGhyb3dzOiBiYWRfY2FzdCBpZiBoYXNfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYykgaXMgZmFsc2UuIDxicj4KLTQtIE5vdGVzOiBUaGUgcmVmZXJlbmNlIHJldHVybmVkIHJlbWFpbnMgdmFsaWQgYXQgbGVhc3QgYXMgbG9uZyBhcyBhbnkgY29weSBvZiBsb2MgZXhpc3RzCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIHBocmFzZSAiKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwgbG9jYWxlKSIKZnJvbSBzZWN0aW9uIDIyLjEuMS4gPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+TmVlZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSB3YXkgbG9jYWxlcyBhcmUgaGFuZGxlZCBlbHNld2hlcmUKaW4gdGhlIHN0YW5kYXJkLjwvcD4KPGhyPgo8YSBuYW1lPSIxMzkiPjxoMz4xMzkuJm5ic3A7T3B0aW9uYWwgc2VxdWVuY2Ugb3BlcmF0aW9uIHRhYmxlIGRlc2NyaXB0aW9uIHVuY2xlYXI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHJldyBLb2VuaWcmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MzAgTWFyIDE5OTk8L3A+CjxwPlRoZSBzZW50ZW5jZSBpbnRyb2R1Y2luZyB0aGUgT3B0aW9uYWwgc2VxdWVuY2Ugb3BlcmF0aW9uIHRhYmxlCigyMy4xLjEgcGFyYWdyYXBoIDEyKSBoYXMgdHdvIHByb2JsZW1zOjwvcD4KCjxwPkEuIEl0IHNheXMgYGBUaGUgb3BlcmF0aW9ucyBpbiB0YWJsZSA2OCBhcmUgcHJvdmlkZWQgb25seSBmb3IgdGhlIGNvbnRhaW5lcnMgZm9yIHdoaWNoCnRoZXkgdGFrZSBjb25zdGFudCB0aW1lLicnPGJyPgo8YnI+ClRoYXQgY291bGQgYmUgaW50ZXJwcmV0ZWQgaW4gdHdvIHdheXMsIG9uZSBvZiB0aGVtIGJlaW5nIGBgRXZlbiB0aG91Z2ggdGFibGUgNjggc2hvd3MKcGFydGljdWxhciBvcGVyYXRpb25zIGFzIGJlaW5nIHByb3ZpZGVkLCBpbXBsZW1lbnRhdGlvbnMgYXJlIGZyZWUgdG8gb21pdCB0aGVtIGlmIHRoZXkKY2Fubm90IGltcGxlbWVudCB0aGVtIGluIGNvbnN0YW50IHRpbWUuJyc8YnI+Cjxicj4KQi4gVGhhdCBwYXJhZ3JhcGggc2F5cyBub3RoaW5nIGFib3V0IGFtb3J0aXplZCBjb25zdGFudCB0aW1lLCBhbmQgaXQgc2hvdWxkLiZuYnNwOzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSB3b3JkaW5nIGluIDIzLjEuMSBwYXJhZ3JhcGggMTImbmJzcDsgd2hpY2ggYmVnaW5zIGBgVGhlIG9wZXJhdGlvbnMgaW4gdGFibGUgNjggYXJlIHByb3ZpZGVkIG9ubHkuLi4iCndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGFibGUgNjggbGlzdHMgc2VxdWVuY2Ugb3BlcmF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3Igc29tZSB0eXBlcyBvZiBzZXF1ZW50aWFsCiAgY29udGFpbmVycyBidXQgbm90IG90aGVycy4gQW4gaW1wbGVtZW50YXRpb24gc2hhbGwgcHJvdmlkZSB0aGVzZSBvcGVyYXRpb25zIGZvciBhbGwKICBjb250YWluZXIgdHlwZXMgc2hvd24gaW4gdGhlIGBgY29udGFpbmVyJycgY29sdW1uLCBhbmQgc2hhbGwgaW1wbGVtZW50IHRoZW0gc28gYXMgdG8gdGFrZQogIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE0MSI+PGgzPjE0MS4mbmJzcDtiYXNpY19zdHJpbmc6OmZpbmRfbGFzdF9vZiwgZmluZF9sYXN0X25vdF9vZiBzYXkgcG9zIGluc3RlYWQgb2YgeHBvczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpmaW5kLmxhc3Qub2YiPiBbbGliLnN0cmluZzo6ZmluZC5sYXN0Lm9mXTwvYT4sIDIxLjMuNi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpmaW5kLmxhc3Qubm90Lm9mIj4gW2xpYi5zdHJpbmc6OmZpbmQubGFzdC5ub3Qub2ZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBcmNoIFJvYmlzb24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggQXByIDE5OTk8L3A+CjxwPlNlY3Rpb25zIDIxLjMuNi40IHBhcmFncmFwaCAxIGFuZCAyMS4zLjYuNiBwYXJhZ3JhcGggMSBzdXJlbHkgaGF2ZSBtaXNwcmludHMgd2hlcmUgdGhleQpzYXk6PGJyPgo8YnI+CiYjODIxMjsgPHR0Pnhwb3MgJmx0Oz0gcG9zPC90dD4gYW5kIDx0dD5wb3MgJmx0OyBzaXplKCk7PC90dD48L3A+Cgo8cD5TdXJlbHkgdGhlIGRvY3VtZW50IG1lYW50IHRvIHNheSBgYDx0dD54cG9zICZsdDsgc2l6ZSgpPC90dD4nJyBpbiBib3RoIHBsYWNlcy48L3A+Cgo8cD48aT5bSnVkeSBXYXJkIGFsc28gc2VudCBpbiB0aGlzIGlzc3VlIGZvciAyMS4zLjYuNCB3aXRoIHRoZSBzYW1lCnByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIFNlY3Rpb25zIDIxLjMuNi40IHBhcmFncmFwaCAxIGFuZCAyMS4zLjYuNiBwYXJhZ3JhcGggMSwgdGhlIGxpbmUgd2hpY2ggc2F5czo8YnI+Cjxicj4KJiM4MjEyOyA8dHQ+eHBvcyAmbHQ7PSBwb3M8L3R0PiBhbmQgPHR0PnBvcyAmbHQ7IHNpemUoKTs8YnI+Cjxicj4KPC90dD50bzo8YnI+Cjx0dD48YnI+CjwvdHQ+JiM4MjEyOyA8dHQ+eHBvcyAmbHQ7PSBwb3M8L3R0PiBhbmQgPHR0Pnhwb3MgJmx0OyBzaXplKCk7PC90dD48L3A+Cjxocj4KPGEgbmFtZT0iMTQyIj48aDM+MTQyLiZuYnNwO2xleGljb2dyYXBoaWNhbF9jb21wYXJlIGNvbXBsZXhpdHkgd3Jvbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4zLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcubGV4LmNvbXBhcmlzb24iPiBbbGliLmFsZy5sZXguY29tcGFyaXNvbl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1biAxOTk5PC9wPgo8cD5UaGUgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUgY29tcGxleGl0eSBpcyBzcGVjaWZpZWQgYXM6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAiQXQgbW9zdCBtaW4oKGxhc3QxIC0gZmlyc3QxKSwgKGxhc3QyIC0gZmlyc3QyKSkKYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBhcmlzb24uIjxicj4KPGJyPgpUaGUgYmVzdCBJIGNhbiBkbyBpcyB0d2ljZSB0aGF0IGV4cGVuc2l2ZS48L3A+Cgo8cD5OaWNvbGFpIEpvc3V0dGlzIGNvbW1lbnRzIGluIGxpYi02ODYyOiBZb3UgbWVhbiwgdG8gY2hlY2sgZm9yCmVxdWFsaXR5IHlvdSBoYXZlIHRvIGNoZWNrIGJvdGggJmx0OyBhbmQgJmd0Oz8gWWVzLCBJTU8geW91IGFyZQpyaWdodCEgKGFuZCBNYXR0IHN0YXRlcyB0aGlzIGNvbXBsZXhpdHkgaW4gaGlzIGJvb2spPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjUuMy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmxleC5jb21wYXJpc29uIj4gW2xpYi5hbGcubGV4LmNvbXBhcmlzb25dPC9hPiBjb21wbGV4aXR5IHRvOjwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgQXQgbW9zdCA8dHQ+MiptaW4oKGxhc3QxIC0gZmlyc3QxKSwgKGxhc3QyIC0gZmlyc3QyKSk8L3R0PgogICAgYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBhcmlzb24uCiAgICA8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgdGhlIGV4YW1wbGUgYXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggMyB0byByZWFkOjwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgW0V4YW1wbGU6PGJyPgogICAgPGJyPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IGZvciAoIDsgZmlyc3QxICE9IGxhc3QxICZhbXA7JmFtcDsgZmlyc3QyICE9IGxhc3QyIDsKICAgICsrZmlyc3QxLCArK2ZpcnN0Mikgezxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZiAoKmZpcnN0MSAmbHQ7ICpmaXJzdDIpIHJldHVybiB0cnVlOzxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZiAoKmZpcnN0MiAmbHQ7ICpmaXJzdDEpIHJldHVybiBmYWxzZTs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gZmlyc3QxID09IGxhc3QxICZhbXA7JmFtcDsgZmlyc3QyICE9IGxhc3QyOzxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOzxicj4KICAgIC0tZW5kIGV4YW1wbGVdCiAgICA8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTQ0Ij48aDM+MTQ0LiZuYnNwO0RlcXVlIGNvbnN0cnVjdG9yIGNvbXBsZXhpdHkgd3JvbmcgPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hcnJheS5jb25zIj4gW2xpYi5hcnJheS5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SGVyYiBTdXR0ZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OSBNYXkgMTk5OTwvcD4KPHA+SW4gMjMuMi4xLjEgcGFyYWdyYXBoIDYsIHRoZSBkZXF1ZSBjdG9yIHRoYXQgdGFrZXMgYW4gaXRlcmF0b3IgcmFuZ2UgYXBwZWFycwp0byBoYXZlIGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3QsIGFuZCB3aGljaCBjb250cmFkaWN0IHRoZQpjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBmb3IgaW5zZXJ0KCkuIEkgc3VzcGVjdCB0aGF0IHRoZSB0ZXh0IGluIHF1ZXN0aW9uLApiZWxvdywgd2FzIHRha2VuIGZyb20gdmVjdG9yOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+Q29tcGxleGl0eTogSWYgdGhlIGl0ZXJhdG9ycyBmaXJzdCBhbmQgbGFzdCBhcmUgZm9yd2FyZCBpdGVyYXRvcnMsCiAgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMsIG9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIHRoZSBjb25zdHJ1Y3RvciBtYWtlcyBvbmx5CiAgTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciwgYW5kIHBlcmZvcm1zIG5vIHJlYWxsb2NhdGlvbnMsIHdoZXJlIE4gaXMKICBsYXN0IC0gZmlyc3QuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSB3b3JkICJyZWFsbG9jYXRpb25zIiBkb2VzIG5vdCByZWFsbHkgYXBwbHkgdG8gZGVxdWUuIEZ1cnRoZXIsCmFsbCBvZiB0aGUgZm9sbG93aW5nIGFwcGVhcnMgdG8gYmUgc3B1cmlvdXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5JdCBtYWtlcyBhdCBtb3N0IDJOIGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIFQgYW5kIGxvZyBOCiAgcmVhbGxvY2F0aW9ucyBpZiB0aGV5IGFyZSBpbnB1dCBpdGVyYXRvcnMuMSk8L3A+CiAgPHA+MSkgVGhlIGNvbXBsZXhpdHkgaXMgZ3JlYXRlciBpbiB0aGUgY2FzZSBvZiBpbnB1dCBpdGVyYXRvcnMgYmVjYXVzZSBlYWNoCiAgZWxlbWVudCBtdXN0IGJlIGFkZGVkIGluZGl2aWR1YWxseTogaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGRpc3RhbmNlCiAgYmV0d2VlbiBmaXJzdCBhYmQgbGFzdCBiZWZvcmUgZG9pbmcgdGhlIGNvcHlpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgdmVjdG9yLCBidXQgbm90IGZvciBkZXF1ZS4gV2h5IHNob3VsZCBkZXF1ZSBnYWluCmFuIGVmZmljaWVuY3kgYWR2YW50YWdlIGZyb20ga25vd2luZyBpbiBhZHZhbmNlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8KaW5zZXJ0PzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4yLjEuMSBwYXJhZ3JhcGggNiwgcmVwbGFjZSB0aGUgQ29tcGxleGl0eSBkZXNjcmlwdGlvbiwgaW5jbHVkaW5nIHRoZQpmb290bm90ZSwgd2l0aCB0aGUgZm9sbG93aW5nIHRleHQgKHdoaWNoIGFsc28gY29ycmVjdHMgdGhlICJhYmQiCnR5cG8pOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+Q29tcGxleGl0eTogTWFrZXMgbGFzdCAtIGZpcnN0IGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIFQuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTQ2Ij48aDM+MTQ2LiZuYnNwO2NvbXBsZXgmbHQ7VCZndDsgSW5zZXJ0ZXIgYW5kIEV4dHJhY3RvciBuZWVkIHNlbnRyaWVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgub3BzIj4gW2xpYi5jb21wbGV4Lm9wc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBNYXkgMTk5OTwvcD4KPHA+VGhlIDx1PiBleHRyYWN0b3I8L3U+IGZvciBjb21wbGV4IG51bWJlcnMgaXMgc3BlY2lmaWVkIGFzOiZuYnNwOzwvcD4KCjxibG9ja3F1b3RlPgoKPHA+ICAgICB0ZW1wbGF0ZSZsdDtjbGFzcyBULCBjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzJmd0OyZuYnNwOzxicj4KICAgICBiYXNpY19pc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsmbmJzcDs8YnI+CiAgICAgb3BlcmF0b3ImZ3Q7Jmd0OyhiYXNpY19pc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsgIGlzLCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDsgIHgpOzxicj4KJm5ic3A7PGJyPgpFZmZlY3RzOiBFeHRyYWN0cyBhIGNvbXBsZXggbnVtYmVyIHggb2YgdGhlIGZvcm06IHUsICh1KSwgb3IgKHUsdiksCndoZXJlIHUgaXMgdGhlIHJlYWwgcGFydCBhbmQgdiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQKKGxpYi5pc3RyZWFtLmZvcm1hdHRlZCkuJm5ic3A7PGJyPgpSZXF1aXJlczogVGhlIGlucHV0IHZhbHVlcyBiZSBjb252ZXJ0aWJsZSB0byBULiBJZiBiYWQgaW5wdXQgaXMKZW5jb3VudGVyZWQsIGNhbGxzIGlzLnNldHN0YXRlKGlvczo6ZmFpbGJpdCkgKHdoaWNoIG1heSB0aHJvdwppb3M6OmZhaWx1cmUgKGxpYi5pb3N0YXRlLmZsYWdzKS4mbmJzcDs8YnI+ClJldHVybnM6IGlzIC48L3A+Cgo8L2Jsb2NrcXVvdGU+CjxwPklzIGl0IGludGVuZGVkIHRoYXQgdGhlIGV4dHJhY3RvciBmb3IgY29tcGxleCBudW1iZXJzIGRvZXMgbm90IHNraXAKd2hpdGVzcGFjZSwgdW5saWtlIGFsbCBvdGhlciBleHRyYWN0b3JzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGRvPwpTaG91bGRuJ3QgYSBzZW50cnkgYmUgdXNlZD8mbmJzcDs8YnI+Cjxicj4KVGhlIDx1Pmluc2VydGVyPC91PiBmb3IgY29tcGxleCBudW1iZXJzIGlzIHNwZWNpZmllZCBhczo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwPiAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsmbmJzcDs8YnI+CiAgICAgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7Jm5ic3A7PGJyPgogICAgIG9wZXJhdG9yJmx0OyZsdDsoYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7ICBvLCBjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDsgIHgpOzxicj4KPGJyPgpFZmZlY3RzOiBpbnNlcnRzIHRoZSBjb21wbGV4IG51bWJlciB4IG9udG8gdGhlIHN0cmVhbSBvIGFzIGlmIGl0IHdlcmUgaW1wbGVtZW50ZWQgYXMgZm9sbG93czo8YnI+Cjxicj4KICAgICB0ZW1wbGF0ZSZsdDtjbGFzcyBULCBjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzJmd0OyZuYnNwOzxicj4KICAgICBiYXNpY19vc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsmbmJzcDs8YnI+CiAgICAgb3BlcmF0b3ImbHQ7Jmx0OyhiYXNpY19vc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsgbywgY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7IHgpJm5ic3A7PGJyPgogICAgIHsmbmJzcDs8YnI+CiAgICAgICAgICAgICBiYXNpY19vc3RyaW5nc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7IHM7Jm5ic3A7PGJyPgogICAgICAgICAgICAgcy5mbGFncyhvLmZsYWdzKCkpOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMuaW1idWUoby5nZXRsb2MoKSk7Jm5ic3A7PGJyPgogICAgICAgICAgICAgcy5wcmVjaXNpb24oby5wcmVjaXNpb24oKSk7Jm5ic3A7PGJyPgogICAgICAgICAgICAgcyAmbHQ7Jmx0OyAnKCcgJmx0OyZsdDsgeC5yZWFsKCkgJmx0OyZsdDsgIiwiICZsdDsmbHQ7IHguaW1hZygpICZsdDsmbHQ7ICcpJzsmbmJzcDs8YnI+CiAgICAgICAgICAgICByZXR1cm4gbyAmbHQ7Jmx0OyBzLnN0cigpOyZuYnNwOzxicj4KICAgICB9PC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+SXMgaXQgaW50ZW5kZWQgdGhhdCB0aGUgaW5zZXJ0ZXIgZm9yIGNvbXBsZXggbnVtYmVycyBpZ25vcmVzIHRoZQpmaWVsZCB3aWR0aCBhbmQgZG9lcyBub3QgZG8gYW55IHBhZGRpbmc/IElmLCB3aXRoIHRoZSBzdWdnZXN0ZWQKaW1wbGVtZW50YXRpb24gYWJvdmUsIHRoZSBmaWVsZCB3aWR0aCB3ZXJlIHNldCBpbiB0aGUgc3RyZWFtIHRoZW4gdGhlCm9wZW5pbmcgcGFyZW50aGVzZXMgd291bGQgYmUgYWRqdXN0ZWQsIGJ1dCB0aGUgcmVzdCBub3QsIGJlY2F1c2UgdGhlCmZpZWxkIHdpZHRoIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaCBpbnNlcnRpb24uPC9wPgoKPHA+SSB0aGluayB0aGF0IGJvdGggb3BlcmF0aW9ucyBzaG91bGQgdXNlIHNlbnRyaWVzLCBmb3Igc2FrZSBvZgpjb25zaXN0ZW5jeSB3aXRoIHRoZSBvdGhlciBpbnNlcnRlcnMgYW5kIGV4dHJhY3RvcnMgaW4gdGhlCmxpYnJhcnkuIFJlZ2FyZGluZyB0aGUgaXNzdWUgb2YgcGFkZGluZyBpbiB0aGUgaW5zZXJ0ZXIsIEkgZG9uJ3Qga25vdwp3aGF0IHRoZSBpbnRlbnQgd2FzLiZuYnNwOzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZnRlciAyNi4zLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5vcHMiPiBbbGliLmNvbXBsZXgub3BzXTwvYT4gcGFyYWdyYXBoIDE0IChvcGVyYXRvciZndDsmZ3Q7KSwgYWRkIGEKTm90ZXMgY2xhdXNlOjwvcD4KCjxibG9ja3F1b3RlPgoKPHA+Tm90ZXM6IFRoaXMgZXh0cmFjdGlvbiBpcyBwZXJmb3JtZWQgYXMgYSBzZXJpZXMgb2Ygc2ltcGxlcgpleHRyYWN0aW9ucy4gVGhlcmVmb3JlLCB0aGUgc2tpcHBpbmcgb2Ygd2hpdGVzcGFjZSBpcyBzcGVjaWZpZWQgdG8gYmUgdGhlCnNhbWUgZm9yIGVhY2ggb2YgdGhlIHNpbXBsZXIgZXh0cmFjdGlvbnMuPC9wPgoKPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rm9yIGV4dHJhY3RvcnMsIHRoZSBub3RlIGlzIGFkZGVkIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBza2lwcGluZyB3aGl0ZXNwYWNlCmZvbGxvd3MgYW4gImFsbC1vci1ub25lIiBydWxlLjwvcD4KCjxwPkZvciBpbnNlcnRlcnMsIHRoZSBMV0cgYmVsaWV2ZXMgdGhlcmUgaXMgbm8gZGVmZWN0OyB0aGUgc3RhbmRhcmQgaXMgY29ycmVjdAphcyB3cml0dGVuLjwvcD4KPGhyPgo8YSBuYW1lPSIxNDciPjxoMz4xNDcuJm5ic3A7TGlicmFyeSBJbnRybyByZWZlcnMgdG8gZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBnbG9iYWw8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5nbG9iYWwuZnVuY3Rpb25zIj4gW2xpYi5nbG9iYWwuZnVuY3Rpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TG9pcyBHb2xkdGh3YWl0ZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IEp1biAxOTk5PC9wPgo8cD5UaGUgbGlicmFyeSBoYWQgbWFueSBnbG9iYWwgZnVuY3Rpb25zIHVudGlsIDE3LjQuMS4xIFtsaWIuY29udGVudHNdCnBhcmFncmFwaCAyIHdhcyBhZGRlZDogPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD5BbGwgbGlicmFyeSBlbnRpdGllcyBleGNlcHQgbWFjcm9zLCBvcGVyYXRvciBuZXcgYW5kIG9wZXJhdG9yCmRlbGV0ZSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG5hbWVzcGFjZSBzdGQgb3IgbmFtZXNwYWNlcyBuZXN0ZWQKd2l0aGluIG5hbWVzcGFjZSBzdGQuIDwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPkl0IGFwcGVhcnMgImdsb2JhbCBmdW5jdGlvbiIgd2FzIG5ldmVyIHVwZGF0ZWQgaW4gdGhlIGZvbGxvd2luZzogPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4xNy40LjQuMyAtIEdsb2JhbCBmdW5jdGlvbnMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXTxicj4KPGJyPgotMS0gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBhbnkgZ2xvYmFsIGZ1bmN0aW9ucyBpbiB0aGUgQysrIFN0YW5kYXJkCkxpYnJhcnkgYXJlIGRlZmluZWQgYXMgaW5saW5lIChkY2wuZmN0LnNwZWMpLjxicj4KPGJyPgotMi0gQSBjYWxsIHRvIGEgZ2xvYmFsIGZ1bmN0aW9uIHNpZ25hdHVyZSBkZXNjcmliZWQgaW4gQ2xhdXNlcwpsaWIubGFuZ3VhZ2Uuc3VwcG9ydCB0aHJvdWdoIGxpYi5pbnB1dC5vdXRwdXQgYmVoYXZlcyB0aGUgc2FtZSBhcyBpZgp0aGUgaW1wbGVtZW50YXRpb24gZGVjbGFyZXMgbm8gYWRkaXRpb25hbCBnbG9iYWwgZnVuY3Rpb24Kc2lnbmF0dXJlcy4qPGJyPgo8YnI+CiAgICBbRm9vdG5vdGU6IEEgdmFsaWQgQysrIHByb2dyYW0gYWx3YXlzIGNhbGxzIHRoZSBleHBlY3RlZCBsaWJyYXJ5CiAgICBnbG9iYWwgZnVuY3Rpb24uIEFuIGltcGxlbWVudGF0aW9uIG1heSBhbHNvIGRlZmluZSBhZGRpdGlvbmFsCiAgICBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgd291bGQgb3RoZXJ3aXNlIG5vdCBiZSBjYWxsZWQgYnkgYSB2YWxpZCBDKysKICAgIHByb2dyYW0uIC0tLSBlbmQgZm9vdG5vdGVdPGJyPgo8YnI+Ci0zLSBBIGdsb2JhbCBmdW5jdGlvbiBjYW5ub3QgYmUgZGVjbGFyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIGFzCnRha2luZyBhZGRpdGlvbmFsIGRlZmF1bHQgYXJndW1lbnRzLiZuYnNwOzxicj4KPGJyPgoxNy40LjQuNCAtIE1lbWJlciBmdW5jdGlvbnMgW2xpYi5tZW1iZXIuZnVuY3Rpb25zXTxicj4KPGJyPgotMi0gQW4gaW1wbGVtZW50YXRpb24gY2FuIGRlY2xhcmUgYWRkaXRpb25hbCBub24tdmlydHVhbCBtZW1iZXIKZnVuY3Rpb24gc2lnbmF0dXJlcyB3aXRoaW4gYSBjbGFzczogPC9wPgoKICA8YmxvY2txdW90ZT4KCjxwPi0tIGJ5IGFkZGluZyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyB0byBhIG1lbWJlciBmdW5jdGlvbgpzaWduYXR1cmU7IFRoZSBzYW1lIGxhdGl0dWRlIGRvZXMgbm90IGV4dGVuZCB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YKdmlydHVhbCBvciBnbG9iYWwgZnVuY3Rpb25zLCBob3dldmVyLiA8L3A+CgogIDwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiAgICAgQ2hhbmdlICJnbG9iYWwiIHRvICJnbG9iYWwgb3Igbm9uLW1lbWJlciIgaW46PC9wPgo8YmxvY2txdW90ZT4KICA8cD4xNy40LjQuMyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIHNlY3Rpb24gdGl0bGUsPGJyPgogIDE3LjQuNC4zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc10gcGFyYSAxLDxicj4KICAxNy40LjQuMyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIHBhcmEgMiBpbiAyIHBsYWNlcyBwbHVzIDIgCiAgICAgICAgICAgcGxhY2VzIGluIHRoZSBmb290bm90ZSw8YnI+CiAgMTcuNC40LjMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXSBwYXJhIDMsPGJyPgogIDE3LjQuNC40IFtsaWIubWVtYmVyLmZ1bmN0aW9uc10gcGFyYSAyPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KQmVjYXVzZSBvcGVyYXRvciBuZXcgYW5kIGRlbGV0ZSBhcmUgZ2xvYmFsLCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbgp3YXMgY2hhbmdlZCBmcm9tICJub24tbWVtYmVyIiB0byAiZ2xvYmFsIG9yIG5vbi1tZW1iZXIuCjwvcD4KPGhyPgo8YSBuYW1lPSIxNDgiPjxoMz4xNDguJm5ic3A7RnVuY3Rpb25zIGluIHRoZSBleGFtcGxlIGZhY2V0IEJvb2xOYW1lcyBzaG91bGQgYmUgY29uc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldHMuZXhhbXBsZXMiPiBbbGliLmZhY2V0cy5leGFtcGxlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0plcmVteSBTaWVrJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVuIDE5OTk8L3A+CjxwPkluIDIyLjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0cy5leGFtcGxlcyI+IFtsaWIuZmFjZXRzLmV4YW1wbGVzXTwvYT4gcGFyYWdyYXBoIDEzLCB0aGUgZG9fdHJ1ZW5hbWUoKSBhbmQKZG9fZmFsc2VuYW1lKCkgZnVuY3Rpb25zIGluIHRoZSBleGFtcGxlIGZhY2V0IEJvb2xOYW1lcyBzaG91bGQgYmUKY29uc3QuIFRoZSBmdW5jdGlvbnMgdGhleSBhcmUgb3ZlcnJpZGluZyBpbgpudW1wdW5jdF9ieW5hbWUmbHQ7Y2hhciZndDsgYXJlIGNvbnN0LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXRzLmV4YW1wbGVzIj4gW2xpYi5mYWNldHMuZXhhbXBsZXNdPC9hPiBwYXJhZ3JhcGggMTMsIGluc2VydCAiY29uc3QiIGluCnR3byBwbGFjZXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD48dHQ+c3RyaW5nIGRvX3RydWVuYW1lKCkgY29uc3QgeyByZXR1cm4gIk91aSBPdWkhIjsgfTxicj4KICBzdHJpbmcgZG9fZmFsc2VuYW1lKCkgY29uc3QgeyByZXR1cm4gIk1haXMgTm9uISI7IH08L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE1MCI+PGgzPjE1MC4mbmJzcDtGaW5kX2ZpcnN0X29mIHNheXMgaW50ZWdlciBpbnN0ZWFkIG9mIGl0ZXJhdG9yIDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5maW5kLmZpcnN0Lm9mIj4gW2xpYi5hbGcuZmluZC5maXJzdC5vZl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgTWNDbHVyZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBKdW4gMTk5OTwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjUuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbmQuZmlyc3Qub2YiPiBbbGliLmFsZy5maW5kLmZpcnN0Lm9mXTwvYT4gcGFyYWdyYXBoIDIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+UmV0dXJuczogVGhlIGZpcnN0IGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtmaXJzdDEsIGxhc3QxKSBzdWNoCnRoYXQgZm9yIHNvbWUgPHU+aW50ZWdlcjwvdT4gaiBpbiB0aGUgcmFuZ2UgW2ZpcnN0MiwgbGFzdDIpIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPlJldHVybnM6IFRoZSBmaXJzdCBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QxLCBsYXN0MSkgc3VjaAp0aGF0IGZvciBzb21lIGl0ZXJhdG9yIGogaW4gdGhlIHJhbmdlIFtmaXJzdDIsIGxhc3QyKSAuLi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNTEiPjxoMz4xNTEuJm5ic3A7Q2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2VxdWVuY2UucmVxbXRzIj4gW2xpYi5zZXF1ZW5jZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtFZCBCcmV5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1biAxOTk5PC9wPgo8cD5Gb3IgYm90aCBzZXF1ZW5jZXMgYW5kIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIGEuY2xlYXIoKSBoYXMgdGhlCnNlbWFudGljcyBvZiBlcmFzZShhLmJlZ2luKCksYS5lbmQoKSksIHdoaWNoIGlzIHVuZGVmaW5lZCBmb3IgYW4gZW1wdHkKY29udGFpbmVyIHNpbmNlIGVyYXNlKHExLHEyKSByZXF1aXJlcyB0aGF0IHExIGJlIGRlcmVmZXJlbmNlYWJsZQooMjMuMS4xLDMgYW5kIDIzLjEuMiw3KS4gIFdoZW4gdGhlIGNvbnRhaW5lciBpcyBlbXB0eSwgYS5iZWdpbigpIGlzCm5vdCBkZXJlZmVyZW5jZWFibGUuPGJyPgo8YnI+ClRoZSByZXF1aXJlbWVudCB0aGF0IHExIGJlIHVuY29uZGl0aW9uYWxseSBkZXJlZmVyZW5jZWFibGUgY2F1c2VzIG1hbnkKb3BlcmF0aW9ucyB0byBiZSBpbnR1aXRpdmVseSB1bmRlZmluZWQsIG9mIHdoaWNoIGNsZWFyaW5nIGFuIGVtcHR5CmNvbnRhaW5lciBpcyBwcm9iYWJseSB0aGUgbW9zdCBkaXJlLjxicj4KPGJyPgpTaW5jZSBxMSBhbmQgcTIgYXJlIG9ubHkgcmVmZXJlbmNlZCBpbiB0aGUgcmFuZ2UgW3ExLCBxMiksIGFuZCBbcTEsCnEyKSBpcyByZXF1aXJlZCB0byBiZSBhIHZhbGlkIHJhbmdlLCBzdGF0aW5nIHRoYXQgcTEgYW5kIHEyIG11c3QgYmUKaXRlcmF0b3JzIG9yIGNlcnRhaW4ga2luZHMgb2YgaXRlcmF0b3JzIGlzIHVubmVjZXNzYXJ5Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMS4xLCBwYXJhZ3JhcGggMywgY2hhbmdlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+cCBhbmQgcTIgZGVub3RlIHZhbGlkIGl0ZXJhdG9ycyB0byBhLCBxIDx1PiBhbmQgcTE8L3U+IGRlbm90ZSB2YWxpZCBkZXJlZmVyZW5jZWFibGUgaXRlcmF0b3JzIHRvIGEsIFtxMSwgcTIpIGRlbm90ZXMgYSB2YWxpZCByYW5nZTwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnAgZGVub3RlcyBhIHZhbGlkIGl0ZXJhdG9yIHRvIGEsIHEgZGVub3RlcyBhIHZhbGlkIGRlcmVmZXJlbmNlYWJsZSBpdGVyYXRvciB0byBhLCBbcTEsIHEyKSBkZW5vdGVzIGEgdmFsaWQgcmFuZ2U8dT4KICBpbiBhPC91PjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiAyMy4xLjIsIHBhcmFncmFwaCA3LCBjaGFuZ2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wIGFuZCBxMiBhcmUgdmFsaWQgaXRlcmF0b3JzIHRvIGEsIHEgPHU+IGFuZCBxMTwvdT4gYXJlIHZhbGlkIGRlcmVmZXJlbmNlYWJsZQogIGl0ZXJhdG9ycyB0byBhLCBbcTEsIHEyKSBpcyBhIHZhbGlkIHJhbmdlPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgo8YmxvY2txdW90ZT4KICA8cD5wIGlzIGEgdmFsaWQgaXRlcmF0b3IgdG8gYSwgcSBpcyBhIHZhbGlkIGRlcmVmZXJlbmNlYWJsZSBpdGVyYXRvciB0byBhLCBbcTEsIHEyKSBpcyBhIHZhbGlkIHJhbmdlCiAgPHU+aW50byBhPC91PjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE1MiI+PGgzPjE1Mi4mbmJzcDtUeXBvIGluIDx0dD5zY2FuX2lzKCk8L3R0PiBzZW1hbnRpY3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSBzZW1hbnRpY3Mgb2YgPHR0PnNjYW5faXMoKTwvdHQ+IChwYXJhZ3JhcGhzIDQgYW5kIDYpIGlzIG5vdCBleGFjdGx5IGRlc2NyaWJlZApiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1bmN0aW9uIDx0dD5pcygpPC90dD4gd2hpY2ggb25seSB0YWtlcyBhIGNoYXJhY3RlciBhcwphcmd1bWVudC4gQWxzbywgaW4gdGhlIGVmZmVjdHMgY2xhdXNlIChwYXJhZ3JhcGggMyksIHRoZSBzZW1hbnRpYyBpcyBhbHNvIGtlcHQKdmFndWUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFsc108L2E+IHBhcmFncmFwaHMgNCBhbmQgNiwgY2hhbmdlIHRoZSByZXR1cm5zCmNsYXVzZSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+Ii4uLiBzdWNoIHRoYXQgPHR0PmlzKCpwKTwvdHQ+CndvdWxkLi4uIjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzombmJzcDsgIi4uLiBzdWNoIHRoYXQgPHR0PmlzKG0sICpwKTwvdHQ+CiB3b3VsZC4uLi4iPC9wPgo8aHI+CjxhIG5hbWU9IjE1MyI+PGgzPjE1My4mbmJzcDtUeXBvIGluIDx0dD5uYXJyb3coKTwvdHQ+IHNlbWFudGljczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBhcnJheSB2ZXJzaW9uIG9mIDx0dD5uYXJyb3coKTwvdHQ+IChpbgpwYXJhZ3JhcGggMTEpIGlzIGZsYXdlZDogVGhlcmUgaXMgbm8gbWVtYmVyIDx0dD5kb19uYXJyb3coKTwvdHQ+IHdoaWNoCnRha2VzIG9ubHkgdGhyZWUgYXJndW1lbnRzIGJlY2F1c2UgaW4gYWRkaXRpb24gdG8gdGhlIHJhbmdlIGEgZGVmYXVsdApjaGFyYWN0ZXIgaXMgbmVlZGVkLjwvcD4KCjxwPkFkZGl0aW9uYWxseSwgZm9yIGJvdGggPHR0PndpZGVuPC90dD4gYW5kIDx0dD5uYXJyb3c8L3R0PiB3ZSBoYXZlCnR3byBzaWduYXR1cmVzIGZvbGxvd2VkIGJ5IGEgPGI+UmV0dXJuczwvYj4gY2xhdXNlIHRoYXQgb25seSBhZGRyZXNzZXMKb25lIG9mIHRoZW0uPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHJldHVybnMgY2xhdXNlIGluIDIyLjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPiBbbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc108L2E+CnBhcmFncmFwaCAxMCBmcm9tOjwvcD4KPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IFJldHVybnM6IGRvX3dpZGVuKGxvdywgaGlnaCwgdG8pLjwvcD4KCjxwPnRvOjwvcD4KPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IFJldHVybnM6IGRvX3dpZGVuKGMpIG9yIGRvX3dpZGVuKGxvdywgaGlnaCwgdG8pLCAKcmVzcGVjdGl2ZWx5LjwvcD4KCjxwPkNoYW5nZSAyMi4yLjEuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj4gW2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdPC9hPiBwYXJhZ3JhcGggMTAgYW5kIDExIGZyb206PC9wPgo8cHJlPiAgICAgICAgY2hhciAgICAgICAgbmFycm93KGNoYXIgYywgY2hhciAvKmRmYXVsdCovKSBjb25zdDsKICAgICAgICBjb25zdCBjaGFyKiBuYXJyb3coY29uc3QgY2hhciogbG93LCBjb25zdCBjaGFyKiBoaWdoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIC8qZGZhdWx0Ki8sIGNoYXIqIHRvKSBjb25zdDs8L3ByZT4KPHByZT4gICAgICAgIFJldHVybnM6IGRvX25hcnJvdyhsb3csIGhpZ2gsIHRvKS48L3ByZT4KPHA+dG86PC9wPgo8cHJlPiAgICAgICAgY2hhciAgICAgICAgbmFycm93KGNoYXIgYywgY2hhciBkZmF1bHQpIGNvbnN0OwogICAgICAgIGNvbnN0IGNoYXIqIG5hcnJvdyhjb25zdCBjaGFyKiBsb3csIGNvbnN0IGNoYXIqIGhpZ2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGZhdWx0LCBjaGFyKiB0bykgY29uc3Q7PC9wcmU+CjxwcmU+ICAgICAgICBSZXR1cm5zOiBkb19uYXJyb3coYywgZGZhdWx0KSBvcgogICAgICAgICAgICAgICAgIGRvX25hcnJvdyhsb3csIGhpZ2gsIGRmYXVsdCwgdG8pLCByZXNwZWN0aXZlbHkuPC9wcmU+Cgo8cD48aT5bS29uYTogMSkgdGhlIHByb2JsZW0gb2NjdXJzIGluIGFkZGl0aW9uYWwgcGxhY2VzLCAyKSBhIHVzZXIKZGVmaW5lZCB2ZXJzaW9uIGNvdWxkIGJlIGRpZmZlcmVudC5dPC9pPjwvcD4KCjxwPjxpPltQb3N0LVRva3lvOiBEaWV0bWFyIHByb3ZpZGVkIHRoZSBhYm92ZSB3b3JkaW5nIGF0IHRoZSByZXF1ZXN0IG9mCnRoZSBMV0cuIEhlIGNvdWxkIGZpbmQgbm8gb3RoZXIgcGxhY2VzIHRoZSBwcm9ibGVtIG9jY3VycmVkLiBIZQphc2tzIGZvciBjbGFyaWZpY2F0aW9uIG9mIHRoZSBLb25hICJhIHVzZXIgZGVmaW5lZAp2ZXJzaW9uLi4uIiBjb21tZW50IGFib3ZlLiAgUGVyaGFwcyBpdCB3YXMgYSBjaXJjdWl0b3VzIHdheSBvZgpzYXlpbmcgImRmYXVsdCIgbmVlZGVkIHRvIGJlIHVuY29tbWVudGVkP108L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9yb250bzogdGhlIGlzc3VlcyBsaXN0IG1haW50YWluZXIgaGFzIG1lcmdlZCBpbiB0aGUKcHJvcG9zZWQgcmVzb2x1dGlvbiBmcm9tIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzIwNyI+MjA3PC9hPiwgd2hpY2ggYWRkcmVzc2VzIHRoZQpzYW1lIHBhcmFncmFwaHMuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTU0Ij48aDM+MTU0LiZuYnNwO01pc3NpbmcgPHR0PmRvdWJsZTwvdHQ+IHNwZWNpZmllciBmb3IgPHR0PmRvX2dldCgpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSB0YWJsZSBpbiBwYXJhZ3JhcGggNyBmb3IgdGhlIGxlbmd0aCBtb2RpZmllciBkb2VzIG5vdCBsaXN0IHRoZSBsZW5ndGgKbW9kaWZpZXIgPHR0Pmw8L3R0PiB0byBiZSBhcHBsaWVkIGlmIHRoZSB0eXBlIGlzIDx0dD5kb3VibGU8L3R0Pi4gVGh1cywgdGhlCnN0YW5kYXJkIGFza3MgdGhlIGltcGxlbWVudGF0aW9uIHRvIGRvIHVuZGVmaW5lZCB0aGluZ3Mgd2hlbiB1c2luZyA8dHQ+c2NhbmYoKTwvdHQ+Cih0aGUgbWlzc2luZyBsZW5ndGggbW9kaWZpZXIgZm9yIDx0dD5zY2FuZigpPC90dD4gd2hlbiBzY2FubmluZyA8dHQ+ZG91YmxlPC90dD5zCmlzIGFjdHVhbGx5IGEgcHJvYmxlbSBJIGZvdW5kIHF1aXRlIG9mdGVuIGluIHByb2R1Y3Rpb24gY29kZSwgdG9vKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDcsIGFkZCBhIHJvdyBpbiB0aGUgTGVuZ3RoCk1vZGlmaWVyIHRhYmxlIHRvIHNheSB0aGF0IGZvciA8dHQ+ZG91YmxlPC90dD4gYSBsZW5ndGggbW9kaWZpZXIKPHR0Pmw8L3R0PiBpcyB0byBiZSB1c2VkLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBzdGFuZGFyZCBtYWtlcyBhbiBlbWJhcnJhc3NpbmcgYmVnaW5uZXIncyBtaXN0YWtlLjwvcD4KPGhyPgo8YSBuYW1lPSIxNTUiPjxoMz4xNTUuJm5ic3A7VHlwbyBpbiBuYW1pbmcgdGhlIGNsYXNzIGRlZmluaW5nIHRoZSBjbGFzcyA8dHQ+SW5pdDwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RyZWFtLm9iamVjdHMiPiBbbGliLmlvc3RyZWFtLm9iamVjdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZXJlIGFyZSBjb25mbGljdGluZyBzdGF0ZW1lbnRzIGFib3V0IHdoZXJlIHRoZSBjbGFzcwo8dHQ+SW5pdDwvdHQ+IGlzIGRlZmluZWQuIEFjY29yZGluZyB0byAyNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbS5vYmplY3RzIj4gW2xpYi5pb3N0cmVhbS5vYmplY3RzXTwvYT4gcGFyYWdyYXBoIDIKaXQgaXMgZGVmaW5lZCBhcyA8dHQ+YmFzaWNfaW9zOjpJbml0PC90dD4sIGFjY29yZGluZyB0byAyNy40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlIj4gW2xpYi5pb3MuYmFzZV08L2E+IGl0IGlzIGRlZmluZWQgYXMgPHR0Pmlvc19iYXNlOjpJbml0PC90dD4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbS5vYmplY3RzIj4gW2xpYi5pb3N0cmVhbS5vYmplY3RzXTwvYT4gcGFyYWdyYXBoIDIgZnJvbQoiPHR0PmJhc2ljX2lvczo6SW5pdCI8L3R0PiB0bwoiPHR0Pmlvc19iYXNlOjpJbml0IjwvdHQ+LjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkFsdGhvdWdoIG5vdCBzdHJpY3RseSB3cm9uZywgdGhlIHN0YW5kYXJkIHdhcyBtaXNsZWFkaW5nIGVub3VnaCB0byB3YXJyYW50CnRoZSBjaGFuZ2UuPC9wPgo8aHI+CjxhIG5hbWU9IjE1NiI+PGgzPjE1Ni4mbmJzcDtUeXBvIGluIDx0dD5pbWJ1ZSgpPC90dD4gZGVzY3JpcHRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UubG9jYWxlcyI+IFtsaWIuaW9zLmJhc2UubG9jYWxlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlcmUgaXMgYSBzbWFsbCBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBkZWNsYXJhdGlvbnMgb2YKPHR0PmltYnVlKCk8L3R0PjogaW4gMjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGFzCjx0dD5sb2NhbGUgY29uc3QmYW1wOzwvdHQ+IChjb3JyZWN0KSwgaW4gMjcuNC4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLmxvY2FsZXMiPiBbbGliLmlvcy5iYXNlLmxvY2FsZXNdPC9hPiBpdAppcyBwYXNzZWQgYXMgPHR0PmxvY2FsZSBjb25zdDwvdHQ+ICh3cm9uZykuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjQuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZS5sb2NhbGVzIj4gW2xpYi5pb3MuYmFzZS5sb2NhbGVzXTwvYT4gY2hhbmdlIHRoZSA8dHQ+aW1idWU8L3R0PiBhcmd1bWVudApmcm9tICI8dHQ+bG9jYWxlIGNvbnN0IiB0byAibG9jYWxlCmNvbnN0JmFtcDsiLjwvdHQ+PC9wPgo8aHI+CjxhIG5hbWU9IjE1OCI+PGgzPjE1OC4mbmJzcDtVbmRlcnNwZWNpZmllZCBzZW1hbnRpY3MgZm9yIDx0dD5zZXRidWYoKTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjUuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgZGVmYXVsdCBiZWhhdmlvciBvZiA8dHQ+c2V0YnVmKCk8L3R0PiBpcyBkZXNjcmliZWQgb25seSBmb3IgdGhlCnNpdHVhdGlvbiB0aGF0IDx0dD5ncHRyKCkgIT0gMCAmYW1wOyZhbXA7IGdwdHIoKSAhPSBlZ3B0cigpPC90dD46Cm5hbWVseSB0byBkbyBub3RoaW5nLiAgV2hhdCBoYXMgdG8gYmUgZG9uZSBpbiBvdGhlciBzaXR1YXRpb25zJm5ic3A7CmlzIG5vdCBkZXNjcmliZWQgYWx0aG91Z2ggdGhlcmUgaXMgYWN0dWFsbHkgb25seSBvbmUgcmVhc29uYWJsZQphcHByb2FjaCwgbmFtZWx5IHRvIGRvIG5vdGhpbmcsIHRvby48L3A+IAoKPHA+U2luY2UgY2hhbmdpbmcgdGhlIGJ1ZmZlciB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IG1lc3MgdXAgbW9zdApidWZmZXIgbWFuYWdlbWVudCBvZiBkZXJpdmVkIGNsYXNzZXMgdW5sZXNzIHRoZXNlIGNsYXNzZXMgZG8gaXQKdGhlbXNlbHZlcywgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgPHR0PnNldGJ1ZigpPC90dD4gc2hvdWxkIGFsd2F5cyBiZQp0byBkbyBub3RoaW5nLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNS4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyIj4gW2xpYi5zdHJlYW1idWYudmlydC5idWZmZXJdPC9hPiwgcGFyYWdyYXBoIDMsIERlZmF1bHQgYmVoYXZpb3IsCnRvOiAiRGVmYXVsdCBiZWhhdmlvcjogRG9lcyBub3RoaW5nLiBSZXR1cm5zIHRoaXMuIjwvcD4KPGhyPgo8YSBuYW1lPSIxNTkiPjxoMz4xNTkuJm5ic3A7U3RyYW5nZSB1c2Ugb2YgPHR0PnVuZGVyZmxvdygpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQuZ2V0Ij4gW2xpYi5zdHJlYW1idWYudmlydC5nZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVhbmluZyBvZiB0aGUgcmVzdWx0IG9mCjx0dD5zaG93bWFueWMoKTwvdHQ+IHNlZW1zIHRvIGJlIHJhdGhlciBzdHJhbmdlOiBJdCB1c2VzIGNhbGxzIHRvCjx0dD51bmRlcmZsb3coKTwvdHQ+LiBVc2luZyA8dHQ+dW5kZXJmbG93KCk8L3R0PiBpcyBzdHJhbmdlIGJlY2F1c2UKdGhpcyBmdW5jdGlvbiBvbmx5IHJlYWRzIHRoZSBjdXJyZW50IGNoYXJhY3RlciBidXQgZG9lcyBub3QgZXh0cmFjdAppdCwgPHR0PnVmbG93KCk8L3R0PiB3b3VsZCBleHRyYWN0IHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gVGhpcyBzaG91bGQKYmUgZml4ZWQgdG8gdXNlIDx0dD5zYnVtcGMoKTwvdHQ+IGluc3RlYWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy41LjIuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5nZXQiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmdldF08L2E+IHBhcmFncmFwaCAxLAo8dHQ+c2hvd21hbnljKCk8L3R0PnJldHVybnMgY2xhdXNlLCBieSByZXBsYWNpbmcgdGhlIHdvcmQKInN1cHBsaWVkIiB3aXRoIHRoZSB3b3JkcyAiZXh0cmFjdGVkIGZyb20gdGhlCnN0cmVhbSIuPC9wPgo8aHI+CjxhIG5hbWU9IjE2MCI+PGgzPjE2MC4mbmJzcDtUeXBvOiBVc2Ugb2Ygbm9uLWV4aXN0aW5nIGZ1bmN0aW9uIDx0dD5leGNlcHRpb24oKTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtIj4gW2xpYi5pc3RyZWFtXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgcGFyYWdyYXBoIDQgcmVmZXJzIHRvIHRoZSBmdW5jdGlvbiA8dHQ+ZXhjZXB0aW9uKCk8L3R0PiB3aGljaAppcyBub3QgZGVmaW5lZC4gUHJvYmFibHksIHRoZSByZWZlcnJlZCBmdW5jdGlvbiBpcwo8dHQ+YmFzaWNfaW9zJmx0OyZndDs6OmV4Y2VwdGlvbnMoKTwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbSI+IFtsaWIuaXN0cmVhbV08L2E+LCAyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+LCBwYXJhZ3JhcGggMSwKMjcuNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0iPiBbbGliLm9zdHJlYW1dPC9hPiwgcGFyYWdyYXBoIDMsIGFuZCAyNy42LjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+LApwYXJhZ3JhcGggMSwgY2hhbmdlICI8dHQ+ZXhjZXB0aW9uKCkiIHRvCiJleGNlcHRpb25zKCkiPC90dD4uPC9wPgoKPHA+PGk+W05vdGUgdG8gRWRpdG9yOiAiZXhjZXB0aW9ucyIgd2l0aCBhbiAicyIKaXMgdGhlIGNvcnJlY3Qgc3BlbGxpbmcuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTYxIj48aDM+MTYxLiZuYnNwO1R5cG86IDx0dD5pc3RyZWFtX2l0ZXJhdG9yPC90dD4gdnMuIDx0dD5pc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpYyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIG5vdGUgaW4gdGhlIHNlY29uZCBwYXJhZ3JhcGggcHJldGVuZHMgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQKaXMgYW4gb2JqZWN0IG9mIHR5cGUgPHR0PmlzdHJlYW1faXRlcmF0b3I8L3R0Pi4gVGhpcyBpcyB3cm9uZzogSXQgaXMKYW4gb2JqZWN0IG9mIHR5cGUgPHR0PmlzdHJlYW1idWZfaXRlcmF0b3I8L3R0Pi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjYuMS4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWNdPC9hPiBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGZpcnN0IGFyZ3VtZW50IHByb3ZpZGVzIGFuIG9iamVjdCBvZiB0aGUgaXN0cmVhbV9pdGVyYXRvciBjbGFzcy4uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGZpcnN0IGFyZ3VtZW50IHByb3ZpZGVzIGFuIG9iamVjdCBvZiB0aGUgaXN0cmVhbWJ1Zl9pdGVyYXRvciBjbGFzcy4uLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE2NCI+PGgzPjE2NC4mbmJzcDtkb19wdXQoKSBoYXMgYXBwYXJlbnRseSB1bnVzZWQgZmlsbCBhcmd1bWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5wdXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS50aW1lLnB1dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdWwgMTk5OTwvcD4KPHA+SW4gMjIuMi41LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS50aW1lLnB1dC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLnRpbWUucHV0LnZpcnR1YWxzXTwvYT4gdGhlIGRvX3B1dCgpIGZ1bmN0aW9uIGlzIHNwZWNpZmllZAphcyB0YWtpbmcgYSBmaWxsIGNoYXJhY3RlciBhcyBhbiBhcmd1bWVudCwgYnV0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKZnVuY3Rpb24gZG9lcyBub3Qgc2F5IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyB1c2VkIGF0IGFsbCBhbmQsIGlmIHNvLAppbiB3aGljaCB3YXkuIFRoZSBzYW1lIGhvbGRzIGZvciBhbnkgZm9ybWF0IGNvbnRyb2wgcGFyYW1ldGVycyB0aGF0CmFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGlvc19iYXNlJmFtcDsgYXJndW1lbnQsIHN1Y2ggYXMgdGhlCmFkanVzdG1lbnQgb3IgdGhlIGZpZWxkIHdpZHRoLiBJcyBzdHJmdGltZSgpIHN1cHBvc2VkIHRvIHVzZSB0aGUgZmlsbApjaGFyYWN0ZXIgaW4gYW55IHdheT8gSW4gYW55IGNhc2UsIHRoZSBzcGVjaWZpY2F0aW9uIG9mCnRpbWVfcHV0LmRvX3B1dCgpIGxvb2tzIGluY29uc2lzdGVudCB0byBtZS48YnI+IDxicj4gSXMgdGhlCnNpZ25hdHVyZSBvZiBkb19wdXQoKSB3cm9uZywgb3IgaXMgdGhlIGVmZmVjdHMgY2xhdXNlIGluY29tcGxldGU/PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIG5vdGUgYWZ0ZXIgMjIuMi41LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS50aW1lLnB1dC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLnRpbWUucHV0LnZpcnR1YWxzXTwvYT4KcGFyYWdyYXBoIDI6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4gIFtOb3RlOiB0aGUgPHR0PmZpbGw8L3R0PiBhcmd1bWVudCBtYXkgYmUgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24tZGVmaW5lZCAgZm9ybWF0cywgb3IgYnkgZGVyaXZhdGlvbnMuICBBIHNwYWNlIGNoYXJhY3RlciBpcyBhIHJlYXNvbmFibGUgZGVmYXVsdAogIGZvciB0aGlzIGFyZ3VtZW50LiAtLWVuZCBOb3RlXTwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBmZWx0IHRoYXQgd2hpbGUgdGhlIG5vcm1hdGl2ZSB0ZXh0IHdhcyBjb3JyZWN0LAp1c2VycyBuZWVkIHNvbWUgZ3VpZGFuY2Ugb24gd2hhdCB0byBwYXNzIGZvciB0aGUgPHR0PmZpbGw8L3R0Pgphcmd1bWVudCBzaW5jZSB0aGUgc3RhbmRhcmQgZG9lc24ndCBzYXkgaG93IGl0J3MgdXNlZC48L3A+Cjxocj4KPGEgbmFtZT0iMTY1Ij48aDM+MTY1LiZuYnNwOzx0dD54c3B1dG4oKTwvdHQ+LCA8dHQ+cHVic3luYygpPC90dD4gbmV2ZXIgY2FsbGVkIGJ5IDx0dD5iYXNpY19vc3RyZWFtPC90dD4gbWVtYmVycz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbSI+IFtsaWIub3N0cmVhbV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+UGFyYWdyYXBoIDIgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBub25lIG9mIHRoZSA8dHQ+YmFzaWNfb3N0cmVhbTwvdHQ+CmZ1bmN0aW9ucyBmYWxsaW5nIGludG8gb25lIG9mIHRoZSBncm91cHMgImZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIgphbmQgInVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMiIGNhbGxzIGFueSBzdHJlYW0gYnVmZmVyIGZ1bmN0aW9uCndoaWNoIG1pZ2h0IGNhbGwgYSB2aXJ0dWFsIGZ1bmN0aW9uIG90aGVyIHRoYW4gPHR0Pm92ZXJmbG93KCk8L3R0Pi4gQmFzaWNhbGx5CnRoaXMgaXMgZmluZSBidXQgdGhpcyBpbXBsaWVzIHRoYXQgPHR0PnNwdXRuKCk8L3R0PiAodGhpcyBmdW5jdGlvbiB3b3VsZCBjYWxsCnRoZSB2aXJ0dWFsIGZ1bmN0aW9uIDx0dD54c3B1dG4oKTwvdHQ+KSBpcyBuZXZlciBjYWxsZWQgYnkgYW55IG9mIHRoZSBzdGFuZGFyZApvdXRwdXQgZnVuY3Rpb25zLiBJcyB0aGlzIHJlYWxseSBpbnRlbmRlZD8gQXQgbWluaW11bSBpdCB3b3VsZCBiZSBjb252ZW5pZW50IHRvCmNhbGwgPHR0PnhzcHV0bigpPC90dD4gZm9yIHN0cmluZ3MuLi4gQWxzbywgdGhlIHN0YXRlbWVudCB0aGF0IDx0dD5vdmVyZmxvdygpPC90dD4KaXMgdGhlIG9ubHkgdmlydHVhbCBtZW1iZXIgb2YgPHR0PmJhc2ljX3N0cmVhbWJ1ZjwvdHQ+IGNhbGxlZCBpcyBpbiBjb25mbGljdAp3aXRoIHRoZSBkZWZpbml0aW9uIG9mIDx0dD5mbHVzaCgpPC90dD4gd2hpY2ggY2FsbHMgPHR0PnJkYnVmKCktJmd0O3B1YnN5bmMoKTwvdHQ+CmFuZCB0aGVyZWJ5IHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIDx0dD5zeW5jKCk8L3R0PiAoPHR0PmZsdXNoKCk8L3R0PiBpcyBsaXN0ZWQKdW5kZXIgInVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMiKS48L3A+CjxwPkluIGFkZGl0aW9uLCBJIGd1ZXNzIHRoYXQgdGhlIHNlbnRlbmNlIHN0YXJ0aW5nIHdpdGggIlRoZXkgbWF5IHVzZSBvdGhlcgpwdWJsaWMgbWVtYmVycyBvZiA8dHQ+YmFzaWNfb3N0cmVhbTwvdHQ+IC4uLiIgcHJvYmFibHkgd2FzIGludGVuZGVkIHRvCnN0YXJ0IHdpdGggIlRoZXkgbWF5IHVzZSBvdGhlciBwdWJsaWMgbWVtYmVycyBvZiA8dHQ+YmFzaWNfc3RyZWFtdWY8L3R0Pi4uLiIKYWx0aG91Z2ggdGhlIHByb2JsZW0gd2l0aCB0aGUgdmlydHVhbCBtZW1iZXJzIGV4aXN0cyBpbiBib3RoIGNhc2VzLjwvcD4KPHA+SSBzZWUgdHdvIG9idmlvdXMgcmVzb2x1dGlvbnM6PC9wPgo8b2w+CiAgPGxpPnN0YXRlIGluIGEgZm9vdG5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgPHR0PnhzcHV0bigpPC90dD4gd2lsbCBuZXZlciBiZQogICAgY2FsbGVkIGJ5IGFueSBvc3RyZWFtIG1lbWJlciBhbmQgdGhhdCB0aGlzIGlzIGludGVuZGVkLjwvbGk+CiAgPGxpPnJlbGF4IHRoZSByZXN0cmljdGlvbiBhbmQgYWxsb3cgY2FsbGluZyA8dHQ+b3ZlcmZsb3coKTwvdHQ+IGFuZCA8dHQ+eHNwdXRuKCk8L3R0Pi4KICAgIE9mIGNvdXJzZSwgdGhlIHByb2JsZW0gd2l0aCA8dHQ+Zmx1c2goKTwvdHQ+IGhhcyB0byBiZSByZXNvbHZlZCBpbiBzb21lIHdheS48L2xpPgo8L29sPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgbGFzdCBzZW50ZW5jZSBvZiAyNy42LjIuMSAobGliLm9zdHJlYW0pIHBhcmFncmFwaCAyIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGV5IG1heSB1c2Ugb3RoZXIgcHVibGljIG1lbWJlcnMgb2YgYmFzaWNfb3N0cmVhbSBleGNlcHQgdGhhdCB0aGV5IGRvIG5vdAogIGludm9rZSBhbnkgdmlydHVhbCBtZW1iZXJzIG9mIHJkYnVmKCkgZXhjZXB0IG92ZXJmbG93KCkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhleSBtYXkgdXNlIG90aGVyIHB1YmxpYyBtZW1iZXJzIG9mIGJhc2ljX29zdHJlYW0gZXhjZXB0IHRoYXQgdGhleSBzaGFsbAogIG5vdCBpbnZva2UgYW55IHZpcnR1YWwgbWVtYmVycyBvZiByZGJ1ZigpIGV4Y2VwdCBvdmVyZmxvdygpLCB4c3B1dG4oKSwgYW5kCiAgc3luYygpLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IHRoZSBMV0cgYmVsaWV2ZXMgdGhpcyBpcyBhIHByb2JsZW0uIFdpc2ggdG8gYXNrIEplcnJ5IG9yClBKUCB3aHkgdGhlIHN0YW5kYXJkIGlzIHdyaXR0ZW4gdGhpcyB3YXkuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogRGlldG1hciBzdXBwbGllZCB3b3JkaW5nIGF0IHRoZSByZXF1ZXN0IG9mIHRoZQpMV0cuIEhlIGNvbW1lbnRzOiBUaGUgcnVsZXMgY2FuIGJlIG1hZGUgYSBsaXR0bGUgYml0IG1vcmUgc3BlY2lmaWMgaWYKbmVjZXNzYXJ5IGJlIGV4cGxpY2l0bHkgc3BlbGxpbmcgb3V0IHdoYXQgdmlydHVhbHMgYXJlIGFsbG93ZWQgdG8gYmUKY2FsbGVkIGZyb20gd2hhdCBmdW5jdGlvbnMgYW5kIGVnIHRvIHN0YXRlIHNwZWNpZmljYWxseSB0aGF0IGZsdXNoKCkKaXMgYWxsb3dlZCB0byBjYWxsIHN5bmMoKSB3aGlsZSBvdGhlciBmdW5jdGlvbnMgYXJlIG5vdC5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxNjciPjxoMz4xNjcuJm5ic3A7SW1wcm9wZXIgdXNlIG9mIDx0dD50cmFpdHNfdHlwZTo6bGVuZ3RoKCk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXIiPiBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+UGFyYWdyYXBoIDQgc3RhdGVzIHRoYXQgdGhlIGxlbmd0aCBpcyBkZXRlcm1pbmVkIHVzaW5nCjx0dD50cmFpdHM6Omxlbmd0aChzKTwvdHQ+LiAgVW5mb3J0dW5hdGVseSwgdGhpcyBmdW5jdGlvbiBpcyBub3QKZGVmaW5lZCBmb3IgZXhhbXBsZSBpZiB0aGUgY2hhcmFjdGVyIHR5cGUgaXMgPHR0PndjaGFyX3Q8L3R0PiBhbmQgdGhlCnR5cGUgb2YgPHR0PnM8L3R0PiBpcyA8dHQ+Y2hhciBjb25zdCo8L3R0Pi4gU2ltaWxhciBwcm9ibGVtcyBleGlzdCBpZgp0aGUgY2hhcmFjdGVyIHR5cGUgaXMgPHR0PmNoYXI8L3R0PiBhbmQgdGhlIHR5cGUgb2YgPHR0PnM8L3R0PiBpcwplaXRoZXIgPHR0PnNpZ25lZCBjaGFyIGNvbnN0KjwvdHQ+IG9yIDx0dD51bnNpZ25lZCBjaGFyCmNvbnN0KjwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyIj4gW2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdPC9hPiBwYXJhZ3JhcGggNCBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogQmVoYXZlcyBsaWtlIGFuIGZvcm1hdHRlZCBpbnNlcnRlciAoYXMgZGVzY3JpYmVkIGluCiAgbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10cykgb2Ygb3V0LiBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKICBjb25zdHJ1Y3RlZCBpdCBpbnNlcnRzIGNoYXJhY3RlcnMuIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBzdGFydGluZwogIGF0IHMgdG8gYmUgaW5zZXJ0ZWQgaXMgdHJhaXRzOjpsZW5ndGgocykuIFBhZGRpbmcgaXMgZGV0ZXJtaW5lZCBhcwogIGRlc2NyaWJlZCBpbiBsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscy4gVGhlIHRyYWl0czo6bGVuZ3RoKHMpCiAgY2hhcmFjdGVycyBzdGFydGluZyBhdCBzIGFyZSB3aWRlbmVkIHVzaW5nIG91dC53aWRlbgogIChsaWIuYmFzaWMuaW9zLm1lbWJlcnMpLiBUaGUgd2lkZW5lZCBjaGFyYWN0ZXJzIGFuZCBhbnkgcmVxdWlyZWQKICBwYWRkaW5nIGFyZSBpbnNlcnRlZCBpbnRvIG91dC4gQ2FsbHMgd2lkdGgoMCkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogQmVoYXZlcyBsaWtlIGEgZm9ybWF0dGVkIGluc2VydGVyIChhcyBkZXNjcmliZWQgaW4KICBsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzKSBvZiBvdXQuIEFmdGVyIGEgc2VudHJ5IG9iamVjdCBpcwogIGNvbnN0cnVjdGVkIGl0IGluc2VydHMgPGk+bjwvaT4gY2hhcmFjdGVycyBzdGFydGluZyBhdCA8aT5zPC9pPiwKICB3aGVyZSA8aT5uPC9pPiBpcyB0aGUgbnVtYmVyIHRoYXQgd291bGQgYmUgY29tcHV0ZWQgYXMgaWYgYnk6PC9wPgogIDx1bD4KICA8bGk+dHJhaXRzOjpsZW5ndGgocykgZm9yIHRoZSBvdmVybG9hZCB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgb2YKICAgIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7IGFuZCB0aGUgc2Vjb25kIGlzCiAgICBvZiB0eXBlIGNvbnN0IGNoYXJUKiwgYW5kIGFsc28gZm9yIHRoZSBvdmVybG9hZCB3aGVyZSB0aGUgZmlyc3QKICAgIGFyZ3VtZW50IGlzIG9mIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyLCB0cmFpdHMmZ3Q7JmFtcDsgYW5kCiAgICB0aGUgc2Vjb25kIGlzIG9mIHR5cGUgY29uc3QgY2hhciouPC9saT4KICA8bGk+c3RkOjpjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6bGVuZ3RoKHMpIAogICAgZm9yIHRoZSBvdmVybG9hZCB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgb2YgdHlwZSAKICAgIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyBhbmQgdGhlIHNlY29uZCBpcyBvZiB0eXBlCiAgICBjb25zdCBjaGFyKi48L2xpPgogIDxsaT50cmFpdHM6Omxlbmd0aChyZWludGVycHJldF9jYXN0Jmx0O2NvbnN0IGNoYXIqJmd0OyhzKSkgCiAgICBmb3IgdGhlIG90aGVyIHR3byBvdmVybG9hZHMuPC9saT4KICA8L3VsPgogIDxwPlBhZGRpbmcgaXMgZGV0ZXJtaW5lZCBhcyBkZXNjcmliZWQgaW4KICBsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscy4gVGhlIDxpPm48L2k+IGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQKICA8aT5zPC9pPiBhcmUgd2lkZW5lZCB1c2luZyBvdXQud2lkZW4gKGxpYi5iYXNpYy5pb3MubWVtYmVycykuICBUaGUKICB3aWRlbmVkIGNoYXJhY3RlcnMgYW5kIGFueSByZXF1aXJlZCBwYWRkaW5nIGFyZSBpbnNlcnRlZCBpbnRvCiAgb3V0LiBDYWxscyB3aWR0aCgwKS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltTYW50YSBDcnV6OiBNYXR0IHN1cHBsaWVkIG5ldyB3b3JkaW5nXTwvaT48L3A+Cgo8cD48aT5bS29uYTogY2hhbmdlZCAid2hlcmUgPGk+bjwvaT4gaXMiIHRvICIgd2hlcmUgPGk+bjwvaT4gaXMgdGhlCiAgbnVtYmVyIHRoYXQgd291bGQgYmUgY29tcHV0ZWQgYXMgaWYgYnkiXTwvaT48L3A+IAoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPldlIGhhdmUgZml2ZSBzZXBhcmF0ZSBjYXNlcy4gIEluIHR3byBvZiB0aGVtIHdlIGNhbiB1c2UgdGhlCnVzZXItc3VwcGxpZWQgdHJhaXRzIGNsYXNzIHdpdGhvdXQgYW55IGZ1c3MuICBJbiB0aGUgb3RoZXIgdGhyZWUgd2UKdHJ5IHRvIHVzZSBzb21ldGhpbmcgYXMgY2xvc2UgdG8gdGhhdCB1c2VyLXN1cHBsaWVkIGNsYXNzIGFzIHBvc3NpYmxlLgpJbiB0d28gY2FzZXMgd2UndmUgZ290IGEgdHJhaXRzIGNsYXNzIHRoYXQncyBhcHByb3ByaWF0ZSBmb3IKY2hhciBhbmQgd2hhdCB3ZSd2ZSBnb3QgaXMgYSBjb25zdCBzaWduZWQgY2hhciogb3IgYSBjb25zdAp1bnNpZ25lZCBjaGFyKjsgdGhhdCdzIGNsb3NlIGVub3VnaCBzbyB3ZSBjYW4ganVzdCB1c2UgYSByZWludGVycHJldApjYXN0LCBhbmQgY29udGludWUgdG8gdXNlIHRoZSB1c2VyLXN1cHBsaWVkIHRyYWl0cyBjbGFzcy4gIEZpbmFsbHksCnRoZXJlJ3Mgb25lIGNhc2Ugd2hlcmUgd2UganVzdCBoYXZlIHRvIGdpdmUgdXA6IHdoZXJlIHdlJ3ZlIGdvdCBhCnRyYWl0cyBjbGFzcyBmb3Igc29tZSBhcmJpdHJhcnkgY2hhclQgdHlwZSwgYW5kIHdlIHNvbWVob3cgaGF2ZSB0bwpkZWFsIHdpdGggYSBjb25zdCBjaGFyKi4gIFRoZXJlJ3Mgbm90aGluZyBiZXR0ZXIgdG8gZG8gYnV0IGZhbGwgYmFjawp0byBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0OzwvcD4KPGhyPgo8YSBuYW1lPSIxNjgiPjxoMz4xNjguJm5ic3A7VHlwbzogZm9ybWF0dGVkIHZzLiB1bmZvcm1hdHRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgZmlyc3QgcGFyYWdyYXBoIGJlZ2lucyB3aXRoIGEgZGVzY3JpcHRpb25zIHdoYXQgaGFzIHRvIGJlIGRvbmUKaW4gPGk+Zm9ybWF0dGVkPC9pPiBvdXRwdXQgZnVuY3Rpb25zLiBQcm9iYWJseSB0aGlzIGlzIGEgdHlwbyBhbmQgdGhlCnBhcmFncmFwaCByZWFsbHkgd2FudCB0byBkZXNjcmliZSB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLi4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4gcGFyYWdyYXBoIDEsIHRoZSBmaXJzdCBhbmQgbGFzdApzZW50ZW5jZXMsIGNoYW5nZSB0aGUgd29yZCAiZm9ybWF0dGVkIiB0bwoidW5mb3JtYXR0ZWQiOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+IkVhY2ggPGI+dW5mb3JtYXR0ZWQgPC9iPiBvdXRwdXQgZnVuY3Rpb24gYmVnaW5zIC4uLiI8YnI+CiAgIi4uLiB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSA8Yj51bmZvcm1hdHRlZCA8L2I+ICBvdXRwdXQgCiAgZnVuY3Rpb24uIjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE2OSI+PGgzPjE2OS4mbmJzcDtCYWQgZWZmaWNpZW5jeSBvZiA8dHQ+b3ZlcmZsb3coKTwvdHQ+IG1hbmRhdGVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi52aXJ0dWFscyI+IFtsaWIuc3RyaW5nYnVmLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5QYXJhZ3JhcGggOCwgTm90ZXMsIG9mIHRoaXMgc2VjdGlvbiBzZWVtcyB0byBtYW5kYXRlIGFuIGV4dHJlbWVseQppbmVmZmljaWVudCB3YXkgb2YgYnVmZmVyIGhhbmRsaW5nIGZvciA8dHQ+YmFzaWNfc3RyaW5nYnVmPC90dD4sCmVzcGVjaWFsbHkgaW4gdmlldyBvZiB0aGUgcmVzdHJpY3Rpb24gdGhhdCA8dHQ+YmFzaWNfb3N0cmVhbTwvdHQ+Cm1lbWJlciBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSA8dHQ+eHNwdXRuKCk8L3R0PiAoc2VlIDI3LjYuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtIj4gW2xpYi5vc3RyZWFtXTwvYT4pOiBGb3IgZWFjaCBjaGFyYWN0ZXIgdG8gYmUgaW5zZXJ0ZWQsIGEgbmV3IGJ1ZmZlcgppcyB0byBiZSBjcmVhdGVkLjwvcD4gCjxwPk9mIGNvdXJzZSwgdGhlIHJlc29sdXRpb24gYmVsb3cgcmVxdWlyZXMgc29tZSBoYW5kbGluZyBvZgpzaW11bHRhbmVvdXMgaW5wdXQgYW5kIG91dHB1dCBzaW5jZSBpdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdXBkYXRlCjx0dD5lZ3B0cigpPC90dD4gd2hlbmV2ZXIgPHR0PmVwcHRyKCk8L3R0PiBpcyBjaGFuZ2VkLiBBIHBvc3NpYmxlCnNvbHV0aW9uIGlzIHRvIGhhbmRsZSB0aGlzIGluIDx0dD51bmRlcmZsb3coKTwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLnZpcnR1YWxzIj4gW2xpYi5zdHJpbmdidWYudmlydHVhbHNdPC9hPiBwYXJhZ3JhcGggOCwgTm90ZXMsIGluc2VydCB0aGUgd29yZHMKImF0IGxlYXN0IiBhcyBpbiB0aGUgZm9sbG93aW5nOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VG8gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uIHJlYWxsb2NhdGVzIChvciBpbml0aWFsbHkKICBhbGxvY2F0ZXMpIGFuIGFycmF5IG9iamVjdCB3aXRoIGEgc3VmZmljaWVudCBudW1iZXIgb2YgZWxlbWVudHMgdG8gaG9sZCB0aGUKICBjdXJyZW50IGFycmF5IG9iamVjdCAoaWYgYW55KSwgcGx1cyA8Yj5hdCBsZWFzdDwvYj4gb25lIGFkZGl0aW9uYWwgd3JpdGUKICBwb3NpdGlvbi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNzAiPjxoMz4xNzAuJm5ic3A7SW5jb25zaXN0ZW50IGRlZmluaXRpb24gb2YgPHR0PnRyYWl0c190eXBlPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdzdHJlYW0iPiBbbGliLnN0cmluZ3N0cmVhbV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIGNsYXNzZXMgPHR0PmJhc2ljX3N0cmluZ3N0cmVhbTwvdHQ+ICgyNy43LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ3N0cmVhbSI+IFtsaWIuc3RyaW5nc3RyZWFtXTwvYT4pLAo8dHQ+YmFzaWNfaXN0cmluZ3N0cmVhbTwvdHQ+ICgyNy43LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJpbmdzdHJlYW0iPiBbbGliLmlzdHJpbmdzdHJlYW1dPC9hPiksIGFuZAo8dHQ+YmFzaWNfb3N0cmluZ3N0cmVhbTwvdHQ+ICgyNy43LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJpbmdzdHJlYW0iPiBbbGliLm9zdHJpbmdzdHJlYW1dPC9hPikgYXJlIGluY29uc2lzdGVudAppbiB0aGVpciBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIDx0dD50cmFpdHNfdHlwZTwvdHQ+OiBGb3IKPHR0PmlzdHJpbmdzdHJlYW08L3R0PiwgdGhpcyB0eXBlIGlzIGRlZmluZWQsIGZvciB0aGUgb3RoZXIgdHdvIGl0IGlzCm5vdC4gVGhpcyBzaG91bGQgYmUgY29uc2lzdGVudC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPiA8cD5UbyB0aGUgZGVjbGFyYXRpb25zIG9mCjx0dD5iYXNpY19vc3RyaW5nc3RyZWFtPC90dD4gKDI3LjcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmluZ3N0cmVhbSI+IFtsaWIub3N0cmluZ3N0cmVhbV08L2E+KSBhbmQKPHR0PmJhc2ljX3N0cmluZ3N0cmVhbTwvdHQ+ICgyNy43LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ3N0cmVhbSI+IFtsaWIuc3RyaW5nc3RyZWFtXTwvYT4pIGFkZDo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnR5cGVkZWYgdHJhaXRzIHRyYWl0c190eXBlOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTcxIj48aDM+MTcxLiZuYnNwO1N0cmFuZ2UgPHR0PnNlZWtwb3MoKTwvdHQ+IHNlbWFudGljcyBkdWUgdG8gam9pbnQgcG9zaXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy44LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1Zi52aXJ0dWFscyI+IFtsaWIuZmlsZWJ1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+T3ZlcnJpZGRlbiB2aXJ0dWFsIGZ1bmN0aW9ucywgc2Vla3BvcygpPC9wPiA8cD5JbiAyNy44LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1ZiI+IFtsaWIuZmlsZWJ1Zl08L2E+IHBhcmFncmFwaCAzLCBpdCBpcyBzdGF0ZWQgdGhhdCBhIGpvaW50IGlucHV0IGFuZApvdXRwdXQgcG9zaXRpb24gaXMgbWFpbnRhaW5lZCBieSA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+LiBTdGlsbCwgdGhlCmRlc2NyaXB0aW9uIG9mIDx0dD5zZWVrcG9zKCk8L3R0PiBzZWVtcyB0byB0YWxrIGFib3V0IGRpZmZlcmVudCBmaWxlCnBvc2l0aW9ucy4gSW4gcGFydGljdWxhciwgaXQgaXMgdW5jbGVhciAoYXQgbGVhc3QgdG8gbWUpIHdoYXQgaXMKc3VwcG9zZWQgdG8gaGFwcGVuIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpZiB0aGVyZSBpcyBvbmUpIGlmIG9ubHkgdGhlCmlucHV0IHBvc2l0aW9uIGlzIGNoYW5nZWQuIFRoZSBzdGFuZGFyZCBzZWVtcyB0byBtYW5kYXRlIHRoYXQgdGhlCm91dHB1dCBidWZmZXIgaXMga2VwdCBhbmQgcHJvY2Vzc2VkIGFzIGlmIHRoZXJlIHdhcyBubyBwb3NpdGlvbmluZyBvZgp0aGUgb3V0cHV0IHBvc2l0aW9uIChieSBjaGFuZ2luZyB0aGUgaW5wdXQgcG9zaXRpb24pLiBPZiBjb3Vyc2UsIHRoaXMKY2FuIGJlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCBpZiB0aGUgZmxhZyA8dHQ+aW9zX2Jhc2U6OmF0ZTwvdHQ+IGlzCnNldC4gSG93ZXZlciwgSSB0aGluaywgdGhlIHN0YW5kYXJkIHNob3VsZCBzYXkgc29tZXRoaW5nIGxpa2UKdGhpczo8L3A+Cjx1bD4KICA8bGk+SWYgPHR0Pih3aGljaCAmYW1wOyBtb2RlKSA9PSAwPC90dD4gbmVpdGhlciByZWFkIG5vciB3cml0ZSBwb3NpdGlvbiBpcwogICAgY2hhbmdlZCBhbmQgdGhlIGNhbGwgZmFpbHMuIE90aGVyd2lzZSwgdGhlIGpvaW50IHJlYWQgYW5kIHdyaXRlIHBvc2l0aW9uIGlzCiAgICBhbHRlcmVkIHRvIGNvcnJlc3BvbmQgdG8gPHR0PnNwPC90dD4uPC9saT4KICA8bGk+SWYgdGhlcmUgaXMgYW4gb3V0cHV0IGJ1ZmZlciwgdGhlIG91dHB1dCBzZXF1ZW5jZXMgaXMgdXBkYXRlZCBhbmQgYW55CiAgICB1bnNoaWZ0IHNlcXVlbmNlIGlzIHdyaXR0ZW4gYmVmb3JlIHRoZSBwb3NpdGlvbiBpcyBhbHRlcmVkLjwvbGk+CiAgPGxpPklmIHRoZXJlIGlzIGFuIGlucHV0IGJ1ZmZlciwgdGhlIGlucHV0IHNlcXVlbmNlIGlzIHVwZGF0ZWQgYWZ0ZXIgdGhlCiAgICBwb3NpdGlvbiBpcyBhbHRlcmVkLjwvbGk+CjwvdWw+CjxwPlBsdXMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nLCB0aGF0IGlzLi4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdW5udW1iZXJlZCBwYXJhZ3JhcGggaW4gMjcuOC4xLjQgKGxpYi5maWxlYnVmLnZpcnR1YWxzKSBiZWZvcmUKcGFyYWdyYXBoIDE0IGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wb3NfdHlwZSBzZWVrcG9zKHBvc190eXBlIHNwLCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfAogIGlvc19iYXNlOjpvdXQpOzwvcD4KICA8cD5BbHRlcnMgdGhlIGZpbGUgcG9zaXRpb24sIGlmIHBvc3NpYmxlLCB0byBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiBzdG9yZWQKICBpbiBzcCAoYXMgZGVzY3JpYmVkIGJlbG93KS48L3A+CiAgPHA+LSBpZiAod2hpY2gmYW1wO2lvc19iYXNlOjppbikhPTAsIHNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byBzcCwgdGhlbiB1cGRhdGUKICB0aGUgaW5wdXQgc2VxdWVuY2U8L3A+CiAgPHA+LSBpZiAod2hpY2gmYW1wO2lvc19iYXNlOjpvdXQpIT0wLCB0aGVuIHVwZGF0ZSB0aGUgb3V0cHV0IHNlcXVlbmNlLCB3cml0ZQogIGFueSB1bnNoaWZ0IHNlcXVlbmNlLCBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHNwLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnBvc190eXBlIHNlZWtwb3MocG9zX3R5cGUgc3AsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8CiAgaW9zX2Jhc2U6Om91dCk7PC9wPgogIDxwPkFsdGVycyB0aGUgZmlsZSBwb3NpdGlvbiwgaWYgcG9zc2libGUsIHRvIGNvcnJlc3BvbmQgdG8gdGhlIHBvc2l0aW9uIHN0b3JlZAogIGluIHNwIChhcyBkZXNjcmliZWQgYmVsb3cpLiBBbHRlcmluZyB0aGUgZmlsZSBwb3NpdGlvbiBwZXJmb3JtcyBhcyBmb2xsb3dzOjwvcD4KICA8cD4xLiBpZiAob20gJmFtcDsgaW9zX2Jhc2U6Om91dCkhPTAsIHRoZW4gdXBkYXRlIHRoZSBvdXRwdXQgc2VxdWVuY2UgYW5kCiAgd3JpdGUgYW55IHVuc2hpZnQgc2VxdWVuY2U7PC9wPgogIDxwPjIuIHNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byBzcDs8L3A+CiAgPHA+My4gaWYgKG9tICZhbXA7IGlvc19iYXNlOjppbikhPTAsIHRoZW4gdXBkYXRlIHRoZSBpbnB1dCBzZXF1ZW5jZTs8L3A+CiAgPHA+d2hlcmUgb20gaXMgdGhlIG9wZW4gbW9kZSBwYXNzZWQgdG8gdGhlIGxhc3QgY2FsbCB0byBvcGVuKCkuIFRoZSBvcGVyYXRpb24KICBmYWlscyBpZiBpc19vcGVuKCkgcmV0dXJucyBmYWxzZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBEaWV0bWFyIGlzIHdvcmtpbmcgb24gYSBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgo8cD48aT5bUG9zdC1Ub2t5bzogRGlldG1hciBzdXBwbGllZCB0aGUgYWJvdmUgd29yZGluZy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxNzIiPjxoMz4xNzIuJm5ic3A7SW5jb25zaXN0ZW50IHR5cGVzIGZvciA8dHQ+YmFzaWNfaXN0cmVhbTo6aWdub3JlKCk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0dyZWcgQ29tZWF1LCBEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVsIDE5OTk8L3A+CjxwPkluIDI3LjYuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtIj4gW2xpYi5pc3RyZWFtXTwvYT4gdGhlIGZ1bmN0aW9uCjx0dD5pZ25vcmUoKTwvdHQ+IGdldHMgYW4gb2JqZWN0IG9mIHR5cGUgPHR0PnN0cmVhbXNpemU8L3R0PiBhcyBmaXJzdAphcmd1bWVudC4gSG93ZXZlciwgaW4gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPgpwYXJhZ3JhcGggMjMgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mIHR5cGUgPHR0PmludC48L3R0PjwvcD4KCjxwPkFzIGZhciBhcyBJIGNhbiBzZWUgdGhpcyBpcyBub3QgcmVhbGx5IGEgY29udHJhZGljdGlvbiBiZWNhdXNlCmV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudCBpZiA8dHQ+c3RyZWFtc2l6ZTwvdHQ+IGlzIHR5cGVkZWYgdG8gYmUKPHR0PmludDwvdHQ+LiBIb3dldmVyLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdoYXQgd2FzCmludGVuZGVkLiBUaGUgc2FtZSB0aGluZyBoYXBwZW5lZCB0byA8dHQ+YmFzaWNfZmlsZWJ1Zjo6c2V0YnVmKCk8L3R0PiwKYXMgZGVzY3JpYmVkIGluIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzMiPjE3MzwvYT4uPC9wPgoKPHA+RGFyaW4gQWRsZXIgYWxzbwpzdWJtaXR0ZWQgdGhpcyBpc3N1ZSwgY29tbWVudGluZzogRWl0aGVyIDI3LjYuMS4xIHNob3VsZCBiZSBtb2RpZmllZAp0byBzaG93IGEgZmlyc3QgcGFyYW1ldGVyIG9mIHR5cGUgaW50LCBvciAyNy42LjEuMyBzaG91bGQgYmUgbW9kaWZpZWQKdG8gc2hvdyBhIGZpcnN0IHBhcmFtZXRlciBvZiB0eXBlIHN0cmVhbXNpemUgYW5kIHVzZQpudW1lcmljX2xpbWl0cyZsdDtzdHJlYW1zaXplJmd0Ozo6bWF4LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+IHBhcmFncmFwaCAyMyBhbmQgMjQsIGNoYW5nZSBib3RoIHVzZXMKb2YgPHR0PmludDwvdHQ+IGluIHRoZSBkZXNjcmlwdGlvbiBvZiA8dHQ+aWdub3JlKCk8L3R0PiB0bwo8dHQ+c3RyZWFtc2l6ZTwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIxNzMiPjxoMz4xNzMuJm5ic3A7SW5jb25zaXN0ZW50IHR5cGVzIGZvciA8dHQ+YmFzaWNfZmlsZWJ1Zjo6c2V0YnVmKCk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy44LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1Zi52aXJ0dWFscyI+IFtsaWIuZmlsZWJ1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0dyZWcgQ29tZWF1LCBEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVsIDE5OTk8L3A+Cgo8cD4KSW4gMjcuOC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYiPiBbbGliLmZpbGVidWZdPC9hPiB0aGUgZnVuY3Rpb24gPHR0PnNldGJ1ZigpPC90dD4gZ2V0cyBhbgpvYmplY3Qgb2YgdHlwZSA8dHQ+c3RyZWFtc2l6ZTwvdHQ+IGFzIHNlY29uZCBhcmd1bWVudC4gSG93ZXZlciwgaW4KMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiBwYXJhZ3JhcGggOSB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9mIHR5cGUKPHR0PmludDwvdHQ+Lgo8L3A+Cgo8cD4KQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBjb250cmFkaWN0aW9uIGJlY2F1c2UKZXZlcnl0aGluZyBpcyBjb25zaXN0ZW50IGlmIDx0dD5zdHJlYW1zaXplPC90dD4gaXMgdHlwZWRlZiB0byBiZQo8dHQ+aW50PC90dD4uIEhvd2V2ZXIsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBub3Qgd2hhdCB3YXMKaW50ZW5kZWQuIFRoZSBzYW1lIHRoaW5nIGhhcHBlbmVkIHRvIDx0dD5iYXNpY19pc3RyZWFtOjppZ25vcmUoKTwvdHQ+LAphcyBkZXNjcmliZWQgaW4gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3MiI+MTcyPC9hPi4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy44LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1Zi52aXJ0dWFscyI+IFtsaWIuZmlsZWJ1Zi52aXJ0dWFsc108L2E+IHBhcmFncmFwaCA5LCBjaGFuZ2UgYWxsIHVzZXMgb2YKPHR0PmludDwvdHQ+IGluIHRoZSBkZXNjcmlwdGlvbiBvZiA8dHQ+c2V0YnVmKCk8L3R0PiB0bwo8dHQ+c3RyZWFtc2l6ZTwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIxNzQiPjxoMz4xNzQuJm5ic3A7VHlwbzogPHR0Pk9GRl9UPC90dD4gdnMuIDx0dD5QT1NfVDwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPiBbZGVwci5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdWwgMTk5OTwvcD4KPHA+QWNjb3JkaW5nIHRvIHBhcmFncmFwaCAxIG9mIHRoaXMgc2VjdGlvbiwgPHR0PnN0cmVhbXBvczwvdHQ+IGlzIHRoZQp0eXBlIDx0dD5PRkZfVDwvdHQ+LCB0aGUgc2FtZSB0eXBlIGFzIDx0dD5zdHJlYW1vZmY8L3R0Pi4gSG93ZXZlciwgaW4KcGFyYWdyYXBoIDYgdGhlIDx0dD5zdHJlYW1wb3M8L3R0PiBnZXRzIHRoZSB0eXBlIDx0dD5QT1NfVDwvdHQ+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBELjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmlvcy5tZW1iZXJzIj4gW2RlcHIuaW9zLm1lbWJlcnNdPC9hPiBwYXJhZ3JhcGggMSBmcm9tICI8dHQ+dHlwZWRlZgpPRkZfVCBzdHJlYW1wb3M7PC90dD4iIHRvICI8dHQ+dHlwZWRlZiBQT1NfVApzdHJlYW1wb3M7PC90dD4iPC9wPgo8aHI+CjxhIG5hbWU9IjE3NSI+PGgzPjE3NS4mbmJzcDtBbWJpZ3VpdHkgZm9yIDx0dD5iYXNpY19zdHJlYW1idWY6OnB1YnNlZWtwb3MoKTwvdHQ+IGFuZCBhIGZldyBvdGhlciBmdW5jdGlvbnMuPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5pb3MubWVtYmVycyI+IFtkZXByLmlvcy5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1bCAxOTk5PC9wPgo8cD5BY2NvcmRpbmcgdG8gcGFyYWdyYXBoIDggb2YgdGhpcyBzZWN0aW9uLCB0aGUgbWV0aG9kcwo8dHQ+YmFzaWNfc3RyZWFtYnVmOjpwdWJzZWVrcG9zKCk8L3R0PiwKPHR0PmJhc2ljX2lmc3RyZWFtOjpvcGVuKCk8L3R0PiwgYW5kIDx0dD5iYXNpY19vZnN0cmVhbTo6b3BlbjwvdHQ+CiJtYXkiIGJlIG92ZXJsb2FkZWQgYnkgYSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGFraW5nIHRoZQp0eXBlIDx0dD5pb3NfYmFzZTo6b3Blbl9tb2RlPC90dD4gYXMgbGFzdCBhcmd1bWVudCBhcmd1bWVudCBpbnN0ZWFkIG9mCjx0dD5pb3NfYmFzZTo6b3Blbm1vZGU8L3R0PiAoPHR0Pmlvc19iYXNlOjpvcGVuX21vZGU8L3R0PiBpcyBkZWZpbmVkCmluIHRoaXMgc2VjdGlvbiB0byBiZSBhbiBhbGlhcyBmb3Igb25lIG9mIHRoZSBpbnRlZ3JhbCB0eXBlcykuIFRoZQpjbGF1c2Ugc3BlY2lmaWVzLCB0aGF0IHRoZSBsYXN0IGFyZ3VtZW50IGhhcyBhIGRlZmF1bHQgYXJndW1lbnQgaW4KdGhyZWUgY2FzZXMuICBIb3dldmVyLCB0aGlzIGdlbmVyYXRlcyBhbiBhbWJpZ3VpdHkgd2l0aCB0aGUgb3ZlcmxvYWRlZAp2ZXJzaW9uIGJlY2F1c2Ugbm93IHRoZSBhcmd1bWVudHMgYXJlIGFic29sdXRlbHkgaWRlbnRpY2FsIGlmIHRoZSBsYXN0CmFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIEQuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPiBbZGVwci5pb3MubWVtYmVyc108L2E+IHBhcmFncmFwaCA4LCByZW1vdmUgdGhlIGRlZmF1bHQgYXJndW1lbnRzIGZvcgo8dHQ+YmFzaWNfc3RyZWFtYnVmOjpwdWJzZWVrcG9zKCk8L3R0PiwKPHR0PmJhc2ljX2lmc3RyZWFtOjpvcGVuKCk8L3R0PiwgYW5kCjx0dD5iYXNpY19vZnN0cmVhbTo6b3BlbigpLjwvdHQ+PC9wPgo8aHI+CjxhIG5hbWU9IjE3NiI+PGgzPjE3Ni4mbmJzcDs8dHQ+ZXhjZXB0aW9ucygpPC90dD4gaW4gPHR0Pmlvc19iYXNlPC90dD4uLi4/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5pb3MubWVtYmVycyI+IFtkZXByLmlvcy5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1bCAxOTk5PC9wPgo8cD5UaGUgIm92ZXJsb2FkIiBmb3IgdGhlIGZ1bmN0aW9uIDx0dD5leGNlcHRpb25zKCk8L3R0PiBpbgpwYXJhZ3JhcGggOCBnaXZlcyB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gb2YKdGhpcyBmdW5jdGlvbiBkZWZpbmVkIGluIGNsYXNzIDx0dD5pb3NfYmFzZTwvdHQ+LiBIb3dldmVyLCB0aGlzIGlzIG5vdAp0aGUgY2FzZS4gVGh1cywgaXQgaXMgaGFyZCB0byB0ZWxsIGhvdyB0aGUgc2VtYW50aWNzIChwYXJhZ3JhcGggOSkgY2FuCmJlIGltcGxlbWVudGVkOiAiQ2FsbCB0aGUgY29ycmVzcG9uZGluZyBtZW1iZXIgZnVuY3Rpb24gc3BlY2lmaWVkCmluIGNsYXVzZSAyNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW5wdXQub3V0cHV0Ij4gW2xpYi5pbnB1dC5vdXRwdXRdPC9hPi4iPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIEQuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPiBbZGVwci5pb3MubWVtYmVyc108L2E+IHBhcmFncmFwaCA4LCBtb3ZlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUKZnVuY3Rpb24gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+aW50byBjbGFzcyA8dHQ+YmFzaWNfaW9zPC90dD4uPC9wPgo8aHI+CjxhIG5hbWU9IjE3OSI+PGgzPjE3OS4mbmJzcDtDb21wYXJpc29uIG9mIGNvbnN0X2l0ZXJhdG9ycyB0byBpdGVyYXRvcnMgZG9lc24ndCB3b3JrPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MiBKdWwgMTk5ODwvcD4KPHA+Q3VycmVudGx5IHRoZSBmb2xsb3dpbmcgd2lsbCBub3QgY29tcGlsZSBvbiB0d28gd2VsbC1rbm93biBzdGFuZGFyZApsaWJyYXJ5IGltcGxlbWVudGF0aW9uczo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPiNpbmNsdWRlICZsdDtzZXQmZ3Q7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGYoY29uc3Qgc2V0Jmx0O2ludCZndDsgJmFtcDtzKQp7CiAgc2V0Jmx0O2ludCZndDs6Oml0ZXJhdG9yIGk7CiAgaWYgKGk9PXMuZW5kKCkpOyAvLyBzLmVuZCgpIHJldHVybnMgYSBjb25zdF9pdGVyYXRvcgp9PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgcmVhc29uIHRoaXMgZG9lc24ndCBjb21waWxlIGlzIGJlY2F1c2Ugb3BlcmF0b3I9PSB3YXMgaW1wbGVtZW50ZWQKYXMgYSBtZW1iZXIgZnVuY3Rpb24gb2YgdGhlIG5lc3RlZCBjbGFzc2VzIHNldDppdGVyYXRvciBhbmQKc2V0Ojpjb25zdF9pdGVyYXRvciwgYW5kIHRoZXJlIGlzIG5vIGNvbnZlcnNpb24gZnJvbSBjb25zdF9pdGVyYXRvciB0bwppdGVyYXRvci4gU3VycHJpc2luZ2x5LCAocy5lbmQoKSA9PSBpKSBkb2VzIHdvcmssIHRob3VnaCwgYmVjYXVzZSBvZgp0aGUgY29udmVyc2lvbiBmcm9tIGl0ZXJhdG9yIHRvIGNvbnN0X2l0ZXJhdG9yLgo8L3A+Cgo8cD4KSSBkb24ndCBzZWUgYSByZXF1aXJlbWVudCBhbnl3aGVyZSBpbiB0aGUgc3RhbmRhcmQgdGhhdCB0aGlzIG11c3QKd29yay4gU2hvdWxkIHRoZXJlIGJlIG9uZT8gIElmIHNvLCBJIHRoaW5rIHRoZSByZXF1aXJlbWVudCB3b3VsZCBuZWVkCnRvIGJlIGFkZGVkIHRvIHRoZSB0YWJsZXMgaW4gc2VjdGlvbiAyNC4xLjEuIEknbSBub3Qgc3VyZSBhYm91dCB0aGUKd29yZGluZy4gIElmIHRoaXMgcmVxdWlyZW1lbnQgZXhpc3RlZCBpbiB0aGUgc3RhbmRhcmQsIEkgd291bGQgdGhpbmsKdGhhdCBpbXBsZW1lbnRvcnMgd291bGQgaGF2ZSB0byBtYWtlIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycwpub24tbWVtYmVyIGZ1bmN0aW9ucy48L3A+Cgo8cD5UaGlzIGlzc3VlcyB3YXMgYWxzbyByYWlzZWQgb24gY29tcC5zdGQuYysrIGJ5IERhcmluCkFkbGVyLiZuYnNwOyBUaGUgZXhhbXBsZSBnaXZlbiB3YXM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5ib29sIGNoZWNrX2VxdWFsKHN0ZDo6ZGVxdWUmbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgaSwKc3RkOjpkZXF1ZSZsdDtpbnQmZ3Q7Ojpjb25zdF9pdGVyYXRvciBjaSkKewpyZXR1cm4gaSA9PSBjaTsKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5Db21tZW50IGZyb20gSm9obiBQb3R0ZXI6PC9wPgo8YmxvY2txdW90ZT4KICAgIDxwPgogICAgSW4gY2FzZSBub2JvZHkgaGFzIG5vdGljZWQsIGFjY2VwdGluZyBpdCB3aWxsIGJyZWFrIHJldmVyc2VfaXRlcmF0b3IuCiAgICA8L3A+CgogICAgPHA+CiAgICBUaGUgZml4IGlzIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRlbXBsYXRlZCBvbiB0d28gdHlwZXMuCiAgICA8L3A+CgogICAgPHByZT4gICAgdGVtcGxhdGUgJmx0O2NsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyJmd0OwogICAgYm9vbCBvcGVyYXRvcj09IChyZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yMSZndDsgY29uc3QmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICByZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yMiZndDsgY29uc3QmYW1wOyB5KTsKICAgIDwvcHJlPgoKICAgIDxwPgogICAgT2J2aW91c2x5OiAgcmV0dXJuIHguYmFzZSgpID09IHkuYmFzZSgpOwogICAgPC9wPgoKICAgIDxwPgogICAgQ3VycmVudGx5LCBubyByZXZlcnNlX2l0ZXJhdG9yIHRvIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29tcGFyZXMgYXJlCiAgICB2YWxpZC4KICAgIDwvcD4KCiAgICA8cD4KICAgIEJUVywgSSB0aGluayB0aGUgaXNzdWUgaXMgaW4gc3VwcG9ydCBvZiBiYWQgY29kZS4gIENvbXBhcmVzIHNob3VsZCBiZQogICAgYmV0d2VlbiB0d28gaXRlcmF0b3JzIG9mIHRoZSBzYW1lIHR5cGUuICBBbGwgc3RkOjphbGdvcml0aG1zIHJlcXVpcmUKICAgIHRoZSBiZWdpbiBhbmQgZW5kIGl0ZXJhdG9ycyB0byBiZSBvZiB0aGUgc2FtZSB0eXBlLiAKICAgIDwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCB0aGlzIHBhcmFncmFwaCBhZnRlciAyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCA3OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gdGhlIGV4cHJlc3Npb25zPC9wPgogIDxwcmU+ICAgIGkgPT0gagogICAgaSAhPSBqCiAgICBpICZsdDsgagogICAgaSAmbHQ7PSBqCiAgICBpICZndDs9IGoKICAgIGkgJmd0OyBqCiAgICBpIC0gagogIDwvcHJlPgogIDxwPldoZXJlIGkgYW5kIGogZGVub3RlIG9iamVjdHMgb2YgYSBjb250YWluZXIncyBpdGVyYXRvciB0eXBlLAogIGVpdGhlciBvciBib3RoIG1heSBiZSByZXBsYWNlZCBieSBhbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcidzCiAgY29uc3RfaXRlcmF0b3IgdHlwZSByZWZlcnJpbmcgdG8gdGhlIHNhbWUgZWxlbWVudCB3aXRoIG5vCiAgY2hhbmdlIGluIHNlbWFudGljcy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltwb3N0LVRvcm9udG86IEp1ZHkgc3VwcGxpZWQgYSBwcm9wb3NlZCByZXNvbHV0aW9uIHNheWluZyB0aGF0Cjx0dD5pdGVyYXRvcjwvdHQ+IGFuZCA8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PiBjb3VsZCBiZSBmcmVlbHkgbWl4ZWQgaW4KaXRlcmF0b3IgY29tcGFyaXNvbiBhbmQgZGlmZmVyZW5jZSBvcGVyYXRpb25zLl08L2k+PC9wPgoKPHA+PGk+W1JlZG1vbmQ6IERhdmUgYW5kIEhvd2FyZCBzdXBwbGllZCBhIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uIHdoaWNoCmV4cGxpY2l0bHkgbGlzdGVkIGV4cHJlc3Npb25zOyB0aGVyZSB3YXMgY29uY2VybiB0aGF0IHRoZSBwcmV2aW91cwpwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyB0b28gaW5mb3JtYWwuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhlIExXRyBiZWxpZXZlcyBpdCBpcyBjbGVhciB0aGF0IHRoZSBhYm92ZSB3b3JkaW5nIGFwcGxpZXMgb25seSB0bwp0aGUgbmVzdGVkIHR5cGVzIDx0dD5YOjppdGVyYXRvcjwvdHQ+IGFuZCA8dHQ+WDo6Y29uc3RfaXRlcmF0b3I8L3R0PiwKd2hlcmUgPHR0Plg8L3R0PiBpcyBhIGNvbnRhaW5lci4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQKPHR0Plg6OnJldmVyc2VfaXRlcmF0b3I8L3R0PiBhbmQgPHR0Plg6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3I8L3R0PgpjYW4gYmUgbWl4ZWQuICBJZiBtaXhpbmcgdGhlbSBpcyBjb25zaWRlcmVkIGltcG9ydGFudCwgdGhhdCdzIGEKc2VwYXJhdGUgaXNzdWUuICAoSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4MCI+MjgwPC9hPi4pCjwvcD4KPGhyPgo8YSBuYW1lPSIxODEiPjxoMz4xODEuJm5ic3A7bWFrZV9wYWlyKCkgdW5pbnRlbmRlZCBiZWhhdmlvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIucGFpcnMiPiBbbGliLnBhaXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEF1ZyAxOTk5PC9wPgo8cD5UaGUgY2xhaW0gaGFzIHN1cmZhY2VkIGluIFVzZW5ldCB0aGF0IGV4cHJlc3Npb25zIHN1Y2ggYXM8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5tYWtlX3BhaXIoImFiYyIsIDMpPC90dD48YnI+Cjxicj4KYXJlIGlsbGVnYWwsIG5vdHdpdGhzdGFuZGluZyB0aGVpciB1c2UgaW4gZXhhbXBsZXMsIGJlY2F1c2UgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiB0cmllcyB0byBiaW5kIHRoZSBmaXJzdCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgdG8gPHR0PiBjb25zdCBjaGFyICgmYW1wOylbNF08L3R0Piwgd2hpY2ggdHlwZSBpcyB1bmNvcHlhYmxlLjxicj4KPGJyPgpJIGRvdWJ0IGFueW9uZSBpbnRlbmRlZCB0aGF0IGJlaGF2aW9yLi4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi51dGlsaXR5Ij4gW2xpYi51dGlsaXR5XTwvYT4sIHBhcmFncmFwaCAxIGNoYW5nZSB0aGUgZm9sbG93aW5nCmRlY2xhcmF0aW9uIG9mIG1ha2VfcGFpcigpOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBwYWlyJmx0O1QxLFQyJmd0OyBtYWtlX3BhaXIoY29uc3QgVDEmYW1wOywgY29uc3QgVDImYW1wOyk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7IHBhaXImbHQ7VDEsVDImZ3Q7IG1ha2VfcGFpcihUMSwgVDIpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPiAgSW4gMjAuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5wYWlycyI+IFtsaWIucGFpcnNdPC9hPiBwYXJhZ3JhcGggNyBhbmQgdGhlIGxpbmUgYmVmb3JlLCBjaGFuZ2U6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OwpwYWlyJmx0O1QxLCBUMiZndDsgbWFrZV9wYWlyKGNvbnN0IFQxJmFtcDsgeCwgY29uc3QgVDImYW1wOyB5KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7CnBhaXImbHQ7VDEsIFQyJmd0OyBtYWtlX3BhaXIoVDEgeCwgVDIgeSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+YW5kIGFkZCB0aGUgZm9sbG93aW5nIGZvb3Rub3RlIHRvIHRoZSBlZmZlY3RzIGNsYXVzZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiBBY2NvcmRpbmcgdG8gMTIuOCBbY2xhc3MuY29weV0sIGFuIGltcGxlbWVudGF0aW9uIGlzIHBlcm1pdHRlZAogIHRvIG5vdCBwZXJmb3JtIGEgY29weSBvZiBhbiBhcmd1bWVudCwgdGh1cyBhdm9pZGluZyB1bm5lY2Vzc2FyeQogIGNvcGllcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlR3byBwb3RlbnRpYWwgZml4ZXMgd2VyZSBzdWdnZXN0ZWQgYnkgTWF0dCBBdXN0ZXJuIGFuZCBEaWV0bWFyCkv8aGwsIHJlc3BlY3RpdmVseSwgMSkgb3ZlcmxvYWRpbmcgd2l0aCBhcnJheSBhcmd1bWVudHMsIGFuZCAyKSB1c2Ugb2YKYSByZWZlcmVuY2VfdHJhaXRzIGNsYXNzIHdpdGggYSBzcGVjaWFsaXphdGlvbiBmb3IgYXJyYXlzLiAgQW5keQpLb2VuaWcgc3VnZ2VzdGVkIGNoYW5naW5nIHRvIHBhc3MgYnkgdmFsdWUuIEluIGRpc2N1c3Npb24sIGl0IGFwcGVhcmVkCnRoYXQgdGhpcyB3YXMgYSBtdWNoIHNtYWxsZXIgY2hhbmdlIHRvIHRoZSBzdGFuZGFyZCB0aGF0IHRoZSBvdGhlciB0d28Kc3VnZ2VzdGlvbnMsIGFuZCBhbnkgZWZmaWNpZW5jeSBjb25jZXJucyB3ZXJlIG1vcmUgdGhhbiBvZmZzZXQgYnkgdGhlCmFkdmFudGFnZXMgb2YgdGhlIHNvbHV0aW9uLiBUd28gaW1wbGVtZW50b3JzIHJlcG9ydGVkIHRoYXQgdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gcGFzc2VkIHRoZWlyIHRlc3Qgc3VpdGVzLjwvcD4KPGhyPgo8YSBuYW1lPSIxODIiPjxoMz4xODIuJm5ic3A7QW1iaWd1b3VzIHJlZmVyZW5jZXMgdG8gc2l6ZV90PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIubGlicmFyeSI+IFtsaWIubGlicmFyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FsIFN0ZXZlbnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgQXVnIDE5OTk8L3A+CjxwPk1hbnkgcmVmZXJlbmNlcyB0byA8dHQ+IHNpemVfdDwvdHQ+IHRocm91Z2hvdXQgdGhlIGRvY3VtZW50Cm9taXQgdGhlIDx0dD4gc3RkOjo8L3R0PiBuYW1lc3BhY2UgcXVhbGlmaWNhdGlvbi48L3A+IDxwPkZvcgpleGFtcGxlLCAxNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+IHBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+JiM4MjEyOyBvcGVyYXRvciBuZXcoc2l6ZV90KQomIzgyMTI7IG9wZXJhdG9yIG5ldyhzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspCiYjODIxMjsgb3BlcmF0b3IgbmV3W10oc2l6ZV90KQomIzgyMTI7IG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiAgIEluIDE3LjQuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9ucyI+IFtsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zXTwvYT4gcGFyYWdyYXBoIDI6IHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KPHA+PHR0PiAgICAgLSBvcGVyYXRvciBuZXcoc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ldyhzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPGJyPgogICAgIC0gb3BlcmF0b3IgbmV3W10oc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4gICAgYnk6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4tIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkKLSBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzXSAyMC4xLjUsIHBhcmFncmFwaCA0OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHR5cGVkZWYgbWVtYmVycyBwb2ludGVyLCBjb25zdF9wb2ludGVyLCBzaXplX3R5cGUsIGFuZCBkaWZmZXJlbmNlX3R5cGUKICBhcmUgcmVxdWlyZWQgdG8gYmUgVCosIFQgY29uc3QqLCBzaXplX3QsIGFuZCBwdHJkaWZmX3QsIHJlc3BlY3RpdmVseS48L3A+CjwvYmxvY2txdW90ZT4KPHA+Jm5ic3A7Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgdHlwZWRlZiBtZW1iZXJzIHBvaW50ZXIsIGNvbnN0X3BvaW50ZXIsIHNpemVfdHlwZSwgYW5kIGRpZmZlcmVuY2VfdHlwZQogIGFyZSByZXF1aXJlZCB0byBiZSBUKiwgVCBjb25zdCosIHN0ZDo6c2l6ZV90LCBhbmQgc3RkOjpwdHJkaWZmX3QsCiAgcmVzcGVjdGl2ZWx5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXSAyMC40LjEuMSwgcGFyYWdyYXBocyAzIGFuZCA2OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MyBOb3RlczogVXNlcyA6Om9wZXJhdG9yIG5ldyhzaXplX3QpICgxOC40LjEpLjwvcD4KICA8cD42IE5vdGU6IHRoZSBzdG9yYWdlIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgOjpvcGVyYXRvciBuZXcoc2l6ZV90KSwgYnV0IGl0CiAgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludCBpcwogIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4zIE5vdGVzOiBVc2VzIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSAoMTguNC4xKS48L3A+CiAgPHA+NiBOb3RlOiB0aGUgc3RvcmFnZSBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSwgYnV0CiAgaXQgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludAogIGlzIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlXSAyMS4xLjEsIHBhcmFncmFwaCAxOiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gVGFibGUgMzcsIFggZGVub3RlcyBhIFRyYWl0cyBjbGFzcyBkZWZpbmluZyB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciB0aGUKICBjaGFyYWN0ZXIgY29udGFpbmVyIHR5cGUgQ2hhclQ7IGMgYW5kIGQgZGVub3RlIHZhbHVlcyBvZiB0eXBlIENoYXJUOyBwIGFuZCBxCiAgZGVub3RlIHZhbHVlcyBvZiB0eXBlIGNvbnN0IENoYXJUKjsgcyBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBDaGFyVCo7IG4sIGkgYW5kCiAgaiBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgc2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsgcG9zCiAgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5ieTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkluIFRhYmxlIDM3LCBYIGRlbm90ZXMgYSBUcmFpdHMgY2xhc3MgZGVmaW5pbmcgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlCiAgY2hhcmFjdGVyIGNvbnRhaW5lciB0eXBlIENoYXJUOyBjIGFuZCBkIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBDaGFyVDsgcCBhbmQgcQogIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBDaGFyVCo7IHMgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgQ2hhclQqOyBuLCBpIGFuZAogIGogZGVub3RlIHZhbHVlcyBvZiB0eXBlIHN0ZDo6c2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsKICBwb3MgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmNoYXIudHJhaXRzLnJlcXVpcmVdIDIxLjEuMSwgdGFibGUgMzc6IHJlcGxhY2UgdGhlIHJldHVybiB0eXBlIG9mClg6Omxlbmd0aChwKTogInNpemVfdCIgYnkgInN0ZDo6c2l6ZV90Ii48L3A+CjxwPiAgIEluIFtsaWIuc3RkLml0ZXJhdG9yLnRhZ3NdIDI0LjMuMywgcGFyYWdyYXBoIDI6ICAgIHJlcGxhY2U6PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzxicj4KICAgIGJ5Ojxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzwvcD4KPHA+IEluIFtsaWIubG9jYWxlLmN0eXBlXSAyMi4yLjEuMSBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZQpkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7IGNsYXNzIGN0eXBlLjxicj4KPGJyPgogICBJbiBbbGliLml0ZXJhdG9yLnRyYWl0c10gMjQuMy4xLCBwYXJhZ3JhcGggMiAgICBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZSBkZWNsYXJhdGlvbiBvZjo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlbXBsYXRlJmx0O2NsYXNzIEl0ZXJhdG9yJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyZsdDtUKiZndDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzJmx0O2NvbnN0IFQqJmd0OzwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgY29ycmVjdGluZyBuYW1lcyBsaWtlIDx0dD5zaXplX3Q8L3R0PiBhbmQKPHR0PnB0cmRpZmZfdDwvdHQ+IHRvIDx0dD5zdGQ6OnNpemVfdDwvdHQ+IGFuZCA8dHQ+c3RkOjpwdHJkaWZmX3Q8L3R0Pgp0byBiZSBlc3NlbnRpYWxseSBlZGl0b3JpYWwuICBUaGVyZSB0aGVyZSBjYW4ndCBiZSBhbm90aGVyIHNpemVfdCBvcgpwdHJkaWZmX3QgbWVhbnQgYW55d2F5IGJlY2F1c2UsIGFjY29yZGluZyB0byAxNy40LjMuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmV4dGVybi50eXBlcyI+IFtsaWIuZXh0ZXJuLnR5cGVzXTwvYT4sPC9wPgoKPGJsb2NrcXVvdGU+CkZvciBlYWNoIHR5cGUgVCBmcm9tIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnksIHRoZSB0eXBlcyA6OlQgYW5kIHN0ZDo6VAphcmUgcmVzZXJ2ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGFuZCwgd2hlbiBkZWZpbmVkLCA6OlQgc2hhbGwgYmUKaWRlbnRpY2FsIHRvIHN0ZDo6VC4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIGlzc3VlIGlzIHRyZWF0ZWQgYXMgYSBEZWZlY3QgUmVwb3J0IHRvIG1ha2UgZXhwbGljaXQgdGhlIFByb2plY3QKRWRpdG9yJ3MgYXV0aG9yaXR5IHRvIG1ha2UgdGhpcyBjaGFuZ2UuPC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IE5pY28gSm9zdXR0aXMgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcgYXQgdGhlCnJlcXVlc3Qgb2YgdGhlIExXRy5dPC9pPjwvcD4KCjxwPjxpPltUb3JvbnRvOiBUaGlzIGlzIHRhbmdlbnRpYWxseSByZWxhdGVkIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjkiPjIyOTwvYT4sIGJ1dCBvbmx5IHRhbmdlbnRpYWxseTogdGhlIGludGVudCBvZiB0aGlzIGlzc3VlIGlzIHRvCmFkZHJlc3MgdXNlIG9mIHRoZSBuYW1lIDx0dD5zaXplX3Q8L3R0PiBpbiBjb250ZXh0cyBvdXRzaWRlIG9mCm5hbWVzcGFjZSBzdGQsIHN1Y2ggYXMgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIDx0dD46Om9wZXJhdG9yIG5ldzwvdHQ+LgpUaGUgcHJvcG9zZWQgY2hhbmdlcyBzaG91bGQgYmUgcmV2aWV3ZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlCmNvcnJlY3QuXTwvaT48L3A+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IE5pY28gaGFzIHJldmlld2VkIHRoZSBjaGFuZ2VzIGFuZCBiZWxpZXZlcwp0aGVtIHRvIGJlIGNvcnJlY3QuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjE4MyI+PGgzPjE4My4mbmJzcDtJL08gc3RyZWFtIG1hbmlwdWxhdG9ycyBkb24ndCB3b3JrIGZvciB3aWRlIGNoYXJhY3RlciBzdHJlYW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdGQubWFuaXAiPiBbbGliLnN0ZC5tYW5pcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgSnVsIDE5OTk8L3A+CjxwPjI3LjYuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RkLm1hbmlwIj4gW2xpYi5zdGQubWFuaXBdPC9hPiBwYXJhZ3JhcGggMyBzYXlzIChjbGF1c2UgbnVtYmVyaW5nIGFkZGVkIGZvcgpleHBvc2l0aW9uKTo8L3A+CjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBbMV0gb3V0IGlzIGFuIChpbnN0YW5jZQpvZikgYmFzaWNfb3N0cmVhbSB0aGVuIHRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBiZWhhdmVzIGFzIGlmIGYocykgd2VyZQpjYWxsZWQsIGFuZCBpZiBbMl0gaW4gaXMgYW4gKGluc3RhbmNlIG9mKSBiYXNpY19pc3RyZWFtIHRoZW4gdGhlIGV4cHJlc3Npb24KaW4mZ3Q7Jmd0O3MgYmVoYXZlcyBhcyBpZiBmKHMpIHdlcmUgY2FsbGVkLiBXaGVyZSBmIGNhbiBiZSBkZWZpbmVkIGFzOiBpb3NfYmFzZSZhbXA7CmYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKSB7IC8vIHJlc2V0IHNwZWNpZmllZCBmbGFncwpzdHIuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIG1hc2spOyByZXR1cm4gc3RyOyB9IFszXSBUaGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgb3N0cmVhbSZhbXA7IGFuZCB2YWx1ZSBvdXQuIFs0XSBUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpoYXMgdHlwZSBpc3RyZWFtJmFtcDsgYW5kIHZhbHVlIGluLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5HaXZlbiB0aGUgZGVmaW5pdGlvbnMgWzFdIGFuZCBbMl0gZm9yIG91dCBhbmQgaW4sIHN1cmVseSBbM10gc2hvdWxkIHJlYWQ6CiJUaGUgZXhwcmVzc2lvbiBvdXQgJmx0OyZsdDsgcyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmFtcDsgLi4uIiBhbmQKWzRdIHNob3VsZCByZWFkOiAiVGhlIGV4cHJlc3Npb24gaW4gJmd0OyZndDsgcyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmFtcDsKLi4uIjwvcD4KPHA+SWYgdGhlIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QsIEkgY2FuIHNlZSBubyB3YXkgb2YgaW1wbGVtZW50aW5nCmFueSBvZiB0aGUgbWFuaXB1bGF0b3JzIHNvIHRoYXQgdGhleSB3aWxsIHdvcmsgd2l0aCB3aWRlIGNoYXJhY3RlciBzdHJlYW1zLjwvcD4KPHA+ZS5nLiB3Y291dCAmbHQ7Jmx0OyBzZXRiYXNlKCAxNiApOzwvcD4KPHA+TXVzdCBoYXZlIHZhbHVlICd3Y291dCcgKHdoaWNoIG1ha2VzIHNlbnNlKSBhbmQgdHlwZSAnb3N0cmVhbSZhbXA7JyAod2hpY2gKZG9lc24ndCkuPC9wPgo8cD5UaGUgc2FtZSAiY3V0J24ncGFzdGUiIHR5cGUgYWxzbyBzZWVtcyB0byBvY2N1ciBpbiBQYXJhcyA0LDUsNyBhbmQKOC4gSW4gYWRkaXRpb24sIFBhcmEgNiBbc2V0ZmlsbF0gaGFzIGEgc2ltaWxhciBlcnJvciwgYnV0IHJlbGF0ZXMgb25seSB0bwpvc3RyZWFtcy48L3A+CjxwPkknZCBiZSBoYXBwaWVyIGlmIHRoZXJlIHdhcyBhIGJldHRlciB3YXkgb2Ygc2F5aW5nIHRoaXMsIHRvIG1ha2UgaXQgY2xlYXIKdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgInRoZSBzYW1lIHNwZWNpYWxpemF0aW9uIG9mCmJhc2ljX29zdHJlYW0gYXMgb3V0IiZhbXA7PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2Ugc2VjdGlvbiAyNy42LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0ZC5tYW5pcCI+IFtsaWIuc3RkLm1hbmlwXTwvYT4gZXhjZXB0IHBhcmFncmFwaCAxIHdpdGggdGhlCmZvbGxvd2luZzo8L3A+CjxibG9ja3F1b3RlPgo8cD4yLSBUaGUgdHlwZSBkZXNpZ25hdGVkIHNtYW5pcCBpbiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KZGVzY3JpcHRpb25zIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmllZCBhbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaApmdW5jdGlvbi48YnI+Cjxicj4KPHR0PnNtYW5pcCByZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTs8L3R0Pjxicj4KPGJyPgotMy0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIGFuCmluc3RhbmNlIG9mIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uCm91dCZsdDsmbHQ7cyBiZWhhdmVzCmFzIGlmIGYocywgbWFzaykgd2VyZSBjYWxsZWQsIG9yIGlmIGluIGlzIGFuIGluc3RhbmNlIG9mCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzCmJlaGF2ZXMgYXMgaWYKZihzLCBtYXNrKSB3ZXJlIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIGYgY2FuIGJlIGRlZmluZWQgYXM6Kjxicj4KPGJyPgpbRm9vdG5vdGU6IFRoZSBleHByZXNzaW9uIGNpbiAmZ3Q7Jmd0OyByZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpza2lwd3MpCmNsZWFycyBpb3NfYmFzZTo6c2tpcHdzIGluIHRoZSBmb3JtYXQgZmxhZ3Mgc3RvcmVkIGluIHRoZQpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgb2JqZWN0IGNpbiAodGhlIHNhbWUgYXMgY2luICZndDsmZ3Q7Cm5vc2tpcHdzKSwgYW5kIHRoZSBleHByZXNzaW9uIGNvdXQgJmx0OyZsdDsKcmVzZXRpb3NmbGFncyhpb3NfYmFzZTo6c2hvd2Jhc2UpIGNsZWFycwppb3NfYmFzZTo6c2hvd2Jhc2UgaW4gdGhlIGZvcm1hdCBmbGFncyBzdG9yZWQgaW4gdGhlCmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyBvYmplY3QgY291dCAodGhlIHNhbWUgYXMgY291dAombHQ7Jmx0Owpub3Nob3diYXNlKS4gLS0tIGVuZCBmb290bm90ZV08YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgcmVzZXQgc3BlY2lmaWVkIGZsYWdzPGJyPgombmJzcDsmbmJzcDsgc3RyLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBtYXNrKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluLjxicj4KPGJyPgombmJzcDs8dHQ+c21hbmlwIHNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTs8L3R0Pjxicj4KPGJyPgotNC0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIGFuCmluc3RhbmNlIG9mIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uCm91dCZsdDsmbHQ7cyBiZWhhdmVzCmFzIGlmIGYocywgbWFzaykgd2VyZSBjYWxsZWQsIG9yIGlmIGluIGlzIGFuIGluc3RhbmNlIG9mCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzCmJlaGF2ZXMgYXMgaWYgZihzLAptYXNrKSB3ZXJlIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIGYgY2FuIGJlIGRlZmluZWQgYXM6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+aW9zX2Jhc2UmYW1wOyBmKGlvc19iYXNlJmFtcDsgc3RyLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgbWFzayk8YnI+CiZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsgLy8gIHNldCBzcGVjaWZpZWQgZmxhZ3M8YnI+CiZuYnNwOyZuYnNwOyBzdHIuc2V0ZihtYXNrKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluLjxicj4KPGJyPgo8dHQ+c21hbmlwIHNldGJhc2UoaW50IGJhc2UpOzwvdHQ+PGJyPgo8YnI+Ci01LSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBiYXNlKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZiBmKHMsCmJhc2UpIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGludCBiYXNlKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0ICBiYXNlZmllbGQ8YnI+CiZuYnNwOyZuYnNwOyBzdHIuc2V0ZihiYXNlID09ICA4ID8gaW9zX2Jhc2U6Om9jdCA6PGJyPgombmJzcDsmbmJzcDsgYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOjxicj4KJm5ic3A7Jm5ic3A7IGJhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDo8YnI+CiZuYnNwOyZuYnNwOyBpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIGlvc19iYXNlOjpiYXNlZmllbGQpOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LgpUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgaW4uPGJyPgo8YnI+Cjx0dD5zbWFuaXAgc2V0ZmlsbChjaGFyX3R5cGUgYyk7PGJyPgo8L3R0Pjxicj4KLTYtIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyAob3IgaXMKZGVyaXZlZCBmcm9tKSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgYW5kIGMgaGFzIHR5cGUgY2hhclQKdGhlbiB0aGUKZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgYmVoYXZlcyBhcyBpZiBmKHMsIGMpIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24KZiBjYW4gYmUKZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD50ZW1wbGF0ZSZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzJmd0Ozxicj4KJm5ic3A7Jm5ic3A7IGJhc2ljX2lvcyZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgZihiYXNpY19pb3MmbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHN0ciwgY2hhclQgYyk8YnI+CiZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsgLy8gIHNldCBmaWxsIGNoYXJhY3Rlcjxicj4KJm5ic3A7Jm5ic3A7IHN0ci5maWxsKGMpOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0Ljxicj4KPGJyPgo8dHQ+c21hbmlwIHNldHByZWNpc2lvbihpbnQgbik7PC90dD48YnI+Cjxicj4KLTctIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyBhbgppbnN0YW5jZSBvZiBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgYmVoYXZlcwphcyBpZiBmKHMsIG4pIHdlcmUgY2FsbGVkLCBvciBpZiBpbiBpcyBhbiBpbnN0YW5jZSBvZgpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpiZWhhdmVzIGFzIGlmIGYocywgbikKd2VyZSBjYWxsZWQuIFRoZSBmdW5jdGlvbiBmIGNhbiBiZSBkZWZpbmVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW50IG4pPGJyPgombmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7IC8vICBzZXQgcHJlY2lzaW9uPGJyPgombmJzcDsmbmJzcDsgc3RyLnByZWNpc2lvbihuKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluPGJyPgouPGJyPgo8dHQ+c21hbmlwIHNldHcoaW50IG4pOzxicj4KPC90dD48YnI+Ci04LSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBuKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZiBmKHMsIG4pCndlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGludCBuKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0IHdpZHRoPGJyPgombmJzcDsmbmJzcDsgc3RyLndpZHRoKG4pOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZQpiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LiAgVGhlIGV4cHJlc3Npb24KaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlCmluLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBBbmR5IFNhd3llciBhbmQgQmVtYW4gRGF3ZXMgd2lsbCB3b3JrIHRvIGltcHJvdmUgdGhlIHdvcmRpbmcgb2YKdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cgo8cD48aT5bVG9reW8gLSBUaGUgTFdHIG5vdGVkIHRoYXQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE2Ij4yMTY8L2E+IGludm9sdmVzCnRoZSBzYW1lIHBhcmFncmFwaHMuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogVGhlIGlzc3VlcyBsaXN0IG1haW50YWluZXIgY29tYmluZWQgdGhlIHByb3Bvc2VkCnJlc29sdXRpb24gb2YgdGhpcyBpc3N1ZSB3aXRoIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyMTYiPjIxNjwvYT4gYXMgdGhleSBib3RoIGludm9sdmVkIHRoZSBzYW1lIHBhcmFncmFwaHMsIGFuZCB3ZXJlIHNvCmludGVydHdpbmVkIHRoYXQgZGVhbGluZyB3aXRoIHRoZW0gc2VwYXJhdGVseSBhcHBlYXIgZnJhdWdodCB3aXRoCmVycm9yLiAgVGhlIGZ1bGwgdGV4dCB3YXMgc3VwcGxpZWQgYnkgQmlsbCBQbGF1Z2VyOyBpdCB3YXMgY3Jvc3MKY2hlY2tlZCBhZ2FpbnN0IGNoYW5nZXMgc3VwcGxpZWQgYnkgQW5keSBTYXd5ZXIuIEl0IHNob3VsZCBiZSBmdXJ0aGVyCmNoZWNrZWQgYnkgdGhlIExXRy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxODQiPjxoMz4xODQuJm5ic3A7bnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgd29yZGluZyBwcm9ibGVtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubnVtZXJpYy5zcGVjaWFsIj4gW2xpYi5udW1lcmljLnNwZWNpYWxdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHYWJyaWVsIERvcyBSZWlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1bCAxOTk5PC9wPgo8cD5ib29scyBhcmUgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQgdG8gYmUgb2YgaW50ZWdlciB0eXBlcywgYXMgcGVyCjMuOS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvYmFzaWMuaHRtbCNiYXNpYy5mdW5kYW1lbnRhbCI+IFtiYXNpYy5mdW5kYW1lbnRhbF08L2E+IHBhcmFncmFwaCA3LiAgSG93ZXZlciAiaW50ZWdlciB0eXBlcyIKc2VlbXMgdG8gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIGF1dGhvciBvZiAxOC4yLiBUaGUgbmV0IGVmZmVjdAppcyBhbiB1bmNsZWFyIGFuZCBjb25mdXNpbmcgc3BlY2lmaWNhdGlvbiBmb3IKbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgYXMgZXZpZGVuY2VkIGJlbG93LjwvcD4KCjxwPjE4LjIuMS4yLzcgc2F5cyBudW1lcmljX2xpbWl0cyZsdDsmZ3Q7OjpkaWdpdHMgaXMsIGZvciBidWlsdC1pbiBpbnRlZ2VyCnR5cGVzLCB0aGUgbnVtYmVyIG9mIG5vbi1zaWduIGJpdHMgaW4gdGhlIHJlcHJlc2VudGF0aW9uLjwvcD4KCjxwPjQuNS80IHN0YXRlcyB0aGF0IGEgYm9vbCBwcm9tb3RlcyB0byBpbnQgOyB3aGVyZWFzIDQuMTIvMSBzYXlzIGFueSBub24gemVybwphcml0aG1ldGljYWwgdmFsdWUgY29udmVydHMgdG8gdHJ1ZS48L3A+Cgo8cD5JIGRvbid0IHRoaW5rIGl0IG1ha2VzIHNlbnNlIGF0IGFsbCB0byByZXF1aXJlCm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7OjpkaWdpdHMgYW5kIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7OjpkaWdpdHMxMCB0bwpiZSBtZWFuaW5nZnVsLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBkZWZpbmVzIHdoYXQgY29uc3RpdHV0ZXMgYSBzaWduZWQgKHJlc3AuIHVuc2lnbmVkKSBpbnRlZ2VyCnR5cGVzLiBJdCBkb2Vzbid0IGNhdGVnb3JpemUgYm9vbCBhcyBiZWluZyBzaWduZWQgb3IgdW5zaWduZWQuIEFuZCB0aGUgc2V0IG9mCnZhbHVlcyBvZiBib29sIHR5cGUgaGFzIG9ubHkgdHdvIGVsZW1lbnRzLjwvcD4KCjxwPkkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gcmVxdWlyZSBudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6aXNfc2lnbmVkCnRvIGJlIG1lYW5pbmdmdWwuPC9wPgoKPHA+MTguMi4xLjIvMTggZm9yIG51bWVyaWNfbGltaXRzJmx0O2ludGVnZXJfdHlwZSZndDs6OnJhZGl4Jm5ic3A7IHNheXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5Gb3IgaW50ZWdlciB0eXBlcywgc3BlY2lmaWVzIHRoZSBiYXNlIG9mIHRoZSByZXByZXNlbnRhdGlvbi4xODYpPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGRpc3Bvc2l0aW9uIGlzIGF0IGJlc3QgbWlzbGVhZGluZyBhbmQgY29uZnVzaW5nIGZvciB0aGUgc3RhbmRhcmQKcmVxdWlyZXMgYSAicHVyZSBiaW5hcnkgbnVtZXJhdGlvbiBzeXN0ZW0iIGZvciBpbnRlZ2VyIHR5cGVzIGFzIHBlcgozLjkuMS83PC9wPgoKPHA+VGhlIGZvb3Rub3RlIDE4Nikgc2F5czogIkRpc3Rpbmd1aXNoZXMgdHlwZXMgd2l0aCBiYXNlIG90aGVyIHRoYW4gMiAoZS5nCkJDRCkuIiZuYnNwOyBUaGlzIGFsc28gZXJyb25lb3VzIGFzIHRoZSBzdGFuZGFyZCBuZXZlciBkZWZpbmVzIGFueSBpbnRlZ2VyCnR5cGVzIHdpdGggYmFzZSByZXByZXNlbnRhdGlvbiBvdGhlciB0aGFuIDIuPC9wPgoKPHA+RnVydGhlcm1vcmUsIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7Ojppc19tb2R1bG8gYW5kCm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7Ojppc19zaWduZWQgaGF2ZSBzaW1pbGFyIHByb2JsZW1zLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BcHBlbmQgdG8gdGhlIGVuZCBvZiAxOC4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm51bWVyaWMuc3BlY2lhbCI+IFtsaWIubnVtZXJpYy5zcGVjaWFsXTwvYT46PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgc3BlY2lhbGl6YXRpb24gZm9yIGJvb2wgc2hhbGwgYmUgcHJvdmlkZWQgYXMgZm9sbG93czo8L3A+CiAgPHByZT4gICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSZsdDsmZ3Q7IGNsYXNzIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7IHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwogICAgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzID0gMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzMTAgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSAyOwogICAgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CgogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gMDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gMDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgICAgfTsKICAgICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltUb2t5bzombmJzcDsgVGhlIExXRyBkZXNpcmVzIHdvcmRpbmcgdGhhdCBzcGVjaWZpZXMgZXhhY3QgdmFsdWVzCnJhdGhlciB0aGFuIG1vcmUgZ2VuZXJhbCB3b3JkaW5nIGluIHRoZSBvcmlnaW5hbCBwcm9wb3NlZApyZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86Jm5ic3A7IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0cgaW4gVG9reW8sIE5pY28KSm9zdXR0aXMgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTg1Ij48aDM+MTg1LiZuYnNwO1F1ZXN0aW9uYWJsZSB1c2Ugb2YgdGVybSAiaW5saW5lIjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnR1cGxlIj4gW2xpYi50dXBsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1VLIFBhbmVsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEp1bCAxOTk5PC9wPgo8cD5QYXJhZ3JhcGggNCBvZiAyMC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi50dXBsZSI+IFtsaWIudHVwbGVdPC9hPiBzYXlzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+Jm5ic3A7W0V4YW1wbGU6IFRvIG5lZ2F0ZSBldmVyeSBlbGVtZW50IG9mIGE6IHRyYW5zZm9ybShhLmJlZ2luKCksIGEuZW5kKCksCiAgYS5iZWdpbigpLCBuZWdhdGUmbHQ7ZG91YmxlJmd0OygpKTsgVGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zIHdpbGwgaW5saW5lCiAgdGhlIGFkZGl0aW9uIGFuZCB0aGUgbmVnYXRpb24uIGVuZCBleGFtcGxlXTwvcD4KPC9ibG9ja3F1b3RlPgo8cD4oTm90ZTogVGhlICJhZGRpdGlvbiIgcmVmZXJyZWQgdG8gaW4gdGhlIGFib3ZlIGlzIGluIHBhcmEgMykgd2UgY2FuCmZpbmQgbm8gb3RoZXIgd29yZGluZywgZXhjZXB0IHRoaXMgKG5vbi1ub3JtYXRpdmUpIGV4YW1wbGUgd2hpY2ggc3VnZ2VzdHMgdGhhdAphbnkgImlubGluaW5nIiB3aWxsIHRha2UgcGxhY2UgaW4gdGhpcyBjYXNlLjwvcD4KPHA+SW5kZWVkIGJvdGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4xNy40LjQuMyBHbG9iYWwgRnVuY3Rpb25zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc10gMSBJdCBpcwogIHVuc3BlY2lmaWVkIHdoZXRoZXIgYW55IGdsb2JhbCBmdW5jdGlvbnMgaW4gdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5CiAgYXJlIGRlZmluZWQgYXMgaW5saW5lICg3LjEuMikuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPmFuZDwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MTcuNC40LjQgTWVtYmVyIEZ1bmN0aW9ucyBbbGliLm1lbWJlci5mdW5jdGlvbnNdIDEgSXQgaXMKICB1bnNwZWNpZmllZCB3aGV0aGVyIGFueSBtZW1iZXIgZnVuY3Rpb25zIGluIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeQogIGFyZSBkZWZpbmVkIGFzIGlubGluZSAoNy4xLjIpLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50YWtlIGNhcmUgdG8gc3RhdGUgdGhhdCB0aGlzIG1heSBpbmRlZWQgTk9UIGJlIHRoZSBjYXNlLjwvcD4KPHA+VGh1cyB0aGUgZXhhbXBsZSAibWFuZGF0ZXMiIGJlaGF2aW9yIHRoYXQgaXMgZXhwbGljaXRseQpub3QgcmVxdWlyZWQgZWxzZXdoZXJlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi50dXBsZSI+IFtsaWIudHVwbGVdPC9hPiBwYXJhZ3JhcGggMSwgcmVtb3ZlIHRoZSBzZW50ZW5jZTo8L3A+CjxibG9ja3F1b3RlPgo8cD5UaGV5IGFyZSBpbXBvcnRhbnQgZm9yIHRoZSBlZmZlY3RpdmUgdXNlIG9mIHRoZSBsaWJyYXJ5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5SZW1vdmUgMjAuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIudHVwbGUiPiBbbGliLnR1cGxlXTwvYT4gcGFyYWdyYXBoIDIsIHdoaWNoIHJlYWRzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+IFVzaW5nIGZ1bmN0aW9uIG9iamVjdHMgdG9nZXRoZXIgd2l0aCBmdW5jdGlvbiB0ZW1wbGF0ZXMKICBpbmNyZWFzZXMgdGhlIGV4cHJlc3NpdmUgcG93ZXIgb2YgdGhlIGxpYnJhcnkgYXMgd2VsbCBhcyBtYWtpbmcgdGhlCiAgcmVzdWx0aW5nIGNvZGUgbXVjaCBtb3JlIGVmZmljaWVudC48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gMjAuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIudHVwbGUiPiBbbGliLnR1cGxlXTwvYT4gcGFyYWdyYXBoIDQsIHJlbW92ZSB0aGUgc2VudGVuY2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgd2lsbCBpbmxpbmUgdGhlIGFkZGl0aW9uIGFuZCB0aGUKICBuZWdhdGlvbi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBUaGUgTFdHIGFncmVlZCB0aGVyZSB3YXMgYSBkZWZlY3QuXTwvaT48L3A+CjxwPjxpPltUb2t5bzogVGhlIExXRyBjcmFmdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjE4NiI+PGgzPjE4Ni4mbmJzcDtiaXRzZXQ6OnNldCgpIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGJvb2w8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5tZW1iZXJzIj4gW2xpYi5iaXRzZXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhcmluIEFkbGVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIEF1ZyAxOTk5PC9wPgo8cD5JbiBzZWN0aW9uIDIzLjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYml0c2V0Lm1lbWJlcnMiPiBbbGliLmJpdHNldC5tZW1iZXJzXTwvYT4sIHBhcmFncmFwaCAxMyBkZWZpbmVzIHRoZQpiaXRzZXQ6OnNldCBvcGVyYXRpb24gdG8gdGFrZSBhIHNlY29uZCBwYXJhbWV0ZXIgb2YgdHlwZSBpbnQuIFRoZQpmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoaXMgdmFsdWUgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8Kc2V0IHRoZSBiaXQgdG8gdHJ1ZSBvciBmYWxzZS4gVGhlIHR5cGUgb2YgdGhpcyBzZWNvbmQgcGFyYW1ldGVyIHNob3VsZApiZSBib29sLiBGb3Igb25lIHRoaW5nLCB0aGUgaW50ZW50IGlzIHRvIHNwZWNpZnkgYSBCb29sZWFuIHZhbHVlLiBGb3IKYW5vdGhlciwgdGhlIHJlc3VsdCB0eXBlIGZyb20gdGVzdCgpIGlzIGJvb2wuIEluIGFkZGl0aW9uLCBpdCdzCnBvc3NpYmxlIHRvIHNsaWNlIGFuIGludGVnZXIgdGhhdCdzIGxhcmdlciB0aGFuIGFuIGludC4gVGhpcyBjYW4ndApoYXBwZW4gd2l0aCBib29sLCBzaW5jZSBjb252ZXJzaW9uIHRvIGJvb2wgaGFzIHRoZSBzZW1hbnRpYyBvZgp0cmFuc2xhdGluZyAwIHRvIGZhbHNlIGFuZCBhbnkgbm9uLXplcm8gdmFsdWUgdG8gdHJ1ZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudGVtcGxhdGUuYml0c2V0Ij4gW2xpYi50ZW1wbGF0ZS5iaXRzZXRdPC9hPiBQYXJhIDEgUmVwbGFjZTo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBpbnQgdmFsID0gdHJ1ZSApOyA8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5XaXRoOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5iaXRzZXQmbHQ7TiZndDsmYW1wOyBzZXQoc2l6ZV90IHBvcywgYm9vbCB2YWwgPSB0cnVlICk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+SW4gMjMuMy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5iaXRzZXQubWVtYmVycyI+IFtsaWIuYml0c2V0Lm1lbWJlcnNdPC9hPiBQYXJhIDEyKC41KSBSZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5iaXRzZXQmbHQ7TiZndDsmYW1wOyBzZXQoc2l6ZV90IHBvcywgaW50IHZhbCA9IDEgKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5XaXRoOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5iaXRzZXQmbHQ7TiZndDsmYW1wOyBzZXQoc2l6ZV90IHBvcywgYm9vbCB2YWwgPSB0cnVlICk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBUaGUgTFdHIGFncmVlcyB3aXRoIHRoZSBkZXNjcmlwdGlvbi4mbmJzcDsgQW5keSBTYXd5ZXIgd2lsbCB3b3JrCm9uIGJldHRlciBQL1Igd29yZGluZy5dPC9pPjwvcD4KPHA+PGk+W1Bvc3QtVG9reW86IEFuZHkgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD48dHQ+Ym9vbDwvdHQ+IGlzIGEgYmV0dGVyIGNob2ljZS4gIEl0IGlzIGJlbGlldmVkIHRoYXQgYmluYXJ5CmNvbXBhdGliaWxpdHkgaXMgbm90IGFuIGlzc3VlLCBiZWNhdXNlIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIGlzCnVzdWFsbHkgaW1wbGVtZW50ZWQgYXMgPHR0PmlubGluZTwvdHQ+LCBhbmQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5CnRoZSBjYXNlIHRoYXQgdXNlcnMgY2Fubm90IHJlbHkgb24gdGhlIHR5cGUgb2YgYSBwb2ludGVyIHRvIGEKbm9udmlydHVhbCBtZW1iZXIgb2YgYSBzdGFuZGFyZCBsaWJyYXJ5IGNsYXNzLjwvcD4KPGhyPgo8YSBuYW1lPSIxODciPjxoMz4xODcuJm5ic3A7aXRlcl9zd2FwIHVuZGVyc3BlY2lmaWVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnN3YXAiPiBbbGliLmFsZy5zd2FwXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNCBBdWcgMTk5OTwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGl0ZXJfc3dhcCBpbiAyNS4yLjIgcGFyYWdyYXBoIDcsc2F5cyB0aGF0IGl0CmBgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMnJyBvZiB0aGUgb2JqZWN0cyB0byB3aGljaCB0d28gaXRlcmF0b3JzCnJlZmVyLjxicj4gPGJyPiBXaGF0IGl0IGRvZXNuJ3Qgc2F5IGlzIHdoZXRoZXIgaXQgZG9lcyBzbyB1c2luZyBzd2FwCm9yIHVzaW5nIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGFuZCBjb3B5IGNvbnN0cnVjdG9yLjxicj4gPGJyPiBUaGlzCnF1ZXN0aW9uIGlzIGFuIGltcG9ydGFudCBvbmUgdG8gYW5zd2VyLCBiZWNhdXNlIHN3YXAgaXMgc3BlY2lhbGl6ZWQgdG8Kd29yayBlZmZpY2llbnRseSBmb3Igc3RhbmRhcmQgY29udGFpbmVycy48YnI+IEZvciBleGFtcGxlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+dmVjdG9yJmx0O2ludCZndDsgdjEsIHYyOwppdGVyX3N3YXAoJmFtcDt2MSwgJmFtcDt2Mik7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+SXMgdGhpcyBjYWxsIHRvIGl0ZXJfc3dhcCBlcXVpdmFsZW50IHRvIGNhbGxpbmcgc3dhcCh2MSwgdjIpPyZuYnNwOwpPciBpcyBpdCBlcXVpdmFsZW50IHRvPC9wPgo8YmxvY2txdW90ZT4KPHByZT57CnZlY3RvciZsdDtpbnQmZ3Q7IHRlbXAgPSB2MTsKdjEgPSB2MjsKdjIgPSB0ZW1wOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+VGhlIGZpcnN0IGFsdGVybmF0aXZlIGlzIE8oMSk7IHRoZSBzZWNvbmQgaXMgTyhuKS48L3A+CjxwPkEgTFdHIG1lbWJlciwgRGF2ZSBBYnJhaGFtcywgY29tbWVudHM6PC9wPgo8YmxvY2txdW90ZT4KPHA+Tm90IGFuIG9iamVjdGlvbiBuZWNlc3NhcmlseSwgYnV0IEkgd2FudCB0byBwb2ludCBvdXQgdGhlIGNvc3Qgb2YKdGhhdCByZXF1aXJlbWVudDo8L3A+CiAgPGJsb2NrcXVvdGU+CjxwPjx0dD5pdGVyX3N3YXAobGlzdCZsdDtUJmd0Ozo6aXRlcmF0b3IsIGxpc3QmbHQ7VCZndDs6Oml0ZXJhdG9yKTwvdHQ+PC9wPgogIDwvYmxvY2txdW90ZT4KPHA+Y2FuIGN1cnJlbnRseSBiZSBzcGVjaWFsaXplZCB0byBiZSBtb3JlIGVmZmljaWVudCB0aGFuCml0ZXJfc3dhcChUKixUKikgZm9yIG1hbnkgVCAoYnkgdXNpbmcgc3BsaWNpbmcpLiBZb3VyIHByb3Bvc2FsIHdvdWxkCm1ha2UgdGhhdCBvcHRpbWl6YXRpb24gaWxsZWdhbC4mbmJzcDs8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBUaGUgTFdHIG5vdGVzIHRoZSBvcmlnaW5hbCBuZWVkIGZvciBpdGVyX3N3YXAgd2FzIHByb3h5IGl0ZXJhdG9ycwp3aGljaCBhcmUgbm8gbG9uZ2VyIHBlcm1pdHRlZC5dPC9pPjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGVmZmVjdCBjbGF1c2Ugb2YgaXRlcl9zd2FwIGluIDI1LjIuMiBwYXJhZ3JhcGggNyBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CjxwPkV4Y2hhbmdlcyB0aGUgdmFsdWVzIHBvaW50ZWQgdG8gYnkgdGhlIHR3byBpdGVyYXRvcnMgYSBhbmQgYi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG88L3A+CjxibG9ja3F1b3RlPgo8cD48dHQ+c3dhcCgqYSwgKmIpPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQncyB1c2VmdWwgdG8gc2F5IGp1c3Qgd2hhdCA8dHQ+aXRlcl9zd2FwPC90dD4gZG9lcy4gIFRoZXJlIG1heSBiZQogIHNvbWUgaXRlcmF0b3JzIGZvciB3aGljaCB3ZSB3YW50IHRvIHNwZWNpYWxpemUgPHR0Pml0ZXJfc3dhcDwvdHQ+LAogIGJ1dCB0aGUgZnVsbHkgZ2VuZXJhbCB2ZXJzaW9uIHNob3VsZCBoYXZlIGEgZ2VuZXJhbCBzcGVjaWZpY2F0aW9uLjwvcD4KCjxwPk5vdGUgdGhhdCBpbiB0aGUgc3BlY2lmaWMgY2FzZSBvZiA8dHQ+bGlzdCZsdDtUJmd0Ozo6aXRlcmF0b3I8L3R0PiwKaXRlcl9zd2FwIHNob3VsZCBub3QgYmUgc3BlY2lhbGl6ZWQgYXMgc3VnZ2VzdGVkIGFib3ZlLiAgVGhhdCB3b3VsZCBkbwptdWNoIG1vcmUgdGhhbiBleGNoYW5naW5nIHRoZSB0d28gaXRlcmF0b3JzJyB2YWx1ZXM6IGl0IHdvdWxkIGNoYW5nZQpwcmVkZWNlc3Nvci9zdWNjZXNzb3IgcmVsYXRpb25zaGlwcywgcG9zc2libHkgbW92aW5nIHRoZSBpdGVyYXRvciBmcm9tCm9uZSBsaXN0IHRvIGFub3RoZXIuICBUaGF0IHdvdWxkIHN1cmVseSBiZSBpbmFwcHJvcHJpYXRlLjwvcD4KPGhyPgo8YSBuYW1lPSIxODkiPjxoMz4xODkuJm5ic3A7c2V0cHJlY2lzaW9uKCkgbm90IHNwZWNpZmllZCBjb3JyZWN0bHk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZm10ZmxhZ3Muc3RhdGUiPiBbbGliLmZtdGZsYWdzLnN0YXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBBdWcgMTk5OTwvcD4KPHA+MjcuNC4yLjIgcGFyYWdyYXBoIDkgY2xhaW1zIHRoYXQgc2V0cHJlY2lzaW9uKCkgc2V0cyB0aGUgcHJlY2lzaW9uLAphbmQgaW5jbHVkZXMgYSBwYXJlbnRoZXRpY2FsIG5vdGUgc2F5aW5nIHRoYXQgaXQgaXMgdGhlIG51bWJlciBvZgpkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuPGJyPgo8YnI+ClRoaXMgY2xhaW0gaXMgbm90IHN0cmljdGx5IGNvcnJlY3QuICBGb3IgZXhhbXBsZSwgaW4gdGhlIGRlZmF1bHQKZmxvYXRpbmctcG9pbnQgb3V0cHV0IGZvcm1hdCwgc2V0cHJlY2lzaW9uIHNldHMgdGhlIG51bWJlciBvZgpzaWduaWZpY2FudCBkaWdpdHMgcHJpbnRlZCwgbm90IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsCnBvaW50Ljxicj4KPGJyPgpJIHdvdWxkIGxpa2UgdGhlIGNvbW1pdHRlZSB0byBsb29rIGF0IHRoZSBkZWZpbml0aW9uIGNhcmVmdWxseSBhbmQKY29ycmVjdCB0aGUgc3RhdGVtZW50IGluIDI3LjQuMi4yPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSBmcm9tIDI3LjQuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mbXRmbGFncy5zdGF0ZSI+IFtsaWIuZm10ZmxhZ3Muc3RhdGVdPC9hPiwgcGFyYWdyYXBoIDksIHRoZSB0ZXh0CiIobnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCkiLjwvcD4KPGhyPgo8YSBuYW1lPSIxOTMiPjxoMz4xOTMuJm5ic3A7SGVhcCBvcGVyYXRpb25zIGRlc2NyaXB0aW9uIGluY29ycmVjdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5oZWFwLm9wZXJhdGlvbnMiPiBbbGliLmFsZy5oZWFwLm9wZXJhdGlvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJrdXMgTWF1aGFydCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBTZXAgMTk5OTwvcD4KPHA+MjUuMy42IFtsaWIuYWxnLmhlYXAub3BlcmF0aW9uc10gc3RhdGVzIHR3byBrZXkgcHJvcGVydGllcyBvZiBhIGhlYXAgW2EsYiksIHRoZSBmaXJzdCBvZiB0aGVtCmlzPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBgIigxKSAqYSBpcyB0aGUgbGFyZ2VzdCBlbGVtZW50Ijxicj4KPGJyPgpJIHRoaW5rIHRoaXMgaXMgaW5jb3JyZWN0IGFuZCBzaG91bGQgYmUgY2hhbmdlZCB0byB0aGUgd29yZGluZyBpbiB0aGUgcHJvcG9zZWQKcmVzb2x1dGlvbi48L3A+CjxwPkFjdHVhbGx5IHRoZXJlIGFyZSB0d28gaW5kZXBlbmRlbnQgY2hhbmdlczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkEtInBhcnQgb2YgbGFyZ2VzdCBlcXVpdmFsZW5jZSBjbGFzcyIgaW5zdGVhZCBvZiAibGFyZ2VzdCIsIGNhdXNlIDI1LjMKICBbbGliLmFsZy5zb3J0aW5nXSBhc3NlcnRzICJzdHJpY3Qgd2VhayBvcmRlcmluZyIgZm9yIGFsbCBpdHMgc3ViIGNsYXVzZXMuPC9wPgogIDxwPkItVGFrZQonYW4gb2xkZXN0JyBmcm9tIHRoYXQgZXF1aXZhbGVuY2UgY2xhc3MsIG90aGVyd2lzZSB0aGUgaGVhcCBmdW5jdGlvbnMKY291bGQgbm90IGJlIHVzZWQgZm9yIGEgcHJpb3JpdHkgcXVldWUgYXMgZXhwbGFpbmVkIGluIDIzLjIuMy4yLjIKW2xpYi5wcmlxdWV1ZS5tZW1iZXJzXSAod2hlcmUgSSBhc3N1bWUgdGhhdCBhICJwcmlvcml0eSBxdWV1ZSIgcmVzcGVjdHMKcHJpb3JpdHkgQU5EIHRpbWUpLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4zLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuaGVhcC5vcGVyYXRpb25zIj4gW2xpYi5hbGcuaGVhcC5vcGVyYXRpb25zXTwvYT4gcHJvcGVydHkgKDEpIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD4oMSkgKmEgaXMgdGhlIGxhcmdlc3QgZWxlbWVudDwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPigxKSBUaGVyZSBpcyBubyBlbGVtZW50IGdyZWF0ZXIgdGhhbiA8dHQ+KmE8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE5NSI+PGgzPjE5NS4mbmJzcDtTaG91bGQgPHR0PmJhc2ljX2lzdHJlYW06OnNlbnRyeTwvdHQ+J3MgY29uc3RydWN0b3IgZXZlciBzZXQgZW9mYml0PzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OnNlbnRyeSI+IFtsaWIuaXN0cmVhbTo6c2VudHJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIE9jdCAxOTk5PC9wPgo8cD5TdXBwb3NlIHRoYXQgPHR0PmlzLmZsYWdzKCkgJmFtcDsgaW9zX2Jhc2U6OnNraXB3czwvdHQ+IGlzIG5vbnplcm8uCldoYXQgc2hvdWxkIDx0dD5iYXNpY19pc3RyZWFtJmx0OyZndDs6OnNlbnRyeTwvdHQ+J3MgY29uc3RydWN0b3IgZG8gaWYgaXQKcmVhY2hlcyBlb2Ygd2hpbGUgc2tpcHBpbmcgd2hpdGVzcGFjZT8gIDI3LjYuMS4xLjIvNSBzdWdnZXN0cyBpdApzaG91bGQgc2V0IGZhaWxiaXQuIFNob3VsZCBpdCBzZXQgZW9mYml0IGFzIHdlbGw/ICBUaGUgc3RhbmRhcmQKZG9lc24ndCBzZWVtIHRvIGFuc3dlciB0aGF0IHF1ZXN0aW9uLjwvcD4KCjxwPk9uIHRoZSBvbmUgaGFuZCwgbm90aGluZyBpbiAyNy42LjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpzZW50cnkiPiBbbGliLmlzdHJlYW06OnNlbnRyeV08L2E+IHNheXMgdGhhdAo8dHQ+YmFzaWNfaXN0cmVhbSZsdDsmZ3Q7OjpzZW50cnk8L3R0PiBzaG91bGQgZXZlciBzZXQgZW9mYml0LiAgT24gdGhlCm90aGVyIGhhbmQsIDI3LjYuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtIj4gW2xpYi5pc3RyZWFtXTwvYT4gcGFyYWdyYXBoIDQgc2F5cyB0aGF0IGlmCmV4dHJhY3Rpb24gZnJvbSBhIDx0dD5zdHJlYW1idWY8L3R0PiAicmV0dXJucwo8dHQ+dHJhaXRzOjplb2YoKTwvdHQ+LCB0aGVuIHRoZSBpbnB1dCBmdW5jdGlvbiwgZXhjZXB0IGFzIGV4cGxpY2l0bHkKbm90ZWQgb3RoZXJ3aXNlLCBjb21wbGV0ZXMgaXRzIGFjdGlvbnMgYW5kIGRvZXMKPHR0PnNldHN0YXRlKGVvZmJpdCkiPC90dD4uICBTbyB0aGUgcXVlc3Rpb24gY29tZXMgZG93biB0bwp3aGV0aGVyIDx0dD5iYXNpY19pc3RyZWFtJmx0OyZndDs6OnNlbnRyeTwvdHQ+J3MgY29uc3RydWN0b3IgaXMgYW4KaW5wdXQgZnVuY3Rpb24uPC9wPgoKPHA+Q29tbWVudHMgZnJvbSBKZXJyeSBTY2h3YXJ6OjwvcD4KPGJsb2NrcXVvdGU+CjxwPkl0IHdhcyBhbHdheXMgbXkgaW50ZW50aW9uIHRoYXQgZW9mYml0IHNob3VsZCBiZSBzZXQgYW55IHRpbWUgdGhhdCBhCnZpcnR1YWwgcmV0dXJuZWQgc29tZXRoaW5nIHRvIGluZGljYXRlIGVvZiwgbm8gbWF0dGVyIHdoYXQgcmVhc29uCmlvc3RyZWFtIGNvZGUgaGFkIGZvciBjYWxsaW5nIHRoZSB2aXJ0dWFsLjwvcD4KPHA+ClRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGlzIHRoYXQgSSBkaWQgbm90IHdhbnQgdG8gcmVxdWlyZSBzdHJlYW1idWZzCnRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgaWYgdGhlaXIgdmlydHVhbHMgYXJlIGNhbGxlZCBhZnRlciB0aGV5IGhhdmUKc2lnbmFsZWQgZW9mLjwvcD4KPHA+ClRoZSBjbGFzc2ljIGNhc2UgaXMgYSBzdHJlYW1idWYgcmVhZGluZyBmcm9tIGEgVU5JWCBmaWxlLiAgRU9GIGlzbid0CnJlYWxseSBhIHN0YXRlIGZvciBVTklYIGZpbGUgZGVzY3JpcHRvcnMuICBUaGUgY29udmVudGlvbiBpcyB0aGF0IGEKcmVhZCBvbiBVTklYIHJldHVybnMgMCBieXRlcyB0byBpbmRpY2F0ZSAiRU9GIiwgYnV0IHRoZSBmaWxlCmRlc2NyaXB0b3IgaXNuJ3Qgc2h1dCBkb3duIGluIGFueSB3YXkgYW5kIGZ1dHVyZSByZWFkcyBkbyBub3QKbmVjZXNzYXJpbHkgYWxzbyByZXR1cm4gMCBieXRlcy4gIEluIHBhcnRpY3VsYXIsIHlvdSBjYW4gcmVhZCBmcm9tCnR0eSdzIG9uIFVOSVggZXZlbiBhZnRlciB0aGV5IGhhdmUgc2lnbmFsZWQgIkVPRiIuICAoSXQKaXNuJ3QgYWx3YXlzIHVuZGVyc3Rvb2QgdGhhdCBhIF5EIG9uIFVOSVggaXMgbm90IGFuIEVPRiBpbmRpY2F0b3IsIGJ1dAphbiBFT0wgaW5kaWNhdG9yLiAgQnkgdHlwaW5nIGEgImxpbmUiIGNvbnNpc3Rpbmcgc29sZWx5IG9mCl5EIHlvdSBjYXVzZSBhIHJlYWQgdG8gcmV0dXJuIDAgYnl0ZXMsIGFuZCBieSBjb252ZW50aW9uIHRoaXMgaXMKaW50ZXJwcmV0ZWQgYXMgZW5kIG9mIGZpbGUuKTwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgMjcuNi4xLjEuMiBwYXJhZ3JhcGggMjo8L3A+CjxibG9ja3F1b3RlPgo8cD5JZiA8dHQ+aXMucmRidWYoKS0mZ3Q7c2J1bXBjKCk8L3R0PiBvciA8dHQ+aXMucmRidWYoKS0mZ3Q7c2dldGMoKTwvdHQ+CnJldHVybnMgPHR0PnRyYWl0czo6ZW9mKCk8L3R0PiwgdGhlIGZ1bmN0aW9uIGNhbGxzCjx0dD5zZXRzdGF0ZShmYWlsYml0IHwgZW9mYml0KTwvdHQ+ICh3aGljaCBtYXkgdGhyb3cKPHR0Pmlvc19iYXNlOjpmYWlsdXJlPC90dD4pLgo8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxOTgiPjxoMz4xOTguJm5ic3A7VmFsaWRpdHkgb2YgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdW5zcGVjaWZpZWQgYWZ0ZXIgaXRlcmF0b3IgZGVzdHJ1Y3Rpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JlbWFuIERhd2VzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgTm92IDE5OTk8L3A+CjxwPgpJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwgdmFsaWQgYWZ0ZXIKZGVzdHJ1Y3Rpb24gb2YgdGhlIGl0ZXJhdG9yPwo8L3A+CjxwPgpJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwgdmFsaWQgYWZ0ZXIgdGhlIHZhbHVlCm9mIHRoZSBpdGVyYXRvciBjaGFuZ2VzPwo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O3ZlY3RvciZndDsKI2luY2x1ZGUgJmx0O2l0ZXJhdG9yJmd0OwoKaW50IG1haW4oKQp7CiAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdmVjX3Q7CiAgICB2ZWNfdCB2OwogICAgdi5wdXNoX2JhY2soIDEgKTsKCiAgICAvLyBJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwKICAgIC8vIHZhbGlkIGFmdGVyIGRlc3RydWN0aW9uIG9mIHRoZSBpdGVyYXRvcj8KICAgIGludCAqIHAgPSAmYW1wOyp2LmJlZ2luKCk7CiAgICBzdGQ6OmNvdXQgJmx0OyZsdDsgKnAgJmx0OyZsdDsgJ1xuJzsgIC8vIE9LPwoKICAgIC8vIElzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBhbiBpdGVyYXRvciBzdGlsbAogICAgLy8gdmFsaWQgYWZ0ZXIgdGhlIHZhbHVlIG9mIHRoZSBpdGVyYXRvciBjaGFuZ2VzPwogICAgdmVjX3Q6Oml0ZXJhdG9yIGl0ZXIoIHYuYmVnaW4oKSApOwogICAgcCA9ICZhbXA7Kml0ZXIrKzsKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyAqcCAmbHQ7Jmx0OyAnXG4nOyAgLy8gT0s/CgogICAgcmV0dXJuIDA7Cn0KPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPlRoZSBzdGFuZGFyZCBkb2Vzbid0IGFwcGVhciB0byBkaXJlY3RseSBhZGRyZXNzIHRoZXNlCnF1ZXN0aW9ucy4gVGhlIHN0YW5kYXJkIG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gQXQgbGVhc3QgdHdvIHJlYWwtd29ybGQKY2FzZXMgaGF2ZSBiZWVuIHJlcG9ydGVkIHdoZXJlIGxpYnJhcnkgaW1wbGVtZW50b3JzIHdhc3RlZApjb25zaWRlcmFibGUgZWZmb3J0IGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgY2xhcml0eSBpbiB0aGUKc3RhbmRhcmQuIFRoZSBxdWVzdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSByZXF1aXJpbmcgcG9pbnRlcnMgYW5kCnJlZmVyZW5jZXMgdG8gcmVtYWluIHZhbGlkIGhhcyB0aGUgZWZmZWN0IGZvciBwcmFjdGljYWwgcHVycG9zZXMgb2YKcHJvaGliaXRpbmcgaXRlcmF0b3JzIGZyb20gcG9pbnRpbmcgdG8gY2FjaGVkIHJhdGhlciB0aGFuIGFjdHVhbAplbGVtZW50cyBvZiBjb250YWluZXJzLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBpdHNlbGYgYXNzdW1lcyB0aGF0IHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIG9idGFpbmVkCmZyb20gYW4gaXRlcmF0b3IgYXJlIHN0aWxsIHZhbGlkIGFmdGVyIGl0ZXJhdG9yIGRlc3RydWN0aW9uIG9yCmNoYW5nZS4gVGhlIGRlZmluaXRpb24gb2YgcmV2ZXJzZV9pdGVyYXRvcjo6b3BlcmF0b3IqKCksIDI0LjQuMS4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlci5jb252Ij4gW2xpYi5yZXZlcnNlLml0ZXIuY29udl08L2E+LCB3aGljaCByZXR1cm5zIGEgcmVmZXJlbmNlLCBkZWZpbmVzCmVmZmVjdHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5JdGVyYXRvciB0bXAgPSBjdXJyZW50OwpyZXR1cm4gKi0tdG1wOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSBkZWZpbml0aW9uIG9mIHJldmVyc2VfaXRlcmF0b3I6Om9wZXJhdG9yLSZndDsoKSwgMjQuNC4xLjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmV2ZXJzZS5pdGVyLm9wLnN0YXIiPiBbbGliLnJldmVyc2UuaXRlci5vcC5zdGFyXTwvYT4sIHdoaWNoIHJldHVybnMgYSBwb2ludGVyLCBkZWZpbmVzIGVmZmVjdHM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnJldHVybiAmYW1wOyhvcGVyYXRvciooKSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkJlY2F1c2UgdGhlIHN0YW5kYXJkIGl0c2VsZiBhc3N1bWVzIHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIHJlbWFpbgp2YWxpZCBhZnRlciBpdGVyYXRvciBkZXN0cnVjdGlvbiBvciBjaGFuZ2UsIHRoZSBzdGFuZGFyZCBzaG91bGQgc2F5IHNvCmV4cGxpY2l0bHkuIFRoaXMgd2lsbCBhbHNvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIHVzZXIgY29kZSBicmVha2luZwp1bmV4cGVjdGVkbHkgd2hlbiBwb3J0aW5nIHRvIGEgZGlmZmVyZW50IHN0YW5kYXJkIGxpYnJhcnkKaW1wbGVtZW50YXRpb24uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggdG8gMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPjo8L3A+CjxibG9ja3F1b3RlPgpEZXN0cnVjdGlvbiBvZiBhbiBpdGVyYXRvciBtYXkgaW52YWxpZGF0ZSBwb2ludGVycyBhbmQgcmVmZXJlbmNlcwpwcmV2aW91c2x5IG9idGFpbmVkIGZyb20gdGhhdCBpdGVyYXRvci4KPC9ibG9ja3F1b3RlPgoKPHA+UmVwbGFjZSBwYXJhZ3JhcGggMSBvZiAyNC40LjEuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXIuY29udiI+IFtsaWIucmV2ZXJzZS5pdGVyLmNvbnZdPC9hPiB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgo8cD48Yj5FZmZlY3RzOjwvYj48L3A+CjxwcmU+ICB0aGlzLSZndDt0bXAgPSBjdXJyZW50OwogIC0tdGhpcy0mZ3Q7dG1wOwogIHJldHVybiAqdGhpcy0mZ3Q7dG1wOwo8L3ByZT4KCjxwPgpbPGk+Tm90ZTo8L2k+IFRoaXMgb3BlcmF0aW9uIG11c3QgdXNlIGFuIGF1eGlsaWFyeSBtZW1iZXIgdmFyaWFibGUsCnJhdGhlciB0aGFuIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLCB0byBhdm9pZCByZXR1cm5pbmcgYSByZWZlcmVuY2UgdGhhdApwZXJzaXN0cyBiZXlvbmQgdGhlIGxpZmV0aW1lIG9mIGl0cyBhc3NvY2lhdGVkIGl0ZXJhdG9yLiAgKFNlZQoyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+LikgIFRoZSBuYW1lIG9mIHRoaXMgbWVtYmVyIHZhcmlhYmxlIGlzIHNob3duIGZvcgpleHBvc2l0aW9uIG9ubHkuICA8aT4tLWVuZCBub3RlPC9pPl0KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUG9zdC1Ub2t5bzogVGhlIGlzc3VlIGhhcyBiZWVuIHJlZm9ybXVsYXRlZCBwdXJlbHkKaW4gdGVybXMgb2YgaXRlcmF0b3JzLl08L2k+PC9wPgoKPHA+PGk+W1ByZS1Ub3JvbnRvOiBTdGV2ZSBDbGVhcnkgcG9pbnRlZCBvdXQgdGhlIG5vLWludmFsaWRhdGlvbgphc3N1bXB0aW9uIGJ5IHJldmVyc2VfaXRlcmF0b3IuIFRoZSBpc3N1ZSBhbmQgcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMKcmVmb3JtdWxhdGVkIHlldCBhZ2FpbiB0byByZWZsZWN0IHRoaXMgcmVhbGl0eS5dPC9pPjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBTdGV2ZSBDbGVhcnkgcG9pbnRlZCBvdXQgdGhhdCByZXZlcnNlX2l0ZXJhdG9yCmFzc3VtZXMgaXRzIHVuZGVybHlpbmcgaXRlcmF0b3IgaGFzIHBlcnNpc3RlbnQgcG9pbnRlcnMgYW5kCnJlZmVyZW5jZXMuICBBbmR5IEtvZW5pZyBwb2ludGVkIG91dCB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHJld3JpdGUKcmV2ZXJzZV9pdGVyYXRvciBzbyB0aGF0IGl0IG5vIGxvbmdlciBtYWtlcyBzdWNoIGFuIGFzc3VwbXB0aW9uLgpIb3dldmVyLCB0aGlzIGlzc3VlIGlzIHJlbGF0ZWQgdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+LiAgSWYgd2UKZGVjaWRlIGl0IGlzIGludGVudGlvbmFsIHRoYXQgPHR0PnBbbl08L3R0PiBtYXkgcmV0dXJuIGJ5IHZhbHVlCmluc3RlYWQgb2YgcmVmZXJlbmNlIHdoZW4gPHR0PnA8L3R0PiBpcyBhIFJhbmRvbSBBY2Nlc3MgSXRlcmF0b3IsCm90aGVyIGNoYW5nZXMgaW4gcmV2ZXJzZV9pdGVyYXRvciB3aWxsIGJlIG5lY2Vzc2FyeS5dPC9pPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXNzdWUgaGFzIGJlZW4gZGlzY3Vzc2VkIGV4dGVuc2l2ZWx5LiAgTm90ZSB0aGF0IGl0IGlzCjxpPm5vdDwvaT4gYW4gaXNzdWUgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIHByZWRlZmluZWQgaXRlcmF0b3JzLiAgSXQgaXMKYXNraW5nIHdoZXRoZXIgb3Igbm90IHVzZXItZGVmaW5lZCBpdGVyYXRvcnMgYXJlIHBlcm1pdHRlZCB0byBoYXZlCnRyYW5zaWVudCBwb2ludGVycyBhbmQgcmVmZXJlbmNlcy4gIFNldmVyYWwgcGVvcGxlIHByZXNlbnRlZCBleGFtcGxlcwpvZiB1c2VmdWwgdXNlci1kZWZpbmVkIGl0ZXJhdG9ycyB0aGF0IGhhdmUgc3VjaCBhIHByb3BlcnR5OyBleGFtcGxlcwppbmNsdWRlIGEgQi10cmVlIGl0ZXJhdG9yLCBhbmQgYW4gImlvdGEgaXRlcmF0b3IiIHRoYXQgZG9lc24ndCBwb2ludAp0byBtZW1vcnkuICBMaWJyYXJ5IGltcGxlbWVudG9ycyBhbHJlYWR5IHNlZW0gdG8gYmUgYWJsZSB0byBjb3BlIHdpdGgKc3VjaCBpdGVyYXRvcnM6IHRoZXkgdGFrZSBwYWlucyB0byBhdm9pZCBmb3JtaW5nIHJlZmVyZW5jZXMgdG8gbWVtb3J5CnRoYXQgZ2V0cyBpdGVyYXRlZCBwYXN0LiAgVGhlIG9ubHkgcGxhY2Ugd2hlcmUgdGhpcyBpcyBhIHByb2JsZW0gaXMKPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0Piwgc28gdGhpcyBpc3N1ZSBjaGFuZ2VzCjx0dD5yZXZlcnNlX2l0ZXJhdG9yPC90dD4gdG8gbWFrZSBpdCB3b3JrLjwvcD4KCjxwPlRoaXMgcmVzb2x1dGlvbiBkb2VzIG5vdCB3ZWFrZW4gYW55IGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkKcHJlZGVmaW5lZCBpdGVyYXRvcnMgbGlrZSA8dHQ+bGlzdCZsdDtpbnQmZ3Q7OjppdGVyYXRvcjwvdHQ+LgpDbGF1c2UgMjMgc2hvdWxkIGJlIHJldmlld2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGd1YXJhbnRlZXMgZm9yCnByZWRlZmluZWQgaXRlcmF0b3JzIGFyZSBhcyBzdHJvbmcgYXMgdXNlcnMgZXhwZWN0LjwvcD4KCjxocj4KPGEgbmFtZT0iMTk5Ij48aDM+MTk5LiZuYnNwO1doYXQgZG9lcyA8dHQ+YWxsb2NhdGUoMCk8L3R0PiByZXR1cm4/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5kZWZhdWx0LmNvbi5yZXEiPiBbbGliLmRlZmF1bHQuY29uLnJlcV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOSBOb3YgMTk5OTwvcD4KPHA+ClN1cHBvc2UgdGhhdCA8dHQ+QTwvdHQ+IGlzIGEgY2xhc3MgdGhhdCBjb25mb3JtcyB0byB0aGUKQWxsb2NhdG9yIHJlcXVpcmVtZW50cyBvZiBUYWJsZSAzMiwgYW5kIDx0dD5hPC90dD4gaXMgYW4Kb2JqZWN0IG9mIGNsYXNzIDx0dD5BPC90dD4gIFdoYXQgc2hvdWxkIGJlIHRoZSByZXR1cm4KdmFsdWUgb2YgPHR0PmEuYWxsb2NhdGUoMCk8L3R0Pj8gIFRocmVlIHJlYXNvbmFibGUKcG9zc2liaWxpdGllczogZm9yYmlkIHRoZSBhcmd1bWVudCA8dHQ+MDwvdHQ+LCByZXR1cm4KYSBudWxsIHBvaW50ZXIsIG9yIHJlcXVpcmUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGJlIGEKdW5pcXVlIG5vbi1udWxsIHBvaW50ZXIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbm90ZSB0byB0aGUgPHR0PmFsbG9jYXRlPC90dD4gcm93IG9mIFRhYmxlIDMyOgoiWzxpPk5vdGU6PC9pPiBJZiA8dHQ+biA9PSAwPC90dD4sIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5zcGVjaWZpZWQuIDxpPi0tZW5kIG5vdGU8L2k+XSI8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgaXNzdWUgaXMgdGhhdCB0aGUgdWx0aW1hdGUgdXNlIG9mCmFsbG9jYXRlKCkgaXMgdG8gY29uc3RydWN0IGFuIGl0ZXJhdG9yLCBhbmQgdGhhdCBpdGVyYXRvciBmb3IgemVybwpsZW5ndGggc2VxdWVuY2VzIG11c3QgYmUgdGhlIGNvbnRhaW5lcidzIHBhc3QtdGhlLWVuZApyZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoaXMgYWxyZWFkeSBpbXBsaWVzIHNwZWNpYWwgY2FzZSBjb2RlLCBpdAp3b3VsZCBiZSBvdmVyLXNwZWNpZmljYXRpb24gdG8gbWFuZGF0ZSB0aGUgcmV0dXJuIHZhbHVlLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjAwIj48aDM+MjAwLiZuYnNwO0ZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIGRvbid0IGFsbG93IGNvbnN0YW50IGl0ZXJhdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuZm9yd2FyZC5pdGVyYXRvcnMiPiBbbGliLmZvcndhcmQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE5IE5vdiAxOTk5PC9wPgo8cD4KSW4gdGFibGUgNzQsIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiA8dHQ+KmE8L3R0PiBpcyBnaXZlbgphcyA8dHQ+VCZhbXA7PC90dD4sIHdoZXJlIDx0dD5UPC90dD4gaXMgdGhlIGl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KRm9yIGNvbnN0YW50IGl0ZXJhdG9ycywgaG93ZXZlciwgdGhpcyBpcyB3cm9uZy4gICgiVmFsdWUgdHlwZSIKaXMgbmV2ZXIgZGVmaW5lZCB2ZXJ5IHByZWNpc2VseSwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgdGhlIHZhbHVlIHR5cGUKb2YsIHNheSwgPHR0PnN0ZDo6bGlzdCZsdDtpbnQmZ3Q7Ojpjb25zdF9pdGVyYXRvcjwvdHQ+IGlzIHN1cHBvc2VkIHRvIGJlCjx0dD5pbnQ8L3R0Piwgbm90IDx0dD5jb25zdCBpbnQ8L3R0Pi4pCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gdGFibGUgNzQsIGluIHRoZSA8dHQ+KmE8L3R0PiBhbmQgPHR0PipyKys8L3R0PiByb3dzLCBjaGFuZ2UgdGhlCnJldHVybiB0eXBlIGZyb20gIjx0dD5UJmFtcDs8L3R0PiIgdG8gIjx0dD5UJmFtcDs8L3R0PgppZiA8dHQ+WDwvdHQ+IGlzIG11dGFibGUsIG90aGVyd2lzZSA8dHQ+Y29uc3QgVCZhbXA7PC90dD4iLgpJbiB0aGUgPHR0PmEtJmd0O208L3R0PiByb3csIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgZnJvbQoiPHR0PlUmYW1wOzwvdHQ+IiB0byAiPHR0PlUmYW1wOzwvdHQ+IGlmIDx0dD5YPC90dD4gaXMgbXV0YWJsZSwKb3RoZXJ3aXNlIDx0dD5jb25zdCBVJmFtcDs8L3R0PiIuCjwvcD4KCjxwPjxpPltUb2t5bzogVGhlIExXRyBiZWxpZXZlcyB0aGlzIGlzIHRoZSB0aXAgb2YgYSBsYXJnZXIgaWNlYmVyZzsKdGhlcmUgYXJlIG11bHRpcGxlIGNvbnN0IHByb2JsZW1zIHdpdGggdGhlIFNUTCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5CmFuZCB0aGF0IHRoZXNlIHNob3VsZCBiZSBhZGRyZXNzZWQgYXMgYSBzaW5nbGUgcGFja2FnZS4mbmJzcDsgTm90ZQp0aGF0IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE4MCI+MTgwPC9hPiBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIE5BRCBGdXR1cmUgZm9yCnRoYXQgdmVyeSByZWFzb24uXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogdGhlIExXRyB0aGlua3MgdGhpcyBpcyBzZXBhcmFibGUgZnJvbSBvdGhlciBjb25zdG5lc3MKaXNzdWVzLiAgVGhpcyBpc3N1ZSBpcyBqdXN0IGNsZWFudXA7IGl0IGNsYXJpZmllcyBsYW5ndWFnZSB0aGF0IHdhcwp3cml0dGVuIGJlZm9yZSB3ZSBoYWQgaXRlcmF0b3JfdHJhaXRzLiAgUHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMKbW9kaWZpZWQ6IHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9ubHkgZGlzY3Vzc2VkICphLiAgSXQgd2FzIHBvaW50ZWQgb3V0CnRoYXQgd2UgYWxzbyBuZWVkIHRvIHdvcnJ5IGFib3V0ICpyKysgYW5kIGEtJmd0O20uXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjIwMiI+PGgzPjIwMi4mbmJzcDt1bmlxdWUoKSBlZmZlY3RzIHVuY2xlYXIgd2hlbiBwcmVkaWNhdGUgbm90IGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHJldyBLb2VuaWcmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgSmFuIDIwMDA8L3A+CjxwPgpXaGF0IHNob3VsZCB1bmlxdWUoKSBkbyBpZiB5b3UgZ2l2ZSBpdCBhIHByZWRpY2F0ZSB0aGF0IGlzIG5vdCBhbgplcXVpdmFsZW5jZSByZWxhdGlvbj8gIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gcGxhdXNpYmxlIGFuc3dlcnM6CjwvcD4KCjxibG9ja3F1b3RlPgoKPHA+CiAgIDEuIFlvdSBjYW4ndCwgYmVjYXVzZSAyNS4yLjggc2F5cyB0aGF0IGl0IGl0ICJlbGltaW5hdGVzIGFsbCBidXQKICAgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZSBncm91cCBvZiBlcXVhbAogICBlbGVtZW50cy4uLiIgYW5kIGl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UgdG8gaW50ZXJwcmV0ICJlcXVhbCIgYXMKICAgbWVhbmluZyBhbnl0aGluZyBidXQgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBbSXQgYWxzbyBkb2Vzbid0CiAgIG1ha2Ugc2Vuc2UgdG8gaW50ZXJwcmV0ICJlcXVhbCIgYXMgbWVhbmluZyA9PSwgYmVjYXVzZSB0aGVuIHRoZXJlCiAgIHdvdWxkIG5ldmVyIGJlIGFueSBzZW5zZSBpbiBnaXZpbmcgYSBwcmVkaWNhdGUgYXMgYW4gYXJndW1lbnQgYXQKICAgYWxsLl0KPC9wPgoKPHA+CiAgIDIuIFRoZSB3b3JkICJlcXVhbCIgc2hvdWxkIGJlIGludGVycHJldGVkIHRvIG1lYW4gd2hhdGV2ZXIgdGhlCiAgIHByZWRpY2F0ZSBzYXlzLCBldmVuIGlmIGl0IGlzIG5vdCBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbgogICAoYW5kIGluIHBhcnRpY3VsYXIsIGV2ZW4gaWYgaXQgaXMgbm90IHRyYW5zaXRpdmUpLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGV4YW1wbGUgdGhhdCByYWlzZWQgdGhpcyBxdWVzdGlvbiBpcyBmcm9tIFVzZW5ldDoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPmludCBmW10gPSB7IDEsIDMsIDcsIDEsIDIgfTsKaW50KiB6ID0gdW5pcXVlKGYsIGYrNSwgZ3JlYXRlciZsdDtpbnQmZ3Q7KCkpOzwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CklmIG9uZSBibGluZGx5IGFwcGxpZXMgdGhlIGRlZmluaXRpb24gdXNpbmcgdGhlIHByZWRpY2F0ZQpncmVhdGVyJmx0O2ludCZndDssIGFuZCBpZ25vcmUgdGhlIHdvcmQgImVxdWFsIiwgeW91IGdldDoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4KICAgIEVsaW1pbmF0ZXMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGV2ZXJ5IGNvbnNlY3V0aXZlIGdyb3VwICAgIAogICAgb2YgZWxlbWVudHMgcmVmZXJyZWQgdG8gYnkgdGhlIGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgICAgCiAgICBmb3Igd2hpY2ggKmkgJmd0OyAqKGkgLSAxKS4KPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBmaXJzdCBzdXJwcmlzZSBpcyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhcmlzb24uICBJZiB3ZSB3YW50ZWQgdG8KYWxsb3cgZm9yIHRoZSBwcmVkaWNhdGUgbm90IGJlaW5nIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLCB0aGVuIHdlCnNob3VsZCBzdXJlbHkgY29tcGFyZSBlbGVtZW50cyB0aGUgb3RoZXIgd2F5OiBwcmVkKCooaSAtIDEpLCAqaSkuICBJZgp3ZSBkbyB0aGF0LCB0aGVuIHRoZSBkZXNjcmlwdGlvbiB3b3VsZCBzZWVtIHRvIHNheTogIkJyZWFrIHRoZQpzZXF1ZW5jZSBpbnRvIHN1YnNlcXVlbmNlcyB3aG9zZSBlbGVtZW50cyBhcmUgaW4gc3RyaWN0bHkgaW5jcmVhc2luZwpvcmRlciwgYW5kIGtlZXAgb25seSB0aGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHN1YnNlcXVlbmNlIi4gIFNvIHRoZQpyZXN1bHQgd291bGQgYmUgMSwgMSwgMi4gIElmIHdlIHRha2UgdGhlIGRlc2NyaXB0aW9uIGF0IGl0cyB3b3JkLCBpdAp3b3VsZCBzZWVtIHRvIGNhbGwgZm9yIHN0cmljdGx5IERFY3JlYXNpbmcgb3JkZXIsIGluIHdoaWNoIGNhc2UgdGhlCnJlc3VsdCBzaG91bGQgYmUgMSwgMywgNywgMi48YnI+Cjxicj4KSW4gZmFjdCwgdGhlIFNHSSBpbXBsZW1lbnRhdGlvbiBvZiB1bmlxdWUoKSBkb2VzIG5laXRoZXI6IEl0IHlpZWxkcyAxLAozLCA3Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiBwYXJhZ3JhcGggMSB0bzo8L3A+CjxibG9ja3F1b3RlPgpGb3IgYSBub25lbXB0eSByYW5nZSwgZWxpbWluYXRlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkKY29uc2VjdXRpdmUgZ3JvdXAgb2YgZXF1aXZhbGVudCBlbGVtZW50cyByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IKPHR0Pmk8L3R0PiBpbiB0aGUgcmFuZ2UgW2ZpcnN0KzEsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nCmNvbmRpdGlvbnMgaG9sZDogPHR0PiooaS0xKSA9PSAqaTwvdHQ+IG9yIDx0dD5wcmVkKCooaS0xKSwgKmkpICE9CmZhbHNlPC90dD4uCjwvYmxvY2txdW90ZT4KCjxwPgpBbHNvIGluc2VydCBhIG5ldyBwYXJhZ3JhcGgsIHBhcmFncmFwaCAyYSwgdGhhdCByZWFkczogIlJlcXVpcmVzOiBUaGUKY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKPHA+PGk+W1JlZG1vbmQ6IGRpc2N1c3NlZCBhcmd1bWVudHMgZm9yIGFuZCBhZ2FpbnN0IHJlcXVpcmluZyB0aGUKY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFN0cmF3IHBvbGw6CjE0LTItNS4gIEZpcnN0IG51bWJlciBpcyB0byByZXF1aXJlIHRoYXQgaXQgYmUgYW4gZXF1aXZhbGVuY2UKcmVsYXRpb24sIHNlY29uZCBudW1iZXIgaXMgdG8gZXhwbGljaXRseSBub3QgcmVxdWlyZSB0aGF0IGl0IGJlIGFuCmVxdWl2YWxlbmNlIHJlbGF0aW9uLCB0aGlyZCBudW1iZXIgaXMgcGVvcGxlIHdobyBiZWxpZXZlIHRoZXkgbmVlZAptb3JlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGlzc3VlLiAgQSBzZXBhcmF0ZSBpc3N1ZTogQW5keSBTYXd5ZXIKcG9pbnRlZCBvdXQgdGhhdCAiaS0xIiBpcyBpbmNvcnJlY3QsIHNpbmNlICJpIiBjYW4gcmVmZXIgdG8gdGhlIGZpcnN0Cml0ZXJhdG9yIGluIHRoZSByYW5nZS4gIE1hdHQgcHJvdmlkZWQgd29yZGluZyB0byBhZGRyZXNzIHRoaXMKcHJvYmxlbS5dPC9pPjwvcD4KCjxwPjxpPltDdXJh52FvOiBUaGUgTFdHIGNoYW5nZWQgIi4uLiB0aGUgcmFuZ2UgKGZpcnN0LApsYXN0KS4uLiIgdG8gIi4uLiAgdGhlIHJhbmdlIFtmaXJzdCsxLCBsYXN0KS4uLiIgZm9yCmNsYXJpdHkuIFRoZXkgY29uc2lkZXJlZCB0aGlzIGNoYW5nZSBjbG9zZSBlbm91Z2ggdG8gZWRpdG9yaWFsIHRvIG5vdApyZXF1aXJlIGFub3RoZXIgcm91bmQgb2YgcmV2aWV3Ll08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYWxzbyBjb25zaWRlcmVkIGFuIGFsdGVybmF0aXZlIHJlc29sdXRpb246IGNoYW5nZSAKMjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+IHBhcmFncmFwaCAxIHRvOjwvcD4KCjxibG9ja3F1b3RlPgpGb3IgYSBub25lbXB0eSByYW5nZSwgZWxpbWluYXRlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkKY29uc2VjdXRpdmUgZ3JvdXAgb2YgZWxlbWVudHMgcmVmZXJyZWQgdG8gYnkgdGhlIGl0ZXJhdG9yCjx0dD5pPC90dD4gaW4gdGhlIHJhbmdlIChmaXJzdCwgbGFzdCkgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcKY29uZGl0aW9ucyBob2xkOiA8dHQ+KihpLTEpID09ICppPC90dD4gb3IgPHR0PnByZWQoKihpLTEpLCAqaSkgIT0KZmFsc2U8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+CkFsc28gaW5zZXJ0IGEgbmV3IHBhcmFncmFwaCwgcGFyYWdyYXBoIDFhLCB0aGF0IHJlYWRzOiAiTm90ZXM6IFRoZQpjb21wYXJpc29uIGZ1bmN0aW9uIG5lZWQgbm90IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKCjxwPkluZm9ybWFsbHk6IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGltcG9zZXMgYW4gZXhwbGljaXQgcmVxdWlyZW1lbnQKdGhhdCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFRoZQphbHRlcm5hdGl2ZSByZXNvbHV0aW9uIGRvZXMgbm90LCBhbmQgaXQgZ2l2ZXMgZW5vdWdoIGluZm9ybWF0aW9uIHNvCnRoYXQgdGhlIGJlaGF2aW9yIG9mIHVuaXF1ZSgpIGZvciBhIG5vbi1lcXVpdmFsZW5jZSByZWxhdGlvbiBpcwpzcGVjaWZpZWQuICBCb3RoIHJlc29sdXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJlaGF2aW9yIG9mCmV4aXN0aW5nIGltcGxlbWVudGF0aW9ucy48L3A+Cjxocj4KPGEgbmFtZT0iMjA4Ij48aDM+MjA4LiZuYnNwO1VubmVjZXNzYXJ5IHJlc3RyaWN0aW9uIG9uIHBhc3QtdGhlLWVuZCBpdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXBoZW4gQ2xlYXJ5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIEZlYiAyMDAwPC9wPgo8cD5JbiAyNC4xIHBhcmFncmFwaCA1LCBpdCBpcyBzdGF0ZWQgIi4gLiAuIERlcmVmZXJlbmNlYWJsZSBhbmQKcGFzdC10aGUtZW5kIHZhbHVlcyBhcmUgYWx3YXlzIG5vbi1zaW5ndWxhci4iPC9wPgo8cD5UaGlzIHBsYWNlcyBhbiB1bm5lY2Vzc2FyeSByZXN0cmljdGlvbiBvbiBwYXN0LXRoZS1lbmQgaXRlcmF0b3JzIGZvcgpjb250YWluZXJzIHdpdGggZm9yd2FyZCBpdGVyYXRvcnMgKGZvciBleGFtcGxlLCBhIHNpbmdseS1saW5rZWQgbGlzdCkuIElmIHRoZQpwYXN0LXRoZS1lbmQgdmFsdWUgb24gc3VjaCBhIGNvbnRhaW5lciB3YXMgYSB3ZWxsLWtub3duIHNpbmd1bGFyIHZhbHVlLCBpdCB3b3VsZApzdGlsbCBzYXRpc2Z5IGFsbCBmb3J3YXJkIGl0ZXJhdG9yIHJlcXVpcmVtZW50cy48L3A+CjxwPlJlbW92aW5nIHRoaXMgcmVzdHJpY3Rpb24gd291bGQgYWxsb3csIGZvciBleGFtcGxlLCBhIHNpbmdseS1saW5rZWQgbGlzdAp3aXRob3V0IGEgImZvb3RlciIgbm9kZS48L3A+CjxwPlRoaXMgd291bGQgaGF2ZSBhbiBpbXBhY3Qgb24gZXhpc3RpbmcgY29kZSB0aGF0IGV4cGVjdHMgcGFzdC10aGUtZW5kCml0ZXJhdG9ycyBvYnRhaW5lZCBmcm9tIGRpZmZlcmVudCAoZ2VuZXJpYykgY29udGFpbmVycyBiZWluZyBub3QgZXF1YWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCA1LCB0aGUgbGFzdCBzZW50ZW5jZSwgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgo8cD5EZXJlZmVyZW5jZWFibGUgYW5kIHBhc3QtdGhlLWVuZCB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CjxwPkRlcmVmZXJlbmNlYWJsZSB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuJm5ic3A7PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Gb3Igc29tZSBraW5kcyBvZiBjb250YWluZXJzLCBpbmNsdWRpbmcgc2luZ2x5IGxpbmtlZCBsaXN0cyBhbmQKemVyby1sZW5ndGggdmVjdG9ycywgbnVsbCBwb2ludGVycyBhcmUgcGVyZmVjdGx5IHJlYXNvbmFibGUgcGFzdC10aGUtZW5kCml0ZXJhdG9ycy4gIE51bGwgcG9pbnRlcnMgYXJlIHNpbmd1bGFyLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjA5Ij48aDM+MjA5LiZuYnNwO2Jhc2ljX3N0cmluZyBkZWNsYXJhdGlvbnMgaW5jb25zaXN0ZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SWdvciBTdGF1ZGVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEZlYiAyMDAwPC9wPgo8cD5JbiBTZWN0aW9uIDIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+IHRoZSBiYXNpY19zdHJpbmcgbWVtYmVyIGZ1bmN0aW9uCmRlY2xhcmF0aW9ucyB1c2UgYSBjb25zaXN0ZW50IHN0eWxlIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnZvaWQgcHVzaF9iYWNrKGNvbnN0IGNoYXJUKTsKYmFzaWNfc3RyaW5nJmFtcDsgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7KTsKdm9pZCBzd2FwKGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyZhbXA7KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4tIHB1c2hfYmFjaywgYXNzaWduLCBzd2FwOiBtaXNzaW5nIGFyZ3VtZW50IG5hbWUmbmJzcDs8YnI+Ci0gcHVzaF9iYWNrOiB1c2Ugb2YgY29uc3Qgd2l0aCBjaGFyVCAoaS5lLiBQT0QgdHlwZSBwYXNzZWQgYnkgdmFsdWUKbm90IGJ5IHJlZmVyZW5jZSAtIHNob3VsZCBiZSBjaGFyVCBvciBjb25zdCBjaGFyVCZhbXA7ICk8YnI+Ci0gc3dhcDogcmVkdW5kYW50IHVzZSBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGluIGFyZ3VtZW50CmJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyZhbXA7PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIFNlY3Rpb24gMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4gY2hhbmdlIHRoZSBiYXNpY19zdHJpbmcgbWVtYmVyCmZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBwdXNoX2JhY2ssIGFzc2lnbiwgYW5kIHN3YXAgdG86PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnZvaWQgcHVzaF9iYWNrKGNoYXJUIGMpOyAKCmJhc2ljX3N0cmluZyZhbXA7IGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIpOwp2b2lkIHN3YXAoYmFzaWNfc3RyaW5nJmFtcDsgc3RyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWx0aG91Z2ggdGhlIHN0YW5kYXJkIGlzIGluIGdlbmVyYWwgbm90IGNvbnNpc3RlbnQgaW4gZGVjbGFyYXRpb24Kc3R5bGUsIHRoZSBiYXNpY19zdHJpbmcgZGVjbGFyYXRpb25zIGFyZSBjb25zaXN0ZW50IG90aGVyIHRoYW4gdGhlCmFib3ZlLiAgVGhlIExXRyBmZWx0IHRoYXQgdGhpcyB3YXMgc3VmZmljaWVudCByZWFzb24gdG8gbWVyaXQgdGhlCmNoYW5nZS4KPC9wPgo8aHI+CjxhIG5hbWU9IjIxMCI+PGgzPjIxMC4mbmJzcDtkaXN0YW5jZSBmaXJzdCBhbmQgbGFzdCBjb25mdXNlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0xpc2EgTGlwcGluY290dCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBGZWIgMjAwMDwvcD4KPHA+SW4gcGFyYWdyYXBoIDkgb2Ygc2VjdGlvbiAyNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZ29yaXRobXMiPiBbbGliLmFsZ29yaXRobXNdPC9hPiwgaXQgaXMgd3JpdHRlbjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiAgICAgIEluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxnb3JpdGhtcyBvcGVyYXRvcnMgKyBhbmQgLSBhcmUgdXNlZAogICAgICAgICAgIGZvciBzb21lIG9mIHRoZSBpdGVyYXRvciBjYXRlZ29yaWVzIGZvciB3aGljaCB0aGV5IGRvIG5vdCBoYXZlIHRvCiAgICAgICAgICAgYmUgZGVmaW5lZC4gSW4gdGhlc2UgY2FzZXMgdGhlIHNlbWFudGljcyBvZiBbLi4uXSBhLWIgaXMgdGhlIHNhbWUKICAgICAgICAgICBhcyBvZjxicj4KICA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5yZXR1cm4gZGlzdGFuY2UoYSwgYik7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5PbiB0aGUgbGFzdCBsaW5lIG9mIHBhcmFncmFwaCA5IG9mIHNlY3Rpb24gMjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGdvcml0aG1zIj4gW2xpYi5hbGdvcml0aG1zXTwvYT4gY2hhbmdlCjx0dD4iYS1iIjwvdHQ+IHRvIDx0dD4iYi1hIi48L3R0PjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlIGFyZSB0d28gd2F5cyB0byBmaXggdGhlIGRlZmVjdDsgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiB0byBiLWEKb3IgY2hhbmdlIHRoZSByZXR1cm4gdG8gZGlzdGFuY2UoYixhKS4gIFRoZSBMV0cgcHJlZmVycmVkIHRoZQpmb3JtZXIgZm9yIGNvbnNpc3RlbmN5LjwvcD4KPGhyPgo8YSBuYW1lPSIyMTEiPjxoMz4yMTEuJm5ic3A7b3BlcmF0b3ImZ3Q7Jmd0Oyhpc3RyZWFtJmFtcDssIHN0cmluZyZhbXA7KSBkb2Vzbid0IHNldCBmYWlsYml0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy43LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuaW8iPiBbbGliLnN0cmluZy5pb108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Njb3R0IFNueWRlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IEZlYiAyMDAwPC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0cmVhbSBleHRyYWN0aW9uIG9wZXJhdG9yIGZvciBzdGQ6OnN0cmluZyAoc2VjdGlvbgoyMS4zLjcuOSBbbGliLnN0cmluZy5pb10pIGRvZXMgbm90IGNvbnRhaW4gYSByZXF1aXJlbWVudCB0aGF0IGZhaWxiaXQgYmUgc2V0IGluCnRoZSBjYXNlIHRoYXQgdGhlIG9wZXJhdG9yIGZhaWxzIHRvIGV4dHJhY3QgYW55IGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5wdXQKc3RyZWFtLjwvcD4KPHA+VGhpcyBpbXBsaWVzIHRoYXQgdGhlIHR5cGljYWwgY29uc3RydWN0aW9uPC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnN0ZDo6aXN0cmVhbSBpczsKc3RkOjpzdHJpbmcgc3RyOwouLi4Kd2hpbGUgKGlzICZndDsmZ3Q7IHN0cikgLi4uIDs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4od2hpY2ggdGVzdHMgZmFpbGJpdCkgaXMgbm90IHJlcXVpcmVkIHRvIHRlcm1pbmF0ZSBhdCBFT0YuPC9wPgo8cD5GdXJ0aGVybW9yZSwgdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBvdGhlciBleHRyYWN0aW9uIG9wZXJhdG9ycywKd2hpY2ggZG8gaW5jbHVkZSB0aGlzIHJlcXVpcmVtZW50LiAoU2VlIHNlY3Rpb25zIDI3LjYuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWRdPC9hPiBhbmQgMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIHdoZXJlIHRoaXMKcmVxdWlyZW1lbnQgaXMgcHJlc2VudCwgZWl0aGVyIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSwgZm9yIHRoZQpleHRyYWN0aW9uIG9wZXJhdG9ycy4gSXQgaXMgYWxzbyBwcmVzZW50IGV4cGxpY2l0bHkgaW4gdGhlIGRlc2NyaXB0aW9uCm9mIGdldGxpbmUgKGlzdHJlYW0mYW1wOywgc3RyaW5nJmFtcDssIGNoYXJUKSBpbiBzZWN0aW9uIDIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiBwYXJhZ3JhcGggOC4pPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCBuZXcgcGFyYWdyYXBoIGFmdGVyIHBhcmFncmFwaCAyIGluIHNlY3Rpb24gMjEuMy43LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuaW8iPiBbbGliLnN0cmluZy5pb108L2E+OjwvcD4KPGJsb2NrcXVvdGU+Cgo8cD5JZiB0aGUgZnVuY3Rpb24gZXh0cmFjdHMgbm8gY2hhcmFjdGVycywgaXQgY2FsbHMKaXMuc2V0c3RhdGUoaW9zOjpmYWlsYml0KSB3aGljaCBtYXkgdGhyb3cgaW9zX2Jhc2U6OmZhaWx1cmUKKDI3LjQuNC4zKS48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyMTIiPjxoMz4yMTIuJm5ic3A7RW1wdHkgcmFuZ2UgYmVoYXZpb3IgdW5jbGVhciBmb3Igc2V2ZXJhbCBhbGdvcml0aG1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLm1pbi5tYXgiPiBbbGliLmFsZy5taW4ubWF4XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNiBGZWIgMjAwMDwvcD4KPHA+VGhlIHN0YW5kYXJkIGRvZXNuJ3Qgc3BlY2lmeSB3aGF0IG1pbl9lbGVtZW50KCkgYW5kIG1heF9lbGVtZW50KCkgc2hhbGwKcmV0dXJuIGlmIHRoZSByYW5nZSBpcyBlbXB0eSAoZmlyc3QgZXF1YWxzIGxhc3QpLiBUaGUgdXN1YWwgaW1wbGVtZW50YXRpb25zCnJldHVybiBsYXN0LiBUaGlzIHByb2JsZW0gc2VlbXMgYWxzbyBhcHBseSB0byBwYXJ0aXRpb24oKSwgc3RhYmxlX3BhcnRpdGlvbigpLApuZXh0X3Blcm11dGF0aW9uKCksIGFuZCBwcmV2X3Blcm11dGF0aW9uKCkuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5taW4ubWF4Ij4gW2xpYi5hbGcubWluLm1heF08L2E+IC0gTWluaW11bSBhbmQgbWF4aW11bSwgcGFyYWdyYXBocyA3IGFuZAo5LCBhcHBlbmQ6IFJldHVybnMgbGFzdCBpZiBmaXJzdD09bGFzdC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGxvb2tlZCBpbiBzb21lIGRldGFpbCBhdCBhbGwgb2YgdGhlIGFib3ZlIG1lbnRpb25lZAphbGdvcml0aG1zLCBidXQgYmVsaWV2ZXMgdGhhdCBleGNlcHQgZm9yIG1pbl9lbGVtZW50KCkgYW5kCm1heF9lbGVtZW50KCkgaXQgaXMgYWxyZWFkeSBjbGVhciB0aGF0IGxhc3QgaXMgcmV0dXJuZWQgaWYgZmlyc3QgPT0KbGFzdC48L3A+Cjxocj4KPGEgbmFtZT0iMjE0Ij48aDM+MjE0LiZuYnNwO3NldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXQiPiBbbGliLnNldF08L2E+LCAyMy4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tdWx0aXNldCI+IFtsaWIubXVsdGlzZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggRmViIDIwMDA8L3A+CjxwPlRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cyBpbgpUYWJsZSA2OSBzdGF0ZSB0aGF0IHRoZSBmaW5kIG1lbWJlciBmdW5jdGlvbiBzaG91bGQgInJldHVybgppdGVyYXRvcjsgY29uc3RfaXRlcmF0b3IgZm9yIGNvbnN0YW50IGEiLiBUaGUgbWFwIGFuZCBtdWx0aW1hcApjb250YWluZXIgZGVzY3JpcHRpb25zIGhhdmUgdHdvIG92ZXJsb2FkZWQgdmVyc2lvbnMgb2YgZmluZCwgYnV0IHNldAphbmQgbXVsdGlzZXQgZG8gbm90LCBhbGwgdGhleSBoYXZlIGlzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBwcm90b3R5cGVzIGZvciBmaW5kKCksIGxvd2VyX2JvdW5kKCksIHVwcGVyX2JvdW5kKCksIGFuZAplcXVhbF9yYW5nZSgpIGluIHNlY3Rpb24gMjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2V0Ij4gW2xpYi5zZXRdPC9hPiBhbmQgc2VjdGlvbiAyMy4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tdWx0aXNldCI+IFtsaWIubXVsdGlzZXRdPC9hPiB0byBlYWNoIGhhdmUgdHdvIG92ZXJsb2Fkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+aXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPnBhaXImbHQ7aXRlcmF0b3IsIGl0ZXJhdG9yJmd0OyBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKcGFpciZsdDtjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3ImZ3Q7IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlICZhbXA7IHgpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9reW86IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0csIEp1ZHkgV2FyZCBwcm92aWRlZCB3b3JkaW5nCmV4dGVuZGluZyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0byBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQsIGFuZAplcXVhbF9yYW5nZS5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIyMTciPjxoMz4yMTcuJm5ic3A7RmFjZXRzIGV4YW1wbGUgKENsYXNzaWZ5aW5nIEphcGFuZXNlIGNoYXJhY3RlcnMpIGNvbnRhaW5zIGVycm9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0cy5leGFtcGxlcyI+IFtsaWIuZmFjZXRzLmV4YW1wbGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IEZlYiAyMDAwPC9wPgo8cD5UaGUgZXhhbXBsZSBpbiAyMi4yLjgsIHBhcmFncmFwaCAxMSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVycm9yczo8L3A+CjxwPjEpIFRoZSBtZW1iZXIgZnVuY3Rpb24gYE15OjpKQ3R5cGU6OmlzX2thbmppKCknIGlzIG5vbi1jb25zdDsgdGhlIGZ1bmN0aW9uCm11c3QgYmUgY29uc3QgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIGNhbGxhYmxlIG9uIGEgY29uc3Qgb2JqZWN0IChhIHJlZmVyZW5jZSB0bwp3aGljaCB3aGljaCBpcyB3aGF0IHN0ZDo6dXNlX2ZhY2V0Jmx0OyZndDsoKSByZXR1cm5zKS48L3A+CjxwPjIpIEluIGZpbGUgZmlsdC5DLCB0aGUgZGVmaW5pdGlvbiBvZiBgSkN0eXBlOjppZCcgbXVzdCBiZSBxdWFsaWZpZWQgd2l0aCB0aGUKbmFtZSBvZiB0aGUgbmFtZXNwYWNlIGBNeScuPC9wPgo8cD4zKSBJbiB0aGUgZGVmaW5pdGlvbiBvZiBgbG9jJyBhbmQgc3Vic2VxdWVudGx5IGluIHRoZSBjYWxsIHRvIHVzZV9mYWNldCZsdDsmZ3Q7KCkKaW4gbWFpbigpLCB0aGUgbmFtZSBvZiB0aGUgZmFjZXQgaXMgbWlzc3BlbGxlZDogaXQgc2hvdWxkIHJlYWQgYE15OjpKQ3R5cGUnCnJhdGhlciB0aGFuIGBNeTo6SkNUeXBlJy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgIkNsYXNzaWZ5aW5nIEphcGFuZXNlIGNoYXJhY3RlcnMiIGV4YW1wbGUgaW4gMjIuMi44LApwYXJhZ3JhcGggMTEgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD4KPHByZT4jaW5jbHVkZSAmbHQ7bG9jYWxlJmd0OzwvcHJlPgo8cHJlPm5hbWVzcGFjZSBNeSB7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgY2xhc3MgSkN0eXBlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQgewogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOyAgICAgLy8gIHJlcXVpcmVkIGZvciB1c2UgYXMgYSBuZXcgbG9jYWxlIGZhY2V0CiAgICAgICAgYm9vbCBpc19rYW5qaSAod2NoYXJfdCBjKSBjb25zdDsKICAgICAgICBKQ3R5cGUoKSB7fQogICAgcHJvdGVjdGVkOgogICAgICAgIH5KQ3R5cGUoKSB7fQogICAgfTsKfTwvcHJlPgo8cHJlPi8vICBmaWxlOiAgZmlsdC5DCiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O2xvY2FsZSZndDsKI2luY2x1ZGUgImpjdHlwZSIgICAgICAgICAgICAgICAgIC8vICBhYm92ZQpzdGQ6OmxvY2FsZTo6aWQgTXk6OkpDdHlwZTo6aWQ7ICAgLy8gIHRoZSBzdGF0aWMgIEpDdHlwZSAgbWVtYmVyCmRlY2xhcmVkIGFib3ZlLjwvcHJlPgo8cHJlPmludCBtYWluKCkKewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgY3R5cGUmbHQ7d2NoYXJfdCZndDsgd2N0eXBlOwogICAgbG9jYWxlIGxvYyhsb2NhbGUoIiIpLCAgICAgICAgICAgICAgLy8gIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxvY2FsZS4uLgogICAgICAgICAgICAgICBuZXcgTXk6OkpDdHlwZSk7ICAgICAgICAgLy8gIGFuZCBhIG5ldyBmZWF0dXJlIC4uLgogICAgd2NoYXJfdCBjID0gdXNlX2ZhY2V0Jmx0O3djdHlwZSZndDsobG9jKS53aWRlbignIScpOwogICAgaWYgKCF1c2VfZmFjZXQmbHQ7TXk6OkpDdHlwZSZndDsobG9jKS5pc19rYW5qaShjKSkKICAgICAgICBjb3V0ICZsdDsmbHQ7ICJubyBpdCBpc24ndCEiICZsdDsmbHQ7IGVuZGw7CiAgICByZXR1cm4gMDsKfTwvcHJlPgo8aHI+CjxhIG5hbWU9IjIyMCI+PGgzPjIyMC4mbmJzcDt+aW9zX2Jhc2UoKSB1c2FnZSB2YWxpZD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UuY29ucyI+IFtsaWIuaW9zLmJhc2UuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0pvbmF0aGFuIFNjaGlsbGluZywgSG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgTWFyIDIwMDA8L3A+CjxwPlRoZSBwcmUtY29uZGl0aW9ucyBmb3IgdGhlIGlvc19iYXNlIGRlc3RydWN0b3IgYXJlIGRlc2NyaWJlZCBpbiAyNy40LjIuNwpwYXJhZ3JhcGggMjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IERlc3Ryb3lzIGFuIG9iamVjdCBvZiBjbGFzcyBpb3NfYmFzZS4gQ2FsbHMgZWFjaCByZWdpc3RlcmVkCiAgY2FsbGJhY2sgcGFpciAoZm4saW5kZXgpICgyNy40LjIuNikgYXMgKCpmbikoZXJhc2VfZXZlbnQsKnRoaXMsaW5kZXgpIGF0IHN1Y2gKICB0aW1lIHRoYXQgYW55IGlvc19iYXNlIG1lbWJlciBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gZm4gaGFzIHdlbGwgZGVmaW5lZAogIHJlc3VsdHMuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkJ1dCB3aGF0IGlzIG5vdCBjbGVhciBpczogSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb25zIHdlcmUgZXZlciByZWdpc3RlcmVkLCBkb2VzCml0IG1hdHRlciB3aGV0aGVyIHRoZSBpb3NfYmFzZSBtZW1iZXJzIHdlcmUgZXZlciBpbml0aWFsaXplZD88L3A+CjxwPkZvciBpbnN0YW5jZSwgZG9lcyB0aGlzIHByb2dyYW0gaGF2ZSBkZWZpbmVkIGJlaGF2aW9yOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7aW9zJmd0OzwvcHJlPgogIDxwcmU+Y2xhc3MgRCA6IHB1YmxpYyBzdGQ6Omlvc19iYXNlIHsgfTs8L3ByZT4KICA8cHJlPmludCBtYWluKCkgeyBEIGQ7IH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JdCBzZWVtcyB0aGF0IHJlZ2lzdHJhdGlvbiBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdvdWxkIHN1cmVseSBhZmZlY3QgdGhlCnN0YXRlIG9mIGFuIGlvc19iYXNlLiBUaGF0IGlzLCB3aGVuIHlvdSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggYW4KaW9zX2Jhc2UsIHRoZSBpb3NfYmFzZSBtdXN0IHJlY29yZCB0aGF0IGZhY3Qgc29tZWhvdy48L3A+CjxwPkJ1dCBpZiBhZnRlciBjb25zdHJ1Y3Rpb24gdGhlIGlvc19iYXNlIGlzIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUsIGFuZCB0aGF0CnN0YXRlIGlzIG5vdCBtYWRlIGRldGVybWluYXRlIGJlZm9yZSB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQsIHRoZW4gaG93IHdvdWxkCnRoZSBkZXN0cnVjdG9yIGtub3cgaWYgYW55IGNhbGxiYWNrcyBoYWQgaW5kZWVkIGJlZW4gcmVnaXN0ZXJlZD8gQW5kIGlmIHRoZQpudW1iZXIgb2YgY2FsbGJhY2tzIHRoYXQgaGFkIGJlZW4gcmVnaXN0ZXJlZCBpcyBpbmRldGVybWluYXRlLCB0aGVuIGlzIG5vdCB0aGUKYmVoYXZpb3Igb2YgdGhlIGRlc3RydWN0b3IgdW5kZWZpbmVkPzwvcD4KPHA+QnkgY29tcGFyaXNvbiwgdGhlIGJhc2ljX2lvcyBjbGFzcyBkZXNjcmlwdGlvbiBpbiAyNy40LjQuMSBwYXJhZ3JhcGggMiBtYWtlcwppdCBleHBsaWNpdCB0aGF0IGRlc3RydWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbiByZXN1bHRzIGluIHVuZGVmaW5lZApiZWhhdmlvci48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+TW9kaWZ5IDI3LjQuMi43IHBhcmFncmFwaCAxIGZyb208L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEVhY2ggaW9zX2Jhc2UgbWVtYmVyIGhhcyBhbiBpbmRldGVybWluYXRlIHZhbHVlIGFmdGVyCiAgY29uc3RydWN0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogRWFjaCBpb3NfYmFzZSBtZW1iZXIgaGFzIGFuIGluZGV0ZXJtaW5hdGUKdmFsdWUgYWZ0ZXIgY29uc3RydWN0aW9uLiBUaGVzZSBtZW1iZXJzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZwpiYXNpY19pb3M6OmluaXQuIElmIGFuIGlvc19iYXNlIG9iamVjdCBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZXNlCmluaXRpYWxpemF0aW9ucyBoYXZlIHRha2VuIHBsYWNlLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIyMSI+PGgzPjIyMS4mbmJzcDtudW1fZ2V0Jmx0OyZndDs6OmRvX2dldCBzdGFnZSAyIHByb2Nlc3NpbmcgYnJva2VuPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTQgTWFyIDIwMDA8L3A+CjxwPlN0YWdlIDIgcHJvY2Vzc2luZyBvZiBudW1lcmljIGNvbnZlcnNpb24gaXMgYnJva2VuLjwvcD4KCjxwPlRhYmxlIDU1IGluIDIyLjIuMi4xLjIgc2F5cyB0aGF0IHdoZW4gYmFzZWZpZWxkIGlzIDAgdGhlIGludGVncmFsCmNvbnZlcnNpb24gc3BlY2lmaWVyIGlzICVpLiBBICVpIHNwZWNpZmllciBkZXRlcm1pbmVzIGEgbnVtYmVyJ3MgYmFzZQpieSBpdHMgcHJlZml4ICgwIGZvciBvY3RhbCwgMHggZm9yIGhleCksIHNvIHRoZSBpbnRlbnRpb24gaXMgY2xlYXJseQp0aGF0IGEgMHggcHJlZml4IGlzIGFsbG93ZWQuICBQYXJhZ3JhcGggOCBpbiB0aGUgc2FtZSBzZWN0aW9uLApob3dldmVyLCBkZXNjcmliZXMgdmVyeSBwcmVjaXNlbHkgaG93IGNoYXJhY3RlcnMgYXJlIHByb2Nlc3NlZC4gKEl0Cm11c3QgYmUgZG9uZSAiYXMgaWYiIGJ5IGEgc3BlY2lmaWVkIGNvZGUgZnJhZ21lbnQuKSBUaGF0CmRlc2NyaXB0aW9uIGRvZXMgbm90IGFsbG93IGEgMHggcHJlZml4IHRvIGJlIHJlY29nbml6ZWQuPC9wPgoKPHA+VmVyeSByb3VnaGx5LCBzdGFnZSAyIHByb2Nlc3NpbmcgcmVhZHMgYSBjaGFyX3R5cGUgY3QuIEl0IGNvbnZlcnRzCmN0IHRvIGEgY2hhciwgbm90IGJ5IHVzaW5nIG5hcnJvdyBidXQgYnkgbG9va2luZyBpdCB1cCBpbiBhCnRyYW5zbGF0aW9uIHRhYmxlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgd2lkZW5pbmcgdGhlIHN0cmluZyBsaXRlcmFsCiIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGKy0iLiBUaGUgY2hhcmFjdGVyICJ4IiBpcwpub3QgZm91bmQgaW4gdGhhdCB0YWJsZSwgc28gaXQgY2FuJ3QgYmUgcmVjb2duaXplZCBieSBzdGFnZSAyCnByb2Nlc3NpbmcuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgcGFyYWdyYXBoIDgsIHJlcGxhY2UgdGhlIGxpbmU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnN0YXRpYyBjb25zdCBjaGFyIHNyY1tdID0gIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYrLSI7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+d2l0aCB0aGUgbGluZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+c3RhdGljIGNvbnN0IGNoYXIgc3JjW10gPSAiMDEyMzQ1Njc4OWFiY2RlZnhBQkNERUZYKy0iOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JZiB3ZSdyZSB1c2luZyB0aGUgdGVjaG5pcXVlIG9mIHdpZGVuaW5nIGEgc3RyaW5nIGxpdGVyYWwsIHRoZQpzdHJpbmcgbGl0ZXJhbCBtdXN0IGNvbnRhaW4gZXZlcnkgY2hhcmFjdGVyIHdlIHdpc2ggdG8gcmVjb2duaXplLgpUaGlzIHRlY2huaXF1ZSBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgYWx0ZXJuYXRlIHJlcHJlc2VudGF0aW9ucwpvZiBkaWdpdHMgd2lsbCBub3QgYmUgcmVjb2duaXplZC4gIFRoaXMgZGVzaWduIGRlY2lzaW9uIHdhcyBtYWRlCmRlbGliZXJhdGVseSwgd2l0aCBmdWxsIGtub3dsZWRnZSBvZiB0aGF0IGxpbWl0YXRpb24uPC9wPgo8aHI+CjxhIG5hbWU9IjIyMiI+PGgzPjIyMi4mbmJzcDtBcmUgdGhyb3cgY2xhdXNlcyBuZWNlc3NhcnkgaWYgYSB0aHJvdyBpcyBhbHJlYWR5IGltcGxpZWQgYnkgdGhlIGVmZmVjdHMgY2xhdXNlPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjMuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9ucyI+IFtsaWIuc3RydWN0dXJlLnNwZWNpZmljYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IE1hciAyMDAwPC9wPgo8cD5TZWN0aW9uIDIxLjMuNi44IGRlc2NyaWJlcyB0aGUgYmFzaWNfc3RyaW5nOjpjb21wYXJlIGZ1bmN0aW9uIHRoaXMgd2F5OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT4yMS4zLjYuOCAtIGJhc2ljX3N0cmluZzo6Y29tcGFyZSBbbGliLnN0cmluZzo6Y29tcGFyZV0KCmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsCiAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsmYW1wOyAgc3RyICwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSAgcG9zMiAsIHNpemVfdHlwZSAgbjIgKSBjb25zdDsKCi00LSBSZXR1cm5zOiAKCiAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMscG9zMSxuMSkuY29tcGFyZSgKICAgICAgICAgICAgICAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoc3RyLHBvczIsbjIpKSAuPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+YW5kIHRoZSBjb25zdHJ1Y3RvciB0aGF0J3MgaW1wbGljaXRseSBjYWxsZWQgYnkgdGhlIGFib3ZlIGlzCmRlZmluZWQgdG8gdGhyb3cgYW4gb3V0LW9mLXJhbmdlIGV4Y2VwdGlvbiBpZiBwb3MgJmd0OyBzdHIuc2l6ZSgpLiBTZWUKc2VjdGlvbiAyMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuY29ucyI+IFtsaWIuc3RyaW5nLmNvbnNdPC9hPiBwYXJhZ3JhcGggNC48L3A+Cgo8cD5PbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNvbXBhcmUgZnVuY3Rpb24gZGVzY3JpcHRpb25zIHRoZW1zZWx2ZXMgZG9uJ3QgaGF2ZQoiVGhyb3dzOiAiIGNsYXVzZXMgYW5kIGFjY29yZGluZyB0byAxNy4zLjEuMywgcGFyYWdyYXBoIDMsIGVsZW1lbnRzCnRoYXQgZG8gbm90IGFwcGx5IHRvIGEgZnVuY3Rpb24gYXJlIG9taXR0ZWQuPC9wPgo8cD5TbyBpdCBzZWVtcyB0aGVyZSBpcyBhbiBpbmNvbnNpc3RlbmN5IGluIHRoZSBzdGFuZGFyZCAtLSBhcmUgdGhlCiJFZmZlY3RzIiBjbGF1c2VzIGNvcnJlY3QsIG9yIGFyZSB0aGUgIlRocm93cyIgY2xhdXNlcwptaXNzaW5nPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAxNy4zLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnMiPiBbbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc108L2E+IHBhcmFncmFwaCAzLCB0aGUgZm9vdG5vdGUgMTQ4IGF0dGFjaGVkIHRvCnRoZSBzZW50ZW5jZSAiRGVzY3JpcHRpb25zIG9mIGZ1bmN0aW9uIHNlbWFudGljcyBjb250YWluIHRoZQpmb2xsb3dpbmcgZWxlbWVudHMgKGFzIGFwcHJvcHJpYXRlKToiLCBpbnNlcnQgdGhlIHdvcmQKImZ1cnRoZXIiIHNvIHRoYXQgdGhlIGZvb3Qgbm90ZSByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRvIHNhdmUgc3BhY2UsIGl0ZW1zIHRoYXQgZG8gbm90IGFwcGx5IHRvIGEgZnVuY3Rpb24gYXJlCiAgb21pdHRlZC4gRm9yIGV4YW1wbGUsIGlmIGEgZnVuY3Rpb24gZG9lcyBub3Qgc3BlY2lmeSBhbnkgZnVydGhlcgogIHByZWNvbmRpdGlvbnMsIHRoZXJlIHdpbGwgYmUgbm8gIlJlcXVpcmVzIiBwYXJhZ3JhcGguPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgaXMgc29tZXdoYXQgaW5jb25zaXN0ZW50LCBidXQgYSBmYWlsdXJlIHRvIG5vdGUgYQp0aHJvdyBjb25kaXRpb24gaW4gYSB0aHJvd3MgY2xhdXNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gbm90IHRvCnRocm93LiAgVGhlIGluY29uc2lzdGVudCB3b3JkaW5nIGlzIGluIGEgZm9vdG5vdGUsIGFuZCB0aHVzCm5vbi1ub3JtYXRpdmUuIFRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZyb20gdGhlIExXRyBjbGFyaWZpZXMgdGhlCmZvb3Rub3RlLjwvcD4KPGhyPgo8YSBuYW1lPSIyMjMiPjxoMz4yMjMuJm5ic3A7cmV2ZXJzZSBhbGdvcml0aG0gc2hvdWxkIHVzZSBpdGVyX3N3YXAgcmF0aGVyIHRoYW4gc3dhcDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXZlcnNlIj4gW2xpYi5hbGcucmV2ZXJzZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgTWFyIDIwMDA8L3A+CjxwPlNob3VsZG4ndCB0aGUgZWZmZWN0cyBzYXkgImFwcGxpZXMgaXRlcl9zd2FwIHRvIGFsbCBwYWlycy4uLiI/PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjIuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXZlcnNlIj4gW2xpYi5hbGcucmV2ZXJzZV08L2E+LCByZXBsYWNlOjwvcD4KICA8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBGb3IgZWFjaCBub24tbmVnYXRpdmUgaW50ZWdlciBpICZsdDs9IChsYXN0IC0gZmlyc3QpLzIsIAogIGFwcGxpZXMgc3dhcCB0byBhbGwgcGFpcnMgb2YgaXRlcmF0b3JzIGZpcnN0ICsgaSwgKGxhc3QgLSBpKSAtIDEuCiAgPC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KICA8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBGb3IgZWFjaCBub24tbmVnYXRpdmUgaW50ZWdlciBpICZsdDs9IChsYXN0IC0gZmlyc3QpLzIsIAogIGFwcGxpZXMgaXRlcl9zd2FwIHRvIGFsbCBwYWlycyBvZiBpdGVyYXRvcnMgZmlyc3QgKyBpLCAobGFzdCAtIGkpIC0gMS4KICA8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjI0Ij48L2E+PGgzPjxhIG5hbWU9IjIyNCI+MjI0LiZuYnNwO2NsZWFyKCkgY29tcGxleGl0eSBmb3IgYXNzb2NpYXRpdmUgY29udGFpbmVycyByZWZlcnMgdG8gdW5kZWZpbmVkIE48L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0VkIEJyZXkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgTWFyIDIwMDA8L3A+CjxwPkluIHRoZSBhc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHRhYmxlIGluIDIzLjEuMiBwYXJhZ3JhcGggNywKYS5jbGVhcigpIGhhcyBjb21wbGV4aXR5ICJsb2coc2l6ZSgpKSArIE4iLiBIb3dldmVyLCB0aGUgbWVhbmluZyBvZiBOCmlzIG5vdCBkZWZpbmVkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cyB0YWJsZSBpbiAyMy4xLjIgcGFyYWdyYXBoCjcsIHRoZSBjb21wbGV4aXR5IG9mIGEuY2xlYXIoKSwgY2hhbmdlICJsb2coc2l6ZSgpKSArIE4iIHRvCiJsaW5lYXIgaW4gPHR0PnNpemUoKTwvdHQ+Ii48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCdzIHRoZSAibG9nKHNpemUoKSkiLCBub3QgdGhlICJOIiwgdGhhdCBpcyBpbgplcnJvcjogdGhlcmUncyBubyBkaWZmZXJlbmNlIGJldHdlZW4gPGk+TyhOKTwvaT4gYW5kIDxpPk8oTiArCmxvZyhOKSk8L2k+LiAgVGhlIHRleHQgaW4gdGhlIHN0YW5kYXJkIGlzIHByb2JhYmx5IGFuIGluY29ycmVjdApjdXQtYW5kLXBhc3RlIGZyb20gdGhlIHJhbmdlIHZlcnNpb24gb2YgPHR0PmVyYXNlPC90dD4uPC9wPgo8aHI+CjxhIG5hbWU9IjIyNSI+PGgzPjIyNS4mbmJzcDtzdGQ6OiBhbGdvcml0aG1zIHVzZSBvZiBvdGhlciB1bnF1YWxpZmllZCBhbGdvcml0aG1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuZ2xvYmFsLmZ1bmN0aW9ucyI+IFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDEgQXByIDIwMDA8L3A+CjxwPkFyZSBhbGdvcml0aG1zIGluIHN0ZDo6IGFsbG93ZWQgdG8gdXNlIG90aGVyIGFsZ29yaXRobXMgd2l0aG91dCBxdWFsaWZpY2F0aW9uLCBzbyBmdW5jdGlvbnMgaW4KdXNlciBuYW1lc3BhY2VzIG1pZ2h0IGJlIGZvdW5kIHRocm91Z2ggS29lbmlnIGxvb2t1cD88L3A+CjxwPkZvciBleGFtcGxlLCBhIHBvcHVsYXIgc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyB0aGlzCmltcGxlbWVudGF0aW9uIG9mIHN0ZDo6dW5pcXVlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgX0ZvcndhcmRJdGVyJmd0OwogICAgX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JbWFnaW5lIHR3byB1c2VycyBvbiBvcHBvc2l0ZSBzaWRlcyBvZiB0b3duLCBlYWNoIHVzaW5nIHVuaXF1ZSBvbiBoaXMgb3duCnNlcXVlbmNlcyBib3VuZGVkIGJ5IG15X2l0ZXJhdG9ycyAuIFVzZXIxIGxvb2tzIGF0IGhpcyBzdGFuZGFyZCBsaWJyYXJ5CmltcGxlbWVudGF0aW9uIGFuZCBzYXlzLCAiSSBrbm93IGhvdyB0byBpbXBsZW1lbnQgYSBtb3JlIGVmZmljaWVudAp1bmlxdWVfY29weSBmb3IgbXlfaXRlcmF0b3JzIiwgYW5kIHdyaXRlczo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSB1c2VyMSB7CiAgICBjbGFzcyBteV9pdGVyYXRvcjsKICAgIC8vIGZhc3RlciB2ZXJzaW9uIGZvciBteV9pdGVyYXRvcgogICAgbXlfaXRlcmF0b3IgdW5pcXVlX2NvcHkobXlfaXRlcmF0b3IsIG15X2l0ZXJhdG9yLCBteV9pdGVyYXRvcik7CiAgICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dXNlcjE6OnVuaXF1ZV9jb3B5KCkgaXMgc2VsZWN0ZWQgYnkgS29lbmlnIGxvb2t1cCwgYXMgaGUgaW50ZW5kZWQuPC9wPgo8cD5Vc2VyMiBoYXMgb3RoZXIgbmVlZHMsIGFuZCB3cml0ZXM6PC9wPgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2UgdXNlcjIgewogICAgY2xhc3MgbXlfaXRlcmF0b3I7CiAgICAvLyBSZXR1cm5zIHRydWUgaWZmICpjIGlzIGEgdW5pcXVlIGNvcHkgb2YgKmEgYW5kICpiLgogICAgYm9vbCB1bmlxdWVfY29weShteV9pdGVyYXRvciBhLCBteV9pdGVyYXRvciBiLCBteV9pdGVyYXRvciBjKTsKICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5Vc2VyMiBpcyBzaG9ja2VkIHRvIGZpbmQgbGF0ZXIgdGhhdCBoaXMgZnVsbHktcXVhbGlmaWVkIHVzZSBvZgpzdGQ6OnVuaXF1ZSh1c2VyMjo6bXlfaXRlcmF0b3IsIHVzZXIyOjpteV9pdGVyYXRvciwgdXNlcjI6Om15X2l0ZXJhdG9yKSBmYWlscyB0bwpjb21waWxlIChpZiBoZSdzIGx1Y2t5KS4gTG9va2luZyBpbiB0aGUgc3RhbmRhcmQsIGhlIHNlZXMgdGhlIGZvbGxvd2luZyBFZmZlY3RzCmNsYXVzZSBmb3IgdW5pcXVlKCk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBFbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZSBncm91cAogIG9mIGVxdWFsIGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvcgogIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGluZyBjb25kaXRpb25zIGhvbGQ6ICppID09ICooaSAtIDEpIG9yIHByZWQoKmksCiAgKihpIC0gMSkpICE9IGZhbHNlPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSBzdGFuZGFyZCBnaXZlcyB1c2VyMiBhYnNvbHV0ZWx5IG5vIHJlYXNvbiB0byB0aGluayBoZSBjYW4gaW50ZXJmZXJlIHdpdGgKc3RkOjp1bmlxdWUgYnkgZGVmaW5pbmcgbmFtZXMgaW4gbmFtZXNwYWNlIHVzZXIyLiBIaXMgc3RhbmRhcmQgbGlicmFyeSBoYXMgYmVlbgpidWlsdCB3aXRoIHRoZSB0ZW1wbGF0ZSBleHBvcnQgZmVhdHVyZSwgc28gaGUgaXMgdW5hYmxlIHRvIGluc3BlY3QgdGhlCmltcGxlbWVudGF0aW9uLiBVc2VyMSBldmVudHVhbGx5IGNvbXBpbGVzIGhpcyBjb2RlIHdpdGggYW5vdGhlciBjb21waWxlciwgYW5kCmhpcyB2ZXJzaW9uIG9mIHVuaXF1ZV9jb3B5IHNpbGVudGx5IHN0b3BzIGJlaW5nIGNhbGxlZC4gRXZlbnR1YWxseSwgaGUgcmVhbGl6ZXMKdGhhdCBoZSB3YXMgZGVwZW5kaW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBoaXMgbGlicmFyeSBhbmQgaGFkIG5vCnJpZ2h0IHRvIGV4cGVjdCBoaXMgdW5pcXVlX2NvcHkoKSB0byBiZSBjYWxsZWQgcG9ydGFibHkuPC9wPgo8cD5PbiB0aGUgZmFjZSBvZiBpdCwgYW5kIGdpdmVuIGFib3ZlIHNjZW5hcmlvLCBpdCBtYXkgc2VlbSBvYnZpb3VzIHRoYXQgdGhlCmltcGxlbWVudGF0aW9uIG9mIHVuaXF1ZSgpIHNob3duIGlzIG5vbi1jb25mb3JtaW5nIGJlY2F1c2UgaXQgdXNlcyB1bmlxdWVfY29weSgpCnJhdGhlciB0aGFuIDo6c3RkOjp1bmlxdWVfY29weSgpLiBNb3N0IHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50YXRpb25zLApob3dldmVyLCBzZWVtIHRvIGRpc2FncmVlIHdpdGggdGhpcyBub3Rpb24uPC9wPgo8cD4gPGk+W1Rva3lvOiZuYnNwOyBTdGV2ZSBBZGFtY3p5ayBmcm9tCnRoZSBjb3JlIHdvcmtpbmcgZ3JvdXAgaW5kaWNhdGVzIHRoYXQgInN0ZDo6IiBpcyBzdWZmaWNpZW50OyZuYnNwOwpsZWFkaW5nICI6OiIgcXVhbGlmaWNhdGlvbiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSBhbnkgbmFtZXNwYWNlCnF1YWxpZmljYXRpb24gaXMgc3VmZmljaWVudCB0byBzdXBwcmVzcyBLb2VuaWcgbG9va3VwLl08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIHBhcmFncmFwaCBhbmQgYSBub3RlIGF0IHRoZSBlbmQgb2YgCjE3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmdsb2JhbC5mdW5jdGlvbnMiPiBbbGliLmdsb2JhbC5mdW5jdGlvbnNdPC9hPjo8L3A+CjxibG9ja3F1b3RlPgoKPHA+VW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIG5vIGdsb2JhbCBvciBub24tbWVtYmVyIGZ1bmN0aW9uIGluIHRoZQpzdGFuZGFyZCBsaWJyYXJ5IHNoYWxsIHVzZSBhIGZ1bmN0aW9uIGZyb20gYW5vdGhlciBuYW1lc3BhY2Ugd2hpY2ggaXMKZm91bmQgdGhyb3VnaCA8aT5hcmd1bWVudC1kZXBlbmRlbnQgbmFtZSBsb29rdXA8L2k+ICgzLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Jhc2ljLmh0bWwjYmFzaWMubG9va3VwLmtvZW5pZyI+IFtiYXNpYy5sb29rdXAua29lbmlnXTwvYT4pLjwvcD4KCjxwPltOb3RlOiB0aGUgcGhyYXNlICJ1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCIgaXMgaW50ZW5kZWQgdG8KYWxsb3cgS29lbmlnIGxvb2t1cCBpbiBjYXNlcyBsaWtlIHRoYXQgb2Ygb3N0cmVhbV9pdGVyYXRvcnM6PGJyPgoKPGJyPgogIEVmZmVjdHM6PC9wPgogIDxibG9ja3F1b3RlPgo8cD4qb3V0X3N0cmVhbSAmbHQ7Jmx0OyB2YWx1ZTs8YnI+CiAgICAgIGlmKGRlbGltICE9IDApICpvdXRfc3RyZWFtICZsdDsmbHQ7IGRlbGltOzxicj4KICAgICAgcmV0dXJuICgqdGhpcyk7PC9wPgogICAgPHA+LS1lbmQgbm90ZV08L3A+CiAgPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgYWdyZWVzIHRoYXQgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUgc3RhbmRhcmQsIGJ1dAppcyBhcyB5ZXQgdW5zdXJlIGlmIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIHRoZSBiZXN0CnNvbHV0aW9uLiBGdXJ0aGVybW9yZSwgdGhlIExXRyBiZWxpZXZlcyB0aGF0IHRoZSBzYW1lIHByb2JsZW0gb2YKdW5xdWFsaWZpZWQgbGlicmFyeSBuYW1lcyBhcHBsaWVzIHRvIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkIGl0c2VsZiwKYW5kIGhhcyBvcGVuZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPiBhY2NvcmRpbmdseS4gQW55IHJlc29sdXRpb24gb2YKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiBzaG91bGQgYmUgY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVzb2x1dGlvbiBvZgppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+Ll08L2k+PC9wPgoKPHA+PGk+W1Rvcm9udG86IFRoZSBMV0cgaXMgbm90IHN1cmUgaWYgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUKc3RhbmRhcmQuICBNb3N0IExXRyBtZW1iZXJzIGJlbGlldmUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBvZgo8dHQ+c3RkOjp1bmlxdWU8L3R0PiBsaWtlIHRoZSBvbmUgcXVvdGVkIGluIHRoaXMgaXNzdWUgaXMgYWxyZWFkeQppbGxlZ2FsLCBzaW5jZSwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBpdHMgc2VtYW50aWNzIGFyZSBub3QKdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4gIFRoZSBzdGFuZGFyZCdzIGRlc2NyaXB0aW9uIG9mCjx0dD51bmlxdWU8L3R0PiBkb2VzIG5vdCBzYXkgdGhhdCBvdmVybG9hZGluZyA8dHQ+YWRqYWNlbnRfZmluZDwvdHQ+CnNob3VsZCBoYXZlIGFueSBlZmZlY3QuXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogQW4gTFdHLXN1Ymdyb3VwIHNwZW50IGFuIGFmdGVybm9vbiB3b3JraW5nIG9uIGlzc3VlcwoyMjUsIDIyNiwgYW5kIDIyOS4gIFRoZWlyIGNvbmNsdXNpb24gd2FzIHRoYXQgdGhlIGlzc3VlcyBzaG91bGQgYmUKc2VwYXJhdGVkIGludG8gYW4gTFdHIHBvcnRpb24gKEhvd2FyZCdzIHBhcGVyLCBOMTM4Nz0wMi0wMDQ1KSwgYW5kIGEKRVdHIHBvcnRpb24gKERhdmUgd2lsbCB3cml0ZSBhIHByb3Bvc2FsKS4gVGhlIExXRyBhbmQgRVdHIGhhZAooc2VwYXJhdGUpIGRpc2N1c3Npb25zIG9mIHRoaXMgcGxhbiB0aGUgbmV4dCBkYXkuICBUaGUgcHJvcG9zZWQKcmVzb2x1dGlvbiBmb3IgdGhpcyBpc3N1ZSBpcyBpbiBhY2NvcmRhbmNlIHdpdGggSG93YXJkJ3MgcGFwZXIuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQgY291bGQgYmUgYXJndWVkIHRoYXQgdGhpcyBwcm9wb3NlZCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksCiAgdGhhdCB0aGUgU3RhbmRhcmQgZG9lc24ndCBncmFudCBpbXBsZW1lbnRvcnMgbGljZW5zZSB0byB3cml0ZSBhCiAgc3RhbmRhcmQgZnVuY3Rpb24gdGhhdCBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gc3BlY2lmaWVkIGluIHRoZQogIFN0YW5kYXJkIGp1c3QgYmVjYXVzZSBvZiBhbiB1bnJlbGF0ZWQgdXNlci1kZWZpbmVkIG5hbWUgaW4gc29tZQogIG90aGVyIG5hbWVzcGFjZS4gIEhvd2V2ZXIsIHRoaXMgaXMgYXQgd29yc3QgYSBjbGFyaWZpY2F0aW9uLiAgSXQgaXMKICBzdXJlbHkgcmlnaHQgdGhhdCBhbGdvcml0aHNtIHNob3VsZG4ndCBwaWNrIHVwIHJhbmRvbSBuYW1lcywgdGhhdAogIHVzZXItZGVmaW5lZCBuYW1lcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuCiAgSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiBkZWFscyB3aXRoIHRoZSBxdWVzdGlvbiBvZiB3aGVuIGl0IGlzCiAgYXBwcm9wcmlhdGUgZm9yIHRoZSBzdGFuZGFyZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgb3RoZXJ3aXNlLjwvcD4KPGhyPgo8YSBuYW1lPSIyMjYiPjxoMz4yMjYuJm5ic3A7VXNlciBzdXBwbGllZCBzcGVjaWFsaXphdGlvbnMgb3Igb3ZlcmxvYWRzIG9mIG5hbWVzcGFjZSBzdGQgZnVuY3Rpb24gdGVtcGxhdGVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzZXJ2ZWQubmFtZXMiPiBbbGliLnJlc2VydmVkLm5hbWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMSBBcHIgMjAwMDwvcD4KPHA+VGhlIGlzc3VlcyBhcmU6Jm5ic3A7PC9wPgo8cD4xLiBIb3cgY2FuIGEgM3JkIHBhcnR5IGxpYnJhcnkgaW1wbGVtZW50b3IgKGxpYjEpIHdyaXRlIGEgdmVyc2lvbiBvZiBhIHN0YW5kYXJkCmFsZ29yaXRobSB3aGljaCBpcyBzcGVjaWFsaXplZCB0byB3b3JrIHdpdGggaGlzIG93biBjbGFzcyB0ZW1wbGF0ZT8mbmJzcDs8L3A+CjxwPjIuIEhvdyBjYW4gYW5vdGhlciBsaWJyYXJ5IGltcGxlbWVudG9yIChsaWIyKSB3cml0ZSBhIGdlbmVyaWMgYWxnb3JpdGhtIHdoaWNoIAp3aWxsIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzcGVjaWFsaXplZCBhbGdvcml0aG0gaW4gbGliMT88L3A+CjxwPlRoaXMgYXBwZWFycyB0byBiZSB0aGUgb25seSB2aWFibGUgYW5zd2VyIHVuZGVyIGN1cnJlbnQgbGFuZ3VhZ2UgcnVsZXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPm5hbWVzcGFjZSBsaWIxCnsKICAgIC8vIGFyYml0cmFyeS1wcmVjaXNpb24gbnVtYmVycyB1c2luZyBUIGFzIGEgYmFzaWMgdW5pdAogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICBjbGFzcyBiaWdfbnVtIHsgLy8uLi4KICAgIH07CiAgICA8L3ByZT4KICA8cHJlPiAgICAvLyBkZWZpbmluZyB0aGlzIGluIG5hbWVzcGFjZSBzdGQgaXMgaWxsZWdhbCAoaXQgd291bGQgYmUgYW4KICAgIC8vIG92ZXJsb2FkKSwgc28gd2UgaG9wZSB1c2VycyB3aWxsIHJlbHkgb24gS29lbmlnIGxvb2t1cAogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICB2b2lkIHN3YXAoYmlnX2ludCZsdDtUJmd0OyZhbXA7LCBiaWdfaW50Jmx0O1QmZ3Q7JmFtcDspOwp9PC9wcmU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7YWxnb3JpdGhtJmd0OwpuYW1lc3BhY2UgbGliMgp7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgIHZvaWQgZ2VuZXJpY19zb3J0KFQqIHN0YXJ0LCBUKiBlbmQpCiAgICB7CiAgICAgICAgICAgIC4uLgogICAgICAgIC8vIHVzaW5nLWRlY2xhcmF0aW9uIHJlcXVpcmVkIHNvIHdlIGNhbiB3b3JrIG9uIGJ1aWx0LWluIHR5cGVzCiAgICAgICAgdXNpbmcgc3RkOjpzd2FwOwogICAgICAgIC8vIHVzZSBLb2VuaWcgbG9va3VwIHRvIGZpbmQgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtIGlmIGF2YWlsYWJsZQogICAgICAgIHN3YXAoKngsICp5KTsKICAgIH0KfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPlRoaXMgYW5zd2VyIGhhcyBzb21lIGRyYXdiYWNrcy4gRmlyc3Qgb2YgYWxsLCBpdCBtYWtlcyB3cml0aW5nIGxpYjIgZGlmZmljdWx0CmFuZCBzb21ld2hhdCBzbGlwcGVyeS4gVGhlIGltcGxlbWVudG9yIG5lZWRzIHRvIHJlbWVtYmVyIHRvIHdyaXRlIHRoZQp1c2luZy1kZWNsYXJhdGlvbiwgb3IgZ2VuZXJpY19zb3J0IHdpbGwgZmFpbCB0byBjb21waWxlIHdoZW4gVCBpcyBhIGJ1aWx0LWluCnR5cGUuIFRoZSBzZWNvbmQgZHJhd2JhY2sgaXMgdGhhdCB0aGUgdXNlIG9mIHRoaXMgc3R5bGUgaW4gbGliMiBlZmZlY3RpdmVseQoicmVzZXJ2ZXMiIG5hbWVzIGluIGFueSBuYW1lc3BhY2Ugd2hpY2ggZGVmaW5lcyB0eXBlcyB3aGljaCBtYXkKZXZlbnR1YWxseSBiZSB1c2VkIHdpdGggbGliMi4gVGhpcyBtYXkgc2VlbSBpbm5vY3VvdXMgYXQgZmlyc3Qgd2hlbiBhcHBsaWVkIHRvCm5hbWVzIGxpa2Ugc3dhcCwgYnV0IGNvbnNpZGVyIG1vcmUgYW1iaWd1b3VzIG5hbWVzIGxpa2UgdW5pcXVlX2NvcHkoKSBpbnN0ZWFkLgpJdCBpcyBlYXN5IHRvIGltYWdpbmUgdGhlIHVzZXIgd2FudGluZyB0byBkZWZpbmUgdGhlc2UgbmFtZXMgZGlmZmVyZW50bHkgaW4gaGlzCm93biBuYW1lc3BhY2UuIEEgZGVmaW5pdGlvbiB3aXRoIHNlbWFudGljcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKbGlicmFyeSBjb3VsZCBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIChzZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPikuPC9wPgo8cD5XaHksIHlvdSBtYXkgYXNrLCBjYW4ndCB3ZSBqdXN0IHBhcnRpYWxseSBzcGVjaWFsaXplIHN0ZDo6c3dhcCgpPyBJdCdzCmJlY2F1c2UgdGhlIGxhbmd1YWdlIGRvZXNuJ3QgYWxsb3cgZm9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgZnVuY3Rpb24KdGVtcGxhdGVzLiBJZiB5b3Ugd3JpdGU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPm5hbWVzcGFjZSBzdGQKewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICB2b2lkIHN3YXAobGliMTo6YmlnX2ludCZsdDtUJmd0OyZhbXA7LCBsaWIxOjpiaWdfaW50Jmx0O1QmZ3Q7JmFtcDspOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+WW91IGhhdmUganVzdCBvdmVybG9hZGVkIHN0ZDo6c3dhcCwgd2hpY2ggaXMgaWxsZWdhbCB1bmRlciB0aGUgY3VycmVudApsYW5ndWFnZSBydWxlcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmb2xsb3dpbmcgZnVsbCBzcGVjaWFsaXphdGlvbiBpcyBsZWdhbDo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+bmFtZXNwYWNlIHN0ZAp7CiAgICB0ZW1wbGF0ZSAmbHQ7Jmd0OwogICAgdm9pZCBzd2FwKGxpYjE6Om90aGVyX3R5cGUmYW1wOywgbGliMTo6b3RoZXJfdHlwZSZhbXA7KTsKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGlzc3VlIHJlZmxlY3RzIGNvbmNlcm5zIHJhaXNlZCBieSB0aGUgIk5hbWVzcGFjZSBpc3N1ZQp3aXRoIHNwZWNpYWxpemVkIHN3YXAiIHRocmVhZCBvbiBjb21wLmxhbmcuYysrLm1vZGVyYXRlZC4gQQpzaW1pbGFyIHNldCBvZiBjb25jZXJucyB3YXMgZWFybGllciByYWlzZWQgb24gdGhlIGJvb3N0Lm9yZyBtYWlsaW5nCmxpc3QgYW5kIHRoZSBBQ0NVLWdlbmVyYWwgbWFpbGluZyBsaXN0LiAgQWxzbyBzZWUgbGlicmFyeSByZWZsZWN0b3IKbWVzc2FnZSBjKytzdGQtbGliLTczNTQuPC9wPgoKPHA+CkouIEMuIHZhbiBXaW5rZWwgcG9pbnRzIG91dCAoaW4gYysrc3RkLWxpYi05NTY1KSBhbm90aGVyIHVuZXhwZWN0ZWQKZmFjdDogaXQncyBpbXBvc3NpYmxlIHRvIG91dHB1dCBhIGNvbnRhaW5lciBvZiBzdGQ6OnBhaXIncyB1c2luZyBjb3B5CmFuZCBhbiBvc3RyZWFtX2l0ZXJhdG9yLCBhcyBsb25nIGFzIGJvdGggcGFpci1tZW1iZXJzIGFyZSBidWlsdC1pbiBvcgpzdGQ6OiB0eXBlcy4gIFRoYXQncyBiZWNhdXNlIGEgdXNlci1kZWZpbmVkIG9wZXJhdG9yJmx0OyZsdDsgZm9yIChmb3IKZXhhbXBsZSkgc3RkOjpwYWlyJmx0O2NvbnN0IHN0ZDo6c3RyaW5nLCBpbnQmZ3Q7IHdpbGwgbm90IGJlIGZvdW5kOgpsb29rdXAgZm9yIG9wZXJhdG9yJmx0OyZsdDsgd2lsbCBiZSBwZXJmb3JtZWQgb25seSBpbiBuYW1lc3BhY2Ugc3RkLgpPcGluaW9ucyBkaWZmZXJlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGlzIHdhcyBhIGRlZmVjdCwgYW5kLCBpZiBzbywKd2hldGhlciB0aGUgZGVmZWN0IGlzIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdXNlci1kZWZpbmVkCmZ1bmN0aW9uYWxpdHkgYW5kIHN0ZCwgb3Igd2hldGhlciBpdCdzIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZG9lcwpub3QgcHJvdmlkZSBhbiBvcGVyYXRvciZsdDsmbHQ7IGZvciBzdGQ6OnBhaXImbHQ7Jmd0Oy4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+QWRvcHQgdGhlIHdvcmRpbmcgcHJvcG9zZWQgaW4gSG93YXJkIEhpbm5hbnQncyBwYXBlcgogIE4xNTIzPTAzLTAxMDYsICJQcm9wb3NlZCBSZXNvbHV0aW9uIFRvIExXRyBpc3N1ZXMgMjI1LCAyMjYsIDIyOSIuPC9wPgoKCjxwPjxpPltUb2t5bzogU3VtbWFyeSwgIlRoZXJlIGlzIG5vIGNvbmZvcm1pbmcgd2F5IHRvIGV4dGVuZApzdGQ6OnN3YXAgZm9yIHVzZXIgZGVmaW5lZCB0ZW1wbGF0ZXMuIiZuYnNwOyBUaGUgTFdHIGFncmVlcyB0aGF0CnRoZXJlIGlzIGEgcHJvYmxlbS4gIFdvdWxkIGxpa2UgbW9yZSBpbmZvcm1hdGlvbiBiZWZvcmUKcHJvY2VlZGluZy4gVGhpcyBtYXkgYmUgYSBjb3JlIGlzc3VlLiAgQ29yZSBpc3N1ZSAyMjkgaGFzIGJlZW4gb3BlbmVkCnRvIGRpc2N1c3MgdGhlIGNvcmUgYXNwZWN0cyBvZiB0aGlzIHByb2JsZW0uIEl0IHdhcyBhbHNvIG5vdGVkIHRoYXQKc3VibWlzc2lvbnMgcmVnYXJkaW5nIHRoaXMgaXNzdWUgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gc2V2ZXJhbApzb3VyY2VzLCBidXQgdG9vIGxhdGUgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBpc3N1ZXMgbGlzdC4KXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogQSBwYXBlciB3aXRoIHNldmVyYWwgcHJvcG9zZWQgcmVzb2x1dGlvbnMsCkoxNi8wMC0wMDI5PT1XRzIxL04xMjUyLCAiU2hhZGVzIG9mIG5hbWVzcGFjZSBzdGQgZnVuY3Rpb25zCiIgYnkgQWxhbiBHcmlmZml0aHMsIGlzIGluIHRoZSBQb3N0LVRva3lvIG1haWxpbmcuIEl0CnNob3VsZCBiZSBjb25zaWRlcmVkIGEgcGFydCBvZiB0aGlzIGlzc3VlLl08L2k+PC9wPgoKPHA+PGk+W1Rvcm9udG86IERhdmUgQWJyYWhhbXMgYW5kIFBldGVyIERpbW92IGhhdmUgcHJvcG9zZWQgYQpyZXNvbHV0aW9uIHRoYXQgaW52b2x2ZXMgY29yZSBjaGFuZ2VzOiBpdCB3b3VsZCBhZGQgcGFydGlhbApzcGVjaWFsaXphdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZS4gIFRoZSBDb3JlIFdvcmtpbmcgR3JvdXAgaXMKcmVsdWN0YW50IHRvIGFkZCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIEl0IGlzCnZpZXdlZCBhcyBhIGxhcmdlIGNoYW5nZSwgQ1dHIGJlbGlldmVzIHRoYXQgcHJvcG9zYWwgcHJlc2VudGVkIGxlYXZlcwpzb21lIHN5bnRhY3RpYyBpc3N1ZXMgdW5hbnN3ZXJlZDsgaWYgdGhlIENXRyBkb2VzIGFkZCBwYXJ0aWFsCnNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcywgaXQgd2lzaGVzIHRvIGRldmVsb3AgaXRzIG93bgpwcm9wb3NhbC4gIFRoZSBMV0cgY29udGludWVzIHRvIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMKcHJvYmxlbTogdGhlcmUgaXMgbm8gZ29vZCB3YXkgZm9yIHVzZXJzIHRvIGZvcmNlIHRoZSBsaWJyYXJ5IHRvIHVzZQp1c2VyIHNwZWNpYWxpemF0aW9ucyBvZiBnZW5lcmljIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zLCBhbmQgaW4KY2VydGFpbiBjYXNlcyAoZS5nLiB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbnMgY2FsbGVkIGJ5Cjx0dD52YWxhcnJheTwvdHQ+IGFuZCA8dHQ+Y29tcGxleDwvdHQ+KSB0aGlzIGlzIGltcG9ydGFudC4gIEtvZW5pZwpsb29rdXAgaXNuJ3QgYWRlcXVhdGUsIHNpbmNlIG5hbWVzIHdpdGhpbiB0aGUgbGlicmFyeSBtdXN0IGJlCnF1YWxpZmllZCB3aXRoIDx0dD5zdGQ8L3R0PiAoc2VlIGlzc3VlIDIyNSksIHNwZWNpYWxpemF0aW9uIGRvZXNuJ3QKd29yayAod2UgZG9uJ3QgaGF2ZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcyksIGFuZAp1c2VycyBhcmVuJ3QgcGVybWl0dGVkIHRvIGFkZCBvdmVybG9hZHMgd2l0aGluIG5hbWVzcGFjZSBzdGQuCl08L2k+PC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IERpc2N1c3NlZCBhdCBsZW5ndGgsIHdpdGggbm8gY29uc2Vuc3VzLiAgUmVsZXZhbnQKcGFwZXJzIGluIHRoZSBwcmUtQ29wZW5oYWdlbiBtYWlsaW5nOiBOMTI4OSwgTjEyOTUsIE4xMjk2LiAgRGlzY3Vzc2lvbgpmb2N1c2VkIG9uIGZvdXIgb3B0aW9ucy4gKDEpIFJlbGF4IHJlc3RyaWN0aW9ucyBvbiBvdmVybG9hZHMgd2l0aGluCm5hbWVzcGFjZSBzdGQuICgyKSBNYW5kYXRlIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdXNlIHVucXVhbGlmaWVkCmNhbGxzIGZvciA8dHQ+c3dhcDwvdHQ+IGFuZCBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMuICAoMykgSW50cm9kdWNlCmhlbHBlciBjbGFzcyB0ZW1wbGF0ZXMgZm9yIDx0dD5zd2FwPC90dD4gYW5kIHBvc3NpYmx5IG90aGVyIGZ1bmN0aW9ucy4KKDQpIEludHJvZHVjZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIEV2ZXJ5Cm9wdGlvbiBoYWQgYm90aCBzdXBwb3J0IGFuZCBvcHBvc2l0aW9uLiAgU3RyYXcgcG9sbCAoZmlyc3QgbnVtYmVyIGlzCnN1cHBvcnQsIHNlY29uZCBpcyBzdHJvbmdseSBvcHBvc2VkKTogKDEpIDYsIDQ7ICgyKSA2LCA3OyAoMykgMywgODsKKDQpIDQsIDQuXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogRGlzY3Vzc2VkLCBhZ2FpbiBubyBjb25zZW5zdXMuICBIZXJiIHByZXNlbnRlZCBhbgphcmd1bWVudCB0aGF0IGEgdXNlciB3aG8gaXMgZGVmaW5pbmcgYSB0eXBlIDx0dD5UPC90dD4gd2l0aCBhbgphc3NvY2lhdGVkIDx0dD5zd2FwPC90dD4gc2hvdWxkIG5vdCBiZSBleHBlY3RlZCB0byBwdXQgdGhhdAo8dHQ+c3dhcDwvdHQ+IGluIG5hbWVzcGFjZSBzdGQsIGVpdGhlciBieSBvdmVybG9hZGluZyBvciBieSBwYXJ0aWFsCnNwZWNpYWxpemF0aW9uLiAgVGhlIGFyZ3VtZW50IGlzIHRoYXQgPHR0PnN3YXA8L3R0PiBpcyBwYXJ0IG9mCjx0dD5UPC90dD4ncyBpbnRlcmZhY2UsIGFuZCB0aHVzIHNob3VsZCB0byBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMKPHR0PlQ8L3R0PiBhbmQgb25seSBpbiB0aGF0IG5hbWVzcGFjZS4gIElmIHdlIGFjY2VwdCB0aGlzIGFyZ3VtZW50LAp0aGUgY29uc2VxdWVuY2UgaXMgdGhhdCBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBzaG91bGQgdXNlCnVucXVhbGlmaWVkIGNhbGwgb2YgPHR0PnN3YXA8L3R0Pi4gIChBbmQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zPyBBbnk/KQpBIHNtYWxsIGdyb3VwIChOYXRoYW4sIEhvd2FyZCwgSmVyZW15LCBEYXZlLCBNYXR0LCBXYWx0ZXIsIE1hcmMpIHdpbGwKdHJ5IHRvIHB1dCB0b2dldGhlciBhIHByb3Bvc2FsIGJlZm9yZSB0aGUgbmV4dCBtZWV0aW5nLl08L2k+PC9wPgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gaXMgdGhlIG9uZSBwcm9wb3NlZCBieSBIb3dhcmQuXTwvaT48L3A+Cgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIExXRyBhZ3JlZWQgd2l0aCB0aGUgZ2VuZXJhbCBkaXJlY3Rpb24gb2YKICBIb3dhcmQncyBwYXBlciwgTjEzODcuICAoUm91Z2hseTogS29lbmlnIGxvb2t1cCBpcyBkaXNhYmxlZCB1bmxlc3MKICB3ZSBzYXkgb3RoZXJ3aXNlOyB0aGlzIGlzc3VlIGlzIGFib3V0IHdoZW4gd2UgZG8gc2F5IG90aGVyd2lzZS4pCiAgSG93ZXZlciwgdGhlcmUgd2VyZSBjb25jZXJucyBhYm91dCB3b3JkaW5nLiAgSG93YXJkIHdpbGwgcHJvdmlkZSBuZXcKICB3b3JkaW5nLiAgQmlsbCBhbmQgSmVyZW15IHdpbGwgcmV2aWV3IGl0Ll08L2k+PC9wPgoKPHA+PGk+W0tvbmE6IEhvd2FyZCBwcm9wb3NlZCB0aGUgbmV3IHdvcmRpbmcuICBUaGUgTFdHIGFjY2VwdGVkIGhpcwogIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5mb3JtYWxseTogaW50cm9kdWNlIGEgU3dhcHBhYmxlIGNvbmNlcHQsIGFuZCBzcGVjaWZ5IHRoYXQgdGhlCiAgdmFsdWUgdHlwZXMgb2YgdGhlIGl0ZXJhdG9ycyBwYXNzZWQgdG8gY2VydGFpbiBzdGFuZGFyZCBhbGdvcml0aG1zCiAgKHN1Y2ggYXMgaXRlcl9zd2FwLCBzd2FwX3JhbmdlcywgcmV2ZXJzZSwgcm90YXRlLCBhbmQgc29ydCkgY29uZm9ybQogIHRvIHRoYXQgY29uY2VwdC4gIFRoZSBTd2FwcGFibGUgY29uY2VwdCB3aWxsIG1ha2UgaXQgY2xlYXIgdGhhdAogIHRoZXNlIGFsZ29yaXRobXMgdXNlIHVucXVhbGlmaWVkIGxvb2t1cCBmb3IgdGhlIGNhbGxzCiAgdG8gPHR0PnN3YXA8L3R0Pi4gIEFsc28sIGluIDxmb250IGNvbG9yPSJyZWQiPjI2LjMuMy4zPC9mb250PiBwYXJhZ3JhcGggMSwKICBzdGF0ZSB0aGF0IHRoZSB2YWxhcnJheSB0cmFuc2NlbmRlbnRhbHMgdXNlIHVucXVhbGlmaWVkIGxvb2t1cC48L3A+Cjxocj4KPGEgbmFtZT0iMjI3Ij48aDM+MjI3LiZuYnNwO3N0ZDo6c3dhcCgpIHNob3VsZCByZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIG9yIERlZmF1bHRDb25zdHJ1Y3RpYmxlIGFyZ3VtZW50czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zd2FwIj4gW2xpYi5hbGcuc3dhcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDkgQXByIDIwMDA8L3A+CjxwPjI1LjIuMiByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD4gIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHZvaWQgc3dhcChUJmFtcDsgYSwgVCZhbXA7IGIpOzwvdHQ+PGJyPgogIDxicj4KICBSZXF1aXJlczogICAgVHlwZSBUIGlzIEFzc2lnbmFibGUgKF9saWIuY29udGFpbmVyLnJlcXVpcmVtZW50c18pLjxicj4KICBFZmZlY3RzOiAgICBFeGNoYW5nZXMgdmFsdWVzIHN0b3JlZCBpbiB0d28gbG9jYXRpb25zLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgb25seSByZWFzb25hYmxlKiogZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBzd2FwIHJlcXVpcmVzIGNvbnN0cnVjdGlvbiBvZiBhIAogICBuZXcgdGVtcG9yYXJ5IGNvcHkgb2Ygb25lIG9mIGl0cyBhcmd1bWVudHM6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyB2b2lkIHN3YXAoVCZhbXA7IGEsIFQmYW1wOyBiKTsKICB7CiAgICAgIFQgdG1wKGEpOwogICAgICBhID0gYjsKICAgICAgYiA9IHRtcDsKICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+QnV0IGEgdHlwZSB3aGljaCBpcyBvbmx5IEFzc2lnbmFibGUgY2Fubm90IGJlIHN3YXBwZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi48L3A+CjxwPioqWWVzLCB0aGVyZSdzIGFsc28gYW4gdW5yZWFzb25hYmxlIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvdWxkIHJlcXVpcmUgVCB0byBiZSAKICAgRGVmYXVsdENvbnN0cnVjdGlibGUgaW5zdGVhZCBvZiBDb3B5Q29uc3RydWN0aWJsZS4gSSBkb24ndCB0aGluayB0aGlzIGlzIHdvcnRoeSAKICAgb2YgY29uc2lkZXJhdGlvbjo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHZvaWQgc3dhcChUJmFtcDsgYSwgVCZhbXA7IGIpOwp7CiAgICBUIHRtcDsKICAgIHRtcCA9IGE7CiAgICBhID0gYjsKICAgIGIgPSB0bXA7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4yLjIgcGFyYWdyYXBoIDEgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgo8cD4gIFJlcXVpcmVzOiBUeXBlIFQgaXMgQXNzaWduYWJsZSAoMjMuMSkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CjxwPiAgUmVxdWlyZXM6IFR5cGUgVCBpcyBDb3B5Q29uc3RydWN0aWJsZSAoMjAuMS4zKSBhbmQgQXNzaWduYWJsZSAoMjMuMSk8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyMjgiPjxoMz4yMjguJm5ic3A7SW5jb3JyZWN0IHNwZWNpZmljYXRpb24gb2YgIi4uLl9ieW5hbWUiIGZhY2V0czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcmllcyI+IFtsaWIubG9jYWxlLmNhdGVnb3JpZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgQXByIDIwMDA8L3A+CjxwPlRoZSBzZWN0aW9ucyAyMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jdHlwZS5ieW5hbWVdPC9hPiwgMjIuMi4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dCI+IFtsaWIubG9jYWxlLmNvZGVjdnRdPC9hPiwKPGZvbnQgY29sb3I9InJlZCI+MjIuMi4xLjY8L2ZvbnQ+LCAyMi4yLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5udW1wdW5jdC5ieW5hbWUiPiBbbGliLmxvY2FsZS5udW1wdW5jdC5ieW5hbWVdPC9hPiwgMjIuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29sbGF0ZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2xsYXRlLmJ5bmFtZV08L2E+LCAyMi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWUiPiBbbGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWVdPC9hPiwgMjIuMi42LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWUiPiBbbGliLmxvY2FsZS5tb25leXB1bmN0LmJ5bmFtZV08L2E+LCBhbmQgMjIuMi43LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lIj4gW2xpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lXTwvYT4gb3ZlcnNwZWNpZnkgdGhlCmRlZmluaXRpb25zIG9mIHRoZSAiLi4uX2J5bmFtZSIgY2xhc3NlcyBieSBsaXN0aW5nIGEgYnVuY2gKb2YgdmlydHVhbCBmdW5jdGlvbnMuIEF0IHRoZSBzYW1lIHRpbWUsIG5vIHNlbWFudGljcyBvZiB0aGVzZQpmdW5jdGlvbnMgYXJlIGRlZmluZWQuIFJlYWwgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBkZWZpbmUgdGhlc2UKZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGZ1bmN0aW9uYWwgcGFydCBvZiB0aGUgZmFjZXRzIGlzIGFjdHVhbGx5CmltcGxlbWVudGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGJhc2UgY2xhc3NlcyBhbmQgdGhlIGNvbnN0cnVjdG9yIG9mCnRoZSAiLi4uX2J5bmFtZSIgdmVyc2lvbiBqdXN0IHByb3ZpZGVzIHN1aXRhYmxlIGRhdGUgdXNlZCBieQp0aGVzZSBpbXBsZW1lbnRhdGlvbnMuIEZvciBleGFtcGxlLCB0aGUgJ251bXB1bmN0JyBtZXRob2RzIGp1c3QgcmV0dXJuCnZhbHVlcyBmcm9tIGEgc3RydWN0LiBUaGUgYmFzZSBjbGFzcyB1c2VzIGEgc3RhdGljYWxseSBpbml0aWFsaXplZApzdHJ1Y3Qgd2hpbGUgdGhlIGRlcml2ZWQgdmVyc2lvbiByZWFkcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3QKZnJvbSBhIHRhYmxlLiAgSG93ZXZlciwgbm8gdmlydHVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluCidudW1wdW5jdF9ieW5hbWUnLjwvcD4KCjxwPkZvciBtb3N0IGNsYXNzZXMgdGhpcyBkb2VzIG5vdCBpbXBvc2UgYSBwcm9ibGVtIGJ1dCBzcGVjaWZpY2FsbHkKZm9yICdjdHlwZScgaXQgZG9lczogVGhlIHNwZWNpYWxpemF0aW9uIGZvciAnY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7JwppcyByZXF1aXJlZCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2VtYW50aWNzIHdvdWxkIGNoYW5nZSBkdWUgdG8gdGhlCnZpcnR1YWwgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGdlbmVyYWwgdmVyc2lvbiBmb3IgJ2N0eXBlX2J5bmFtZSc6CkluICdjdHlwZSZsdDtjaGFyJmd0OycgdGhlIG1ldGhvZCAnZG9faXMoKScgaXMgbm90IHZpcnR1YWwgYnV0IGl0IGlzCm1hZGUgdmlydHVhbCBpbiBib3RoICdjdHlwZSZsdDtjVCZndDsnIGFuZCAnY3R5cGVfYnluYW1lJmx0O2NUJmd0OycuClRodXMsIGEgY2xhc3MgZGVyaXZlZCBmcm9tICdjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsnIGNhbiB0ZWxsIHdoZXRoZXIKdGhpcyBjbGFzcyBpcyBzcGVjaWFsaXplZCBvciBub3QgdW5kZXIgdGhlIGN1cnJlbnQgc3BlY2lmaWNhdGlvbjoKV2l0aG91dCB0aGUgc3BlY2lhbGl6YXRpb24sICdkb19pcygpJyBpcyB2aXJ0dWFsIHdoaWxlIHdpdGgKc3BlY2lhbGl6YXRpb24gaXQgaXMgbm90IHZpcnR1YWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuMiAobGliLmxvY2FsZS5jdHlwZS5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCZndDsKICAgICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZSZsdDtjaGFyVCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGN0eXBlJmx0O2NoYXJUJmd0Ozo6bWFzayBtYXNrOwogICAgICAgICBleHBsaWNpdCBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmN0eXBlX2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuNiAobGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSkgdG8gYmVjb21lOjwvcD4KPHByZT4gICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBpbnRlcm5ULCBjbGFzcyBleHRlcm5ULCBjbGFzcyBzdGF0ZVQmZ3Q7CiAgICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQmbHQ7aW50ZXJuVCwgZXh0ZXJuVCwgc3RhdGVUJmd0OyB7CiAgICAgIHB1YmxpYzoKICAgICAgIGV4cGxpY2l0IGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9CjwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi4zLjIgKGxpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7IHsKICAgICAvLyAgdGhpcyBjbGFzcyBpcyBzcGVjaWFsaXplZCBmb3IgIGNoYXIgIGFuZCAgd2NoYXJfdC4KICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBjaGFyVCAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgc3RyaW5nX3R5cGU7CiAgICAgICAgIGV4cGxpY2l0IG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMgPSAwKTsKICAgICAgIHByb3RlY3RlZDoKICAgICAgICB+bnVtcHVuY3RfYnluYW1lKCk7ICAgICAgICAgIC8vICB2aXJ0dWFsCiAgICAgICB9OwogICAgIH08L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNC4yIChsaWIubG9jYWxlLmNvbGxhdGUuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlJmx0O2NoYXJUJmd0OyB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyBzdHJpbmdfdHlwZTsKICAgICAgICAgZXhwbGljaXQgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmNvbGxhdGVfYnluYW1lKCk7ICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuMiAobGliLmxvY2FsZS50aW1lLmdldC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgSW5wdXRJdGVyYXRvciA9IGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsKICAgICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyIGRhdGVvcmRlcjsKICAgICAgICAgdHlwZWRlZiBJbnB1dEl0ZXJhdG9yICAgICAgICBpdGVyX3R5cGU8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuNCAobGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3IgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgICAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQmbHQ7Y2hhclQsIE91dHB1dEl0ZXJhdG9yJmd0OwogICAgICAgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGNoYXJUICAgICAgICAgIGNoYXJfdHlwZTsKICAgICAgICAgdHlwZWRlZiBPdXRwdXRJdGVyYXRvciBpdGVyX3R5cGU7PC9wcmU+CjxwcmU+ICAgICAgICAgZXhwbGljaXQgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH50aW1lX3B1dF9ieW5hbWUoKTsgICAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfSI8L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNi40IChsaWIubG9jYWxlLm1vbmV5cHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGJvb2wgSW50bCA9IGZhbHNlJmd0OwogICAgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdCZsdDtjaGFyVCwgSW50bCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhdHRlcm4gcGF0dGVybjsKICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmcmbHQ7Y2hhclQmZ3Q7IHN0cmluZ190eXBlOzwvcHJlPgo8cHJlPiAgICAgICAgIGV4cGxpY2l0IG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpOyAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfTwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi43LjIgKGxpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXMmbHQ7Y2hhclQmZ3Q7IHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBtZXNzYWdlc19iYXNlOjpjYXRhbG9nIGNhdGFsb2c7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgICBzdHJpbmdfdHlwZTs8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPlJlbW92ZSBzZWN0aW9uIDIyLjIuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQiPiBbbGliLmxvY2FsZS5jb2RlY3Z0XTwvYT4gY29tcGxldGVseSAoYmVjYXVzZSBpbgp0aGlzIGNhc2Ugb25seSB0aG9zZSBtZW1iZXJzIGFyZSBkZWZpbmVkIHRvIGJlIHZpcnR1YWwgd2hpY2ggYXJlCmRlZmluZWQgdG8gYmUgdmlydHVhbCBpbiAnY3R5cGUmbHQ7Y1QmZ3Q7Jy4pPC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgS/xobCBzdWJtaXR0ZWQgdGhpcyBpc3N1ZSBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHIHRvIHNvbHZlIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIHJhaXNlZCBieSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzgiPjEzODwvYT4uXTwvaT48L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgcmV2aXNlZCBzbGlnaHRseSwgdG8gcmVtb3ZlCnRocmVlIGxhc3QgdmlydHVhbCBmdW5jdGlvbnMgZnJvbSA8dHQ+bWVzc2FnZXNfYnluYW1lPC90dD4uXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjIyOSI+PGgzPjIyOS4mbmJzcDtVbnF1YWxpZmllZCByZWZlcmVuY2VzIG9mIG90aGVyIGxpYnJhcnkgZW50aXRpZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5jb250ZW50cyI+IFtsaWIuY29udGVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE5IEFwciAyMDAwPC9wPgo8cD5UaHJvdWdob3V0IHRoZSBsaWJyYXJ5IGNoYXB0ZXJzLCB0aGUgZGVzY3JpcHRpb25zIG9mIGxpYnJhcnkgZW50aXRpZXMgcmVmZXIKdG8gb3RoZXIgbGlicmFyeSBlbnRpdGllcyB3aXRob3V0IG5lY2Vzc2FyaWx5IHF1YWxpZnlpbmcgdGhlIG5hbWVzLjwvcD4KCjxwPkZvciBleGFtcGxlLCBzZWN0aW9uIDI1LjIuMiAiU3dhcCIgZGVzY3JpYmVzIHRoZSBlZmZlY3Qgb2YKc3dhcF9yYW5nZXMgaW4gdGVybXMgb2YgdGhlIHVucXVhbGlmaWVkIG5hbWUgInN3YXAiLiBUaGlzIHNlY3Rpb24KY291bGQgcmVhc29uYWJseSBiZSBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlIGxpYnJhcnkgbXVzdCBiZSBpbXBsZW1lbnRlZCBzbwphcyB0byBkbyBhIGxvb2t1cCBvZiB0aGUgdW5xdWFsaWZpZWQgbmFtZSAic3dhcCIsIGFsbG93aW5nIHVzZXJzIHRvCm92ZXJyaWRlIGFueSA6OnN0ZDo6c3dhcCBmdW5jdGlvbiB3aGVuIEtvZW5pZyBsb29rdXAgYXBwbGllcy48L3A+Cgo8cD5BbHRob3VnaCBpdCB3b3VsZCBoYXZlIGJlZW4gYmVzdCB0byB1c2UgZXhwbGljaXQgcXVhbGlmaWNhdGlvbiB3aXRoCiI6OnN0ZDo6IiB0aHJvdWdob3V0LCB0b28gbWFueSBsaW5lcyBpbiB0aGUgc3RhbmRhcmQgd291bGQgaGF2ZSB0byBiZQphZGp1c3RlZCB0byBtYWtlIHRoYXQgY2hhbmdlIGluIGEgVGVjaG5pY2FsIENvcnJpZ2VuZHVtLjwvcD4KCjxwPklzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODIiPjE4MjwvYT4sIHdoaWNoIGFkZHJlc3NlcyBxdWFsaWZpY2F0aW9uIG9mCjx0dD5zaXplX3Q8L3R0PiwgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgdGhpcy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlRvIHNlY3Rpb24gMTcuNC4xLjEgIkxpYnJhcnkgY29udGVudHMiIEFkZCB0aGUgZm9sbG93aW5nIHBhcmFncmFwaDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPldoZW5ldmVyIGEgbmFtZSB4IGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaXMgbWVudGlvbmVkLCB0aGUgbmFtZSB4CiAgaXMgYXNzdW1lZCB0byBiZSBmdWxseSBxdWFsaWZpZWQgYXMgOjpzdGQ6OngsIHVubGVzcyBleHBsaWNpdGx5IGRlc2NyaWJlZAogIG90aGVyd2lzZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBFZmZlY3RzIHNlY3Rpb24gZm9yIGxpYnJhcnkgZnVuY3Rpb24gRiBpcwogIGRlc2NyaWJlZCBhcyBjYWxsaW5nIGxpYnJhcnkgZnVuY3Rpb24gRywgdGhlIGZ1bmN0aW9uIDo6c3RkOjpHIGlzIG1lYW50LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtVG9reW86IFN0ZXZlIENsYW1hZ2Ugc3VibWl0dGVkIHRoaXMgaXNzdWUgYXQgdGhlIHJlcXVlc3Qgb2YKdGhlIExXRyB0byBzb2x2ZSBhIHByb2JsZW0gaW4gdGhlIHN0YW5kYXJkIGl0c2VsZiBzaW1pbGFyIHRvIHRoZQpwcm9ibGVtIHdpdGhpbiBpbXBsZW1lbnRhdGlvbnMgb2YgbGlicmFyeSBpZGVudGlmaWVkIGJ5IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjUiPjIyNTwvYT4uICBBbnkgcmVzb2x1dGlvbiBvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+IHNob3VsZCBiZQpjb29yZGluYXRlZCB3aXRoIHRoZSByZXNvbHV0aW9uIG9mIHRoaXMgaXNzdWUuXTwvaT48L3A+Cgo8cD48aT5bcG9zdC1Ub3JvbnRvOiBIb3dhcmQgaXMgdW5kZWNpZGVkIGFib3V0IHdoZXRoZXIgaXQgaXMKYXBwcm9wcmlhdGUgZm9yIGFsbCBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9uIG5hbWVzIHJlZmVycmVkIHRvIGluCm90aGVyIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zIHRvIGJlIGV4cGxpY2l0bHkgcXVhbGlmaWVkIGJ5Cjx0dD5zdGQ8L3R0PjogaXQgaXMgY29tbW9uIGFkdmljZSB0aGF0IHVzZXJzIHNob3VsZCBkZWZpbmUgZ2xvYmFsCmZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gdGhlaXIgY2xhc3MgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSAKY2xhc3MsIGFuZCB0aGlzIHJlcXVpcmVzIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAgaWYgdGhvc2UgZnVuY3Rpb25zCmFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgbGlicmFyeSBjb2RlLiAgU2V2ZXJhbCBMV0cgbWVtYmVycyBhcmUKY29uY2VybmVkIHRoYXQgdmFsYXJyYXkgYXBwZWFycyB0byByZXF1aXJlIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAsCmJ1dCB0aGF0IHRoZSB3b3JkaW5nIG1heSBub3QgYmUgY2xlYXIgZW5vdWdoIHRvIGZhbGwgdW5kZXIKInVubGVzcyBleHBsaWNpdGx5IGRlc2NyaWJlZCBvdGhlcndpc2UiLl08L2k+PC9wPgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhpcyBwYXBlciByZXNvbHZlcwppc3N1ZXMgMjI1IGFuZCAyMjYuICBJbiBsaWdodCBvZiB0aGF0IHJlc29sdXRpb24sIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIGZvciB0aGUgY3VycmVudCBpc3N1ZSBtYWtlcyBzZW5zZS5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMjMwIj48aDM+MjMwLiZuYnNwO0Fzc2lnbmFibGUgc3BlY2lmaWVkIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIENvcHlDb25zdHJ1Y3RpYmxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIubGlicmFyeSI+IFtsaWIubGlicmFyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JlbWFuIERhd2VzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEFwciAyMDAwPC9wPgo8cD5Jc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI3Ij4yMjc8L2E+IGlkZW50aWZpZWQgYW4gaW5zdGFuY2UgKHN0ZDo6c3dhcCkgd2hlcmUKQXNzaWduYWJsZSB3YXMgc3BlY2lmaWVkIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nCkNvcHlDb25zdHJ1Y3RpYmxlLiBUaGUgTFdHIGFza2VkIHRoYXQgdGhlIHN0YW5kYXJkIGJlIHNlYXJjaGVkIHRvCmRldGVybWluZSBpZiB0aGUgc2FtZSBkZWZlY3QgZXhpc3RlZCBlbHNld2hlcmUuPC9wPgoKPHA+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBsYWNlcyAoc2VlIHByb3Bvc2VkIHJlc29sdXRpb24gYmVsb3cpIHdoZXJlCkFzc2lnbmFibGUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nCkNvcHlDb25zdHJ1Y3RpYmxlLiBUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIGNhc2VzIHdoZXJlIGJvdGggYXJlCnNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIDI2LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5yYW5kLnJlcSI+IFtsaWIucmFuZC5yZXFdPC9hPi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gIDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gdGFibGUgNjUgZm9yIHZhbHVlX3R5cGU6CmNoYW5nZSAiVCBpcyBBc3NpZ25hYmxlIiB0byAiVCBpcyBDb3B5Q29uc3RydWN0aWJsZSBhbmQKQXNzaWduYWJsZSIKPC9wPgoKPHA+SW4gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiB0YWJsZSA2OSBYOjprZXlfdHlwZTsgY2hhbmdlCiJLZXkgaXMgQXNzaWduYWJsZSIgdG8gIktleSBpcwpDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZSI8YnI+CjwvcD4KCjxwPkluIDI0LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIub3V0cHV0Lml0ZXJhdG9ycyI+IFtsaWIub3V0cHV0Lml0ZXJhdG9yc108L2E+IHBhcmFncmFwaCAxLCBjaGFuZ2U6CjwvcD4KPGJsb2NrcXVvdGU+CjxwPiBBIGNsYXNzIG9yIGEgYnVpbHQtaW4gdHlwZSBYIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIGFuCm91dHB1dCBpdGVyYXRvciBpZiBYIGlzIGFuIEFzc2lnbmFibGUgdHlwZSAoMjMuMSkgYW5kIGFsc28gdGhlCmZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgdmFsaWQsIGFzIHNob3duIGluIFRhYmxlIDczOgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86CjwvcD4KPGJsb2NrcXVvdGU+CjxwPiBBIGNsYXNzIG9yIGEgYnVpbHQtaW4gdHlwZSBYIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIGFuCm91dHB1dCBpdGVyYXRvciBpZiBYIGlzIGEgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMykgYW5kIEFzc2lnbmFibGUKdHlwZSAoMjMuMSkgYW5kIGFsc28gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgdmFsaWQsIGFzIHNob3duIGluClRhYmxlIDczOgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltQb3N0LVRva3lvOiBCZW1hbiBEYXdlcyBzdWJtaXR0ZWQgdGhpcyBpc3N1ZSBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHLiAgSGUgYXNrcyB0aGF0IHRoZSAyNS4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVwbGFjZSI+IFtsaWIuYWxnLnJlcGxhY2VdPC9hPiBhbmQgMjUuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbGwiPiBbbGliLmFsZy5maWxsXTwvYT4gY2hhbmdlcyBiZSBzdHVkaWVkIGNhcmVmdWxseSwgYXMgaXQgaXMgbm90IGNsZWFyIHRoYXQKQ29weUNvbnN0cnVjdGlibGUgaXMgcmVhbGx5IGEgcmVxdWlyZW1lbnQgYW5kIG1heSBiZQpvdmVyc3BlY2lmaWNhdGlvbi5dPC9pPjwvcD4KCjxwPjxpPltQb3J0aW9ucyBvZiB0aGUgcmVzb2x1dGlvbiBmb3IgaXNzdWUgMjMwIGhhdmUgYmVlbiBzdXBlcmNlZGVkIGJ5CnRoZSByZXNvbHV0aW9uIG9mIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzYiPjI3NjwvYT4uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYWxzbyBpbmNsdWRlZCBjaGFuZ2VzIHRvIGlucHV0Cml0ZXJhdG9yLCBmaWxsLCBhbmQgcmVwbGFjZS4gIFRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB0aG9zZSBjaGFuZ2VzIGFyZQpub3QgbmVjZXNzYXJ5LiAgVGhlIExXRyBjb25zaWRlcmVkIHNvbWUgYmxhbmtldCBzdGF0ZW1lbnQsIHdoZXJlIGFuCkFzc2lnbmFibGUgdHlwZSB3YXMgYWxzbyByZXF1aXJlZCB0byBiZSBDb3B5IENvbnN0cnVjdGlibGUsIGJ1dApkZWNpZGVkIGFnYWluc3QgdGhpcyBiZWNhdXNlIGZpbGwgYW5kIHJlcGxhY2UgcmVhbGx5IGRvbid0IHJlcXVpcmUgdGhlCkNvcHkgQ29uc3RydWN0aWJsZSBwcm9wZXJ0eS48L3A+Cjxocj4KPGEgbmFtZT0iMjMxIj48aDM+MjMxLiZuYnNwO1ByZWNpc2lvbiBpbiBpb3N0cmVhbT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0phbWVzIEthbnplLCBTdGVwaGVuIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7IDI1IEFwciAyMDAwPC9wPgo8cD5XaGF0IGlzIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBzdXBwb3NlZCB0byBvdXRwdXQ/PC9wPgo8cHJlPiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKCiAgICBpbnQKICAgIG1haW4oKQogICAgewogICAgICAgIHN0ZDo6Y291dC5zZXRmKCBzdGQ6Omlvczo6c2NpZW50aWZpYyAsIHN0ZDo6aW9zOjpmbG9hdGZpZWxkICkgOwogICAgICAgIHN0ZDo6Y291dC5wcmVjaXNpb24oIDAgKSA7CiAgICAgICAgc3RkOjpjb3V0ICZsdDsmbHQ7IDEuMDAgJmx0OyZsdDsgJ1xuJyA7CiAgICAgICAgcmV0dXJuIDAgOwogICAgfTwvcHJlPgo8cD5Gcm9tIG15IEMgZXhwZXJpZW5jZSwgSSB3b3VsZCBleHBlY3QgIjFlKzAwIjsgdGhpcyBpcyB3aGF0IAo8dHQ+cHJpbnRmKCIlLjBlIiAsIDEuMDAgKTs8L3R0PiBkb2VzLiBHKysgb3V0cHV0cyAKIjEuMDAwMDAwZSswMCIuPC9wPgoKPHA+VGhlIG9ubHkgaW5kaWNhdGlvbiBJIGNhbiBmaW5kIGluIHRoZSBzdGFuZGFyZCBpcyAyMi4yLjIuMi4yLzExLAp3aGVyZSBpdCBzYXlzICJGb3IgY29udmVyc2lvbiBmcm9tIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwgaWYKKGZsYWdzICZhbXA7IGZpeGVkKSAhPSAwIG9yIGlmIHN0ci5wcmVjaXNpb24oKSAmZ3Q7IDAsIHRoZW4Kc3RyLnByZWNpc2lvbigpIGlzIHNwZWNpZmllZCBpbiB0aGUgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uLiIKVGhpcyBpcyBhbiBvYnZpb3VzIGVycm9yLCBob3dldmVyLCBmaXhlZCBpcyBub3QgYSBtYXNrIGZvciBhIGZpZWxkLApidXQgYSB2YWx1ZSB0aGF0IGEgbXVsdGktYml0IGZpZWxkIG1heSB0YWtlIC0tIHRoZSByZXN1bHRzIG9mIGFuZCdpbmcKZm10ZmxhZ3Mgd2l0aCBpb3M6OmZpeGVkIGFyZSBub3QgZGVmaW5lZCwgYXQgbGVhc3Qgbm90IGlmCmlvczo6c2NpZW50aWZpYyBoYXMgYmVlbiBzZXQuIEcrKydzIGJlaGF2aW9yIGNvcnJlc3BvbmRzIHRvIHdoYXQgbWlnaHQKaGFwcGVuIGlmIHlvdSBkbyB1c2UgKGZsYWdzICZhbXA7IGZpeGVkKSAhPSAwIHdpdGggYSB0eXBpY2FsCmltcGxlbWVudGF0aW9uIChmbG9hdGZpZWxkID09IDMgJmx0OyZsdDsgc29tZXRoaW5nLCBmaXhlZCA9PSAxCiZsdDsmbHQ7IHNvbWV0aGluZywgYW5kIHNjaWVudGlmaWMgPT0gMiAmbHQ7Jmx0OyBzb21ldGhpbmcpLjwvcD4KCjxwPlByZXN1bWFibHksIHRoZSBpbnRlbnQgaXMgZWl0aGVyIChmbGFncyAmYW1wOyBmbG9hdGZpZWxkKSAhPSAwLCBvcgooZmxhZ3MgJmFtcDsgZmxvYXRmaWVsZCkgPT0gZml4ZWQ7IHRoZSBmaXJzdCBnaXZlcyBzb21ldGhpbmcgbW9yZSBvcgpsZXNzIGxpa2UgdGhlIGVmZmVjdCBvZiBwcmVjaXNpb24gaW4gYSBwcmludGYgZmxvYXRpbmcgcG9pbnQKY29udmVyc2lvbi4gT25seSBtb3JlIG9yIGxlc3MsIG9mIGNvdXJzZS4gSW4gb3JkZXIgdG8gaW1wbGVtZW50IHByaW50Zgpmb3JtYXR0aW5nIGNvcnJlY3RseSwgeW91IG11c3Qga25vdyB3aGV0aGVyIHRoZSBwcmVjaXNpb24gd2FzCmV4cGxpY2l0bHkgc2V0IG9yIG5vdC4gU2F5IGJ5IGluaXRpYWxpemluZyBpdCB0byAtMSwgaW5zdGVhZCBvZiA2LCBhbmQKc3RhdGluZyB0aGF0IGZvciBmbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucywgaWYgcHJlY2lzaW9uICZsdDsgLTEsIDYKd2lsbCBiZSB1c2VkLCBmb3IgZml4ZWQgcG9pbnQsIGlmIHByZWNpc2lvbiAmbHQ7IC0xLCAxIHdpbGwgYmUgdXNlZCwKZXRjLiBQbHVzLCBvZiBjb3Vyc2UsIGlmIHByZWNpc2lvbiA9PSAwIGFuZCBmbGFncyAmYW1wOyBmbG9hdGZpZWxkID09CjAsIDEgc2hvdWxkIGJlID0gdXNlZC4gQnV0IGl0IHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSB0byBlbXVsYXRlIGFsbApvZiB0aGUgYW5vbWFsaWVzIG9mIHByaW50ZjotKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgMjIuMi4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDExLCB3aXRoIHRoZSBmb2xsb3dpbmcgCnNlbnRlbmNlOgo8L3A+CjxibG9ja3F1b3RlPgpGb3IgY29udmVyc2lvbiBmcm9tIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwKPHR0PjxpPnN0cjwvaT4ucHJlY2lzaW9uKCk8L3R0PiBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnZlcnNpb24Kc3BlY2lmaWNhdGlvbi4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGZsb2F0ZmllbGQgZGV0ZXJtaW5lcyB3aGV0aGVyIG51bWJlcnMgYXJlIGZvcm1hdHRlZCBhcyBpZgp3aXRoICVmLCAlZSwgb3IgJWcuICBJZiB0aGUgPHR0PmZpeGVkPC90dD4gYml0IGlzIHNldCwgaXQncyAlZiwKaWYgPHR0PnNjaWVudGlmaWM8L3R0PiBpdCdzICVlLCBhbmQgaWYgYm90aCBiaXRzIGFyZSBzZXQsIG9yIApuZWl0aGVyLCBpdCdzICVnLjwvcD4KPHA+VHVybmluZyB0byB0aGUgQyBzdGFuZGFyZCwgYSBwcmVjaXNpb24gb2YgMCBpcyBtZWFuaW5nZnVsCmZvciAlZiBhbmQgJWUuICBGb3IgJWcsIHByZWNpc2lvbiAwIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIApwcmVjaXNpb24gMS48L3A+CjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGhhcyB0aGUgZWZmZWN0IHRoYXQgaWYgbmVpdGhlcgo8dHQ+Zml4ZWQ8L3R0PiBub3IgPHR0PnNjaWVudGlmaWM8L3R0PiBpcyBzZXQgd2UnbGwgYmUKc3BlY2lmeWluZyBhIHByZWNpc2lvbiBvZiAwLCB3aGljaCB3aWxsIGJlIGludGVybmFsbHkKdHVybmVkIGludG8gMS4gIFRoZXJlJ3Mgbm8gbmVlZCB0byBjYWxsIGl0IG91dCBhcyBhIHNwZWNpYWwKY2FzZS48L3A+CjxwPlRoZSBvdXRwdXQgb2YgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSAiMWUrMDAiLjwvcD4KCjxwPjxpPltQb3N0LUN1cmHnYW86IEhvd2FyZCBwcm92aWRlZCBpbXByb3ZlZCB3b3JkaW5nIGNvdmVyaW5nIHRoZSBjYXNlCndoZXJlIHByZWNpc2lvbiBpcyAwIGFuZCBtb2RlIGlzICVnLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyMzIiPjxoMz4yMzIuJm5ic3A7ImRlcGVuZHMiIHBvb3JseSBkZWZpbmVkIGluIDE3LjQuMy4xPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzZXJ2ZWQubmFtZXMiPiBbbGliLnJlc2VydmVkLm5hbWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UGV0ZXIgRGltb3YmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggQXByIDIwMDA8L3A+CjxwPjE3LjQuMy4xLzEgdXNlcyB0aGUgdGVybSAiZGVwZW5kcyIgdG8gbGltaXQgdGhlIHNldCBvZiBhbGxvd2VkCnNwZWNpYWxpemF0aW9ucyBvZiBzdGFuZGFyZCB0ZW1wbGF0ZXMgdG8gdGhvc2UgdGhhdCAiZGVwZW5kIG9uIGEKdXNlci1kZWZpbmVkIG5hbWUgb2YgZXh0ZXJuYWwgbGlua2FnZS4iPC9wPgo8cD5UaGlzIHRlcm0sIGhvd2V2ZXIsIGlzIG5vdCBhZGVxdWF0ZWx5IGRlZmluZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0bwpjb25zdHJ1Y3QgYSBzcGVjaWFsaXphdGlvbiB0aGF0IGlzLCBJIGJlbGlldmUsIHRlY2huaWNhbGx5IGxlZ2FsIGFjY29yZGluZyB0bwoxNy40LjMuMS8xLCBidXQgdGhhdCBzcGVjaWFsaXplcyBhIHN0YW5kYXJkIHRlbXBsYXRlIGZvciBhIGJ1aWx0LWluIHR5cGUgc3VjaCBhcwonaW50Jy48L3A+CjxwPlRoZSBmb2xsb3dpbmcgY29kZSBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW06PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPiNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7PC9wcmU+CiAgPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgWAp7CiB0eXBlZGVmIFQgdHlwZTsKfTs8L3ByZT4KICA8cHJlPm5hbWVzcGFjZSBzdGQKewogdGVtcGxhdGUmbHQ7Jmd0OyB2b2lkIHN3YXAoOjpYJmx0O2ludCZndDs6OnR5cGUmYW1wOyBpLCA6OlgmbHQ7aW50Jmd0Ozo6dHlwZSZhbXA7IGopOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgInVzZXItZGVmaW5lZCBuYW1lIiB0byAidXNlci1kZWZpbmVkCnR5cGUiLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgdGVybWlub2xvZ3kgaXMgdXNlZCBpbiBzZWN0aW9uIDIuNS4yIGFuZCA0LjEuMSBvZiA8aT5UaGUgQysrClByb2dyYW1taW5nIExhbmd1YWdlPC9pPi4gIEl0IGRpc2FsbG93cyB0aGUgZXhhbXBsZSBpbiB0aGUgaXNzdWUsCnNpbmNlIHRoZSB1bmRlcmx5aW5nIHR5cGUgaXRzZWxmIGlzIG5vdCB1c2VyLWRlZmluZWQuICBUaGUgb25seQpwb3NzaWJsZSBwcm9ibGVtIEkgY2FuIHNlZSBpcyBmb3Igbm9uLXR5cGUgdGVtcGxhdGVzLCBidXQgdGhlcmUncyBubwpwb3NzaWJsZSB3YXkgZm9yIGEgdXNlciB0byBjb21lIHVwIHdpdGggYSBzcGVjaWFsaXphdGlvbiBmb3IgYml0c2V0LApmb3IgZXhhbXBsZSwgdGhhdCBtaWdodCBub3QgaGF2ZSBhbHJlYWR5IGJlZW4gc3BlY2lhbGl6ZWQgYnkgdGhlCmltcGxlbWVudG9yPzwvcD4KCjxwPjxpPltUb3JvbnRvOiB0aGlzIG1heSBiZSByZWxhdGVkIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjAiPjEyMDwvYT4uXTwvaT48L3A+Cgo8cD48aT5bcG9zdC1Ub3JvbnRvOiBKdWR5IHByb3ZpZGVkIHRoZSBhYm92ZSBwcm9wb3NlZCByZXNvbHV0aW9uIGFuZApyYXRpb25hbGUuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMjM0Ij48aDM+MjM0LiZuYnNwO1R5cG9zIGluIGFsbG9jYXRvciBkZWZpbml0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5tZW1iZXJzIj4gW2xpYi5hbGxvY2F0b3IubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBBcHIgMjAwMDwvcD4KPHA+SW4gcGFyYWdyYXBocyAxMiBhbmQgMTMgdGhlIGVmZmVjdHMgb2YgPHR0PmNvbnN0cnVjdCgpPC90dD4gYW5kCjx0dD5kZXN0cnVjdCgpPC90dD4gYXJlIGRlc2NyaWJlZCBhcyByZXR1cm5zIGJ1dCB0aGUgZnVuY3Rpb25zIGFjdHVhbGx5CnJldHVybiA8dHQ+dm9pZDwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5TdWJzdGl0dXRlICJSZXR1cm5zIiBieSAiRWZmZWN0Ii48L3A+Cjxocj4KPGEgbmFtZT0iMjM1Ij48aDM+MjM1LiZuYnNwO05vIHNwZWNpZmljYXRpb24gb2YgZGVmYXVsdCBjdG9yIGZvciByZXZlcnNlX2l0ZXJhdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlcmF0b3IiPiBbbGliLnJldmVyc2UuaXRlcmF0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgQXByIDIwMDA8L3A+CjxwPlRoZSBkZWNsYXJhdGlvbiBvZiA8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+IGxpc3RzIGEgZGVmYXVsdApjb25zdHJ1Y3Rvci4gIEhvd2V2ZXIsIG5vIHNwZWNpZmljYXRpb24gaXMgZ2l2ZW4gd2hhdCB0aGlzIGNvbnN0cnVjdG9yCnNob3VsZCBkby48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5JbiBzZWN0aW9uIDI0LjQuMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlci5jb25zIj4gW2xpYi5yZXZlcnNlLml0ZXIuY29uc108L2E+IGFkZCB0aGUgZm9sbG93aW5nCiAgcGFyYWdyYXBoOjwvcD4KICAgICAgPGJsb2NrcXVvdGU+CiAgICAgIDxwPjx0dD5yZXZlcnNlX2l0ZXJhdG9yKCk8L3R0PjwvcD4KCiAgICAgIDxwPkRlZmF1bHQgaW5pdGlhbGl6ZXMgPHR0PmN1cnJlbnQ8L3R0Pi4gSXRlcmF0b3Igb3BlcmF0aW9ucwogICAgICBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgaXRlcmF0b3IgaGF2ZSBkZWZpbmVkIGJlaGF2aW9yIGlmIGFuZAogICAgICBvbmx5IGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gYSBkZWZhdWx0CiAgICAgIGNvbnN0cnVjdGVkIGl0ZXJhdG9yIG9mIHR5cGUgPHR0Pkl0ZXJhdG9yPC90dD4uPC9wPgogICAgICA8L2Jsb2NrcXVvdGU+CiAgPHA+PGk+W3ByZS1Db3BlbmhhZ2VuOiBEaWV0bWFyIHByb3ZpZGUgd29yZGluZyBmb3IgcHJvcG9zZWQKICByZXNvbHV0aW9uLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjIzNyI+PGgzPjIzNy4mbmJzcDtVbmRlZmluZWQgZXhwcmVzc2lvbiBpbiBjb21wbGV4aXR5IHNwZWNpZmljYXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLmNvbnMiPiBbbGliLmRlcXVlLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgQXByIDIwMDA8L3A+CjxwPlRoZSBjb21wbGV4aXR5IHNwZWNpZmljYXRpb24gaW4gcGFyYWdyYXBoIDYgc2F5cyB0aGF0IHRoZSBjb21wbGV4aXR5CmlzIGxpbmVhciBpbiA8dHQ+Zmlyc3QgLSBsYXN0PC90dD4uIEV2ZW4gaWYgPHR0Pm9wZXJhdG9yLSgpPC90dD4gaXMKZGVmaW5lZCBvbiBpdGVyYXRvcnMgdGhpcyB0ZXJtIGlzIGluIGdlbmVyYWwgdW5kZWZpbmVkIGJlY2F1c2UgaXQKd291bGQgaGF2ZSB0byBiZSA8dHQ+bGFzdCAtIGZpcnN0PC90dD4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgPHA+Q2hhbmdlIHBhcmFncmFwaCA2IGZyb208L3A+CiAgICAgPGJsb2NrcXVvdGU+TGluZWFyIGluIDxpPmZpcnN0IC0gbGFzdDwvaT4uPC9ibG9ja3F1b3RlPgogIDxwPnRvIGJlY29tZTwvcD4KICAgICA8YmxvY2txdW90ZT5MaW5lYXIgaW4gPGk+ZGlzdGFuY2UoZmlyc3QsIGxhc3QpPC9pPi48L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjM4Ij48aDM+MjM4LiZuYnNwO0NvbnRyYWRpY3RvcnkgcmVzdWx0cyBvZiBzdHJpbmdidWYgaW5pdGlhbGl6YXRpb24uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi5jb25zIj4gW2xpYi5zdHJpbmdidWYuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMSBNYXkgMjAwMDwvcD4KPHA+SW4gMjcuNy4xLjEgcGFyYWdyYXBoIDQgdGhlIHJlc3VsdHMgb2YgY2FsbGluZyB0aGUgY29uc3RydWN0b3Igb2YKJ2Jhc2ljX3N0cmluZ2J1ZicgYXJlIHNhaWQgdG8gYmUgPHR0PnN0cigpID09IHN0cjwvdHQ+LiBUaGlzIGlzIGZpbmUKdGhhdCBmYXIgYnV0IGNvbnNpZGVyIHRoaXMgY29kZTo8L3A+Cgo8cHJlPiAgc3RkOjpiYXNpY19zdHJpbmdidWYmbHQ7Y2hhciZndDsgc2J1ZigiaGVsbG8sIHdvcmxkIiwgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUoMCkpOwogIHN0ZDo6Y291dCAmbHQ7Jmx0OyAiJyIgJmx0OyZsdDsgc2J1Zi5zdHIoKSAmbHQ7Jmx0OyAiJ1xuIjsKPC9wcmU+Cgo8cD5QYXJhZ3JhcGggMyBvZiAyNy43LjEuMSBiYXNpY2FsbHkgc2F5cyB0aGF0IGluIHRoaXMgY2FzZSBuZWl0aGVyCnRoZSBvdXRwdXQgc2VxdWVuY2Ugbm9yIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbml0aWFsaXplZCBhbmQKcGFyYWdyYXBoIDIgb2YgMjcuNy4xLjIgYmFzaWNhbGx5IHNheXMgdGhhdCA8dHQ+c3RyKCk8L3R0PiBlaXRoZXIKcmV0dXJucyB0aGUgaW5wdXQgb3IgdGhlIG91dHB1dCBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVtIGlzIGluaXRpYWxpemVkLAppZS4gYm90aCBhcmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybiBmcm9tIDx0dD5zdHIoKTwvdHQ+IGlzCmRlZmluZWQgdG8gYmUgPHR0PmJhc2ljX3N0cmluZyZsdDtjVCZndDsoKTwvdHQ+LjwvcD4KCjxwPkhvd2V2ZXIsIHByb2JhYmx5IG9ubHkgdGVzdCBjYXNlcyBpbiBzb21lIHRlc3RzdWl0ZXMgd2lsbCBkZXRlY3QgdGhpcwoicHJvYmxlbSIuLi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIDI3LjcuMS4xIHBhcmFncmFwaCA0LjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPldlIGNvdWxkIGZpeCAyNy43LjEuMSBwYXJhZ3JhcGggNCwgYnV0IHRoZXJlIHdvdWxkIGJlIG5vIHBvaW50LiAgSWYKd2UgZml4ZWQgaXQsIGl0IHdvdWxkIHNheSBqdXN0IHRoZSBzYW1lIHRoaW5nIGFzIHRleHQgdGhhdCdzIGFscmVhZHkKaW4gdGhlIHN0YW5kYXJkLjwvcD4KPGhyPgo8YSBuYW1lPSIyMzkiPjxoMz4yMzkuJm5ic3A7Q29tcGxleGl0eSBvZiB1bmlxdWUoKSBhbmQvb3IgdW5pcXVlX2NvcHkgaW5jb3JyZWN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDtNYXkgMTUgMjAwMDwvcD4KPHA+VGhlIGNvbXBsZXhpdHkgb2YgdW5pcXVlIGFuZCB1bmlxdWVfY29weSBhcmUgaW5jb25zaXN0ZW50IHdpdGggZWFjaApvdGhlciBhbmQgaW5jb25zaXN0ZW50IHdpdGggdGhlIGltcGxlbWVudGF0aW9ucy4mbmJzcDsgVGhlIHN0YW5kYXJkCnNwZWNpZmllczo8L3A+Cgo8cD5mb3IgdW5pcXVlKCk6PC9wPgoKPGJsb2NrcXVvdGU+LTMtIENvbXBsZXhpdHk6IElmIHRoZSByYW5nZSAobGFzdCAtIGZpcnN0KSBpcyBub3QgZW1wdHksIGV4YWN0bHkKKGxhc3QgLSBmaXJzdCkgLSAxIGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUsIG90aGVyd2lzZQpubyBhcHBsaWNhdGlvbnMgb2YgdGhlIHByZWRpY2F0ZS48L2Jsb2NrcXVvdGU+Cgo8cD5mb3IgdW5pcXVlX2NvcHkoKTo8L3A+Cgo8YmxvY2txdW90ZT4tNy0gQ29tcGxleGl0eTogRXhhY3RseSBsYXN0IC0gZmlyc3QgYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nCnByZWRpY2F0ZS48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGltcGxlbWVudGF0aW9ucyBkbyBpdCB0aGUgb3RoZXIgd2F5IHJvdW5kOiB1bmlxdWUoKSBhcHBsaWVzIHRoZQpwcmVkaWNhdGUgbGFzdC1maXJzdCB0aW1lcyBhbmQgdW5pcXVlX2NvcHkoKSBhcHBsaWVzIGl0IGxhc3QtZmlyc3QtMQp0aW1lcy48L3A+Cgo8cD5BcyBib3RoIGFsZ29yaXRobXMgdXNlIHRoZSBwcmVkaWNhdGUgZm9yIHBhaXItd2lzZSBjb21wYXJpc29uIG9mCnNlcXVlbmNlIGVsZW1lbnRzIEkgZG9uJ3Qgc2VlIGEganVzdGlmaWNhdGlvbiBmb3IgdW5pcXVlX2NvcHkoKQphcHBseWluZyB0aGUgcHJlZGljYXRlIGxhc3QtZmlyc3QgdGltZXMsIGVzcGVjaWFsbHkgc2luY2UgaXQgaXMgbm90CnNwZWNpZmllZCB0byB3aGljaCBwYWlyIGluIHRoZSBzZXF1ZW5jZSB0aGUgcHJlZGljYXRlIGlzIGFwcGxpZWQKdHdpY2UuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBib3RoIGNvbXBsZXhpdHkgc2VjdGlvbnMgaW4gMjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+IHRvOjwvcD4KCjxibG9ja3F1b3RlPkNvbXBsZXhpdHk6IEZvciBub25lbXB0eSByYW5nZXMsIGV4YWN0bHkgbGFzdCAtIGZpcnN0IC0gMQphcHBsaWNhdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLjwvYmxvY2txdW90ZT4KCjxocj4KPGEgbmFtZT0iMjQwIj48aDM+MjQwLiZuYnNwO0NvbXBsZXhpdHkgb2YgYWRqYWNlbnRfZmluZCgpIGlzIG1lYW5pbmdsZXNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmFkamFjZW50LmZpbmQiPiBbbGliLmFsZy5hZGphY2VudC5maW5kXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwO01heSAxNSAyMDAwPC9wPgo8cD5UaGUgY29tcGxleGl0eSBzZWN0aW9uIG9mIGFkamFjZW50X2ZpbmQgaXMgZGVmZWN0aXZlOjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBGb3J3YXJkSXRlcmF0b3ImZ3Q7CkZvcndhcmRJdGVyYXRvciBhZGphY2VudF9maW5kKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluYXJ5UHJlZGljYXRlIHByZWQpOwo8L3ByZT4KCjxwPi0xLSBSZXR1cm5zOiBUaGUgZmlyc3QgaXRlcmF0b3IgaSBzdWNoIHRoYXQgYm90aCBpIGFuZCBpICsgMSBhcmUgaW4KdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGluZwpjb25kaXRpb25zIGhvbGQ6ICppID09ICooaSArIDEpLCBwcmVkKCppLCAqKGkgKyAxKSkgIT0gZmFsc2UuIFJldHVybnMKbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGlzIGZvdW5kLjwvcD4KCjxwPi0yLSBDb21wbGV4aXR5OiBFeGFjdGx5IGZpbmQoZmlyc3QsIGxhc3QsIHZhbHVlKSAtIGZpcnN0IGFwcGxpY2F0aW9ucwpvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gdGhlIENvbXBsZXhpdHkgc2VjdGlvbiwgaXQgaXMgbm90IGRlZmluZWQgd2hhdCAidmFsdWUiCmlzIHN1cHBvc2VkIHRvIG1lYW4uIE15IGJlc3QgZ3Vlc3MgaXMgdGhhdCAidmFsdWUiIG1lYW5zIGFuCm9iamVjdCBmb3Igd2hpY2ggb25lIG9mIHRoZSBjb25kaXRpb25zIHByZWQoKmksdmFsdWUpIG9yCnByZWQodmFsdWUsKmkpIGlzIHRydWUsIHdoZXJlIGkgaXMgdGhlIGl0ZXJhdG9yIGRlZmluZWQgaW4gdGhlIFJldHVybnMKc2VjdGlvbi4gSG93ZXZlciwgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGlucHV0IHNlcXVlbmNlIG5lZWQgbm90IGJlCmVxdWFsaXR5LWNvbXBhcmFibGUgYW5kIGZvciB0aGlzIHJlYXNvbiB0aGUgdGVybSBmaW5kKGZpcnN0LCBsYXN0LAp2YWx1ZSkgLSBmaXJzdCBpcyBtZWFuaW5nbGVzcy48L3A+Cgo8cD5BIHRlcm0gc3VjaCBhcyBmaW5kX2lmKGZpcnN0LCBsYXN0LCBiaW5kMm5kKHByZWQsKmkpKSAtIGZpcnN0IG9yCmZpbmRfaWYoZmlyc3QsIGxhc3QsIGJpbmQxc3QocHJlZCwqaSkpIC0gZmlyc3QgbWlnaHQgY29tZSBjbG9zZXIgdG8KdGhlIGludGVuZGVkIHNwZWNpZmljYXRpb24uICBCaW5kZXJzIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gZnVuY3Rpb24Kb2JqZWN0cyB0aGF0IGhhdmUgdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0b3IgZGVjbGFyZWQgY29uc3QsIHdoaWNoIGlzCm5vdCByZXF1aXJlZCBvZiBwcmVkaWNhdGVzIGJlY2F1c2UgdGhleSBjYW4gaGF2ZSBub24tY29uc3QgZGF0YQptZW1iZXJzLiBGb3IgdGhpcyByZWFzb24sIGEgc3BlY2lmaWNhdGlvbiB1c2luZyBhIGJpbmRlciBjb3VsZCBvbmx5IGJlCmFuICJhcy1pZiIgc3BlY2lmaWNhdGlvbi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBjb21wbGV4aXR5IHNlY3Rpb24gaW4gMjUuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmFkamFjZW50LmZpbmQiPiBbbGliLmFsZy5hZGphY2VudC5maW5kXTwvYT4gdG86PC9wPgo8YmxvY2txdW90ZT4KRm9yIGEgbm9uZW1wdHkgcmFuZ2UsIGV4YWN0bHkgPHR0Pm1pbigoPGk+aTwvaT4gLSA8aT5maXJzdDwvaT4pICsgMSwKKDxpPmxhc3Q8L2k+IC0gPGk+Zmlyc3Q8L2k+KSAtIDEpPC90dD4gYXBwbGljYXRpb25zIG9mIHRoZQpjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSwgd2hlcmUgPGk+aTwvaT4gaXMgPHR0PmFkamFjZW50X2ZpbmQ8L3R0PidzCnJldHVybiB2YWx1ZS4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0NvcGVuaGFnZW46IHRoZSBvcmlnaW5hbCByZXNvbHV0aW9uIHNwZWNpZmllZCBhbiB1cHBlcgpib3VuZC4gIFRoZSBMV0cgcHJlZmVycmVkIGFuIGV4YWN0IGNvdW50Ll08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyNDEiPjxoMz4yNDEuJm5ic3A7RG9lcyB1bmlxdWVfY29weSgpIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgYW5kIEFzc2lnbmFibGU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDtNYXkgMTUgMjAwMDwvcD4KCjxwPlNvbWUgcG9wdWxhciBpbXBsZW1lbnRhdGlvbnMgb2YgdW5pcXVlX2NvcHkoKSBjcmVhdGUgdGVtcG9yYXJ5CmNvcGllcyBvZiB2YWx1ZXMgaW4gdGhlIGlucHV0IHNlcXVlbmNlLCBhdCBsZWFzdCBpZiB0aGUgaW5wdXQgaXRlcmF0b3IKaXMgYSBwb2ludGVyLiAgU3VjaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0CnRoZSB2YWx1ZSB0eXBlIGlzIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlLjwvcD4KCjxwPkl0IGlzIGNvbW1vbiBwcmFjdGljZSBpbiB0aGUgc3RhbmRhcmQgdGhhdCBhbGdvcml0aG1zIGV4cGxpY2l0bHkKc3BlY2lmeSBhbnkgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCB0aGV5IGltcG9zZSBvbiBhbnkgb2YgdGhlCnR5cGVzIHVzZWQgYnkgdGhlIGFsZ29yaXRobS4gQW4gZXhhbXBsZSBvZiBhbiBhbGdvcml0aG0gdGhhdCBjcmVhdGVzCnRlbXBvcmFyeSBjb3BpZXMgYW5kIGNvcnJlY3RseSBzcGVjaWZpZXMgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzCmlzIGFjY3VtdWxhdGUoKSwgMjYuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnJhbmQucmVxIj4gW2xpYi5yYW5kLnJlcV08L2E+LjwvcD4KCjxwPlNpbmNlIHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB1bmlxdWUoKSBhbmQgdW5pcXVlX2NvcHkoKSBkbyBub3QKcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZSBvZiB0aGUgSW5wdXRJdGVyYXRvcidzIHZhbHVlCnR5cGUgdGhlIGFib3ZlIG1lbnRpb25lZCBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBzdGFuZGFyZC1jb21wbGlhbnQuIEkKY2Fubm90IGp1ZGdlIHdoZXRoZXIgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUgc3RhbmRhcmQgb3IgYSBkZWZlY3QgaW4KdGhlIGltcGxlbWVudGF0aW9ucy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjUuMi44IGNoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KLTQtIFJlcXVpcmVzOiBUaGUgcmFuZ2VzIFtmaXJzdCwgbGFzdCkgYW5kIFtyZXN1bHQsIHJlc3VsdCsobGFzdC1maXJzdCkpCnNoYWxsIG5vdCBvdmVybGFwLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4tNC0gUmVxdWlyZXM6IFRoZSByYW5nZXMgW2ZpcnN0LCBsYXN0KSBhbmQgW3Jlc3VsdCwKICByZXN1bHQrKGxhc3QtZmlyc3QpKSBzaGFsbCBub3Qgb3ZlcmxhcC4gVGhlIGV4cHJlc3Npb24gKnJlc3VsdCA9CiAgKmZpcnN0IG11c3QgYmUgdmFsaWQuIElmIG5laXRoZXIgSW5wdXRJdGVyYXRvciBub3IgT3V0cHV0SXRlcmF0b3IKICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGZvcndhcmQgaXRlcmF0b3IgdGhlbiB0aGUgdmFsdWUgdHlwZSBvZgogIElucHV0SXRlcmF0b3IgbXVzdCBiZSBjb3B5IGNvbnN0cnVjdGlibGUuIE90aGVyd2lzZSBjb3B5CiAgY29uc3RydWN0aWJsZSBpcyBub3QgcmVxdWlyZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IHRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIGRpZG4ndCBpbXBvc2UgYW4KZXhwbGljaXQgcmVxdWlyZW1lbnQgdGhhdCB0aGUgaXRlcmF0b3IncyB2YWx1ZSB0eXBlIG11c3QgYmUgY29weQpjb25zdHJ1Y3RpYmxlLCBvbiB0aGUgZ3JvdW5kcyB0aGF0IGFuIGlucHV0IGl0ZXJhdG9yJ3MgdmFsdWUgdHlwZSBtdXN0CmFsd2F5cyBiZSBjb3B5IGNvbnN0cnVjdGlibGUuICBOb3QgZXZlcnlvbmUgaW4gdGhlIExXRyB0aG91Z2h0IHRoYXQKdGhpcyByZXF1aXJlbWVudCB3YXMgY2xlYXIgZnJvbSB0YWJsZSA3Mi4gIEl0IGhhcyBiZWVuIHN1Z2dlc3RlZCB0aGF0Cml0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCA8dHQ+dW5pcXVlX2NvcHk8L3R0PiB3aXRob3V0CnJlcXVpcmluZyBhc3NpZ25hYmlsaXR5LCBhbHRob3VnaCBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBkbyBpbXBvc2UKdGhhdCByZXF1aXJlbWVudC4gIEhvd2FyZCBwcm92aWRlZCBuZXcgd29yZGluZy5dPC9pPjwvcD4KCjxwPjxpPlsKQ3VyYedhbzogVGhlIExXRyBjaGFuZ2VkIHRoZSBQUiBlZGl0b3JpYWxseSB0byBzcGVjaWZ5CiJuZWl0aGVyLi4ubm9yLi4ubWVldC4uLiIgYXMgY2xlYXJlciB0aGFuCiJib3RoLi4uYW5kLi4uZG8gbm90IG1lZXQuLi4iLiBDaGFuZ2UgYmVsaWV2ZWQgdG8gYmUgc28KbWlub3IgYXMgbm90IHRvIHJlcXVpcmUgcmUtcmV2aWV3LgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMjQyIj48aDM+MjQyLiZuYnNwO1NpZGUgZWZmZWN0cyBvZiBmdW5jdGlvbiBvYmplY3RzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnRyYW5zZm9ybSI+IFtsaWIuYWxnLnRyYW5zZm9ybV08L2E+LCAyNi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnJhbmQiPiBbbGliLnJhbmRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7TWF5IDE1IDIwMDA8L3A+CjxwPlRoZSBhbGdvcml0aG1zIHRyYW5zZm9ybSgpLCBhY2N1bXVsYXRlKCksIGlubmVyX3Byb2R1Y3QoKSwKcGFydGlhbF9zdW0oKSwgYW5kIGFkamFjZW50X2RpZmZlcmVuY2UoKSByZXF1aXJlIHRoYXQgdGhlIGZ1bmN0aW9uCm9iamVjdCBzdXBwbGllZCB0byB0aGVtIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGRlZmluZXMgYSBzaWRlIGVmZmVjdCBpbiAxLjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLmV4ZWN1dGlvbiI+IFtpbnRyby5leGVjdXRpb25dPC9hPiBhczo8L3A+CjxibG9ja3F1b3RlPi03LSBBY2Nlc3NpbmcgYW4gb2JqZWN0IGRlc2lnbmF0ZWQgYnkgYSB2b2xhdGlsZSBsdmFsdWUgKGJhc2ljLmx2YWwpLAptb2RpZnlpbmcgYW4gb2JqZWN0LCBjYWxsaW5nIGEgbGlicmFyeSBJL08gZnVuY3Rpb24sIG9yIGNhbGxpbmcgYSBmdW5jdGlvbgp0aGF0IGRvZXMgYW55IG9mIHRob3NlIG9wZXJhdGlvbnMgYXJlIGFsbCBzaWRlIGVmZmVjdHMsIHdoaWNoIGFyZSBjaGFuZ2VzCmluIHRoZSBzdGF0ZSBvZiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LjwvYmxvY2txdW90ZT4KCjxwPkFzIGEgY29uc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdG9yIG9mIGEgZnVuY3Rpb24gb2JqZWN0IHN1cHBsaWVkCnRvIGFueSBvZiB0aGUgYWxnb3JpdGhtcyBsaXN0ZWQgYWJvdmUgY2Fubm90IG1vZGlmeSBkYXRhIG1lbWJlcnMsIGNhbm5vdAppbnZva2UgYW55IGZ1bmN0aW9uIHRoYXQgaGFzIGEgc2lkZSBlZmZlY3QsIGFuZCBjYW5ub3QgZXZlbiBjcmVhdGUgYW5kCm1vZGlmeSB0ZW1wb3Jhcnkgb2JqZWN0cy4mbmJzcDsgSXQgaXMgZGlmZmljdWx0IHRvIGltYWdpbmUgYSBmdW5jdGlvbiBvYmplY3QKdGhhdCBpcyBzdGlsbCB1c2VmdWwgdW5kZXIgdGhlc2Ugc2V2ZXJlIGxpbWl0YXRpb25zLiBGb3IgaW5zdGFuY2UsIGFueQpub24tdHJpdmlhbCB0cmFuc2Zvcm1hdG9yIHN1cHBsaWVkIHRvIHRyYW5zZm9ybSgpIG1pZ2h0IGludm9sdmUgY3JlYXRpb24KYW5kIG1vZGlmaWNhdGlvbiBvZiB0ZW1wb3Jhcmllcywgd2hpY2ggaXMgcHJvaGliaXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQKd29yZGluZyBvZiB0aGUgc3RhbmRhcmQuPC9wPgoKPHA+T24gdGhlIG90aGVyIGhhbmQsIHBvcHVsYXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGFsZ29yaXRobXMgZXhoaWJpdAp1bmlmb3JtIGFuZCBwcmVkaWN0YWJsZSBiZWhhdmlvciB3aGVuIGludm9rZWQgd2l0aCBhIHNpZGUtZWZmZWN0LXByb2R1Y2luZwpmdW5jdGlvbiBvYmplY3RzLiBJdCBsb29rcyBsaWtlIHRoZSBzdHJvbmcgcmVxdWlyZW1lbnQgaXMgbm90IG5lZWRlZCBmb3IKZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGFsZ29yaXRobXMuPC9wPgoKPHA+VGhlIHJlcXVpcmVtZW50IG9mJm5ic3A7IHNpZGUtZWZmZWN0LWZyZWUgZnVuY3Rpb24gb2JqZWN0cyBjb3VsZCBiZQpyZXBsYWNlZCBieSBhIG1vcmUgcmVsYXhlZCBiYXNpYyByZXF1aXJlbWVudCAod2hpY2ggd291bGQgaG9sZCBmb3IgYWxsCmZ1bmN0aW9uIG9iamVjdHMgc3VwcGxpZWQgdG8gYW55IGFsZ29yaXRobSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSk6PC9wPgo8YmxvY2txdW90ZT5BIGZ1bmN0aW9uIG9iamVjdHMgc3VwcGxpZWQgdG8gYW4gYWxnb3JpdGhtIHNoYWxsIG5vdCBpbnZhbGlkYXRlCmFueSBpdGVyYXRvciBvciBzZXF1ZW5jZSB0aGF0IGlzIHVzZWQgYnkgdGhlIGFsZ29yaXRobS4gSW52YWxpZGF0aW9uIG9mCnRoZSBzZXF1ZW5jZSBpbmNsdWRlcyBkZXN0cnVjdGlvbiBvZiB0aGUgc29ydGluZyBvcmRlciBpZiB0aGUgYWxnb3JpdGhtCnJlbGllcyBvbiB0aGUgc29ydGluZyBvcmRlciAoc2VlIHNlY3Rpb24gMjUuMyAtIFNvcnRpbmcgYW5kIHJlbGF0ZWQgb3BlcmF0aW9ucwpbbGliLmFsZy5zb3J0aW5nXSkuPC9ibG9ja3F1b3RlPgoKPHA+SSBjYW4ndCBqdWRnZSB3aGV0aGVyIGl0IGlzIGludGVuZGVkIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdHMgc3VwcGxpZWQKdG8gdHJhbnNmb3JtKCksIGFjY3VtdWxhdGUoKSwgaW5uZXJfcHJvZHVjdCgpLCBwYXJ0aWFsX3N1bSgpLCBvciBhZGphY2VudF9kaWZmZXJlbmNlKCkKc2hhbGwgbm90IG1vZGlmeSBzZXF1ZW5jZSBlbGVtZW50cyB0aHJvdWdoIGRlcmVmZXJlbmNlZCBpdGVyYXRvcnMuPC9wPgoKPHA+SXQgaXMgZGViYXRhYmxlIHdoZXRoZXIgdGhpcyBpc3N1ZSBpcyBhIGRlZmVjdCBvciBhIGNoYW5nZSByZXF1ZXN0LgpTaW5jZSB0aGUgY29uc2VxdWVuY2VzIGZvciB1c2VyLXN1cHBsaWVkIGZ1bmN0aW9uIG9iamVjdHMgYXJlIGRyYXN0aWMgYW5kCmxpbWl0IHRoZSB1c2VmdWxuZXNzIG9mIHRoZSBhbGdvcml0aG1zIHNpZ25pZmljYW50bHkgSSB3b3VsZCBjb25zaWRlciBpdAphIGRlZmVjdC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxpPlRoaW5ncyB0byBub3RpY2UgYWJvdXQgdGhlc2UgY2hhbmdlczo8L2k+PC9wPgoKPG9sPgo8bGk+IDxpPlRoZSBmdWxseS1jbG9zZWQgKCJbXSIgYXMgb3Bwb3NlZCB0byBoYWxmLWNsb3NlZCAiWykiIHJhbmdlcwogICAgIGFyZSBpbnRlbnRpb25hbC4gd2Ugd2FudCB0byBwcmV2ZW50IHNpZGUtZWZmZWN0cyBmcm9tCiAgICAgaW52YWxpZGF0aW5nIHRoZSBlbmQgaXRlcmF0b3JzLjwvaT4KPC9saT4KCjxsaT4gPGk+VGhhdCBoYXMgdGhlIHVuaW50ZW50aW9uYWwgc2lkZS1lZmZlY3Qgb2YgcHJvaGliaXRpbmcKICAgICBtb2RpZmljYXRpb24gb2YgdGhlIGVuZCBlbGVtZW50IGFzIGEgc2lkZS1lZmZlY3QuIFRoaXMgY291bGQKICAgICBjb25jZWl2YWJseSBiZSBzaWduaWZpY2FudCBpbiBzb21lIGNhc2VzLjwvaT4KPC9saT4KCjxsaT4gPGk+VGhlIHdvcmRpbmcgYWxzbyBwcmV2ZW50cyBzaWRlLWVmZmVjdHMgZnJvbSBtb2RpZnlpbmcgZWxlbWVudHMKICAgICBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLiBJIGNhbid0IGltYWdpbmUgd2h5IGFueW9uZSB3b3VsZCB3YW50CiAgICAgdG8gZG8gdGhpcywgYnV0IGl0IGlzIGFyZ3VhYmx5IGEgcmVzdHJpY3Rpb24gdGhhdCBpbXBsZW1lbnRvcnMKICAgICBkb24ndCBuZWVkIHRvIHBsYWNlIG9uIHVzZXJzLjwvaT4KPC9saT4KCjxsaT4gPGk+TGlmdGluZyB0aGUgcmVzdHJpY3Rpb25zIGltcG9zZWQgaW4gIzIgYW5kICMzIGFib3ZlIGlzIHBvc3NpYmxlCiAgICAgYW5kIHNpbXBsZSwgYnV0IHdvdWxkIHJlcXVpcmUgbW9yZSB2ZXJiaWFnZS48L2k+CjwvbGk+Cjwvb2w+Cgo8cD5DaGFuZ2UgMjUuMi4zLzIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTItIFJlcXVpcmVzOiBvcCBhbmQgYmluYXJ5X29wIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogaW4gdGhlIHJhbmdlcyBbZmlyc3QxLCBsYXN0MV0sIFtmaXJzdDIsIGZpcnN0MiArCiAgKGxhc3QxIC0gZmlyc3QxKV0gYW5kIFtyZXN1bHQsIHJlc3VsdCArIChsYXN0MS0gZmlyc3QxKV0sIG9wIGFuZAogIGJpbmFyeV9vcCBzaGFsbCBuZWl0aGVyIG1vZGlmeSBlbGVtZW50cyBub3IgaW52YWxpZGF0ZSBpdGVyYXRvcnMgb3IKICBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCgo8cD5DaGFuZ2UgMjUuMi4zLzIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTItIFJlcXVpcmVzOiBvcCBhbmQgYmluYXJ5X29wIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuIAo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAtMi0gUmVxdWlyZXM6IG9wIGFuZCBiaW5hcnlfb3Agc2hhbGwgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIG9yCiAgIHN1YnJhbmdlcywgb3IgbW9kaWZ5IGVsZW1lbnRzIGluIHRoZSByYW5nZXMgW2ZpcnN0MSwgbGFzdDFdLAogICBbZmlyc3QyLCBmaXJzdDIgKyAobGFzdDEgLSBmaXJzdDEpXSwgYW5kIFtyZXN1bHQsIHJlc3VsdCArIChsYXN0MQogICAtIGZpcnN0MSldLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBmdWxseSBjbG9zZWQgcmFuZ2VzIGlzIGludGVudGlvbmFsIC0tZW5kIGZvb3Rub3RlXQo8L2Jsb2NrcXVvdGU+CgoKPHA+Q2hhbmdlIDI2LjQuMS8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBUIG11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIENvcHlDb25zdHJ1Y3RpYmxlCiAgIChsaWIuY29weWNvbnN0cnVjdGlibGUpIGFuZCBBc3NpZ25hYmxlIChsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykKICAgdHlwZXMuIGJpbmFyeV9vcCBzaGFsbCBub3QgY2F1c2Ugc2lkZSBlZmZlY3RzLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAtMi0gUmVxdWlyZXM6IFQgbXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUKICAgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkgYW5kIEFzc2lnbmFibGUKICAgKGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKSB0eXBlcy4gSW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdF0sCiAgIGJpbmFyeV9vcCBzaGFsbCBuZWl0aGVyIG1vZGlmeSBlbGVtZW50cyBub3IgaW52YWxpZGF0ZSBpdGVyYXRvcnMKICAgb3Igc3VicmFuZ2VzLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBhIGZ1bGx5IGNsb3NlZCByYW5nZSBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI2LjQuMi8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBUIG11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIENvcHlDb25zdHJ1Y3RpYmxlCiAgIChsaWIuY29weWNvbnN0cnVjdGlibGUpIGFuZCBBc3NpZ25hYmxlIChsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykKICAgdHlwZXMuIGJpbmFyeV9vcDEgYW5kIGJpbmFyeV9vcDIgc2hhbGwgbm90IGNhdXNlIHNpZGUgZWZmZWN0cy4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBUIG11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIENvcHlDb25zdHJ1Y3RpYmxlCiAgIChsaWIuY29weWNvbnN0cnVjdGlibGUpIGFuZCBBc3NpZ25hYmxlIChsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykKICAgdHlwZXMuIEluIHRoZSByYW5nZXMgW2ZpcnN0LCBsYXN0XSBhbmQgW2ZpcnN0MiwgZmlyc3QyICsgKGxhc3QgLQogICBmaXJzdCldLCBiaW5hcnlfb3AxIGFuZCBiaW5hcnlfb3AyIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzCiAgIG5vciBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvciBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCgo8cD5DaGFuZ2UgMjYuNC4zLzQgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAtNC0gUmVxdWlyZXM6IGJpbmFyeV9vcCBpcyBleHBlY3RlZCBub3QgdG8gaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAtNC0gUmVxdWlyZXM6IEluIHRoZSByYW5nZXMgW2ZpcnN0LCBsYXN0XSBhbmQgW3Jlc3VsdCwgcmVzdWx0ICsKICAgKGxhc3QgLSBmaXJzdCldLCBiaW5hcnlfb3Agc2hhbGwgbmVpdGhlciBtb2RpZnkgZWxlbWVudHMgbm9yCiAgIGludmFsaWRhdGUgaXRlcmF0b3JzIG9yIHN1YnJhbmdlcy4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgZnVsbHkgY2xvc2VkIHJhbmdlcyBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI2LjQuNC8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBiaW5hcnlfb3Agc2hhbGwgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0cy4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBJbiB0aGUgcmFuZ2VzIFtmaXJzdCwgbGFzdF0gYW5kIFtyZXN1bHQsIHJlc3VsdCArCiAgIChsYXN0IC0gZmlyc3QpXSwgYmluYXJ5X29wIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzIG5vcgogICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvciBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPjxpPltUb3JvbnRvOiBEYXZlIEFicmFoYW1zIHN1cHBsaWVkIHdvcmRpbmcuXTwvaT48L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogUHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgbW9kaWZpZWQgc2xpZ2h0bHkuIE1hdHQKYWRkZWQgZm9vdG5vdGVzIHBvaW50aW5nIG91dCB0aGF0IHRoZSB1c2Ugb2YgY2xvc2VkIHJhbmdlcyB3YXMKaW50ZW50aW9uYWwuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjI0MyI+PGgzPjI0My4mbmJzcDs8dHQ+Z2V0PC90dD4gYW5kIDx0dD5nZXRsaW5lPC90dD4gd2hlbiBzZW50cnkgcmVwb3J0cyBmYWlsdXJlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7TWF5IDE1IDIwMDA8L3A+CjxwPmJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6Z2V0KCksIGFuZCBiYXNpY19pc3RyZWFtJmx0OyZndDs6OmdldGxpbmUoKSwKYXJlIHVuY2xlYXIgd2l0aCByZXNwZWN0IHRvIHRoZSBiZWhhdmlvciBhbmQgc2lkZS1lZmZlY3RzIG9mIHRoZSBuYW1lZApmdW5jdGlvbnMgaW4gY2FzZSBvZiBhbiBlcnJvci48L3A+Cgo8cD4yNy42LjEuMywgcDEgc3RhdGVzIHRoYXQgIi4uLiBJZiB0aGUgc2VudHJ5IG9iamVjdCByZXR1cm5zCnRydWUsIHdoZW4gY29udmVydGVkIHRvIGEgdmFsdWUgb2YgdHlwZSBib29sLCB0aGUgZnVuY3Rpb24gZW5kZWF2b3JzCnRvIG9idGFpbiB0aGUgcmVxdWVzdGVkIGlucHV0Li4uIiBJdCBpcyBub3QgY2xlYXIgZnJvbSB0aGlzIChvcgp0aGUgcmVzdCBvZiB0aGUgcGFyYWdyYXBoKSB3aGF0IHByZWNpc2VseSB0aGUgYmVoYXZpb3Igc2hvdWxkIGJlIHdoZW4KdGhlIHNlbnRyeSBjdG9yIGV4aXRzIGJ5IHRocm93aW5nIGFuIGV4Y2VwdGlvbiBvciB3aGVuIHRoZSBzZW50cnkKb2JqZWN0IHJldHVybnMgZmFsc2UuICBJbiBwYXJ0aWN1bGFyLCB3aGF0IGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycwpleHRyYWN0ZWQgdGhhdCBnY291bnQoKSByZXR1cm5zIHN1cHBvc2VkIHRvIGJlPzwvcD4KCjxwPjI3LjYuMS4zIHA4IGFuZCBwMTkgc2F5IGFib3V0IHRoZSBlZmZlY3RzIG9mIGdldCgpIGFuZCBnZXRsaW5lKCk6CiIuLi4gIEluIGFueSBjYXNlLCBpdCB0aGVuIHN0b3JlcyBhIG51bGwgY2hhcmFjdGVyICh1c2luZwpjaGFyVCgpKSBpbnRvIHRoZSBuZXh0IHN1Y2Nlc3NpdmUgbG9jYXRpb24gb2YgdGhlIGFycmF5LiIgSXMgbm90CmNsZWFyIHdoZXRoZXIgdGhpcyBzZW50ZW5jZSBhcHBsaWVzIGlmIGVpdGhlciBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZQpob2xkcyAoaS5lLiwgd2hlbiBzZW50cnkgZmFpbHMpLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gMjcuNi4xLjMsIHAxIGFmdGVyIHRoZSBzZW50ZW5jZTwvcD4KCjxibG9ja3F1b3RlPgoiLi4uIElmIHRoZSBzZW50cnkgb2JqZWN0IHJldHVybnMgdHJ1ZSwgd2hlbiBjb252ZXJ0ZWQgdG8gYSB2YWx1ZSBvZgp0eXBlIGJvb2wsIHRoZSBmdW5jdGlvbiBlbmRlYXZvcnMgdG8gb2J0YWluIHRoZSByZXF1ZXN0ZWQgaW5wdXQuIgo8L2Jsb2NrcXVvdGU+Cgo8cD50aGUgZm9sbG93aW5nPC9wPgoKCjxibG9ja3F1b3RlPgoiT3RoZXJ3aXNlLCBpZiB0aGUgc2VudHJ5IGNvbnN0cnVjdG9yIGV4aXRzIGJ5IHRocm93aW5nIGFuIGV4Y2VwdGlvbiBvcgppZiB0aGUgc2VudHJ5IG9iamVjdCByZXR1cm5zIGZhbHNlLCB3aGVuIGNvbnZlcnRlZCB0byBhIHZhbHVlIG9mIHR5cGUKYm9vbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aG91dCBhdHRlbXB0aW5nIHRvIG9idGFpbiBhbnkgaW5wdXQuIEluCmVpdGhlciBjYXNlIHRoZSBudW1iZXIgb2YgZXh0cmFjdGVkIGNoYXJhY3RlcnMgaXMgc2V0IHRvIDA7IHVuZm9ybWF0dGVkCmlucHV0IGZ1bmN0aW9ucyB0YWtpbmcgYSBjaGFyYWN0ZXIgYXJyYXkgb2Ygbm9uLXplcm8gc2l6ZSBhcyBhbiBhcmd1bWVudApzaGFsbCBhbHNvIHN0b3JlIGEgbnVsbCBjaGFyYWN0ZXIgKHVzaW5nIGNoYXJUKCkpIGluIHRoZSBmaXJzdCBsb2NhdGlvbgpvZiB0aGUgYXJyYXkuIgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCB0aGUgZ2VuZXJhbCBwaGlsb3NvcGh5IG9mIHRoZSBpbnB1dCBmdW5jdGlvbnMgaXMgdGhhdCB0aGUKYXJndW1lbnQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCB1cG9uIGZhaWx1cmUsIDx0dD5nZXRsaW5lPC90dD4KaGlzdG9yaWNhbGx5IGFkZGVkIGEgdGVybWluYXRpbmcgbnVsbCB1bmNvbmRpdGlvbmFsbHkuICBNb3N0CmltcGxlbWVudGF0aW9ucyBzdGlsbCBkbyB0aGF0LiAgRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgZHJhZnQgc3RhbmRhcmQKaGFkIGxhbmd1YWdlIHRoYXQgbWFkZSB0aGlzIGFuIHVuYW1iaWd1b3VzIHJlcXVpcmVtZW50OyB0aG9zZSB3b3Jkcwp3ZXJlIG1vdmVkIHRvIGEgcGxhY2Ugd2hlcmUgdGhlaXIgY29udGV4dCBtYWRlIHRoZW0gbGVzcyBjbGVhci4gIFNlZQpKZXJyeSBTY2h3YXJ6J3MgbWVzc2FnZSBjKytzdGQtbGliLTc2MTguPC9wPgo8aHI+CjxhIG5hbWU9IjI0NyI+PGgzPjI0Ny4mbmJzcDs8dHQ+dmVjdG9yPC90dD4sIDx0dD5kZXF1ZTo6aW5zZXJ0PC90dD4gY29tcGxleGl0eTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc3RhY2siPiBbbGliLnN0YWNrXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TGlzYSBMaXBwaW5jb3R0Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA2IEp1bmUgMjAwMDwvcD4KPHA+UGFyYWdyYXBoIDIgb2YgMjMuMi40LjMgW2xpYi52ZWN0b3IubW9kaWZpZXJzXSBkZXNjcmliZXMgdGhlIGNvbXBsZXhpdHkKb2YgPHR0PnZlY3Rvcjo6aW5zZXJ0PC90dD46PC9wPgoKICAgPGJsb2NrcXVvdGU+CiAgIENvbXBsZXhpdHk6IElmIGZpcnN0IGFuZCBsYXN0IGFyZSBmb3J3YXJkIGl0ZXJhdG9ycywgYmlkaXJlY3Rpb25hbAogICBpdGVyYXRvcnMsIG9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLCB0aGUgY29tcGxleGl0eSBpcyBsaW5lYXIgaW4KICAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBwbHVzIHRoZSBkaXN0YW5jZQogICB0byB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuIElmIHRoZXkgYXJlIGlucHV0IGl0ZXJhdG9ycywgdGhlIGNvbXBsZXhpdHkKICAgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkKICAgdGltZXMgdGhlIGRpc3RhbmNlIHRvIHRoZSBlbmQgb2YgdGhlIHZlY3Rvci4KICAgPC9ibG9ja3F1b3RlPgoKPHA+Rmlyc3QsIHRoaXMgZmFpbHMgdG8gYWRkcmVzcyB0aGUgbm9uLWl0ZXJhdG9yIGZvcm1zIG9mCjx0dD5pbnNlcnQ8L3R0Pi48L3A+Cgo8cD5TZWNvbmQsIHRoZSBjb21wbGV4aXR5IGZvciBpbnB1dCBpdGVyYXRvcnMgbWlzc2VzIGFuIGVkZ2UgY2FzZSAtLQppdCByZXF1aXJlcyB0aGF0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgZWxlbWVudHMgY2FuIGJlIGFkZGVkIGF0CnRoZSBlbmQgb2YgYSA8dHQ+dmVjdG9yPC90dD4gaW4gY29uc3RhbnQgdGltZS48L3A+Cgo8cD5JIGxvb2tlZCB0byBzZWUgaWYgPHR0PmRlcXVlPC90dD4gaGFkIGEgc2ltaWxhciBwcm9ibGVtLCBhbmQgd2FzCnN1cnByaXNlZCB0byBmaW5kIHRoYXQgPHR0PmRlcXVlPC90dD4gcGxhY2VzIG5vIHJlcXVpcmVtZW50IG9uIHRoZQpjb21wbGV4aXR5IG9mIGluc2VydGluZyBtdWx0aXBsZSBlbGVtZW50cyAoMjMuMi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hcnJheS5zaXplIj4gW2xpYi5hcnJheS5zaXplXTwvYT4sCnBhcmFncmFwaCAzKTo8L3A+CgogICA8YmxvY2txdW90ZT4KICAgQ29tcGxleGl0eTogSW4gdGhlIHdvcnN0IGNhc2UsIGluc2VydGluZyBhIHNpbmdsZSBlbGVtZW50IGludG8gYQogICBkZXF1ZSB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGUgbWluaW11bSBvZiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKICAgaW5zZXJ0aW9uIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRlcXVlIGFuZCB0aGUgZGlzdGFuY2UKICAgZnJvbSB0aGUgaW5zZXJ0aW9uIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGRlcXVlLiBJbnNlcnRpbmcgYQogICBzaW5nbGUgZWxlbWVudCBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYSBkZXF1ZSBhbHdheXMKICAgdGFrZXMgY29uc3RhbnQgdGltZSBhbmQgY2F1c2VzIGEgc2luZ2xlIGNhbGwgdG8gdGhlIGNvcHkgY29uc3RydWN0b3IKICAgb2YgVC4KICAgPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5DaGFuZ2UgUGFyYWdyYXBoIDIgb2YgMjMuMi40LjMgW2xpYi52ZWN0b3IubW9kaWZpZXJzXSB0bzwvcD4KICAgPGJsb2NrcXVvdGU+CiAgIENvbXBsZXhpdHk6IFRoZSBjb21wbGV4aXR5IGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIAogICBpbnNlcnRlZCBwbHVzIHRoZSBkaXN0YW5jZSB0byB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuCiAgIDwvYmxvY2txdW90ZT4KCiAgIDxwPjxpPltGb3IgaW5wdXQgaXRlcmF0b3JzLCBvbmUgbWF5IGFjaGlldmUgdGhpcyBjb21wbGV4aXR5IGJ5IGZpcnN0CiAgIGluc2VydGluZyBhdCB0aGUgZW5kIG9mIHRoZSA8dHQ+dmVjdG9yPC90dD4sIGFuZCB0aGVuIHVzaW5nCiAgIDx0dD5yb3RhdGU8L3R0Pi5dPC9pPjwvcD4KCjxwPkNoYW5nZSAyMy4yLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFycmF5LnNpemUiPiBbbGliLmFycmF5LnNpemVdPC9hPiwgcGFyYWdyYXBoIDMsIHRvOjwvcD4KCiAgIDxibG9ja3F1b3RlPgogICBDb21wbGV4aXR5OiBUaGUgY29tcGxleGl0eSBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyAKICAgaW5zZXJ0ZWQgcGx1cyB0aGUgc2hvcnRlciBvZiB0aGUgZGlzdGFuY2VzIHRvIHRoZSBiZWdpbm5pbmcgYW5kCiAgIGVuZCBvZiB0aGUgZGVxdWUuICBJbnNlcnRpbmcgYSBzaW5nbGUgZWxlbWVudCBhdCBlaXRoZXIgdGhlCiAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgZGVxdWUgY2F1c2VzIGEgc2luZ2xlIGNhbGwgdG8gdGhlIGNvcHkKICAgY29uc3RydWN0b3Igb2YgVC4KICAgPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgYSByZWFsIGRlZmVjdCwgYW5kIHByb3Bvc2VkIHJlc29sdXRpb24gZml4ZXMgaXQ6IHNvbWUKICBjb21wbGV4aXRpZXMgYXJlbid0IHNwZWNpZmllZCB0aGF0IHNob3VsZCBiZS4gIFRoaXMgcHJvcG9zZWQKICByZXNvbHV0aW9uIGRvZXMgY29uc3RyYWluIGRlcXVlIGltcGxlbWVudGF0aW9ucyAoaXQgcnVsZXMgb3V0IHRoZQogIG1vc3QgbmFpdmUgcG9zc2libGUgaW1wbGVtZW50YXRpb25zKSwgYnV0IHRoZSBMV0cgZG9lc24ndCBzZWUgYQogIHJlYXNvbiB0byBwZXJtaXQgdGhhdCBpbXBsZW1lbnRhdGlvbi48L3A+Cjxocj4KPGEgbmFtZT0iMjQ4Ij48aDM+MjQ4LiZuYnNwO3RpbWVfZ2V0IGZhaWxzIHRvIHNldCBlb2ZiaXQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5jYXRlZ29yeS50aW1lIj4gW2xpYi5jYXRlZ29yeS50aW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIyIEp1bmUgMjAwMDwvcD4KPHA+VGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhhdCBhbnkgb2YgdGltZV9nZXQgbWVtYmVyIGZ1bmN0aW9ucyBzZXQKaW9zOjplb2ZiaXQgd2hlbiB0aGV5IHJlYWNoIHRoZSBlbmQgaXRlcmF0b3Igd2hpbGUgcGFyc2luZyB0aGVpciBpbnB1dC4KU2luY2UgbWVtYmVycyBvZiBib3RoIHRoZSBudW1fZ2V0IGFuZCBtb25leV9nZXQgZmFjZXRzIGFyZSByZXF1aXJlZCB0bwpkbyBzbyAoMjIuMi4yLjEuMiwgYW5kIDIyLjIuNi4xLjIsIHJlc3BlY3RpdmVseSksIHRpbWVfZ2V0IG1lbWJlcnMKc2hvdWxkIGZvbGxvdyB0aGUgc2FtZSByZXF1aXJlbWVudCBmb3IgY29uc2lzdGVuY3kuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBwYXJhZ3JhcGggMiB0byBzZWN0aW9uIDIyLjIuNS4xIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0OjwvcD4KCjxibG9ja3F1b3RlPgpJZiB0aGUgZW5kIGl0ZXJhdG9yIGlzIHJlYWNoZWQgZHVyaW5nIHBhcnNpbmcgYnkgYW55IG9mIHRoZSBnZXQoKQptZW1iZXIgZnVuY3Rpb25zLCB0aGUgbWVtYmVyIHNldHMgaW9zX2Jhc2U6OmVvZmJpdCBpbiBlcnIuCjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlR3byBhbHRlcm5hdGl2ZSByZXNvbHV0aW9ucyB3ZXJlIHByb3Bvc2VkLiAgVGhlIExXRyBjaG9zZSB0aGlzIG9uZQpiZWNhdXNlIGl0IHdhcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGVvZiBpcyBkZXNjcmliZWQgZm9yIG90aGVyCmlucHV0IGZhY2V0cy48L3A+Cjxocj4KPGEgbmFtZT0iMjUwIj48aDM+MjUwLiZuYnNwO3NwbGljaW5nIGludmFsaWRhdGVzIGl0ZXJhdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuc3BlY2lhbCI+IFtsaWIuZGVxdWUuc3BlY2lhbF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JyaWFuIFBhcmtlciAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTQgSnVsIDIwMDA8L3A+CjxwPgpTZWN0aW9uIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdIHN0YXRlcyB0aGF0CjwvcD4KPHByZT4gIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIHBvc2l0aW9uLCBsaXN0Jmx0O1QsIEFsbG9jYXRvciZndDsmYW1wOyB4KTsKPC9wcmU+CjxwPgo8aT5pbnZhbGlkYXRlczwvaT4gYWxsIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyB0byBsaXN0IDx0dD54PC90dD4uCjwvcD4KCjxwPgpUaGlzIGlzIHVubmVjZXNzYXJ5IGFuZCBkZWZlYXRzIGFuIGltcG9ydGFudCBmZWF0dXJlIG9mIHNwbGljZS4gSW4KZmFjdCwgdGhlIFNHSSBTVEwgZ3VhcmFudGVlcyB0aGF0IGl0ZXJhdG9ycyB0byA8dHQ+eDwvdHQ+IHJlbWFpbiB2YWxpZAphZnRlciA8dHQ+c3BsaWNlPC90dD4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+QWRkIGEgZm9vdG5vdGUgdG8gMjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5kZXF1ZS5zcGVjaWFsIj4gW2xpYi5kZXF1ZS5zcGVjaWFsXTwvYT4sIHBhcmFncmFwaCAxOjwvcD4KPGJsb2NrcXVvdGU+Cls8aT5Gb290bm90ZTo8L2k+IEFzIHNwZWNpZmllZCBpbiAyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmRlZmF1bHQuY29uLnJlcSI+IFtsaWIuZGVmYXVsdC5jb24ucmVxXTwvYT4sIHBhcmFncmFwaHMKNC01LCB0aGUgc2VtYW50aWNzIGRlc2NyaWJlZCBpbiB0aGlzIGNsYXVzZSBhcHBsaWVzIG9ubHkgdG8gdGhlIGNhc2UKd2hlcmUgYWxsb2NhdG9ycyBjb21wYXJlIGVxdWFsLiAgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPkluIDIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuc3BlY2lhbCI+IFtsaWIuZGVxdWUuc3BlY2lhbF08L2E+LCByZXBsYWNlIHBhcmFncmFwaCA0IHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogSW5zZXJ0cyB0aGUgY29udGVudHMgb2YgeCBiZWZvcmUgcG9zaXRpb24gYW5kIHggYmVjb21lcyAKZW1wdHkuICBQb2ludGVycyBhbmQgcmVmZXJlbmNlcyB0byB0aGUgbW92ZWQgZWxlbWVudHMgb2YgeCBub3cgcmVmZXIgdG8gCnRob3NlIHNhbWUgZWxlbWVudHMgYnV0IGFzIG1lbWJlcnMgb2YgKnRoaXMuICBJdGVyYXRvcnMgcmVmZXJyaW5nIHRvIHRoZSAKbW92ZWQgZWxlbWVudHMgd2lsbCBjb250aW51ZSB0byByZWZlciB0byB0aGVpciBlbGVtZW50cywgYnV0IHRoZXkgbm93IApiZWhhdmUgYXMgaXRlcmF0b3JzIGludG8gKnRoaXMsIG5vdCBpbnRvIHguCjwvYmxvY2txdW90ZT4KCjxwPkluIDIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuc3BlY2lhbCI+IFtsaWIuZGVxdWUuc3BlY2lhbF08L2E+LCByZXBsYWNlIHBhcmFncmFwaCA3IHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogSW5zZXJ0cyBhbiBlbGVtZW50IHBvaW50ZWQgdG8gYnkgaSBmcm9tIGxpc3QgeCBiZWZvcmUgCnBvc2l0aW9uIGFuZCByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20geC4gVGhlIHJlc3VsdCBpcyB1bmNoYW5nZWQgaWYgCnBvc2l0aW9uID09IGkgb3IgcG9zaXRpb24gPT0gKytpLiAgUG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdG8gKmkgY29udGludWUgCnRvIHJlZmVyIHRvIHRoaXMgc2FtZSBlbGVtZW50IGJ1dCBhcyBhIG1lbWJlciBvZiAqdGhpcy4gIEl0ZXJhdG9ycyB0byAqaSAKKGluY2x1ZGluZyBpIGl0c2VsZikgY29udGludWUgdG8gcmVmZXIgdG8gdGhlIHNhbWUgZWxlbWVudCwgYnV0IG5vdyAKYmVoYXZlIGFzIGl0ZXJhdG9ycyBpbnRvICp0aGlzLCBub3QgaW50byB4Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLnNwZWNpYWwiPiBbbGliLmRlcXVlLnNwZWNpYWxdPC9hPiwgcmVwbGFjZSBwYXJhZ3JhcGggMTIgd2l0aDo8L3A+CjxibG9ja3F1b3RlPgpSZXF1aXJlczogW2ZpcnN0LCBsYXN0KSBpcyBhIHZhbGlkIHJhbmdlIGluIHguIFRoZSByZXN1bHQgaXMgCnVuZGVmaW5lZCBpZiBwb3NpdGlvbiBpcyBhbiBpdGVyYXRvciBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4gIApQb2ludGVycyBhbmQgcmVmZXJlbmNlcyB0byB0aGUgbW92ZWQgZWxlbWVudHMgb2YgeCBub3cgcmVmZXIgdG8gdGhvc2UgCnNhbWUgZWxlbWVudHMgYnV0IGFzIG1lbWJlcnMgb2YgKnRoaXMuICBJdGVyYXRvcnMgcmVmZXJyaW5nIHRvIHRoZSBtb3ZlZCAKZWxlbWVudHMgd2lsbCBjb250aW51ZSB0byByZWZlciB0byB0aGVpciBlbGVtZW50cywgYnV0IHRoZXkgbm93IGJlaGF2ZSBhcyAKaXRlcmF0b3JzIGludG8gKnRoaXMsIG5vdCBpbnRvIHguCjwvYmxvY2txdW90ZT4KCjxwPjxpPltwcmUtQ29wZW5oYWdlbjogSG93YXJkIHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiBzYWlkIHRoYXQgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzCndvdWxkIHJlbWFpbiAidmFsaWQiLiAgVGhlIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uIGNsYXJpZmllcyB3aGF0IHRoYXQKbWVhbnMuICBOb3RlIHRoYXQgdGhpcyBvbmx5IGFwcGxpZXMgdG8gdGhlIGNhc2Ugb2YgZXF1YWwgYWxsb2NhdG9ycy4KRnJvbSAyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmRlZmF1bHQuY29uLnJlcSI+IFtsaWIuZGVmYXVsdC5jb24ucmVxXTwvYT4gcGFyYWdyYXBoIDQsIHRoZSBiZWhhdmlvciBvZiBsaXN0IHdoZW4KYWxsb2NhdG9ycyBjb21wYXJlIG5vbmVxdWFsIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBzdGFuZGFyZC48L3A+Cjxocj4KPGEgbmFtZT0iMjUxIj48aDM+MjUxLiZuYnNwO2Jhc2ljX3N0cmluZ2J1ZiBtaXNzaW5nIGFsbG9jYXRvcl90eXBlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYiPiBbbGliLnN0cmluZ2J1Zl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOCBKdWwgMjAwMDwvcD4KPHA+VGhlIHN5bm9wc2lzIGZvciB0aGUgdGVtcGxhdGUgY2xhc3MgPHR0PmJhc2ljX3N0cmluZ2J1ZjwvdHQ+CmRvZXNuJ3QgbGlzdCBhIHR5cGVkZWYgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKPHR0PkFsbG9jYXRvcjwvdHQ+LiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mCnRoZSBhbGxvY2F0b3IgYXQgY29tcGlsZSB0aW1lLiBJdCdzIGFsc28gaW5jb25zaXN0ZW50IHdpdGggYWxsIG90aGVyCnRlbXBsYXRlIGNsYXNzZXMgaW4gdGhlIGxpYnJhcnkgdGhhdCBkbyBwcm92aWRlIGEgdHlwZWRlZiBmb3IgdGhlCjx0dD5BbGxvY2F0b3I8L3R0PiBwYXJhbWV0ZXIuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0byB0aGUgc3lub3BzZXMgb2YgdGhlIGNsYXNzIHRlbXBsYXRlcyBiYXNpY19zdHJpbmdidWYgKDI3LjcuMSksCmJhc2ljX2lzdHJpbmdzdHJlYW0gKDI3LjcuMiksIGJhc2ljX29zdHJpbmdzdHJlYW0gKDI3LjcuMyksIGFuZCAKYmFzaWNfc3RyaW5nc3RyZWFtICgyNy43LjQpIHRoZSB0eXBlZGVmOjwvcD4KPHByZT4gIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOwo8L3ByZT4KPGhyPgo8YSBuYW1lPSIyNTIiPjxoMz4yNTIuJm5ic3A7bWlzc2luZyBjYXN0cy9DLXN0eWxlIGNhc3RzIHVzZWQgaW4gaW9zdHJlYW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nLnN0cmVhbXMiPiBbbGliLnN0cmluZy5zdHJlYW1zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI4IEp1bCAyMDAwPC9wPgo8cD4yNy43LjIuMiwgcDEgdXNlcyBhIEMtc3R5bGUgY2FzdCByYXRoZXIgdGhhbiB0aGUgbW9yZSBhcHByb3ByaWF0ZQpjb25zdF9jYXN0Jmx0OyZndDsgaW4gdGhlIFJldHVybnMgY2xhdXNlIGZvciBiYXNpY19pc3RyaW5nc3RyZWFtJmx0OyZndDs6OnJkYnVmKCkuClRoZSBzYW1lIEMtc3R5bGUgY2FzdCBpcyBiZWluZyB1c2VkIGluIDI3LjcuMy4yLCBwMSwgRC43LjIuMiwgcDEsIGFuZApELjcuMy4yLCBwMSwgYW5kIHBlcmhhcHMgZWxzZXdoZXJlLiAyNy43LjYsIHAxIGFuZCBELjcuMi4yLCBwMSBhcmUgbWlzc2luZwp0aGUgY2FzdCBhbHRvZ2V0aGVyLjwvcD4KCjxwPkMtc3R5bGUgY2FzdHMgaGF2ZSBub3QgYmVlbiBkZXByZWNhdGVkLCBzbyB0aGUgZmlyc3QgcGFydCBvZiB0aGlzCmlzc3VlIGlzIHN0eWxpc3RpYyByYXRoZXIgdGhhbiBhIG1hdHRlciBvZiBjb3JyZWN0bmVzcy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNy4yLjIsIHAxIHJlcGxhY2UgPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IChiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqKSZhbXA7c2IuPC9wcmU+Cgo8cD53aXRoPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7YmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KiZndDsoJmFtcDtzYikuPC9wcmU+CgoKPHA+SW4gMjcuNy4zLjIsIHAxIHJlcGxhY2U8L3A+CjxwcmU+ICAtMS0gUmV0dXJuczogKGJhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyopJmFtcDtzYi48L3ByZT4KCjxwPndpdGg8L3A+CjxwcmU+ICAtMS0gUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqJmd0OygmYW1wO3NiKS48L3ByZT4KCjxwPkluIDI3LjcuNiwgcDEsIHJlcGxhY2U8L3A+CjxwcmU+ICAtMS0gUmV0dXJuczogJmFtcDtzYjwvcHJlPgoKPHA+d2l0aDwvcD4KPHByZT4gIC0xLSBSZXR1cm5zOiBjb25zdF9jYXN0Jmx0O2Jhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyomZ3Q7KCZhbXA7c2IpLjwvcHJlPgoKPHA+SW4gRC43LjIuMiwgcDEgcmVwbGFjZTwvcD4KPHByZT4gIC0yLSBSZXR1cm5zOiAmYW1wO3NiLiA8L3ByZT4KCjxwPndpdGg8L3A+CjxwcmU+ICAtMi0gUmV0dXJuczogY29uc3RfY2FzdCZsdDtzdHJzdHJlYW1idWYqJmd0OygmYW1wO3NiKS48L3ByZT4KPGhyPgo8YSBuYW1lPSIyNTMiPjxoMz4yNTMuJm5ic3A7dmFsYXJyYXkgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxtb3N0IGVudGlyZWx5IHVzZWxlc3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi41LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi52YWxhcnJheS5jb25zIj4gW2xpYi52YWxhcnJheS5jb25zXTwvYT4sIDI2LjUuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LmFzc2lnbiI+IFtsaWIudmFsYXJyYXkuYXNzaWduXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Um9iZXJ0IEtsYXJlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMSBKdWwgMjAwMDwvcD4KPHA+VGhpcyBkaXNjdXNzaW9uIGlzIGFkYXB0ZWQgZnJvbSBtZXNzYWdlIGMrK3N0ZC1saWItNzA1NiBwb3N0ZWQKTm92ZW1iZXIgMTEsIDE5OTkuICBJIGRvbid0IHRoaW5rIHRoYXQgYW55b25lIGNhbiByZWFzb25hYmx5IGNsYWltCnRoYXQgdGhlIHByb2JsZW0gZGVzY3JpYmVkIGJlbG93IGlzIE5BRC48L3A+Cgo8cD5UaGVzZSB2YWxhcnJheSBjb25zdHJ1Y3RvcnMgY2FuIG5ldmVyIGJlIGNhbGxlZDo8L3A+Cgo8cHJlPiAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgICAgICB2YWxhcnJheSZsdDtUJmd0Ozo6dmFsYXJyYXkoY29uc3Qgc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICAgICAgdmFsYXJyYXkmbHQ7VCZndDs6OnZhbGFycmF5KGNvbnN0IGdzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgICAgICB2YWxhcnJheSZsdDtUJmd0Ozo6dmFsYXJyYXkoY29uc3QgbWFza19hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgICAgICB2YWxhcnJheSZsdDtUJmd0Ozo6dmFsYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwo8L3ByZT4KCjxwPlNpbWlsYXJseSwgdGhlc2UgdmFsYXJyYXkgYXNzaWdubWVudCBvcGVyYXRvcnMgY2Fubm90IGJlCmNhbGxlZDo8L3A+Cgo8cHJlPiAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgdmFsYXJyYXkmbHQ7VCZndDsgdmFsYXJyYXkmbHQ7VCZndDs6Om9wZXJhdG9yPShjb25zdCBzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgdmFsYXJyYXkmbHQ7VCZndDsgdmFsYXJyYXkmbHQ7VCZndDs6Om9wZXJhdG9yPShjb25zdCBnc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgIHZhbGFycmF5Jmx0O1QmZ3Q7IHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcj0oY29uc3QgbWFza19hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgdmFsYXJyYXkmbHQ7VCZndDsgdmFsYXJyYXkmbHQ7VCZndDs6Om9wZXJhdG9yPShjb25zdCBpbmRpcmVjdF9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CjwvcHJlPgoKPHA+UGxlYXNlIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo8L3A+Cgo8cHJlPiAgICNpbmNsdWRlICZsdDt2YWxhcnJheSZndDsKICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgIGludCBtYWluKCkKICAgewogICAgICAgdmFsYXJyYXkmbHQ7ZG91YmxlJmd0OyB2YTEoMTIpOwogICAgICAgdmFsYXJyYXkmbHQ7ZG91YmxlJmd0OyB2YTIodmExW3NsaWNlKDEsNCwzKV0pOyAvLyBsaW5lIDEKICAgfQo8L3ByZT4KCgo8cD5TaW5jZSB0aGUgdmFsYXJyYXkgdmExIGlzIG5vbi1jb25zdCwgdGhlIHJlc3VsdCBvZiB0aGUgc3ViLWV4cHJlc3Npb24KdmExW3NsaWNlKDEsNCwzKV0gYXQgbGluZSAxIGlzIGFuIHJ2YWx1ZSBvZiB0eXBlIGNvbnN0CnN0ZDo6c2xpY2VfYXJyYXkmbHQ7ZG91YmxlJmd0Oy4gIFRoaXMgc2xpY2VfYXJyYXkgcnZhbHVlIGlzIHRoZW4gdXNlZCB0bwpjb25zdHJ1Y3QgdmEyLiAgVGhlIGNvbnN0cnVjdG9yIHRoYXQgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdmEyIGlzCmRlY2xhcmVkIGxpa2UgdGhpczo8L3A+Cgo8cHJlPiAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgdmFsYXJyYXkmbHQ7VCZndDs6OnZhbGFycmF5KGNvbnN0IHNsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKPC9wcmU+Cgo8cD5Ob3RpY2UgdGhlIGNvbnN0cnVjdG9yJ3MgY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlci4gIFdoZW4gdGhlCmNvbnN0cnVjdG9yIGlzIGNhbGxlZCwgYSBzbGljZV9hcnJheSBtdXN0IGJlIGJvdW5kIHRvIHRoaXMgcmVmZXJlbmNlLgpUaGUgcnVsZXMgZm9yIGJpbmRpbmcgYW4gcnZhbHVlIHRvIGEgY29uc3QgcmVmZXJlbmNlIGFyZSBpbiA4LjUuMywKcGFyYWdyYXBoIDUgKHNlZSBhbHNvIDEzLjMuMy4xLjQpLiAgU3BlY2lmaWNhbGx5LCBwYXJhZ3JhcGggNQppbmRpY2F0ZXMgdGhhdCBhIHNlY29uZCBzbGljZV9hcnJheSBydmFsdWUgaXMgY29uc3RydWN0ZWQgKGluIHRoaXMKY2FzZSBjb3B5LWNvbnN0cnVjdGVkKSBmcm9tIHRoZSBmaXJzdCBvbmU7IGl0IGlzIHRoaXMgc2Vjb25kIHJ2YWx1ZQp0aGF0IGlzIGJvdW5kIHRvIHRoZSByZWZlcmVuY2UgcGFyYW1ldGVyLiAgUGFyYWdyYXBoIDUgYWxzbyByZXF1aXJlcwp0aGF0IHRoZSBjb25zdHJ1Y3RvciB0aGF0IGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZSBiZSBjYWxsYWJsZSwKcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzZWNvbmQgcnZhbHVlIGlzIGVsaWRlZC4gIFRoZQpjb3B5LWNvbnN0cnVjdG9yIGluIHRoaXMgY2FzZSBpcyBub3QgY2FsbGFibGUsIGhvd2V2ZXIsIGJlY2F1c2UgaXQgaXMKcHJpdmF0ZS4gIFRoZXJlZm9yZSwgdGhlIGNvbXBpbGVyIHNob3VsZCByZXBvcnQgYW4gZXJyb3IuPC9wPgoKPHA+U2luY2Ugc2xpY2VfYXJyYXlzIGFyZSBhbHdheXMgcnZhbHVlcywgdGhlIHZhbGFycmF5IGNvbnN0cnVjdG9yIHRoYXQgaGFzIGEKcGFyYW1ldGVyIG9mIHR5cGUgY29uc3Qgc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDsgY2FuIG5ldmVyIGJlIGNhbGxlZC4gIFRoZQpzYW1lIHJlYXNvbmluZyBhcHBsaWVzIHRvIHRoZSB0aHJlZSBvdGhlciBjb25zdHJ1Y3RvcnMgYW5kIHRoZSBmb3VyCmFzc2lnbm1lbnQgb3BlcmF0b3JzIHRoYXQgYXJlIGxpc3RlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcG9zdC4KRnVydGhlcm1vcmUsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkLCB0aGUgdmFsYXJyYXkgaGVscGVyCmNsYXNzZXMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5zbGljZV9hcnJheTo8L3A+Cjx1bD4KPGxpPiBNYWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3IgZGVjbGFyYXRpb25zCiAgICAgcHVibGljIGluIHRoZSBzbGljZV9hcnJheSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGluIDI2LjUuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5zbGljZS5hcnJheSI+IFtsaWIudGVtcGxhdGUuc2xpY2UuYXJyYXldPC9hPiA8L2xpPgo8bGk+IHJlbW92ZSBwYXJhZ3JhcGggMyBvZiAyNi41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5XTwvYT4KPC9saT4KPGxpPiByZW1vdmUgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24gZnJvbSAyNi41LjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb25zLnNsaWNlLmFyciI+IFtsaWIuY29ucy5zbGljZS5hcnJdPC9hPgo8L2xpPgo8bGk+IGNoYW5nZSBwYXJhZ3JhcGggMSBvZiAyNi41LjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb25zLnNsaWNlLmFyciI+IFtsaWIuY29ucy5zbGljZS5hcnJdPC9hPiB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkCiAgICB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuc2xpY2UuYXJyLmFzc2lnbiI+IFtsaWIuc2xpY2UuYXJyLmFzc2lnbl08L2E+CjwvbGk+CjxsaT4gQ2hhbmdlIHRoZSBmaXJzdCB0aHJlZSB3b3JkcyBvZiB0aGUgc2Vjb25kIHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mCiAgICAyNi41LjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5zbGljZS5hcnIuYXNzaWduIj4gW2xpYi5zbGljZS5hcnIuYXNzaWduXTwvYT4gdG8gIlRoZXNlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGhhdmUiPC9saT4KPC91bD4KCjxwPmdzbGljZV9hcnJheTo8L3A+Cjx1bD4KPGxpPiBNYWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3IgZGVjbGFyYXRpb25zCiAgICBwdWJsaWMgaW4gdGhlIGdzbGljZV9hcnJheSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGluIDI2LjUuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLmdzbGljZS5hcnJheV08L2E+IDwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAzIG9mIDI2LjUuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLmdzbGljZS5hcnJheV08L2E+CjwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGZyb20gMjYuNS43LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuZ3NsaWNlLmFycmF5LmNvbnMiPiBbbGliLmdzbGljZS5hcnJheS5jb25zXTwvYT4KPC9saT4KPGxpPiBjaGFuZ2UgcGFyYWdyYXBoIDEgb2YgMjYuNS43LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuZ3NsaWNlLmFycmF5LmNvbnMiPiBbbGliLmdzbGljZS5hcnJheS5jb25zXTwvYT4gdG8gcmVhZCAiVGhpcyBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZAogICAgdG8gYmUgcHJpdmF0ZS4gIFRoaXMgY29uc3RydWN0b3IgbmVlZCBub3QgYmUgZGVmaW5lZC4iPC9saT4KPGxpPiByZW1vdmUgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mIDI2LjUuNy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5hc3NpZ24iPiBbbGliLmdzbGljZS5hcnJheS5hc3NpZ25dPC9hPgo8L2xpPgo8bGk+IENoYW5nZSB0aGUgZmlyc3QgdGhyZWUgd29yZHMgb2YgdGhlIHNlY29uZCBzZW50ZW5jZSBvZiBwYXJhZ3JhcGggMSBvZgogICAgMjYuNS43LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuZ3NsaWNlLmFycmF5LmFzc2lnbiI+IFtsaWIuZ3NsaWNlLmFycmF5LmFzc2lnbl08L2E+IHRvICJUaGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBoYXZlIjwvbGk+CjwvdWw+Cgo8cD5tYXNrX2FycmF5OjwvcD4KPHVsPgo8bGk+IE1ha2UgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHktYXNzaWdubWVudCBvcGVyYXRvciBkZWNsYXJhdGlvbnMKICAgIHB1YmxpYyBpbiB0aGUgbWFza19hcnJheSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGluIDI2LjUuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5XTwvYT4gPC9saT4KPGxpPiByZW1vdmUgdGhlIG5vdGUgaW4gcGFyYWdyYXBoIDIgb2YgMjYuNS44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLm1hc2suYXJyYXkiPiBbbGliLnRlbXBsYXRlLm1hc2suYXJyYXldPC9hPgo8L2xpPgo8bGk+IHJlbW92ZSB0aGUgY29weSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBmcm9tIDI2LjUuOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm1hc2suYXJyYXkuY29ucyI+IFtsaWIubWFzay5hcnJheS5jb25zXTwvYT4KPC9saT4KPGxpPiBjaGFuZ2UgcGFyYWdyYXBoIDEgb2YgMjYuNS44LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubWFzay5hcnJheS5jb25zIj4gW2xpYi5tYXNrLmFycmF5LmNvbnNdPC9hPiB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkCiAgICB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS44LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubWFzay5hcnJheS5hc3NpZ24iPiBbbGliLm1hc2suYXJyYXkuYXNzaWduXTwvYT4KPC9saT4KPGxpPiBDaGFuZ2UgdGhlIGZpcnN0IHRocmVlIHdvcmRzIG9mIHRoZSBzZWNvbmQgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YKICAgIDI2LjUuOC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm1hc2suYXJyYXkuYXNzaWduIj4gW2xpYi5tYXNrLmFycmF5LmFzc2lnbl08L2E+IHRvICJUaGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBoYXZlIjwvbGk+CjwvdWw+Cgo8cD5pbmRpcmVjdF9hcnJheTo8L3A+Cjx1bD4KPGxpPk1ha2UgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHktYXNzaWdubWVudCBvcGVyYXRvciBkZWNsYXJhdGlvbnMKICAgIHB1YmxpYyBpbiB0aGUgaW5kaXJlY3RfYXJyYXkgY2xhc3MgZGVmaW5pdGlvbiBpbiAyNi41LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuaW5kaXJlY3QuYXJyYXkiPiBbbGliLnRlbXBsYXRlLmluZGlyZWN0LmFycmF5XTwvYT4KPC9saT4KPGxpPiByZW1vdmUgdGhlIG5vdGUgaW4gcGFyYWdyYXBoIDIgb2YgMjYuNS45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLmluZGlyZWN0LmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheV08L2E+CjwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGZyb20gMjYuNS45LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuaW5kaXJlY3QuYXJyYXkuY29ucyI+IFtsaWIuaW5kaXJlY3QuYXJyYXkuY29uc108L2E+CjwvbGk+CjxsaT4gY2hhbmdlIHRoZSBkZXNjcmlwdGl2ZSB0ZXh0IGluIDI2LjUuOS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmluZGlyZWN0LmFycmF5LmNvbnMiPiBbbGliLmluZGlyZWN0LmFycmF5LmNvbnNdPC9hPiB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzCiAgICBkZWNsYXJlZCB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS45LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuaW5kaXJlY3QuYXJyYXkuYXNzaWduIj4gW2xpYi5pbmRpcmVjdC5hcnJheS5hc3NpZ25dPC9hPgo8L2xpPgo8bGk+IENoYW5nZSB0aGUgZmlyc3QgdGhyZWUgd29yZHMgb2YgdGhlIHNlY29uZCBzZW50ZW5jZSBvZiBwYXJhZ3JhcGggMSBvZgogICAgMjYuNS45LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuaW5kaXJlY3QuYXJyYXkuYXNzaWduIj4gW2xpYi5pbmRpcmVjdC5hcnJheS5hc3NpZ25dPC9hPiB0byAiVGhlc2UgYXNzaWdubWVudCBvcGVyYXRvcnMgaGF2ZSI8L2xpPgo8L3VsPgo8cD48aT5bUHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgbW9kaWZpZWQgaW4gU2FudGEgQ3J1ejogZXhwbGljaXRseSBtYWtlCmNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvcnMgcHVibGljLCBpbnN0ZWFkIG9mCnJlbW92aW5nIHRoZW0uXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5LZWVwaW5nIHRoZSB2YWxhcnJheSBjb25zdHJ1Y3RvcnMgcHJpdmF0ZSBpcyB1bnRlbmFibGUuICBNZXJlbHkKbWFraW5nIHZhbGFycmF5IGEgZnJpZW5kIG9mIHRoZSBoZWxwZXIgY2xhc3NlcyBpc24ndCBnb29kIGVub3VnaCwKYmVjYXVzZSBhY2Nlc3MgdG8gdGhlIGNvcHkgY29uc3RydWN0b3IgaXMgY2hlY2tlZCBpbiB0aGUgdXNlcidzCmVudmlyb25tZW50LjwvcD4KCjxwPk1ha2luZyB0aGUgYXNzaWdubWVudCBvcGVyYXRvciBwdWJsaWMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0bwpzb2x2ZSB0aGlzIHByb2JsZW0uICBBIG1ham9yaXR5IG9mIHRoZSBMV0cgPGk+KHN0cmF3IHBvbGw6IDEzLTQpPC9pPgpiZWxpZXZlZCB3ZSBzaG91bGQgbWFrZSB0aGUgYXNzaWdubWVudCBvcGVyYXRvcnMgcHVibGljLCBpbiBhZGRpdGlvbgp0byB0aGUgY29weSBjb25zdHJ1Y3RvcnMsIGZvciByZWFzb25zIG9mIHN5bW1ldHJ5IGFuZCB1c2VyCmV4cGVjdGF0aW9uLjwvcD4KPGhyPgo8YSBuYW1lPSIyNTYiPjxoMz4yNTYuJm5ic3A7dHlwbyBpbiAyNy40LjQuMiwgcDE3OiBjb3B5X2V2ZW50IGRvZXMgbm90IGV4aXN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5tZW1iZXJzIj4gW2xpYi5iYXNpYy5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMSBBdWcgMjAwMDwvcD4KPHA+CjI3LjQuNC4yLCBwMTcgc2F5cwo8L3A+Cgo8YmxvY2txdW90ZT4KLTE3LSBCZWZvcmUgY29weWluZyBhbnkgcGFydHMgb2YgcmhzLCBjYWxscyBlYWNoIHJlZ2lzdGVyZWQgY2FsbGJhY2sKcGFpciAoZm4saW5kZXgpIGFzICgqZm4pKGVyYXNlX2V2ZW50LCp0aGlzLGluZGV4KS4gQWZ0ZXIgYWxsIHBhcnRzIGJ1dApleGNlcHRpb25zKCkgaGF2ZSBiZWVuIHJlcGxhY2VkLCBjYWxscyBlYWNoIGNhbGxiYWNrIHBhaXIgdGhhdCB3YXMKY29waWVkIGZyb20gcmhzIGFzICgqZm4pKGNvcHlfZXZlbnQsKnRoaXMsaW5kZXgpLiAKPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBuYW1lIGNvcHlfZXZlbnQgaXNuJ3QgZGVmaW5lZCBhbnl3aGVyZS4gVGhlIGludGVuZGVkIG5hbWUgd2FzCmNvcHlmbXRfZXZlbnQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIGNvcHlfZXZlbnQgd2l0aCBjb3B5Zm10X2V2ZW50IGluIHRoZSBuYW1lZCBwYXJhZ3JhcGguPC9wPgo8aHI+CjxhIG5hbWU9IjI1OSI+PGgzPjI1OS4mbmJzcDs8dHQ+YmFzaWNfc3RyaW5nOjpvcGVyYXRvcltdPC90dD4gYW5kIGNvbnN0IGNvcnJlY3RuZXNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmFjY2VzcyI+IFtsaWIuc3RyaW5nLmFjY2Vzc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0NocmlzIE5ld3RvbiAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgQXVnIDIwMDA8L3A+CjxwPgo8aT5QYXJhcGhyYXNlZCBmcm9tIGEgbWVzc2FnZSB0aGF0IENocmlzIE5ld3RvbiBwb3N0ZWQgdG8gY29tcC5zdGQuYysrOjwvaT4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCdzIGRlc2NyaXB0aW9uIG9mIDx0dD5iYXNpY19zdHJpbmcmbHQ7Jmd0Ozo6b3BlcmF0b3JbXTwvdHQ+CnNlZW1zIHRvIHZpb2xhdGUgY29uc3QgY29ycmVjdG5lc3MuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgKDIxLjMuNC8xKSBzYXlzIHRoYXQgIklmIDx0dD5wb3MgJmx0OyBzaXplKCk8L3R0PiwKcmV0dXJucyA8dHQ+ZGF0YSgpW3Bvc108L3R0Pi4iIFRoZSB0eXBlcyBkb24ndCB3b3JrLiAgVGhlCnJldHVybiB2YWx1ZSBvZiA8dHQ+ZGF0YSgpPC90dD4gaXMgPHR0PmNvbnN0IGNoYXJUKjwvdHQ+LCBidXQKPHR0Pm9wZXJhdG9yW108L3R0PiBoYXMgYSBub24tY29uc3QgdmVyc2lvbiB3aG9zZSByZXR1cm4gdHlwZSBpcyA8dHQ+cmVmZXJlbmNlPC90dD4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gc2VjdGlvbiAyMS4zLjQsIHBhcmFncmFwaCAxLCBjaGFuZ2UKIjx0dD5kYXRhKClbPGk+cG9zPC9pPl08L3R0PiIgdG8gIjx0dD4qKGJlZ2luKCkgKwo8aT5wb3M8L2k+KTwvdHQ+Ii4KPC9wPgo8aHI+CjxhIG5hbWU9IjI2MCI+PGgzPjI2MC4mbmJzcDtJbmNvbnNpc3RlbnQgcmV0dXJuIHR5cGUgb2YgPHR0PmlzdHJlYW1faXRlcmF0b3I6Om9wZXJhdG9yKysoaW50KTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjUuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtLml0ZXJhdG9yLm9wcyI+IFtsaWIuaXN0cmVhbS5pdGVyYXRvci5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgQXVnIDIwMDA8L3A+CjxwPlRoZSBzeW5vcHNpcyBvZiBpc3RyZWFtX2l0ZXJhdG9yOjpvcGVyYXRvcisrKGludCkgaW4gMjQuNS4xIHNob3dzCml0IGFzIHJldHVybmluZyB0aGUgaXRlcmF0b3IgYnkgdmFsdWUuIDI0LjUuMS4yLCBwNSBzaG93cyB0aGUgc2FtZQpvcGVyYXRvciBhcyByZXR1cm5pbmcgdGhlIGl0ZXJhdG9yIGJ5IHJlZmVyZW5jZS4gVGhhdCdzIGluY29ycmVjdApnaXZlbiB0aGUgRWZmZWN0cyBjbGF1c2UgYmVsb3cgKHNpbmNlIGEgdGVtcG9yYXJ5IGlzIHJldHVybmVkKS4gVGhlCmAmYW1wOycgaXMgcHJvYmFibHkganVzdCBhIHR5cG8uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZGVjbGFyYXRpb24gaW4gMjQuNS4xLjIsIHA1IGZyb208L3A+CiA8cHJlPiBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IG9wZXJhdG9yKysoaW50KTsKIDwvcHJlPgo8cD50bzwvcD4KIDxwcmU+IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7IG9wZXJhdG9yKysoaW50KTsKIDwvcHJlPgo8cD4odGhhdCBpcywgcmVtb3ZlIHRoZSBgJmFtcDsnKS48L3A+Cjxocj4KPGEgbmFtZT0iMjYxIj48aDM+MjYxLiZuYnNwO01pc3NpbmcgZGVzY3JpcHRpb24gb2YgPHR0PmlzdHJlYW1faXRlcmF0b3I6Om9wZXJhdG9yIT08L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbS5pdGVyYXRvci5vcHMiPiBbbGliLmlzdHJlYW0uaXRlcmF0b3Iub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IEF1ZyAyMDAwPC9wPgo8cD4KMjQuNS4xLCBwMyBsaXN0cyB0aGUgc3lub3BzaXMgZm9yCjwvcD4KCjxwcmU+ICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIERpc3RhbmNlJmd0OwogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7JmFtcDsgeSk7CjwvcHJlPgoKPHA+CmJ1dCB0aGVyZSBpcyBubyBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcGVyYXRvciBkb2VzIChpLmUuLCBubyBFZmZlY3RzCm9yIFJldHVybnMgY2xhdXNlKSBpbiAyNC41LjEuMi4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgcGFyYWdyYXBoIDcgdG8gdGhlIGVuZCBvZiBzZWN0aW9uIDI0LjUuMS4yIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0Ogo8L3A+Cgo8cHJlPiAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBEaXN0YW5jZSZndDsKICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvciZsdDtULGNoYXJULHRyYWl0cyxEaXN0YW5jZSZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IHkpOwo8L3ByZT4KCjxwPi03LSBSZXR1cm5zOiAhKHggPT0geSkuPC9wPgo8aHI+CjxhIG5hbWU9IjI2MiI+PGgzPjI2Mi4mbmJzcDtCaXRtYXNrIG9wZXJhdG9yIH4gc3BlY2lmaWVkIGluY29ycmVjdGx5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuMy4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5iaXRtYXNrLnR5cGVzIj4gW2xpYi5iaXRtYXNrLnR5cGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDMgU2VwIDIwMDA8L3A+CjxwPgpUaGUgfiBvcGVyYXRpb24gc2hvdWxkIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIGNhc3QgdG8gaW50X3R5cGUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDE3LjMuMi4xLjIgW2xpYi5iaXRtYXNrLnR5cGVzXSBvcGVyYXRvcn4gZnJvbToKPC9wPgoKPHByZT4gICBiaXRtYXNrIG9wZXJhdG9yfiAoIGJpdG1hc2sgWCApCiAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3QmbHQ7IGJpdG1hc2smZ3Q7KHN0YXRpY19jYXN0Jmx0O2ludF90eXBlJmd0Oyh+IFgpKTsgfQo8L3ByZT4KCjxwPgp0bzoKPC9wPgoKPHByZT4gICBiaXRtYXNrIG9wZXJhdG9yfiAoIGJpdG1hc2sgWCApCiAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3QmbHQ7IGJpdG1hc2smZ3Q7KH5zdGF0aWNfY2FzdCZsdDtpbnRfdHlwZSZndDsoWCkpOyB9CjwvcHJlPgo8aHI+CjxhIG5hbWU9IjI2MyI+PGgzPjI2My4mbmJzcDtTZXZlcmUgcmVzdHJpY3Rpb24gb24gPHR0PmJhc2ljX3N0cmluZzwvdHQ+IHJlZmVyZW5jZSBjb3VudGluZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0tldmxpbiBIZW5uZXkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDQgU2VwIDIwMDA8L3A+CjxwPgpUaGUgbm90ZSBpbiBwYXJhZ3JhcGggNiBzdWdnZXN0cyB0aGF0IHRoZSBpbnZhbGlkYXRpb24gcnVsZXMgZm9yCnJlZmVyZW5jZXMsIHBvaW50ZXJzLCBhbmQgaXRlcmF0b3JzIGluIHBhcmFncmFwaCA1IHBlcm1pdCBhIHJlZmVyZW5jZS0KY291bnRlZCBpbXBsZW1lbnRhdGlvbiAoYWN0dWFsbHksIGFjY29yZGluZyB0byBwYXJhZ3JhcGggNiwgdGhleSBwZXJtaXQKYSAicmVmZXJlbmNlIGNvdW50ZWQgaW1wbGVtZW50YXRpb24iLCBidXQgdGhpcyBpcyBhIG1pbm9yIGVkaXRvcmlhbCBmaXgpLgo8L3A+Cgo8cD4KSG93ZXZlciwgdGhlIGxhc3Qgc3ViLWJ1bGxldCBpcyBzbyB3b3JkZWQgYXMgdG8gbWFrZSBhIHJlZmVyZW5jZS1jb3VudGVkCmltcGxlbWVudGF0aW9uIHVudmlhYmxlLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgbm9uZSBvZiB0aGUKY29uZGl0aW9ucyBmb3IgaXRlcmF0b3IgaW52YWxpZGF0aW9uIGFyZSBzYXRpc2ZpZWQ6CjwvcD4KCjxwcmU+ICAgIC8vIGZpcnN0IGV4YW1wbGU6ICIqKioqKioqKioqKioqKioqKioqIiBzaG91bGQgYmUgcHJpbnRlZCB0d2ljZQogICAgc3RyaW5nIG9yaWdpbmFsID0gInNvbWUgYXJiaXRyYXJ5IHRleHQiLCBjb3B5ID0gb3JpZ2luYWw7CiAgICBjb25zdCBzdHJpbmcgJmFtcDsgYWxpYXMgPSBvcmlnaW5hbDsKCiAgICBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGkgPSBhbGlhcy5iZWdpbigpLCBlID0gYWxpYXMuZW5kKCk7CiAgICBmb3Ioc3RyaW5nOjppdGVyYXRvciBqID0gb3JpZ2luYWwuYmVnaW4oKTsgaiAhPSBvcmlnaW5hbC5lbmQoKTsgKytqKQogICAgICAgICpqID0gJyonOwogICAgd2hpbGUoaSAhPSBlKQogICAgICAgIGNvdXQgJmx0OyZsdDsgKmkrKzsKICAgIGNvdXQgJmx0OyZsdDsgZW5kbDsKICAgIGNvdXQgJmx0OyZsdDsgb3JpZ2luYWwgJmx0OyZsdDsgZW5kbDsKPC9wcmU+Cgo8cD4KU2ltaWxhcmx5LCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CjwvcD4KCjxwcmU+ICAgIC8vIHNlY29uZCBleGFtcGxlOiAic29tZSBhcmJpdHJhcnkgdGV4dCIgc2hvdWxkIGJlIHByaW50ZWQgb3V0CiAgICBzdHJpbmcgb3JpZ2luYWwgPSAic29tZSBhcmJpdHJhcnkgdGV4dCIsIGNvcHkgPSBvcmlnaW5hbDsKICAgIGNvbnN0IHN0cmluZyAmYW1wOyBhbGlhcyA9IG9yaWdpbmFsOwoKICAgIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgaSA9IGFsaWFzLmJlZ2luKCk7CiAgICBvcmlnaW5hbC5iZWdpbigpOwogICAgd2hpbGUoaSAhPSBhbGlhcy5lbmQoKSkKICAgICAgICBjb3V0ICZsdDsmbHQ7ICppKys7CjwvcHJlPgoKPHA+CkkgaGF2ZSB0ZXN0ZWQgdGhpcyBvbiB0aHJlZSBzdHJpbmcgaW1wbGVtZW50YXRpb25zLCB0d28gb2Ygd2hpY2ggd2VyZQpyZWZlcmVuY2UgY291bnRlZC4gVGhlIHJlZmVyZW5jZS1jb3VudGVkIGltcGxlbWVudGF0aW9ucyBnYXZlCiJzdXJwcmlzaW5nIGJlaGF2aW9yIiBiZWNhdXNlIHRoZXkgaW52YWxpZGF0ZWQgaXRlcmF0b3JzIG9uCnRoZSBmaXJzdCBjYWxsIHRvIG5vbi1jb25zdCBiZWdpbiBzaW5jZSBjb25zdHJ1Y3Rpb24uIFRoZSBjdXJyZW50CndvcmRpbmcgZG9lcyBub3QgcGVybWl0IHN1Y2ggaW52YWxpZGF0aW9uIGJlY2F1c2UgaXQgZG9lcyBub3QgdGFrZQppbnRvIGFjY291bnQgdGhlIGZpcnN0IGNhbGwgc2luY2UgY29uc3RydWN0aW9uLCBvbmx5IHRoZSBmaXJzdCBjYWxsCnNpbmNlIHZhcmlvdXMgbWVtYmVyIGFuZCBub24tbWVtYmVyIGZ1bmN0aW9uIGNhbGxzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZm9sbG93aW5nIHNlbnRlbmNlIGluIDIxLjMgcGFyYWdyYXBoIDUgZnJvbQo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIFN1YnNlcXVlbnQgdG8gYW55IG9mIHRoZSBhYm92ZSB1c2VzIGV4Y2VwdCB0aGUgZm9ybXMgb2YgaW5zZXJ0KCkgYW5kCiAgICBlcmFzZSgpIHdoaWNoIHJldHVybiBpdGVyYXRvcnMsIHRoZSBmaXJzdCBjYWxsIHRvIG5vbi1jb25zdCBtZW1iZXIKICAgIGZ1bmN0aW9ucyBvcGVyYXRvcltdKCksIGF0KCksIGJlZ2luKCksIHJiZWdpbigpLCBlbmQoKSwgb3IgcmVuZCgpLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgogICAgRm9sbG93aW5nIGNvbnN0cnVjdGlvbiBvciBhbnkgb2YgdGhlIGFib3ZlIHVzZXMsIGV4Y2VwdCB0aGUgZm9ybXMgb2YKICAgIGluc2VydCgpIGFuZCBlcmFzZSgpIHRoYXQgcmV0dXJuIGl0ZXJhdG9ycywgdGhlIGZpcnN0IGNhbGwgdG8gbm9uLQogICAgY29uc3QgbWVtYmVyIGZ1bmN0aW9ucyBvcGVyYXRvcltdKCksIGF0KCksIGJlZ2luKCksIHJiZWdpbigpLCBlbmQoKSwKICAgIG9yIHJlbmQoKS4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjI2NCI+PGgzPjI2NC4mbmJzcDtBc3NvY2lhdGl2ZSBjb250YWluZXIgPHR0Pmluc2VydChpLCBqKTwvdHQ+IGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzIGFyZSBub3QgZmVhc2libGUuPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKb2huIFBvdHRlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNyBTZXAgMjAwMDwvcD4KPHA+ClRhYmxlIDY5IHJlcXVpcmVzIGxpbmVhciB0aW1lIGlmIFtpLCBqKSBpcyBzb3J0ZWQuICBTb3J0ZWQgaXMgbmVjZXNzYXJ5IGJ1dCBub3Qgc3VmZmljaWVudC4KQ29uc2lkZXIgaW5zZXJ0aW5nIGEgc29ydGVkIHJhbmdlIG9mIGV2ZW4gaW50ZWdlcnMgaW50byBhIHNldCZsdDtpbnQmZ3Q7IGNvbnRhaW5pbmcgdGhlIG9kZAppbnRlZ2VycyBpbiB0aGUgc2FtZSByYW5nZS4KPC9wPgoKPHA+PGk+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTAyIj4xMDI8L2E+PC9pPjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gVGFibGUgNjksIGluIHNlY3Rpb24gMjMuMS4yLCBjaGFuZ2UgdGhlIGNvbXBsZXhpdHkgY2xhdXNlIGZvcgppbnNlcnRpb24gb2YgYSByYW5nZSBmcm9tICJOIGxvZyhzaXplKCkgKyBOKSAoTiBpcyB0aGUgZGlzdGFuY2UKZnJvbSBpIHRvIGopIGluIGdlbmVyYWw7IGxpbmVhciBpZiBbaSwgaikgaXMgc29ydGVkIGFjY29yZGluZyB0bwp2YWx1ZV9jb21wKCkiIHRvICJOIGxvZyhzaXplKCkgKyBOKSwgd2hlcmUgTiBpcyB0aGUgZGlzdGFuY2UKZnJvbSBpIHRvIGoiLgo8L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogTWlub3IgZml4IGluIHByb3Bvc2VkIHJlc29sdXRpb246IGZpeGVkIHVuYmFsYW5jZWQKcGFyZW5zIGluIHRoZSByZXZpc2VkIHdvcmRpbmcuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRlc3RpbmcgZm9yIHZhbGlkIGluc2VydGlvbnMgY291bGQgYmUgbGVzcyBlZmZpY2llbnQgdGhhbiBzaW1wbHkKaW5zZXJ0aW5nIHRoZSBlbGVtZW50cyB3aGVuIHRoZSByYW5nZSBpcyBub3QgYm90aCBzb3J0ZWQgYW5kIGJldHdlZW4KdHdvIGFkamFjZW50IGV4aXN0aW5nIGVsZW1lbnRzOyB0aGlzIGNvdWxkIGJlIGEgUU9JIGlzc3VlLgo8L3A+Cgo8cD4gClRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3RoZXIgb3B0aW9uczogKGEpIHNwZWNpZnlpbmcgdGhhdCB0aGUKY29tcGxleGl0eSB3YXMgbGluZWFyIGlmIFtpLCBqKSBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRvIHZhbHVlX2NvbXAoKQphbmQgYmV0d2VlbiB0d28gYWRqYWNlbnQgZXhpc3RpbmcgZWxlbWVudHM7IG9yIChiKSBjaGFuZ2luZyB0bwpLbG9nKHNpemUoKSArIE4pICsgKE4gLSBLKSAoTiBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpIHRvIGogYW5kIEsgaXMgdGhlCm51bWJlciBvZiBlbGVtZW50cyB3aGljaCBkbyBub3QgaW5zZXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcmV2aW91cwplbGVtZW50IGZyb20gW2ksIGopIGluY2x1ZGluZyB0aGUgZmlyc3QpLiAgVGhlIExXRyBmZWx0IHRoYXQsIHNpbmNlCndlIGNhbid0IGd1YXJhbnRlZSBsaW5lYXIgdGltZSBjb21wbGV4aXR5IHdoZW5ldmVyIHRoZSByYW5nZSB0byBiZQppbnNlcnRlZCBpcyBzb3J0ZWQsIGl0J3MgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aCB0byBzYXkgdGhhdCBpdCdzCmxpbmVhciBpbiBzb21lIHNwZWNpYWwgY2FzZXMuCjwvcD4KPGhyPgo8YSBuYW1lPSIyNjUiPjxoMz4yNjUuJm5ic3A7c3RkOjpwYWlyOjpwYWlyKCkgZWZmZWN0cyBvdmVybHkgcmVzdHJpY3RpdmU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnBhaXJzIj4gW2xpYi5wYWlyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMSBTZXAgMjAwMDwvcD4KPHA+CkkgZG9uJ3Qgc2VlIGFueSByZXF1aXJlbWVudHMgb24gdGhlIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUKc3RkOjpwYWlyIGNvbnRhaW5lciBpbiAyMC4yLjIuIEZyb20gdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgbWVtYmVyCmZ1bmN0aW9ucyBpdCBhcHBlYXJzIHRoYXQgdGhleSBtdXN0IGF0IGxlYXN0IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZgoyMC4xLjMgW2xpYi5jb3B5Y29uc3RydWN0aWJsZV0gYW5kIDIwLjEuNCBbbGliLmRlZmF1bHQuY29uLnJlcV0sIGFuZCBpbgp0aGUgY2FzZSBvZiB0aGUgW2luXWVxdWFsaXR5IG9wZXJhdG9ycyBhbHNvIHRoZSByZXF1aXJlbWVudHMgb2YgMjAuMS4xCltsaWIuZXF1YWxpdHljb21wYXJhYmxlXSBhbmQgMjAuMS4yIFtsaWIubGVzc3RoYW5jb21wYXJhYmxlXS4KPC9wPgoKPHA+CkkgYmVsaWV2ZSB0aGF0IHRoZSB0aGUgQ29weUNvbnN0cnVjdGlibGUgcmVxdWlyZW1lbnQgaXMgdW5uZWNlc3NhcnkgaW4KdGhlIGNhc2Ugb2YgMjAuMi4yLCBwMi4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgRWZmZWN0cyBjbGF1c2UgaW4gMjAuMi4yLCBwMiBmcm9tPC9wPgoKPGJsb2NrcXVvdGU+Ci0yLSA8Yj5FZmZlY3RzPC9iPjogSW5pdGlhbGl6ZXMgaXRzIG1lbWJlcnMgYXMgaWYgaW1wbGVtZW50ZWQ6IDx0dD4gcGFpcigpIDoKZmlyc3QoVDEoKSksIHNlY29uZChUMigpKSB7fSA8L3R0Pgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgotMi0gPGI+RWZmZWN0czwvYj46IEluaXRpYWxpemVzIGl0cyBtZW1iZXJzIGFzIGlmIGltcGxlbWVudGVkOiA8dHQ+IHBhaXIoKSA6CmZpcnN0KCksIHNlY29uZCgpIHt9IDwvdHQ+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBleGlzdGluZyBzcGVjaWZpY2F0aW9uIG9mIHBhaXIncyBjb25zdHJ1Y3RvciBhcHBlYXJzIHRvIGJlIGEKaGlzdG9yaWNhbCBhcnRpZmFjdDogdGhlcmUgd2FzIGNvbmNlcm4gdGhhdCBwYWlyJ3MgbWVtYmVycyBiZSBwcm9wZXJseQp6ZXJvLWluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgYnVpbHQtaW4gdHlwZXMuICBBdCBvbmUgdGltZSB0aGVyZSB3YXMKdW5jZXJ0YWludHkgYWJvdXQgd2hldGhlciB0aGV5IHdvdWxkIGJlIHplcm8taW5pdGlhbGl6ZWQgaWYgdGhlCmRlZmF1bHQgY29uc3RydWN0b3Igd2FzIHdyaXR0ZW4gdGhlIG9idmlvdXMgd2F5LiAgVGhpcyBoYXMgYmVlbgpjbGFyaWZpZWQgYnkgY29yZSBpc3N1ZSAxNzgsIGFuZCB0aGVyZSBpcyBubyBsb25nZXIgYW55IGRvdWJ0IHRoYXQKdGhlIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiBpcyBjb3JyZWN0LjwvcD4KPGhyPgo8YSBuYW1lPSIyNjYiPjxoMz4yNjYuJm5ic3A7YmFkX2V4Y2VwdGlvbjo6fmJhZF9leGNlcHRpb24oKSBtaXNzaW5nIEVmZmVjdHMgY2xhdXNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNy4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5iYWQuZXhjZXB0aW9uIj4gW2xpYi5iYWQuZXhjZXB0aW9uXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IFNlcCAyMDAwPC9wPgo8cD4KVGhlIHN5bm9wc2lzIGZvciBzdGQ6OmJhZF9leGNlcHRpb24gbGlzdHMgdGhlIGZ1bmN0aW9uIH5iYWRfZXhjZXB0aW9uKCkKYnV0IHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgKHRoZSBFZmZlY3RzCmNsYXVzZSBpcyBtaXNzaW5nKS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpSZW1vdmUgdGhlIGRlc3RydWN0b3IgZnJvbSB0aGUgY2xhc3Mgc3lub3BzZXMgb2YgCjx0dD5iYWRfYWxsb2M8L3R0PiAoPGZvbnQgY29sb3I9InJlZCI+MTguNC4yLjE8L2ZvbnQ+KSwKPHR0PmJhZF9jYXN0PC90dD4gKDE4LjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmFsbG9jLmVycm9ycyI+IFtsaWIuYWxsb2MuZXJyb3JzXTwvYT4pLAo8dHQ+YmFkX3R5cGVpZDwvdHQ+ICg8Zm9udCBjb2xvcj0icmVkIj4xOC41LjM8L2ZvbnQ+KSwKYW5kIDx0dD5iYWRfZXhjZXB0aW9uPC90dD4gKDE4LjcuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuYmFkLmV4Y2VwdGlvbiI+IFtsaWIuYmFkLmV4Y2VwdGlvbl08L2E+KS4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoaXMgaXMgYSBnZW5lcmFsIHByb2JsZW0gd2l0aCB0aGUgZXhjZXB0aW9uIGNsYXNzZXMgaW4gY2xhdXNlIDE4LiAKVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZSBkZXN0cnVjdG9ycyBmcm9tIHRoZSBjbGFzcwpzeW5vcHNlcywgcmF0aGVyIHRoYW4gdG8gZG9jdW1lbnQgdGhlIGRlc3RydWN0b3JzJyBiZWhhdmlvciwgYmVjYXVzZQpyZW1vdmluZyB0aGVtIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGhvdyBleGNlcHRpb24gY2xhc3NlcyBhcmUKZGVzY3JpYmVkIGluIGNsYXVzZSAxOS4KPC9wPgo8aHI+CjxhIG5hbWU9IjI2OCI+PGgzPjI2OC4mbmJzcDtUeXBvIGluIGxvY2FsZSBzeW5vcHNpczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzUgT2N0IDIwMDA8L3A+CjxwPlRoZSBzeW5vcHNpcyBvZiB0aGUgY2xhc3Mgc3RkOjpsb2NhbGUgaW4gMjIuMS4xIGNvbnRhaW5zIHR3byB0eXBvczoKdGhlIHNlbWljb2xvbnMgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgZGVmYXVsdCBjdG9yCmxvY2FsZTo6bG9jYWxlKCkgYW5kIHRoZSBjb3B5IGN0b3IgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJmFtcDspCmFyZSBtaXNzaW5nLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhlIG1pc3Npbmcgc2VtaWNvbG9ucywgaS5lLiwgY2hhbmdlPC9wPgoKPHByZT4gICAgLy8gIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CiAgICAgICAgbG9jYWxlKCkgdGhyb3coKQogICAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmYW1wOyBvdGhlcikgdGhyb3coKQo8L3ByZT4KCjxwPmluIHRoZSBzeW5vcHNpcyBpbiAyMi4xLjEgdG88L3A+Cgo8cHJlPiAgICAvLyAgY29uc3RydWN0L2NvcHkvZGVzdHJveToKICAgICAgICBsb2NhbGUoKSB0aHJvdygpOwogICAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmYW1wOyBvdGhlcikgdGhyb3coKTsKPC9wcmU+Cjxocj4KPGEgbmFtZT0iMjcwIj48aDM+MjcwLiZuYnNwO0JpbmFyeSBzZWFyY2ggcmVxdWlyZW1lbnRzIG92ZXJseSBzdHJpY3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYmluYXJ5LnNlYXJjaCI+IFtsaWIuYWxnLmJpbmFyeS5zZWFyY2hdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggT2N0IDIwMDA8L3A+CjxwPgpFYWNoIG9mIHRoZSBmb3VyIGJpbmFyeSBzZWFyY2ggYWxnb3JpdGhtcyAobG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kLAplcXVhbF9yYW5nZSwgYmluYXJ5X3NlYXJjaCkgaGFzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBwYXNzIGEKY29tcGFyaXNvbiBmdW5jdGlvbiBvYmplY3QuICBBY2NvcmRpbmcgdG8gMjUuMywgcGFyYWdyYXBoIDIsIHRoYXQKY29tcGFyaXNvbiBmdW5jdGlvbiBvYmplY3QgaGFzIHRvIGJlIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcuCjwvcD4KCjxwPgpUaGlzIHJlcXVpcmVtZW50IGlzIHNsaWdodGx5IHRvbyBzdHJpY3QuICBTdXBwb3NlIHdlIGFyZSBzZWFyY2hpbmcKdGhyb3VnaCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgb2JqZWN0cyBvZiB0eXBlIFgsIHdoZXJlIFggaXMgc29tZQpsYXJnZSByZWNvcmQgd2l0aCBhbiBpbnRlZ2VyIGtleS4gIFdlIG1pZ2h0IHJlYXNvbmFibHkgd2FudCB0byBsb29rCnVwIGEgcmVjb3JkIGJ5IGtleSwgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCB3YW50IHRvIHdyaXRlIHNvbWV0aGluZwpsaWtlIHRoaXM6CjwvcD4KPHByZT4gICAgc3RydWN0IGtleV9jb21wIHsKICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFgmYW1wOyB4LCBpbnQgbikgY29uc3QgewogICAgICAgIHJldHVybiB4LmtleSgpICZsdDsgbjsKICAgICAgfQogICAgfQoKICAgIHN0ZDo6bG93ZXJfYm91bmQoZmlyc3QsIGxhc3QsIDQ3LCBrZXlfY29tcCgpKTsKPC9wcmU+Cgo8cD4Ka2V5X2NvbXAgaXMgbm90IGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcsIGJ1dCB0aGVyZSBpcyBubyByZWFzb24gdG8KcHJvaGliaXQgaXRzIHVzZSBpbiBsb3dlcl9ib3VuZC4KPC9wPgoKPHA+ClRoZXJlJ3Mgbm8gZGlmZmljdWx0eSBpbiBpbXBsZW1lbnRpbmcgbG93ZXJfYm91bmQgc28gdGhhdCBpdCBhbGxvd3MKdGhlIHVzZSBvZiBzb21ldGhpbmcgbGlrZSBrZXlfY29tcC4gIChJdCB3aWxsIHByb2JhYmx5IHdvcmsgdW5sZXNzIGFuCmltcGxlbWVudG9yIHRha2VzIHNwZWNpYWwgcGFpbnMgdG8gZm9yYmlkIGl0LikgIFdoYXQncyBkaWZmaWN1bHQgaXMKZm9ybXVsYXRpbmcgbGFuZ3VhZ2UgaW4gdGhlIHN0YW5kYXJkIHRvIHNwZWNpZnkgd2hhdCBraW5kIG9mCmNvbXBhcmlzb24gZnVuY3Rpb24gaXMgYWNjZXB0YWJsZS4gIFdlIG5lZWQgYSBub3Rpb24gdGhhdCdzIHNsaWdodGx5Cm1vcmUgZ2VuZXJhbCB0aGFuIHRoYXQgb2YgYSBzdHJpY3Qgd2VhayBvcmRlcmluZywgb25lIHRoYXQgY2FuIGVuY29tcGFzcwphIGNvbXBhcmlzb24gZnVuY3Rpb24gdGhhdCBpbnZvbHZlcyBkaWZmZXJlbnQgdHlwZXMuICBFeHByZXNzaW5nIHRoYXQKbm90aW9uIG1heSBiZSBjb21wbGljYXRlZC4KPC9wPgoKPHA+PGk+QWRkaXRpb25hbCBxdWVzdGlvbnMgcmFpc2VkIGF0IHRoZSBUb3JvbnRvIG1lZXRpbmc6PC9pPjwvcD4KPHVsPgo8bGk+IERvIHdlIHJlYWxseSB3YW50IHRvIHNwZWNpZnkgd2hhdCBvcmRlcmluZyB0aGUgaW1wbGVtZW50b3IgbXVzdAogICAgIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG9iamVjdD8gIFRoZSBzdGFuZGFyZCBnaXZlcyAKICAgICBzcGVjaWZpYyBleHByZXNzaW9ucyB3aGVuIGRlc2NyaWJpbmcgdGhlc2UgYWxnb3JpdGhtcywgYnV0IGl0IGFsc28KICAgICBzYXlzIHRoYXQgb3RoZXIgZXhwcmVzc2lvbnMgKHdpdGggZGlmZmVyZW50IGFyZ3VtZW50IG9yZGVyKSBhcmUKICAgICBlcXVpdmFsZW50LjwvbGk+CjxsaT4gSWYgd2UgYXJlIHNwZWNpZnlpbmcgb3JkZXJpbmcsIG5vdGUgdGhhdCB0aGUgc3RhbmRhcmQgdXNlcyBib3RoCiAgICAgb3JkZXJpbmdzIHdoZW4gZGVzY3JpYmluZyA8dHQ+ZXF1YWxfcmFuZ2U8L3R0Pi48L2xpPgo8bGk+IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlcXVpcmluZyB0aGVzZSBhbGdvcml0aG1zIHRvIHdvcmsgcHJvcGVybHkKICAgICB3aGVuIHBhc3NlZCBhIGJpbmFyeSBmdW5jdGlvbiBvYmplY3Qgd2hvc2UgdHdvIGFyZ3VtZW50IHR5cGVzCiAgICAgYXJlIG5vdCB0aGUgc2FtZSwgb3IgYXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVxdWlyZW1lbnRzIHdoZW4KICAgICB0aGV5IGFyZSBwYXNzZWQgYSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdpdGggc2V2ZXJhbCBvdmVybG9hZGVkCiAgICAgdmVyc2lvbnMgb2YgPHR0Pm9wZXJhdG9yKCk8L3R0Pj88L2xpPgo8bGk+IFRoZSBkZWZpbml0aW9uIG9mIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcgZG9lcyBub3QgYXBwZWFyIHRvIGdpdmUKICAgICBhbnkgZ3VpZGFuY2Ugb24gaXNzdWVzIG9mIG92ZXJsb2FkaW5nOyBpdCBvbmx5IGRpc2N1c3NlcyBleHByZXNzaW9ucywKICAgICBhbmQgYWxsIG9mIHRoZSB2YWx1ZXMgaW4gdGhlc2UgZXhwcmVzc2lvbnMgYXJlIG9mIHRoZSBzYW1lIHR5cGUuCiAgICAgU29tZSBjbGFyaWZpY2F0aW9uIHdvdWxkIHNlZW0gdG8gYmUgaW4gb3JkZXIuPC9saT4KPC91bD4KCjxwPjxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBmcm9tIENvcGVuaGFnZW46PC9pPjwvcD4KPHVsPgo8bGk+SXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCB0aGVyZSBpcyBhIHJlYWwgZGVmZWN0IGhlcmU6IGlmCnRoZSBwcmVkaWNhdGUgaXMgbWVyZWx5IHJlcXVpcmVkIHRvIGJlIGEgU3RyaWN0IFdlYWsgT3JkZXJpbmcsIHRoZW4KaXQncyBwb3NzaWJsZSB0byBwYXNzIGluIGEgZnVuY3Rpb24gb2JqZWN0IHdpdGggYW4gb3ZlcmxvYWRlZApvcGVyYXRvcigpLCB3aGVyZSB0aGUgdmVyc2lvbiB0aGF0J3MgYWN0dWFsbHkgY2FsbGVkIGRvZXMgc29tZXRoaW5nCmNvbXBsZXRlbHkgaW5hcHByb3ByaWF0ZS4gIChTdWNoIGFzIHJldHVybmluZyBhIHJhbmRvbSB2YWx1ZS4pPC9saT4KCjxsaT5BbiBhbHRlcm5hdGl2ZSBmb3JtdWxhdGlvbiB3YXMgcHJlc2VudGVkIGluIGEgcGFwZXIgZGlzdHJpYnV0ZWQgYnkKRGF2aWQgQWJyYWhhbXMgYXQgdGhlIG1lZXRpbmcsICJCaW5hcnkgU2VhcmNoIHdpdGggSGV0ZXJvZ2VuZW91cwpDb21wYXJpc29uIiwgSjE2LTAxLzAwMjcgPSBXRzIxIE4xMzEzOiBJbnN0ZWFkIG9mIHZpZXdpbmcgdGhlCnByZWRpY2F0ZSBhcyBhIFN0cmljdCBXZWFrIE9yZGVyaW5nIGFjdGluZyBvbiBhIHNvcnRlZCBzZXF1ZW5jZSwgdmlldwp0aGUgcHJlZGljYXRlL3ZhbHVlIHBhaXIgYXMgc29tZXRoaW5nIHRoYXQgcGFydGl0aW9ucyBhIHNlcXVlbmNlLgpUaGlzIGlzIGFsbW9zdCBlcXVpdmFsZW50IHRvIHNheWluZyB0aGF0IHdlIHNob3VsZCB2aWV3IGJpbmFyeSBzZWFyY2gKYXMgaWYgd2UgYXJlIGdpdmVuIGEgdW5hcnkgcHJlZGljYXRlIGFuZCBhIHNlcXVlbmNlLCBzdWNoIHRoYXQgZigqcCkKaXMgdHJ1ZSBmb3IgYWxsIHAgYmVsb3cgYSBzcGVjaWZpYyBwb2ludCBhbmQgZmFsc2UgZm9yIGFsbCBwIGFib3ZlIGl0LgpUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBiYXNlZCBvbiB0aGF0IGFsdGVybmF0aXZlIGZvcm11bGF0aW9uLjwvbGk+CjwvdWw+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkNoYW5nZSAyNS4zIFtsaWIuYWxnLnNvcnRpbmddIHBhcmFncmFwaCAzIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgMyBGb3IgYWxsIGFsZ29yaXRobXMgdGhhdCB0YWtlIENvbXBhcmUsIHRoZXJlIGlzIGEgdmVyc2lvbiB0aGF0IHVzZXMKICBvcGVyYXRvciZsdDsgaW5zdGVhZC4gVGhhdCBpcywgY29tcCgqaSwgKmopICE9IGZhbHNlIGRlZmF1bHRzIHRvICppICZsdDsKICAqaiAhPSBmYWxzZS4gRm9yIHRoZSBhbGdvcml0aG1zIHRvIHdvcmsgY29ycmVjdGx5LCBjb21wIGhhcyB0bwogIGluZHVjZSBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nIG9uIHRoZSB2YWx1ZXMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDMgRm9yIGFsbCBhbGdvcml0aG1zIHRoYXQgdGFrZSBDb21wYXJlLCB0aGVyZSBpcyBhIHZlcnNpb24gdGhhdCB1c2VzCiAgb3BlcmF0b3ImbHQ7IGluc3RlYWQuIFRoYXQgaXMsIGNvbXAoKmksICpqKSAhPSBmYWxzZSBkZWZhdWx0cyB0byAqaQogICZsdDsgKmogIT0gZmFsc2UuIEZvciBhbGdvcml0aG1zIG90aGVyIHRoYW4gdGhvc2UgZGVzY3JpYmVkIGluCiAgbGliLmFsZy5iaW5hcnkuc2VhcmNoICgyNS4zLjMpIHRvIHdvcmsgY29ycmVjdGx5LCBjb21wIGhhcyB0byBpbmR1Y2UKICBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nIG9uIHRoZSB2YWx1ZXMuCjwvYmxvY2txdW90ZT4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHBhcmFncmFwaCBhZnRlciAyNS4zIFtsaWIuYWxnLnNvcnRpbmddIHBhcmFncmFwaCA1OjwvcD4KCjxibG9ja3F1b3RlPgogIC02LSBBIHNlcXVlbmNlIFtzdGFydCwgZmluaXNoKSBpcyBwYXJ0aXRpb25lZCB3aXRoIHJlc3BlY3QgdG8gYW4KICBleHByZXNzaW9uIGYoZSkgaWYgdGhlcmUgZXhpc3RzIGFuIGludGVnZXIgbiBzdWNoIHRoYXQKICBmb3IgYWxsIDAgJmx0Oz0gaSAmbHQ7IGRpc3RhbmNlKHN0YXJ0LCBmaW5pc2gpLCBmKCooYmVnaW4raSkpIGlzIHRydWUgaWYKICBhbmQgb25seSBpZiBpICZsdDsgbi4KPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMyBbbGliLmFsZy5iaW5hcnkuc2VhcmNoXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIC0xLSBBbGwgb2YgdGhlIGFsZ29yaXRobXMgaW4gdGhpcyBzZWN0aW9uIGFyZSB2ZXJzaW9ucyBvZiBiaW5hcnkKICAgc2VhcmNoIGFuZCBhc3N1bWUgdGhhdCB0aGUgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgaXMgaW4gb3JkZXIKICAgYWNjb3JkaW5nIHRvIHRoZSBpbXBsaWVkIG9yIGV4cGxpY2l0IGNvbXBhcmlzb24gZnVuY3Rpb24uIFRoZXkgd29yawogICBvbiBub24tcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mCiAgIGNvbXBhcmlzb25zLCB3aGljaCB3aWxsIGJlIGxvZ2FyaXRobWljIGZvciBhbGwgdHlwZXMgb2YKICAgaXRlcmF0b3JzLiBUaGV5IGFyZSBlc3BlY2lhbGx5IGFwcHJvcHJpYXRlIGZvciByYW5kb20gYWNjZXNzCiAgIGl0ZXJhdG9ycywgYmVjYXVzZSB0aGVzZSBhbGdvcml0aG1zIGRvIGEgbG9nYXJpdGhtaWMgbnVtYmVyIG9mCiAgIHN0ZXBzIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlLiBGb3Igbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCiAgIHRoZXkgZXhlY3V0ZSBhIGxpbmVhciBudW1iZXIgb2Ygc3RlcHMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gQWxsIG9mIHRoZSBhbGdvcml0aG1zIGluIHRoaXMgc2VjdGlvbiBhcmUgdmVyc2lvbnMgb2YgYmluYXJ5CiAgICBzZWFyY2ggYW5kIGFzc3VtZSB0aGF0IHRoZSBzZXF1ZW5jZSBiZWluZyBzZWFyY2hlZCBpcyBwYXJ0aXRpb25lZAogICAgd2l0aCByZXNwZWN0IHRvIGFuIGV4cHJlc3Npb24gZm9ybWVkIGJ5IGJpbmRpbmcgdGhlIHNlYXJjaCBrZXkgdG8KICAgIGFuIGFyZ3VtZW50IG9mIHRoZSBpbXBsaWVkIG9yIGV4cGxpY2l0IGNvbXBhcmlzb24gZnVuY3Rpb24uIFRoZXkKICAgIHdvcmsgb24gbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIG1pbmltaXppbmcgdGhlIG51bWJlciBvZgogICAgY29tcGFyaXNvbnMsIHdoaWNoIHdpbGwgYmUgbG9nYXJpdGhtaWMgZm9yIGFsbCB0eXBlcyBvZgogICAgaXRlcmF0b3JzLiBUaGV5IGFyZSBlc3BlY2lhbGx5IGFwcHJvcHJpYXRlIGZvciByYW5kb20gYWNjZXNzCiAgICBpdGVyYXRvcnMsIGJlY2F1c2UgdGhlc2UgYWxnb3JpdGhtcyBkbyBhIGxvZ2FyaXRobWljIG51bWJlciBvZgogICAgc3RlcHMgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmUuIEZvciBub24tcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKICAgIHRoZXkgZXhlY3V0ZSBhIGxpbmVhciBudW1iZXIgb2Ygc3RlcHMuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4zLjMuMSBbbGliLmxvd2VyLmJvdW5kXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFR5cGUgVCBpcyBMZXNzVGhhbkNvbXBhcmFibGUKICAgIChsaWIubGVzc3RoYW5jb21wYXJhYmxlKS4gCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbiBlICZsdDsgdmFsdWUgb3IgY29tcChlLCB2YWx1ZSkKPC9ibG9ja3F1b3RlPgoKCjxwPlJlbW92ZSAyNS4zLjMuMSBbbGliLmxvd2VyLmJvdW5kXSBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTItIEVmZmVjdHM6IEZpbmRzIHRoZSBmaXJzdCBwb3NpdGlvbiBpbnRvIHdoaWNoIHZhbHVlIGNhbiBiZQogICAgaW5zZXJ0ZWQgd2l0aG91dCB2aW9sYXRpbmcgdGhlIG9yZGVyaW5nLiAKPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMy4yIFtsaWIudXBwZXIuYm91bmRdIHBhcmFncmFwaCAxIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTEtIFJlcXVpcmVzOiBUeXBlIFQgaXMgTGVzc1RoYW5Db21wYXJhYmxlIChsaWIubGVzc3RoYW5jb21wYXJhYmxlKS4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0xLSBSZXF1aXJlczogVGhlIGVsZW1lbnRzIGUgb2YgW2ZpcnN0LCBsYXN0KSBhcmUgcGFydGl0aW9uZWQgd2l0aAogICByZXNwZWN0IHRvIHRoZSBleHByZXNzaW9uICEodmFsdWUgJmx0OyBlKSBvciAhY29tcCh2YWx1ZSwgZSkKPC9ibG9ja3F1b3RlPgoKPHA+UmVtb3ZlIDI1LjMuMy4yIFtsaWIudXBwZXIuYm91bmRdIHBhcmFncmFwaCAyOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMi0gRWZmZWN0czogRmluZHMgdGhlIGZ1cnRoZXJtb3N0IHBvc2l0aW9uIGludG8gd2hpY2ggdmFsdWUgY2FuIGJlCiAgICBpbnNlcnRlZCB3aXRob3V0IHZpb2xhdGluZyB0aGUgb3JkZXJpbmcuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4zLjMuMyBbbGliLmVxdWFsLnJhbmdlXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFR5cGUgVCBpcyBMZXNzVGhhbkNvbXBhcmFibGUKICAgIChsaWIubGVzc3RoYW5jb21wYXJhYmxlKS4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0xLSBSZXF1aXJlczogVGhlIGVsZW1lbnRzIGUgb2YgW2ZpcnN0LCBsYXN0KSBhcmUgcGFydGl0aW9uZWQgd2l0aAogICByZXNwZWN0IHRvIHRoZSBleHByZXNzaW9ucyBlICZsdDsgdmFsdWUgYW5kICEodmFsdWUgJmx0OyBlKSBvcgogICBjb21wKGUsIHZhbHVlKSBhbmQgIWNvbXAodmFsdWUsIGUpLiAgQWxzbywgZm9yIGFsbCBlbGVtZW50cyBlIG9mCiAgIFtmaXJzdCwgbGFzdCksIGUgJmx0OyB2YWx1ZSBpbXBsaWVzICEodmFsdWUgJmx0OyBlKSBvciBjb21wKGUsCiAgIHZhbHVlKSBpbXBsaWVzICFjb21wKHZhbHVlLCBlKQo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMy4zLjMgW2xpYi5lcXVhbC5yYW5nZV0gcGFyYWdyYXBoIDIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTItIEVmZmVjdHM6IEZpbmRzIHRoZSBsYXJnZXN0IHN1YnJhbmdlIFtpLCBqKSBzdWNoIHRoYXQgdGhlIHZhbHVlCiAgICBjYW4gYmUgaW5zZXJ0ZWQgYXQgYW55IGl0ZXJhdG9yIGsgaW4gaXQgd2l0aG91dCB2aW9sYXRpbmcgdGhlCiAgICBvcmRlcmluZy4gayBzYXRpc2ZpZXMgdGhlIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uczogISgqayAmbHQ7IHZhbHVlKQogICAgJmFtcDsmYW1wOyAhKHZhbHVlICZsdDsgKmspIG9yIGNvbXAoKmssIHZhbHVlKSA9PSBmYWxzZSAmYW1wOyZhbXA7IGNvbXAodmFsdWUsICprKSA9PQogICAgZmFsc2UuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICAgLTItIFJldHVybnM6IAogICAgICAgICBtYWtlX3BhaXIobG93ZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbHVlKSwKICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSkpCiAgICAgICBvcgogICAgICAgICBtYWtlX3BhaXIobG93ZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbHVlLCBjb21wKSwKICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSwgY29tcCkpCjwvcHJlPgoKPHA+Q2hhbmdlIDI1LjMuMy4zIFtsaWIuYmluYXJ5LnNlYXJjaF0gcGFyYWdyYXBoIDEgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIFJlcXVpcmVzOiBUeXBlIFQgaXMgTGVzc1RoYW5Db21wYXJhYmxlCiAgICAobGliLmxlc3N0aGFuY29tcGFyYWJsZSkuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbnMgZSAmbHQ7IHZhbHVlIGFuZCAhKHZhbHVlICZsdDsgZSkgb3IgY29tcChlLAogICB2YWx1ZSkgYW5kICFjb21wKHZhbHVlLCBlKS4gQWxzbywgZm9yIGFsbCBlbGVtZW50cyBlIG9mIFtmaXJzdCwKICAgbGFzdCksIGUgJmx0OyB2YWx1ZSBpbXBsaWVzICEodmFsdWUgJmx0OyBlKSBvciBjb21wKGUsIHZhbHVlKSBpbXBsaWVzCiAgICFjb21wKHZhbHVlLCBlKQo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ29wZW5oYWdlbjogRGF2ZSBBYnJhaGFtcyBwcm92aWRlZCB0aGlzIHdvcmRpbmddPC9pPjwvcD4KCjxwPjxpPltSZWRtb25kOiBNaW5vciBjaGFuZ2VzIGluIHdvcmRpbmcuICAoUmVtb3ZlZCAibm9uLW5lZ2F0aXZlIiwgYW5kCmNoYW5nZWQgdGhlICJvdGhlciB0aGFuIHRob3NlIGRlc2NyaWJlZCBpbiIgd29yZGluZy4pIEFsc28sIHRoZSBMV0cKZGVjaWRlZCB0byBhY2NlcHQgdGhlICJvcHRpb25hbCIgcGFydC5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiByZWludGVycHJldHMgYmluYXJ5IHNlYXJjaC4gSW5zdGVhZCBvZgp0aGlua2luZyBhYm91dCBzZWFyY2hpbmcgZm9yIGEgdmFsdWUgaW4gYSBzb3J0ZWQgcmFuZ2UsIHdlIHZpZXcgdGhhdAphcyBhbiBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9mIGEgbW9yZSBnZW5lcmFsIGFsZ29yaXRobTogc2VhcmNoaW5nCmZvciB0aGUgcGFydGl0aW9uIHBvaW50IGluIGEgcGFydGl0aW9uZWQgcmFuZ2UuPC9wPgoKPHA+V2UgYWxzbyBhZGQgYSBndWFyYW50ZWUgdGhhdCB0aGUgb2xkIHdvcmRpbmcgZGlkIG5vdDogd2UgZW5zdXJlCnRoYXQgdGhlIHVwcGVyIGJvdW5kIGlzIG5vIGVhcmxpZXIgdGhhbiB0aGUgbG93ZXIgYm91bmQsIHRoYXQKdGhlIHBhaXIgcmV0dXJuZWQgYnkgZXF1YWxfcmFuZ2UgaXMgYSB2YWxpZCByYW5nZSwgYW5kIHRoYXQgdGhlIGZpcnN0CnBhcnQgb2YgdGhhdCBwYWlyIGlzIHRoZSBsb3dlciBib3VuZC48L3A+Cjxocj4KPGEgbmFtZT0iMjcxIj48aDM+MjcxLiZuYnNwO2Jhc2ljX2lvc3RyZWFtIG1pc3NpbmcgdHlwZWRlZnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW1jbGFzcyI+IFtsaWIuaW9zdHJlYW1jbGFzc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+CkNsYXNzIHRlbXBsYXRlIGJhc2ljX2lvc3RyZWFtIGhhcyBubyB0eXBlZGVmcy4gIFRoZSB0eXBlZGVmcyBpdAppbmhlcml0cyBmcm9tIGl0cyBiYXNlIGNsYXNzZXMgY2FuJ3QgYmUgdXNlZCwgc2luY2UgKGZvciBleGFtcGxlKQpiYXNpY19pb3N0cmVhbSZsdDtUJmd0Ozo6dHJhaXRzX3R5cGUgaXMgYW1iaWd1b3VzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHRvIGJhc2ljX2lvc3RyZWFtJ3MgY2xhc3Mgc3lub3BzaXMgaW4gCjI3LjYuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbWNsYXNzIj4gW2xpYi5pb3N0cmVhbWNsYXNzXTwvYT4sIGltbWVkaWF0ZWx5IGFmdGVyIDx0dD5wdWJsaWM8L3R0Pjo8L3A+Cgo8cHJlPiAgLy8gdHlwZXM6CiAgdHlwZWRlZiBjaGFyVCAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICB0eXBlZGVmIHRyYWl0cyAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU7CjwvcHJlPgo8aHI+CjxhIG5hbWU9IjI3MiI+PGgzPjI3Mi4mbmJzcDtNaXNzaW5nIHBhcmVudGhlc2VzIGFyb3VuZCBzdWJleHByZXNzaW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RhdGUuZmxhZ3MiPiBbbGliLmlvc3RhdGUuZmxhZ3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDIgTm92IDIwMDA8L3A+CjxwPgoyNy40LjQuMywgcDQgc2F5cyBhYm91dCB0aGUgcG9zdGNvbmRpdGlvbiBvZiB0aGUgZnVuY3Rpb246IElmCnJkYnVmKCkhPTAgdGhlbiBzdGF0ZSA9PSByZHN0YXRlKCk7IG90aGVyd2lzZQpyZHN0YXRlKCk9PXN0YXRlfGlvc19iYXNlOjpiYWRiaXQuCjwvcD4KCjxwPgpUaGUgZXhwcmVzc2lvbiBvbiB0aGUgcmlnaHQtaGFuZC1zaWRlIG9mIHRoZSBvcGVyYXRvcj09KCkgbmVlZHMgdG8gYmUKcGFyZW50aGVzaXplZCBpbiBvcmRlciBmb3IgdGhlIHdob2xlIGV4cHJlc3Npb24gdG8gZXZlciBldmFsdWF0ZSB0bwphbnl0aGluZyBidXQgbm9uLXplcm8uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHBhcmVudGhlc2VzIGxpa2Ugc286IHJkc3RhdGUoKT09KHN0YXRlfGlvc19iYXNlOjpiYWRiaXQpLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjczIj48aDM+MjczLiZuYnNwO01pc3NpbmcgaW9zX2Jhc2UgcXVhbGlmaWNhdGlvbiBvbiBtZW1iZXJzIG9mIGEgZGVwZW5kZW50IGNsYXNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIE5vdiAyMDAwPC9wPgo8cD4yNy41LjIuNC4yLCBwNCwgYW5kIDI3LjguMS42LCBwMiwgMjcuOC4xLjcsIHAzLCAyNy44LjEuOSwgcDIsCjI3LjguMS4xMCwgcDMgcmVmZXIgdG8gaW4gYW5kL29yIG91dCB3L28gaW9zX2Jhc2U6OiBxdWFsaWZpY2F0aW9uLgpUaGF0J3MgaW5jb3JyZWN0IHNpbmNlIHRoZSBuYW1lcyBhcmUgbWVtYmVycyBvZiBhIGRlcGVuZGVudCBiYXNlCmNsYXNzICgxNC42LjIgW3RlbXAuZGVwXSkgYW5kIHRodXMgbm90IHZpc2libGUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlF1YWxpZnkgdGhlIG5hbWVzIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9mIHdoaWNoIHRoZXkgYXJlCm1lbWJlcnMsIGkuZS4sIGlvc19iYXNlLjwvcD4KPGhyPgo8YSBuYW1lPSIyNzQiPjxoMz4yNzQuJm5ic3A7YSBtaXNzaW5nL2ltcG9zc2libGUgYWxsb2NhdG9yIHJlcXVpcmVtZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5kZWZhdWx0LmNvbi5yZXEiPiBbbGliLmRlZmF1bHQuY29uLnJlcV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+Ckkgc2VlIHRoYXQgdGFibGUgMzEgaW4gMjAuMS41LCBwMyBhbGxvd3MgVCBpbiBzdGQ6OmFsbG9jYXRvciZsdDtUJmd0OyB0byBiZSBvZgphbnkgdHlwZS4gQnV0IHRoZSBzeW5vcHNpcyBpbiAyMC40LjEgY2FsbHMgZm9yIGFsbG9jYXRvciZsdDsmZ3Q7OjphZGRyZXNzKCkgdG8KYmUgb3ZlcmxvYWRlZCBvbiByZWZlcmVuY2UgYW5kIGNvbnN0X3JlZmVyZW5jZSwgd2hpY2ggaXMgaWxsLWZvcm1lZCBmb3IKYWxsIFQgPSBjb25zdCBVLiBJbiBvdGhlciB3b3JkcywgdGhpcyB3b24ndCB3b3JrOgo8L3A+Cgo8cD4KdGVtcGxhdGUgY2xhc3Mgc3RkOjphbGxvY2F0b3ImbHQ7Y29uc3QgaW50Jmd0OzsKPC9wPgoKPHA+ClRoZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIGRpc2FsbG93IHNwZWNpYWxpemF0aW9ucyBvZiBhbGxvY2F0b3JzIG9uCmNvbnN0IHR5cGVzLiBIb3dldmVyLCB3aGlsZSBjb250YWluZXJzJyBlbGVtZW50cyBhcmUgcmVxdWlyZWQgdG8gYmUKYXNzaWduYWJsZSAod2hpY2ggcnVsZXMgb3V0IHNwZWNpYWxpemF0aW9ucyBvbiBjb25zdCBUJ3MpLCBJIHRoaW5rIHRoYXQKYWxsb2NhdG9ycyBtaWdodCBwZXJoYXBzIGJlIHBvdGVudGlhbGx5IHVzZWZ1bCBmb3IgY29uc3QgdmFsdWVzIGluIG90aGVyCmNvbnRleHRzLiBTbyBpZiBhbGxvY2F0b3JzIGFyZSB0byBhbGxvdyBjb25zdCB0eXBlcyBhIHBhcnRpYWwKc3BlY2lhbGl6YXRpb24gb2Ygc3RkOjphbGxvY2F0b3ImbHQ7Y29uc3QgVCZndDsgd291bGQgcHJvYmFibHkgaGF2ZSB0byBiZQpwcm92aWRlZC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdGV4dCBpbiByb3cgMSwgY29sdW1uIDIgb2YgdGFibGUgMzIgaW4gMjAuMS41LCBwMyBmcm9tPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgYW55IHR5cGUKICAgIDwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgogICAgPGJsb2NrcXVvdGU+CiAgICBhbnkgbm9uLWNvbnN0LCBub24tcmVmZXJlbmNlIHR5cGUKICAgIDwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBwcmV2aW91cyBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyAiYW55IG5vbi1jb25zdCwKbm9uLXZvbGF0aWxlLCBub24tcmVmZXJlbmNlIHR5cGUiLiAgR290IHJpZCBvZiB0aGUgIm5vbi12b2xhdGlsZSIuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClR3byByZXNvbHV0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgcHJvcG9zZWQ6IG9uZSB0aGF0IHBhcnRpYWxseQpzcGVjaWFsaXplZCBzdGQ6OmFsbG9jYXRvciBmb3IgY29uc3QgdHlwZXMsIGFuZCBvbmUgdGhhdCBzYWlkIGFuCmFsbG9jYXRvcidzIHZhbHVlIHR5cGUgbWF5IG5vdCBiZSBjb25zdC4gIFRoZSBMV0cgY2hvc2UgdGhlIHNlY29uZC4KVGhlIGZpcnN0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlLCBiZWNhdXNlIGFsbG9jYXRvcnMgYXJlIGludGVuZGVkIGZvcgp1c2UgYnkgY29udGFpbmVycywgYW5kIGNvbnN0IHZhbHVlIHR5cGVzIGRvbid0IHdvcmsgaW4gY29udGFpbmVycy4KRW5jb3VyYWdpbmcgdGhlIHVzZSBvZiBhbGxvY2F0b3JzIHdpdGggY29uc3QgdmFsdWUgdHlwZXMgd291bGQgb25seQpsZWFkIHRvIHVuc2FmZSBjb2RlLgo8L3A+CjxwPgpUaGUgb3JpZ2luYWwgdGV4dCBmb3IgcHJvcG9zZWQgcmVzb2x1dGlvbiAyIHdhcyBtb2RpZmllZCBzbyB0aGF0IGl0CmFsc28gZm9yYmlkcyB2b2xhdGlsZSB0eXBlcyBhbmQgcmVmZXJlbmNlIHR5cGVzLgo8L3A+Cgo8cD48aT5bQ3VyYedhbzogTFdHIGRvdWJsZSBjaGVja2VkIGFuZCBiZWxpZXZlcyB2b2xhdGlsZSBpcyBjb3JyZWN0bHkKZXhjbHVkZWQgZnJvbSB0aGUgUFIuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjI3NSI+PGgzPjI3NS4mbmJzcDtXcm9uZyB0eXBlIGluIG51bV9nZXQ6OmdldCgpIG92ZXJsb2FkczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5nZXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+CkluIDIyLjIuMi4xLjEsIHdlIGhhdmUgYSBsaXN0IG9mIG92ZXJsb2FkcyBmb3IgbnVtX2dldCZsdDsmZ3Q7OjpnZXQoKS4KVGhlcmUgYXJlIGVpZ2h0IG92ZXJsb2FkcywgYWxsIG9mIHdoaWNoIGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUKbGFzdCBwYXJhbWV0ZXIuICBUaGUgb3ZlcmxvYWRzIGFyZTogCjwvcD4KPHVsPgo8bGk+IGxvbmcmYW1wOyA8L2xpPgo8bGk+IHVuc2lnbmVkIHNob3J0JmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBpbnQmYW1wOyA8L2xpPgo8bGk+IHVuc2lnbmVkIGxvbmcmYW1wOyA8L2xpPgo8bGk+IHNob3J0JmFtcDsgPC9saT4KPGxpPiBkb3VibGUmYW1wOyA8L2xpPgo8bGk+IGxvbmcgZG91YmxlJmFtcDsgPC9saT4KPGxpPiB2b2lkKiZhbXA7IDwvbGk+CjwvdWw+Cgo8cD4KVGhlcmUgaXMgYSBzaW1pbGFyIGxpc3QsIGluIDIyLjIuMi4xLjIsIG9mIG92ZXJsb2FkcyBmb3IKbnVtX2dldCZsdDsmZ3Q7Ojpkb19nZXQoKS4gIEluIHRoaXMgbGlzdCwgdGhlIGxhc3QgcGFyYW1ldGVyIGhhcwp0aGUgdHlwZXM6IAo8L3A+Cjx1bD4KPGxpPiBsb25nJmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBzaG9ydCZhbXA7IDwvbGk+CjxsaT4gdW5zaWduZWQgaW50JmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBsb25nJmFtcDsgPC9saT4KPGxpPiBmbG9hdCZhbXA7IDwvbGk+CjxsaT4gZG91YmxlJmFtcDsgPC9saT4KPGxpPiBsb25nIGRvdWJsZSZhbXA7IDwvbGk+CjxsaT4gdm9pZComYW1wOyA8L2xpPgo8L3VsPgoKPHA+ClRoZXNlIHR3byBsaXN0cyBhcmUgbm90IGlkZW50aWNhbC4gIFRoZXkgc2hvdWxkIGJlLCBzaW5jZQo8dHQ+Z2V0PC90dD4gaXMgc3VwcG9zZWQgdG8gY2FsbCA8dHQ+ZG9fZ2V0PC90dD4gd2l0aCBleGFjdGx5CnRoZSBhcmd1bWVudHMgaXQgd2FzIGdpdmVuLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQubWVtYmVycyI+IFtsaWIuZmFjZXQubnVtLmdldC5tZW1iZXJzXTwvYT4sIGNoYW5nZTwvcD4KPHByZT4gIGl0ZXJfdHlwZSBnZXQoaXRlcl90eXBlIGluLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCBzaG9ydCZhbXA7IHZhbCkgY29uc3Q7CjwvcHJlPgo8cD50bzwvcD4KPHByZT4gIGl0ZXJfdHlwZSBnZXQoaXRlcl90eXBlIGluLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCBmbG9hdCZhbXA7IHZhbCkgY29uc3Q7CjwvcHJlPgo8aHI+CjxhIG5hbWU9IjI3NiI+PC9hPjxoMz48YSBuYW1lPSIyNzYiPjI3Ni4mbmJzcDtBc3NpZ25hYmxlIHJlcXVpcmVtZW50IGZvciBjb250YWluZXIgdmFsdWUgdHlwZSBvdmVybHkgc3RyaWN0PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlciBEaW1vdiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNyBOb3YgMjAwMDwvcD4KPHA+CjIzLjEvMyBzdGF0ZXMgdGhhdCB0aGUgb2JqZWN0cyBzdG9yZWQgaW4gYSBjb250YWluZXIgbXVzdCBiZQpBc3NpZ25hYmxlLiAgMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiwgcGFyYWdyYXBoIDIsCnN0YXRlcyB0aGF0IG1hcCBzYXRpc2ZpZXMgYWxsIHJlcXVpcmVtZW50cyBmb3IgYSBjb250YWluZXIsIHdoaWxlIGluCnRoZSBzYW1lIHRpbWUgZGVmaW5pbmcgdmFsdWVfdHlwZSBhcyBwYWlyJmx0O2NvbnN0IEtleSwgVCZndDsgLSBhIHR5cGUKdGhhdCBpcyBub3QgQXNzaWduYWJsZS4KPC9wPgoKPHA+Ckl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIGV4aXN0cyBhIHZhbGlkIGFuZCBub24tY29udHJhZGljdG9yeQppbnRlcnByZXRhdGlvbiBvZiB0aGUgY3VycmVudCB0ZXh0LiBUaGUgd29yZGluZyBpbiAyMy4xLzMgYXZvaWRzIAptZW50aW9uaW5nIHZhbHVlX3R5cGUsIHJlZmVycmluZyBpbnN0ZWFkIHRvICJvYmplY3RzIHN0b3JlZCBpbiBhCmNvbnRhaW5lci4iIE9uZSBtaWdodCBhcmd1ZSB0aGF0IG1hcCBkb2VzIG5vdCBzdG9yZSBvYmplY3RzIG9mCnR5cGUgbWFwOjp2YWx1ZV90eXBlLCBidXQgb2YgbWFwOjptYXBwZWRfdHlwZSBpbnN0ZWFkLCBhbmQgdGhhdCB0aGUKQXNzaWduYWJsZSByZXF1aXJlbWVudCBhcHBsaWVzIHRvIG1hcDo6bWFwcGVkX3R5cGUsIG5vdAptYXA6OnZhbHVlX3R5cGUuCjwvcD4KCjxwPgpIb3dldmVyLCB0aGlzIG1ha2VzIG1hcCBhIHNwZWNpYWwgY2FzZSAob3RoZXIgY29udGFpbmVycyBzdG9yZSBvYmplY3RzIG9mCnR5cGUgdmFsdWVfdHlwZSkgYW5kIHRoZSBBc3NpZ25hYmxlIHJlcXVpcmVtZW50IGlzIG5lZWRsZXNzbHkgcmVzdHJpY3RpdmUgaW4KZ2VuZXJhbC4KPC9wPgoKPHA+CkZvciBleGFtcGxlLCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBhY3RpdmUgbGlicmFyeSBpc3N1ZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiBpcyB0byBtYWtlIHNldDo6aXRlcmF0b3IgYSBjb25zdGFudCBpdGVyYXRvcjsgdGhpcwptZWFucyB0aGF0IG5vIHNldCBvcGVyYXRpb25zIGNhbiBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlIHN0b3JlZApvYmplY3RzIGFyZSBBc3NpZ25hYmxlLgo8L3A+Cgo8cD4KVGhpcyBpcyByZWxhdGVkIHRvLCBidXQgc2xpZ2h0bHkgYnJvYWRlciB0aGFuLCBjbG9zZWQgaXNzdWUKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTQwIj4xNDA8L2E+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+MjMuMS8zOiBTdHJpa2UgdGhlIHRyYWlsaW5nIHBhcnQgb2YgdGhlIHNlbnRlbmNlOjwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgLCBhbmQgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIG9mIEFzc2lnbmFibGUgdHlwZXMgZnJvbSAyMy4xLzMKICAgIDwvYmxvY2txdW90ZT4KPHA+c28gdGhhdCBpdCByZWFkczo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgIC0zLSBUaGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVzZSBjb21wb25lbnRzIG11c3QgbWVldCB0aGUgCiAgICByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUgdHlwZXMgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkuCiAgICA8L2Jsb2NrcXVvdGU+Cgo8cD4yMy4xLzQ6IE1vZGlmeSB0byBtYWtlIGNsZWFyIHRoYXQgdGhpcyByZXF1aXJlbWVudCBpcyBub3QgZm9yIGFsbCAKY29udGFpbmVycy4gIENoYW5nZSB0bzo8L3A+Cgo8YmxvY2txdW90ZT4KLTQtIFRhYmxlIDY0IGRlZmluZXMgdGhlIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBTb21lIGNvbnRhaW5lcnMgCnJlcXVpcmUgdGhpcyBwcm9wZXJ0eSBvZiB0aGUgdHlwZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBjb250YWluZXIuICBUIGlzIAp0aGUgdHlwZSB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBjb250YWluZXIuIHQgaXMgYSB2YWx1ZSBvZiBULCBhbmQgdSBpcyAKYSB2YWx1ZSBvZiAocG9zc2libHkgY29uc3QpIFQuCjwvYmxvY2txdW90ZT4KCjxwPjIzLjEsIFRhYmxlIDY1OiBpbiB0aGUgZmlyc3Qgcm93LCBjaGFuZ2UgIlQgaXMgQXNzaWduYWJsZSIgdG8gIlQgaXMKQ29weUNvbnN0cnVjdGlibGUiLjwvcD4KCjxwPjIzLjIuMS8yOiBBZGQgc2VudGVuY2UgZm9yIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBDaGFuZ2UgdG86PC9wPgoKPGJsb2NrcXVvdGU+Ci0yLSBBIGRlcXVlIHNhdGlzZmllcyBhbGwgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGNvbnRhaW5lciBhbmQgb2YgYSAKcmV2ZXJzaWJsZSBjb250YWluZXIgKGdpdmVuIGluIHRhYmxlcyBpbiBsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykgYW5kIApvZiBhIHNlcXVlbmNlLCBpbmNsdWRpbmcgdGhlIG9wdGlvbmFsIHNlcXVlbmNlIHJlcXVpcmVtZW50cyAKKGxpYi5zZXF1ZW5jZS5yZXFtdHMpLiAgSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVtZW50cyBvbiB0aGUgc3RvcmVkIApvYmplY3QgZGVzY3JpYmVkIGluIDIzLjFbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdLCB0aGUgc3RvcmVkIG9iamVjdCAKbXVzdCBhbHNvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBBc3NpZ25hYmxlLiAgRGVzY3JpcHRpb25zIGFyZSAKcHJvdmlkZWQgaGVyZSBvbmx5IGZvciBvcGVyYXRpb25zIG9uIGRlcXVlIHRoYXQgYXJlIG5vdCBkZXNjcmliZWQgaW4gb25lIApvZiB0aGVzZSB0YWJsZXMgb3IgZm9yIG9wZXJhdGlvbnMgd2hlcmUgdGhlcmUgaXMgYWRkaXRpb25hbCBzZW1hbnRpYyAKaW5mb3JtYXRpb24uCjwvYmxvY2txdW90ZT4KCjxwPjIzLjIuMi8yOiAgQWRkIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQgdG8gc3BlY2lmaWMgbWV0aG9kcyBvZiBsaXN0LiAgCkNoYW5nZSB0bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+LTItIEEgbGlzdCBzYXRpc2ZpZXMgYWxsIG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYSBjb250YWluZXIgYW5kIG9mIGEgCnJldmVyc2libGUgY29udGFpbmVyIChnaXZlbiBpbiB0d28gdGFibGVzIGluIGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKSAKYW5kIG9mIGEgc2VxdWVuY2UsIGluY2x1ZGluZyBtb3N0IG9mIHRoZSB0aGUgb3B0aW9uYWwgc2VxdWVuY2UgCnJlcXVpcmVtZW50cyAobGliLnNlcXVlbmNlLnJlcW10cykuIFRoZSBleGNlcHRpb25zIGFyZSB0aGUgb3BlcmF0b3JbXSAKYW5kIGF0IG1lbWJlciBmdW5jdGlvbnMsIHdoaWNoIGFyZSBub3QgcHJvdmlkZWQuIAoKW0Zvb3Rub3RlOiBUaGVzZSBtZW1iZXIgZnVuY3Rpb25zIGFyZSBvbmx5IHByb3ZpZGVkIGJ5IGNvbnRhaW5lcnMgd2hvc2UgCml0ZXJhdG9ycyBhcmUgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuIC0tLSBlbmQgZm9vbm90ZV0KPC9wPgoKPHA+bGlzdCBkb2VzIG5vdCByZXF1aXJlIHRoZSBzdG9yZWQgdHlwZSBUIHRvIGJlIEFzc2lnbmFibGUgdW5sZXNzIHRoZSAKZm9sbG93aW5nIG1ldGhvZHMgYXJlIGluc3RhbnRpYXRlZDoKCltGb290bm90ZTogSW1wbGVtZW50b3JzIGFyZSBwZXJtaXR0ZWQgYnV0IG5vdCByZXF1aXJlZCB0byB0YWtlIGFkdmFudGFnZSAKb2YgVCdzIEFzc2lnbmFibGUgcHJvcGVydGllcyBmb3IgdGhlc2UgbWV0aG9kcy4gLS0gZW5kIGZvb25vdGVdCjwvcD4KPHByZT4gICAgIGxpc3QmbHQ7VCxBbGxvY2F0b3ImZ3Q7JmFtcDsgb3BlcmF0b3I9KGNvbnN0IGxpc3QmbHQ7VCxBbGxvY2F0b3ImZ3Q7JmFtcDsgIHggKTsKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgIHZvaWQgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CiAgICAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIG4sIGNvbnN0IFQmYW1wOyB0KTsKPC9wcmU+CgoKPHA+RGVzY3JpcHRpb25zIGFyZSBwcm92aWRlZCBoZXJlIG9ubHkgZm9yIG9wZXJhdGlvbnMgb24gbGlzdCB0aGF0IGFyZSBub3QgCmRlc2NyaWJlZCBpbiBvbmUgb2YgdGhlc2UgdGFibGVzIG9yIGZvciBvcGVyYXRpb25zIHdoZXJlIHRoZXJlIGlzIAphZGRpdGlvbmFsIHNlbWFudGljIGluZm9ybWF0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+MjMuMi40LzI6ICAgQWRkIHNlbnRlbmNlIGZvciBBc3NpZ25hYmxlIHJlcXVpcmVtZW50LiAgQ2hhbmdlIHRvOjwvcD4KCjxibG9ja3F1b3RlPgotMi0gQSB2ZWN0b3Igc2F0aXNmaWVzIGFsbCBvZiB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgY29udGFpbmVyIGFuZCBvZiBhIApyZXZlcnNpYmxlIGNvbnRhaW5lciAoZ2l2ZW4gaW4gdHdvIHRhYmxlcyBpbiBsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykgCmFuZCBvZiBhIHNlcXVlbmNlLCBpbmNsdWRpbmcgbW9zdCBvZiB0aGUgb3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzIAoobGliLnNlcXVlbmNlLnJlcW10cykuIFRoZSBleGNlcHRpb25zIGFyZSB0aGUgcHVzaF9mcm9udCBhbmQgcG9wX2Zyb250IAptZW1iZXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgbm90IHByb3ZpZGVkLiAgSW4gYWRkaXRpb24gdG8gdGhlIApyZXF1aXJlbWVudHMgb24gdGhlIHN0b3JlZCBvYmplY3QgZGVzY3JpYmVkIGluIAoyMy4xW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXSwgdGhlIHN0b3JlZCBvYmplY3QgbXVzdCBhbHNvIG1lZXQgdGhlIApyZXF1aXJlbWVudHMgb2YgQXNzaWduYWJsZS4gIERlc2NyaXB0aW9ucyBhcmUgcHJvdmlkZWQgaGVyZSBvbmx5IGZvciAKb3BlcmF0aW9ucyBvbiB2ZWN0b3IgdGhhdCBhcmUgbm90IGRlc2NyaWJlZCBpbiBvbmUgb2YgdGhlc2UgdGFibGVzIG9yIApmb3Igb3BlcmF0aW9ucyB3aGVyZSB0aGVyZSBpcyBhZGRpdGlvbmFsIHNlbWFudGljIGluZm9ybWF0aW9uLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5saXN0LCBzZXQsIG11bHRpc2V0LCBtYXAsIG11bHRpbWFwIGFyZSBhYmxlIHRvIHN0b3JlIG5vbi1Bc3NpZ25hYmxlcy4KSG93ZXZlciwgdGhlcmUgaXMgc29tZSBjb25jZXJuIGFib3V0IDx0dD5saXN0Jmx0O1QmZ3Q7PC90dD46CmFsdGhvdWdoIGluIGdlbmVyYWwgdGhlcmUncyBubyByZWFzb24gZm9yIFQgdG8gYmUgQXNzaWduYWJsZSwgc29tZQppbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG1lbWJlciBmdW5jdGlvbnMgPHR0Pm9wZXJhdG9yPTwvdHQ+IGFuZAo8dHQ+YXNzaWduPC90dD4gZG8gcmVseSBvbiB0aGF0IHJlcXVpcmVtZW50LiAgVGhlIExXRyBkb2VzIG5vdCB3YW50CnRvIGZvcmJpZCBzdWNoIGltcGxlbWVudGF0aW9ucy48L3A+Cgo8cD5Ob3RlIHRoYXQgdGhlIHR5cGUgc3RvcmVkIGluIGEgc3RhbmRhcmQgY29udGFpbmVyIG11c3Qgc3RpbGwgc2F0aXNmeQp0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb250YWluZXIncyBhbGxvY2F0b3I7IHRoaXMgcnVsZXMgb3V0LCBmb3IKZXhhbXBsZSwgc3VjaCB0eXBlcyBhcyAiY29uc3QgaW50Ii4gIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjc0Ij4yNzQ8L2E+CmZvciBtb3JlIGRldGFpbHMuCjwvcD4KCjxwPkluIHByaW5jaXBsZSB3ZSBjb3VsZCBhbHNvIHJlbGF4IHRoZSAiQXNzaWduYWJsZSIgcmVxdWlyZW1lbnQgZm9yCmluZGl2aWR1YWwgPHR0PnZlY3RvcjwvdHQ+IG1lbWJlciBmdW5jdGlvbnMsIHN1Y2ggYXMKPHR0PnB1c2hfYmFjazwvdHQ+LiAgSG93ZXZlciwgdGhlIExXRyBkaWQgbm90IHNlZSBncmVhdCB2YWx1ZSBpbiBzdWNoCnNlbGVjdGl2ZSByZWxheGF0aW9uLiAgRG9pbmcgc28gd291bGQgcmVtb3ZlIGltcGxlbWVudG9ycycgZnJlZWRvbSB0bwppbXBsZW1lbnQgPHR0PnZlY3Rvcjo6cHVzaF9iYWNrPC90dD4gaW4gdGVybXMgb2YKPHR0PnZlY3Rvcjo6aW5zZXJ0PC90dD4uPC9wPgoKPGhyPgo8YSBuYW1lPSIyNzgiPjxoMz4yNzguJm5ic3A7V2hhdCBkb2VzIGl0ZXJhdG9yIHZhbGlkaXR5IG1lYW4/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5kZXF1ZS5zcGVjaWFsIj4gW2xpYi5kZXF1ZS5zcGVjaWFsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UC5KLiBQbGF1Z2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IE5vdiAyMDAwPC9wPgo8cD4KU2VjdGlvbiAyMy4yLjIuNCBbbGliLmxpc3Qub3BzXSBzdGF0ZXMgdGhhdAo8L3A+CjxwcmU+ICB2b2lkIHNwbGljZShpdGVyYXRvciBwb3NpdGlvbiwgbGlzdCZsdDtULCBBbGxvY2F0b3ImZ3Q7JmFtcDsgeCk7CjwvcHJlPgo8cD4KPGk+aW52YWxpZGF0ZXM8L2k+IGFsbCBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgdG8gbGlzdCA8dHQ+eDwvdHQ+Lgo8L3A+Cgo8cD4KQnV0IHdoYXQgZG9lcyB0aGUgQysrIFN0YW5kYXJkIG1lYW4gYnkgImludmFsaWRhdGUiPyAgWW91CmNhbiBzdGlsbCBkZXJlZmVyZW5jZSB0aGUgaXRlcmF0b3IgdG8gYSBzcGxpY2VkIGxpc3QgZWxlbWVudCwgYnV0CnlvdSdkIGJldHRlciBub3QgdXNlIGl0IHRvIGRlbGltaXQgYSByYW5nZSB3aXRoaW4gdGhlIG9yaWdpbmFsCmxpc3QuIEZvciB0aGUgbGF0dGVyIG9wZXJhdGlvbiwgaXQgaGFzIGRlZmluaXRlbHkgbG9zdCBzb21lIG9mIGl0cwp2YWxpZGl0eS4KPC9wPgoKPHA+CklmIHdlIGFjY2VwdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0byBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUwIj4yNTA8L2E+LAp0aGVuIHdlJ2QgYmV0dGVyIGNsYXJpZnkgdGhhdCBhICJ2YWxpZCIgaXRlcmF0b3IgbmVlZCBubwpsb25nZXIgZGVzaWduYXRlIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzYW1lIGNvbnRhaW5lciBhcyBpdCBvbmNlIGRpZC4KV2UgdGhlbiBoYXZlIHRvIGNsYXJpZnkgd2hhdCB3ZSBtZWFuIGJ5IGludmFsaWRhdGluZyBhIHBhc3QtdGhlLWVuZAppdGVyYXRvciwgYXMgd2hlbiBhIHZlY3RvciBvciBzdHJpbmcgZ3Jvd3MgYnkgcmVhbGxvY2F0aW9uLiBDbGVhcmx5LApzdWNoIGFuIGl0ZXJhdG9yIGhhcyBhIGRpZmZlcmVudCBraW5kIG9mIHZhbGlkaXR5LiBQZXJoYXBzIHdlIHNob3VsZAppbnRyb2R1Y2Ugc2VwYXJhdGUgdGVybXMgZm9yIHRoZSB0d28ga2luZHMgb2YgInZhbGlkaXR5LiIKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlIGVuZCBvZiBzZWN0aW9uIDI0LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzXTwvYT4sCmFmdGVyIHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+CkFuIDxpPmludmFsaWQ8L2k+IGl0ZXJhdG9yIGlzIGFuIGl0ZXJhdG9yIHRoYXQgbWF5IGJlCnNpbmd1bGFyLiBbRm9vdG5vdGU6IFRoaXMgZGVmaW5pdGlvbiBhcHBsaWVzIHRvIHBvaW50ZXJzLCBzaW5jZQpwb2ludGVycyBhcmUgaXRlcmF0b3JzLiBUaGUgZWZmZWN0IG9mIGRlcmVmZXJlbmNpbmcgYW4gaXRlcmF0b3IgdGhhdApoYXMgYmVlbiBpbnZhbGlkYXRlZCBpcyB1bmRlZmluZWQuXQo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1Db3BlbmhhZ2VuOiBNYXR0IHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogR2VuZXJhbCBhZ3JlZW1lbnQgd2l0aCB0aGUgaW50ZW50LCBzb21lIG9iamVjdGlvbnMgdG8KdGhlIHdvcmRpbmcuICBEYXZlIHByb3ZpZGVkIG5ldyB3b3JkaW5nLl08L2k+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyByZXNvbHV0aW9uIHNpbXBseSBkZWZpbmVzIGEgdGVybSB0aGF0IHRoZSBTdGFuZGFyZCB1c2VzIGJ1dAogIG5ldmVyIGRlZmluZXMsICJpbnZhbGlkIiwgaW4gdGVybXMgb2YgYSB0ZXJtIHRoYXQgaXMgZGVmaW5lZCwKICAic2luZ3VsYXIiLjwvcD4KCjxwPldoeSBkbyB3ZSBzYXkgIm1heSBiZSBzaW5ndWxhciIsIGluc3RlYWQgb2YgImlzIHNpbmd1bGFyIj8gIFRoYXQncwogIGJlY3Vhc2UgYSB2YWxpZCBpdGVyYXRvciBpcyBvbmUgdGhhdCBpcyBrbm93biB0byBiZSBub25zaW5ndWxhci4KICBJbnZhbGlkYXRpbmcgYW4gaXRlcmF0b3IgbWVhbnMgY2hhbmdpbmcgaXQgaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MKICBubyBsb25nZXIga25vd24gdG8gYmUgbm9uc2luZ3VsYXIuICBBbiBleGFtcGxlOiBpbnNlcnRpbmcgYW4KICBlbGVtZW50IGludG8gdGhlIG1pZGRsZSBvZiBhIHZlY3RvciBpcyBjb3JyZWN0bHkgc2FpZCB0byBpbnZhbGlkYXRlCiAgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyBpbnRvIHRoZSB2ZWN0b3IuICBUaGF0IGRvZXNuJ3QgbmVjZXNzYXJpbHkKICBtZWFuIHRoZXkgYWxsIGJlY29tZSBzaW5ndWxhci48L3A+Cjxocj4KPGEgbmFtZT0iMjgwIj48aDM+MjgwLiZuYnNwO0NvbXBhcmlzb24gb2YgcmV2ZXJzZV9pdGVyYXRvciB0byBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXJhdG9ycyI+IFtsaWIucmV2ZXJzZS5pdGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGVhcnkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgTm92IDIwMDA8L3A+CjxwPgpUaGlzIGNhbWUgZnJvbSBhbiBlbWFpbCBmcm9tIFN0ZXZlIENsZWFyeSB0byBGZXJndXMgaW4gcmVmZXJlbmNlIHRvCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzkiPjE3OTwvYT4uIFRoZSBsaWJyYXJ5IHdvcmtpbmcgZ3JvdXAgYnJpZWZseSBkaXNjdXNzZWQKdGhpcyBpbiBUb3JvbnRvIGFuZCBiZWxpZXZlZCBpdCBzaG91bGQgYmUgYSBzZXBhcmF0ZSBpc3N1ZS4gIFRoZXJlIHdhcwphbHNvIHNvbWUgcmVzZXJ2YXRpb25zIGFib3V0IHdoZXRoZXIgdGhpcyB3YXMgYSB3b3J0aHdoaWxlIHByb2JsZW0gdG8KZml4Lgo8L3A+Cgo8cD4KU3RldmUgc2FpZDogIkZpeGluZyByZXZlcnNlX2l0ZXJhdG9yLiBzdGQ6OnJldmVyc2VfaXRlcmF0b3IgY2FuCihhbmQgc2hvdWxkKSBiZSBjaGFuZ2VkIHRvIHByZXNlcnZlIHRoZXNlIGFkZGl0aW9uYWwKcmVxdWlyZW1lbnRzLiIgSGUgYWxzbyBzYWlkIGluIGVtYWlsIHRoYXQgaXQgY2FuIGJlIGRvbmUgd2l0aG91dApicmVha2luZyB1c2VyJ3MgY29kZTogIklmIHlvdSB0YWtlIGEgbG9vayBhdCBteSBzdWdnZXN0ZWQKc29sdXRpb24sIHJldmVyc2VfaXRlcmF0b3IgZG9lc24ndCBoYXZlIHRvIHRha2UgdHdvIHBhcmFtZXRlcnM7IHRoZXJlCmlzIG5vIGRhbmdlciBvZiBicmVha2luZyBleGlzdGluZyBjb2RlLCBleGNlcHQgc29tZW9uZSB0YWtpbmcgdGhlCmFkZHJlc3Mgb2Ygb25lIG9mIHRoZSByZXZlcnNlX2l0ZXJhdG9yIGdsb2JhbCBvcGVyYXRvciBmdW5jdGlvbnMsIGFuZApJIGhhdmUgdG8gZG91YnQgaWYgYW55b25lIGhhcyBldmVyIGRvbmUgdGhhdC4gLiAuICA8aT5CdXQ8L2k+LCBqdXN0IGluCmNhc2UgdGhleSBoYXZlLCB5b3UgY2FuIGxlYXZlIHRoZSBvbGQgZ2xvYmFsIGZ1bmN0aW9ucyBpbiBhcyB3ZWxsIC0tCnRoZXkgd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHR3by10ZW1wbGF0ZS1hcmd1bWVudCBmdW5jdGlvbnMuICBXaXRoCnRoYXQsIEkgZG9uJ3Qgc2VlIGhvdyA8aT5hbnk8L2k+IHVzZXIgY29kZSBjb3VsZCBicmVhay4iCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KPGI+U2VjdGlvbjo8L2I+IDI0LjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXJhdG9yIj4gW2xpYi5yZXZlcnNlLml0ZXJhdG9yXTwvYT4KYWRkL2NoYW5nZSB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uczo8L3A+CjxwcmU+ICBBKSBBZGQgYSB0ZW1wbGF0ZWQgYXNzaWdubWVudCBvcGVyYXRvciwgYWZ0ZXIgdGhlIHNhbWUgbWFubmVyCiAgICAgICAgYXMgdGhlIHRlbXBsYXRlZCBjb3B5IGNvbnN0cnVjdG9yLCBpLmUuOgoKICB0ZW1wbGF0ZSAmbHQ7IGNsYXNzIFUgJmd0OwogIHJldmVyc2VfaXRlcmF0b3IgJmx0OyBJdGVyYXRvciAmZ3Q7JmFtcDsgb3BlcmF0b3I9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImbHQ7IFUgJmd0OyZhbXA7IHUpOwoKICBCKSBNYWtlIGFsbCBnbG9iYWwgZnVuY3Rpb25zIChleGNlcHQgdGhlIG9wZXJhdG9yKykgaGF2ZQogIHR3byB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGluc3RlYWQgb2Ygb25lLCB0aGF0IGlzLCBmb3IKICBvcGVyYXRvciA9PSwgIT0sICZsdDssICZndDssICZsdDs9LCAmZ3Q7PSwgLSByZXBsYWNlOgoKICAgICAgIHRlbXBsYXRlICZsdDsgY2xhc3MgSXRlcmF0b3IgJmd0OwogICAgICAgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvciZsdDsgSXRlcmF0b3IgJmd0Ozo6ZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLSgKICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJmx0OyBJdGVyYXRvciAmZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJmx0OyBJdGVyYXRvciAmZ3Q7JmFtcDsgeSk7CgogIHdpdGg6CgogICAgICB0ZW1wbGF0ZSAmbHQ7IGNsYXNzIEl0ZXJhdG9yMSwgY2xhc3MgSXRlcmF0b3IyICZndDsKICAgICAgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvciAmbHQ7IEl0ZXJhdG9yMSAmZ3Q7OjpkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKAogICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3IgJmx0OyBJdGVyYXRvcjEgJmd0OyAmYW1wOyB4LAogICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3IgJmx0OyBJdGVyYXRvcjIgJmd0OyAmYW1wOyB5KTsKPC9wcmU+CjxwPgpBbHNvIG1ha2UgdGhlIGFkZGl0aW9uL2NoYW5nZXMgZm9yIHRoZXNlIHNpZ25hdHVyZXMgaW4gCjI0LjQuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXIub3BzIj4gW2xpYi5yZXZlcnNlLml0ZXIub3BzXTwvYT4uCjwvcD4KCjxwPjxpPlsKQ29wZW5oYWdlbjogVGhlIExXRyBpcyBjb25jZXJuZWQgdGhhdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiAKaW50cm9kdWNlcyBuZXcgb3ZlcmxvYWRzLiAgRXhwZXJpZW5jZSBzaG93cyB0aGF0IGludHJvZHVjaW5nCm92ZXJsb2FkcyBpcyBhbHdheXMgcmlza3ksIGFuZCB0aGF0IGl0IHdvdWxkIGJlIGluYXBwcm9wcmlhdGUgdG8KbWFrZSB0aGlzIGNoYW5nZSB3aXRob3V0IGltcGxlbWVudGF0aW9uIGV4cGVyaWVuY2UuICBJdCBtYXkgYmUKZGVzaXJhYmxlIHRvIHByb3ZpZGUgdGhpcyBmZWF0dXJlIGluIGEgZGlmZmVyZW50IHdheS4KXTwvaT48L3A+Cgo8cD48aT5bCkxpbGxlaGFtbWVyOiBXZSBub3cgaGF2ZSBpbXBsZW1lbnRhdGlvbiBleHBlcmllbmNlLCBhbmQgYWdyZWUgdGhhdAp0aGlzIHNvbHV0aW9uIGlzIHNhZmUgYW5kIGNvcnJlY3QuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyODEiPjxoMz4yODEuJm5ic3A7c3RkOjptaW4oKSBhbmQgbWF4KCkgcmVxdWlyZW1lbnRzIG92ZXJseSByZXN0cmljdGl2ZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5taW4ubWF4Ij4gW2xpYi5hbGcubWluLm1heF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBEZWMgMjAwMDwvcD4KPHA+VGhlIHJlcXVpcmVtZW50cyBpbiAyNS4zLjcsIHAxIGFuZCA0IGNhbGwgZm9yIFQgdG8gc2F0aXNmeSB0aGUKcmVxdWlyZW1lbnRzIG9mIDx0dD5MZXNzVGhhbkNvbXBhcmFibGU8L3R0PiAoMjAuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5sZXNzdGhhbmNvbXBhcmFibGUiPiBbbGliLmxlc3N0aGFuY29tcGFyYWJsZV08L2E+KQphbmQgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gKDIwLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuY29weWNvbnN0cnVjdGlibGUiPiBbbGliLmNvcHljb25zdHJ1Y3RpYmxlXTwvYT4pLgpTaW5jZSB0aGUgZnVuY3Rpb25zIHRha2UgYW5kIHJldHVybiB0aGVpciBhcmd1bWVudHMgYW5kIHJlc3VsdCBieQpjb25zdCByZWZlcmVuY2UsIEkgYmVsaWV2ZSB0aGUgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gcmVxdWlyZW1lbnQKaXMgdW5uZWNlc3NhcnkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+IHJlcXVpcmVtZW50LiBTcGVjaWZpY2FsbHksIHJlcGxhY2UKMjUuMy43LCBwMSB3aXRoPC9wPgo8cD48Yj4tMS0gUmVxdWlyZXM6PC9iPiBUeXBlIFQgaXMgPHR0Pkxlc3NUaGFuQ29tcGFyYWJsZTwvdHQ+IAooMjAuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5sZXNzdGhhbmNvbXBhcmFibGUiPiBbbGliLmxlc3N0aGFuY29tcGFyYWJsZV08L2E+KS4KPC9wPgo8cD5hbmQgcmVwbGFjZSAyNS4zLjcsIHA0IHdpdGg8L3A+CjxwPjxiPi00LSBSZXF1aXJlczo8L2I+IFR5cGUgVCBpcyA8dHQ+TGVzc1RoYW5Db21wYXJhYmxlPC90dD4gCigyMC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmxlc3N0aGFuY29tcGFyYWJsZSI+IFtsaWIubGVzc3RoYW5jb21wYXJhYmxlXTwvYT4pLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjgyIj48aDM+MjgyLiZuYnNwO1doYXQgdHlwZXMgZG9lcyBudW1wdW5jdCBncm91cGluZyByZWZlciB0bz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzUgRGVjIDIwMDA8L3A+CjxwPgpQYXJhZ3JhcGggMTYgbWlzdGFrZW5seSBzaW5nbGVzIG91dCBpbnRlZ3JhbCB0eXBlcyBmb3IgaW5zZXJ0aW5nIAp0aG91c2FuZHNfc2VwKCkgY2hhcmFjdGVycy4gIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHN5bnRheCBmb3IgZmxvYXRpbmcgCnBvaW50IG51bWJlcnMgZGVzY3JpYmVkIHVuZGVyIDIyLjIuMy4xLzIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgcGFyYWdyYXBoIDE2IGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CkZvciBpbnRlZ3JhbCB0eXBlcywgcHVuY3QudGhvdXNhbmRzX3NlcCgpIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGludG8gCnRoZSBzZXF1ZW5jZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBwdW5jdC5kb19ncm91cGluZygpIAp1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4uCjwvYmxvY2txdW90ZT4KCjxwPlRvOjwvcD4KCjxibG9ja3F1b3RlPgpGb3IgYXJpdGhtZXRpYyB0eXBlcywgcHVuY3QudGhvdXNhbmRzX3NlcCgpIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGludG8gCnRoZSBzZXF1ZW5jZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBwdW5jdC5kb19ncm91cGluZygpIAp1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4uCjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKQ29wZW5oYWdlbjogT3BpbmlvbnMgd2VyZSBkaXZpZGVkIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbgppbmNvbnNpc3RlbmN5LCBidXQgYXQgYmVzdCBpdCBzZWVtcyB0byBoYXZlIGJlZW4gdW5pbnRlbnRpb25hbC4gIFRoaXMKaXMgb25seSBhbiBpc3N1ZSBmb3IgZmxvYXRpbmctcG9pbnQgb3V0cHV0OiBUaGUgc3RhbmRhcmQgaXMKdW5hbWJpZ3VvdXMgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXJzZSB0aG91c2FuZHNfc2VwIGNoYXJhY3RlcnMKd2hlbiBwZXJmb3JtaW5nIGZsb2F0aW5nLXBvaW50LiAgVGhlIHN0YW5kYXJkIGlzIGFsc28gdW5hbWJpZ3VvdXMgdGhhdAp0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IHRvIHRoZSAiQyIgbG9jYWxlLgpdPC9pPjwvcD4KCjxwPjxpPlsKQSBzdXJ2ZXkgb2YgZXhpc3RpbmcgcHJhY3RpY2UgaXMgbmVlZGVkOyBpdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUKaW1wbGVtZW50YXRpb25zIGRvIGluc2VydCB0aG91c2FuZHNfc2VwIGNoYXJhY3RlcnMgZm9yIGZsb2F0aW5nLXBvaW50Cm91dHB1dCBhbmQgb3RoZXJzIGZhaWwgdG8gaW5zZXJ0IHRob3VzYW5kc19zZXAgY2hhcmFjdGVycyBmb3IgCmZsb2F0aW5nLXBvaW50IGlucHV0IGV2ZW4gdGhvdWdoIHRoaXMgaXMgdW5hbWJpZ3VvdXNseSByZXF1aXJlZCBieSB0aGUKc3RhbmRhcmQuCl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtQ3VyYedhbzogdGhlIGFib3ZlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgdGhlIGNvbnNlbnN1cyBvZgpIb3dhcmQsIEJpbGwsIFBldGUsIEJlbmphbWluLCBOYXRoYW4sIERpZXRtYXIsIEJvcmlzLCBhbmQgTWFydGluLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyODMiPjxoMz4yODMuJm5ic3A7c3RkOjpyZXBsYWNlKCkgcmVxdWlyZW1lbnQgaW5jb3JyZWN0L2luc3VmZmljaWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXBsYWNlIj4gW2xpYi5hbGcucmVwbGFjZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMjAwMDwvcD4KPHA+CihyZXZpc2lvbiBvZiB0aGUgZnVydGhlciBkaXNjdXNzaW9uKQpUaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCB0aGUgcmVxdWlyZXMgY2xhdXNlcyBmb3IgdGhlCmFsZ29yaXRobXMgaW4gMjUuMSBhbmQgMjUuMi4gVGhlIHJlcXVpcmVzIGNsYXVzZSBvZiBlYWNoIGFsZ29yaXRobQpzaG91bGQgZGVzY3JpYmUgdGhlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCByZXF1aXJlbWVudHMgb24gdGhlIGlucHV0cwp0byB0aGUgYWxnb3JpdGhtIHN1Y2ggdGhhdCB0aGUgYWxnb3JpdGhtIGNvbXBpbGVzIGFuZCBydW5zIHByb3Blcmx5LgpNYW55IG9mIHRoZSByZXF1aXJlcyBjbGF1c2VzIGZhaWwgdG8gZG8gdGhpcy4gSGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlIGtpbmRzCm9mIG1pc3Rha2VzOgo8L3A+Cgo8b2w+CjxsaT4KVXNlIG9mIEVxdWFsaXR5Q29tcGFyYWJsZSwgd2hpY2ggb25seSBwdXRzIHJlcXVpcmVtZW50cyBvbiBhIHNpbmdsZQp0eXBlLCB3aGVuIGluIGZhY3QgYW4gZXF1YWxpdHkgb3BlcmF0b3IgaXMgcmVxdWlyZWQgYmV0d2VlbiB0d28KZGlmZmVyZW50IHR5cGVzLCB0eXBpY2FsbHkgZWl0aGVyIFQgYW5kIHRoZSBpdGVyYXRvcidzIHZhbHVlIHR5cGUKb3IgYmV0d2VlbiB0aGUgdmFsdWUgdHlwZXMgb2YgdHdvIGRpZmZlcmVudCBpdGVyYXRvcnMuCjwvbGk+CjxsaT4KVXNlIG9mIEFzc2lnbmFibGUgZm9yIFQgd2hlbiBpbiBmYWN0IHdoYXQgd2FzIG5lZWRlZCBpcyBBc3NpZ25hYmxlCmZvciB0aGUgdmFsdWVfdHlwZSBvZiB0aGUgaXRlcmF0b3IsIGFuZCBjb252ZXJ0YWJpbGl0eSBmcm9tIFQgdG8gdGhlCnZhbHVlX3R5cGUgb2YgdGhlIGl0ZXJhdG9yLiBPciBmb3Igb3V0cHV0IGl0ZXJhdG9ycywgdGhlIHJlcXVpcmVtZW50CnNob3VsZCBiZSB0aGF0IFQgaXMgd3JpdGFibGUgdG8gdGhlIGl0ZXJhdG9yIChvdXRwdXQgaXRlcmF0b3JzIGRvCm5vdCBoYXZlIHZhbHVlIHR5cGVzKS4KPC9saT4KPC9vbD4KCjxwPgpIZXJlIGlzIHRoZSBsaXN0IG9mIGFsZ29yaXRobXMgdGhhdCBjb250YWluIG1pc3Rha2VzOgo8L3A+Cgo8dWw+CjxsaT4yNS4xLjIgc3RkOjpmaW5kPC9saT4KPGxpPjI1LjEuNiBzdGQ6OmNvdW50PC9saT4KPGxpPjI1LjEuOCBzdGQ6OmVxdWFsPC9saT4KPGxpPjI1LjEuOSBzdGQ6OnNlYXJjaCwgc3RkOjpzZWFyY2hfbjwvbGk+CjxsaT4yNS4yLjQgc3RkOjpyZXBsYWNlLCBzdGQ6OnJlcGxhY2VfY29weTwvbGk+CjxsaT4yNS4yLjUgc3RkOjpmaWxsPC9saT4KPGxpPjI1LjIuNyBzdGQ6OnJlbW92ZSwgc3RkOjpyZW1vdmVfY29weTwvbGk+CjwvdWw+Cgo8cD4KQWxzbywgaW4gdGhlIHJlcXVpcmVtZW50cyBmb3IgRXF1YWxpdHlDb21wYXJhYmxlLCB0aGUgcmVxdWlyZW1lbnQgdGhhdAp0aGUgb3BlcmF0b3IgYmUgZGVmaW5lZCBmb3IgY29uc3Qgb2JqZWN0cyBpcyBsYWNraW5nLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4yMC4xLjEgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD5JbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+VDwvdHQ+Lgo8L3A+Cgo8cD50bzwvcD4KCjxwPgpJbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+Y29uc3QgVDwvdHQ+Lgo8L3A+Cgo8cD4yNSBCZXR3ZWVuIHA4IGFuZCBwOTwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHNlbnRlbmNlOjwvcD4KCjxwPldoZW4gdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGFsZ29yaXRobSBnaXZlcyBhbiBleHByZXNzaW9uIHN1Y2ggYXMKPHR0PipmaXJzdCA9PSB2YWx1ZTwvdHQ+IGZvciBhIGNvbmRpdGlvbiwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZXhwcmVzc2lvbgpldmFsdWF0ZSB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBpbiBib29sZWFuIGNvbnRleHRzLjwvcD4KCjxwPjI1LjEuMiBDaGFuZ2UgcDEgYnkgZGVsZXRpbmcgdGhlIHJlcXVpcmVzIGNsYXVzZS48L3A+Cgo8cD4yNS4xLjYgQ2hhbmdlIHAxIGJ5IGRlbGV0aW5nIHRoZSByZXF1aXJlcyBjbGF1c2UuPC9wPgoKPHA+MjUuMS45PC9wPgoKPHA+Q2hhbmdlIHA0IGZyb208L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+RXF1YWxpdHlDb21wYXJhYmxlPC90dD4KKDIwLjEuMSksIHR5cGUgU2l6ZSBpcyBjb252ZXJ0aWJsZSB0byBpbnRlZ3JhbCB0eXBlICg0LjcuMTIuMykuCjwvcD4KCjxwPnRvPC9wPgoKPHA+LTQtIFJlcXVpcmVzOiBUaGUgdHlwZSA8dHQ+U2l6ZTwvdHQ+IGlzIGNvbnZlcnRpYmxlIHRvIGludGVncmFsCnR5cGUgKDQuNy4xMi4zKS48L3A+Cgo8cD4yNS4yLjQgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+QXNzaWduYWJsZTwvdHQ+ICgyMy4xICkgKGFuZCwgZm9yIDx0dD5yZXBsYWNlKCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+ICgyMC4xLjEgKSkuPC9wPgoKPHA+dG88L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFRoZSBleHByZXNzaW9uIDx0dD4qZmlyc3QgPSBuZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHZhbGlkLjwvcD4KCjxwPmFuZCBjaGFuZ2UgcDQgZnJvbTwvcD4KCjxwPi00LSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpIChhbmQsCmZvciA8dHQ+cmVwbGFjZV9jb3B5KCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+CigyMC4xLjEpKS4gVGhlIHJhbmdlcyA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+IGFuZCA8dHQ+W3Jlc3VsdCwgcmVzdWx0ICsKKGxhc3QgLSBmaXJzdCkpPC90dD4gc2hhbGwgbm90IG92ZXJsYXAuPC9wPgoKPHA+dG88L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFRoZSByZXN1bHRzIG9mIHRoZSBleHByZXNzaW9ucyA8dHQ+KmZpcnN0PC90dD4gYW5kCjx0dD5uZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHdyaXRhYmxlIHRvIHRoZSByZXN1bHQgb3V0cHV0IGl0ZXJhdG9yLiBUaGUKcmFuZ2VzIDx0dD5bZmlyc3QsIGxhc3QpPC90dD4gYW5kIDx0dD5bcmVzdWx0LCByZXN1bHQgKyAobGFzdCAtCmZpcnN0KSk8L3R0PiBzaGFsbCBub3Qgb3ZlcmxhcC48L3A+CgoKPHA+MjUuMi41IENoYW5nZSBwMSBmcm9tPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUeXBlIDx0dD5UPC90dD4gaXMgPHR0PkFzc2lnbmFibGU8L3R0PiAoMjMuMSkuIFRoZQp0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4gaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPnRvPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUaGUgZXhwcmVzc2lvbiA8dHQ+dmFsdWU8L3R0PiBtdXN0IGJlIGlzIHdyaXRhYmxlIHRvCnRoZSBvdXRwdXQgaXRlcmF0b3IuIFRoZSB0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4KaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPjI1LjIuNyBDaGFuZ2UgcDEgZnJvbTwvcD4KCjxwPi0xLSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5FcXVhbGl0eUNvbXBhcmFibGU8L3R0PiAoMjAuMS4xKS48L3A+Cgo8cD50bzwvcD4KCjxwPgotMS0gUmVxdWlyZXM6IFRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvciBtdXN0IGJlCjx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpLgo8L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBnZW5lcmFsIGlkZWEgb2YgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGUgZmF1bHR5CnJlcXVpcmVzIGNsYXVzZXMgYW5kIGxldCB0aGUgcmV0dXJucyBhbmQgZWZmZWN0cyBjbGF1c2VzIHNwZWFrIGZvcgp0aGVtc2VsdmVzLiBUaGF0IGlzLCB0aGUgcmV0dXJucyBjbGF1c2VzIGNvbnRhaW4gZXhwcmVzc2lvbnMgdGhhdCBtdXN0CmJlIHZhbGlkLCBhbmQgdGhlcmVmb3JlIGFscmVhZHkgaW1wbHkgdGhlIGNvcnJlY3QgcmVxdWlyZW1lbnRzLiBJbgphZGRpdGlvbiwgYSBzZW50ZW5jZSBpcyBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNoYXB0ZXIgMjUgc2F5aW5nCnRoYXQgZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgY29uZGl0aW9ucyBtdXN0IGV2YWx1YXRlIHRvIHRydWUgb3IgZmFsc2UgaW4KYSBib29sZWFuIGNvbnRleHQuIEFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHNheSB0aGF0IHRoZSB0eXBlIG9mCnRoZXNlIGNvbmRpdGlvbiBleHByZXNzaW9ucyBtdXN0IGJlIGxpdGVyYWxseSBib29sLCBidXQgdGhhdCB3b3VsZCBiZQppbXBvc2luZyBhIGdyZWF0ZXIgcmVzdHJpY3Rpb24gdGhhdCB3aGF0IHRoZSBzdGFuZGFyZCBjdXJyZW50bHkgc2F5cwood2hpY2ggaXMgY29udmVydGlibGUgdG8gYm9vbCkuCjwvcD4KPGhyPgo8YSBuYW1lPSIyODQiPjxoMz4yODQuJm5ic3A7dW5wb3J0YWJsZSBleGFtcGxlIGluIDIwLjMuNywgcDY8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC41LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmNvbXBhcmlzb25zIj4gW2xpYi5jb21wYXJpc29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNiBEZWMgMjAwMDwvcD4KPHA+VGhlIGV4YW1wbGUgaW4gMjAuNS43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5jb21wYXJpc29ucyI+IFtsaWIuY29tcGFyaXNvbnNdPC9hPiwgcDYgc2hvd3MgaG93IHRvIHVzZSB0aGUgQwpsaWJyYXJ5IGZ1bmN0aW9uIDx0dD5zdHJjbXAoKTwvdHQ+IHdpdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYWRhcHRlcgo8dHQ+cHRyX2Z1bigpPC90dD4uIEJ1dCBzaW5jZSBpdCdzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIEMgbGlicmFyeQpmdW5jdGlvbnMgaGF2ZSA8dHQ+ZXh0ZXJuICJDIjwvdHQ+IG9yIDx0dD5leHRlcm4KIkMrKyI8L3R0PiBsaW5rYWdlIFsxNy40LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi51c2luZy5saW5rYWdlIj4gW2xpYi51c2luZy5saW5rYWdlXTwvYT5dLCBhbmQgc2luY2UKZnVuY3Rpb24gcG9pbnRlcnMgd2l0aCBkaWZmZXJlbnQgdGhlIGxhbmd1YWdlIGxpbmthZ2Ugc3BlY2lmaWNhdGlvbnMKKDcuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2RjbC5odG1sI2RjbC5saW5rIj4gW2RjbC5saW5rXTwvYT4pIGFyZSBpbmNvbXBhdGlibGUsIHdoZXRoZXIgdGhpcyBleGFtcGxlIGlzCndlbGwtZm9ybWVkIGlzIHVuc3BlY2lmaWVkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIwLjUuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuY29tcGFyaXNvbnMiPiBbbGliLmNvbXBhcmlzb25zXTwvYT4gcGFyYWdyYXBoIDYgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPls8aT5FeGFtcGxlOjwvaT48L3A+CiAgPHByZT4gICAgcmVwbGFjZV9pZih2LmJlZ2luKCksIHYuZW5kKCksIG5vdDEoYmluZDJuZChwdHJfZnVuKHN0cmNtcCksICJDIikpLCAiQysrIik7CiAgPC9wcmU+CiAgPHA+cmVwbGFjZXMgZWFjaCA8dHQ+QzwvdHQ+IHdpdGggPHR0PkMrKzwvdHQ+IGluIHNlcXVlbmNlIDx0dD52PC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5bPGk+RXhhbXBsZTo8L2k+PC9wPgogIDxwcmU+ICAgIGludCBjb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgICByZXBsYWNlX2lmKHYuYmVnaW4oKSwgdi5lbmQoKSwKICAgICAgICAgICAgICAgbm90MShiaW5kMm5kKHB0cl9mdW4oY29tcGFyZSksICJhYmMiKSksICJkZWYiKTsKICA8L3ByZT4KICA8cD5yZXBsYWNlcyBlYWNoIDx0dD5hYmM8L3R0PiB3aXRoIDx0dD5kZWY8L3R0PiBpbiBzZXF1ZW5jZSA8dHQ+djwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWxzbywgcmVtb3ZlIGZvb3Rub3RlIDIxNSBpbiB0aGF0IHNhbWUgcGFyYWdyYXBoLjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBNaW5vciBjaGFuZ2UgaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uICBTaW5jZSB0aGlzCmlzc3VlIGRlYWxzIGluIHBhcnQgd2l0aCBDIGFuZCBDKysgbGlua2FnZSwgaXQgd2FzIGJlbGlldmVkIHRvIGJlIHRvbwpjb25mdXNpbmcgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBleGFtcGxlIHRvIGJlICJDIiBhbmQgIkMrKyIuCl08L2k+PC9wPgoKPHA+PGk+W1JlZG1vbmQ6IE1vcmUgbWlub3IgY2hhbmdlcy4gIEdvdCByaWQgb2YgdGhlIGZvb3Rub3RlICh3aGljaApzZWVtcyB0byBtYWtlIGEgc3dlZXBpbmcgbm9ybWF0aXZlIHJlcXVpcmVtZW50LCBldmVuIHRob3VnaCBmb290bm90ZXMKYXJlbid0IG5vcm1hdGl2ZSksIGFuZCBjaGFuZ2VkIHRoZSBzZW50ZW5jZSBhZnRlciB0aGUgZm9vdG5vdGUgc28gdGhhdAppdCBjb3JyZXNwb25kcyB0byB0aGUgbmV3IGNvZGUgZnJhZ21lbnQuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjI4NSI+PGgzPjI4NS4mbmJzcDttaW5vciBlZGl0b3JpYWwgZXJyb3JzIGluIGZzdHJlYW0gY3RvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy44LjEuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaWZzdHJlYW0uY29ucyI+IFtsaWIuaWZzdHJlYW0uY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMSBEZWMgMjAwMDwvcD4KPHA+MjcuOC4xLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlmc3RyZWFtLmNvbnMiPiBbbGliLmlmc3RyZWFtLmNvbnNdPC9hPiwgcDIsIDI3LjguMS45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vZnN0cmVhbS5jb25zIj4gW2xpYi5vZnN0cmVhbS5jb25zXTwvYT4sIHAyLCBhbmQKMjcuOC4xLjEyIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtLmNvbnMiPiBbbGliLmZzdHJlYW0uY29uc108L2E+LCBwMiBzYXkgYWJvdXQgdGhlIGVmZmVjdHMgb2YgZWFjaCBjb25zdHJ1Y3RvcjoKPC9wPgoKPHA+Li4uIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlciwgY2FsbHMKPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4gKHdoaWNoIG1heSB0aHJvdyA8dHQ+aW9zX2Jhc2U6OmZhaWx1cmU8L3R0PikuCjwvcD4KCjxwPlRoZSBwYXJlbnRoZXRpY2FsIG5vdGUgZG9lc24ndCBhcHBseSBzaW5jZSB0aGUgY3RvcnMgY2Fubm90IHRocm93IGFuCmV4Y2VwdGlvbiBkdWUgdG8gdGhlIHJlcXVpcmVtZW50IGluIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiwgcDMgCnRoYXQgPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+IGJlIGluaXRpYWxpemVkIHRvIDx0dD5pb3NfYmFzZTo6Z29vZGJpdDwvdHQ+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClN0cmlrZSB0aGUgcGFyZW50aGV0aWNhbCBub3RlIGZyb20gdGhlIEVmZmVjdHMgY2xhdXNlIGluIGVhY2ggb2YgdGhlCnBhcmFncmFwaHMgbWVudGlvbmVkIGFib3ZlLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjg2Ij48aDM+Mjg2LiZuYnNwOyZsdDtjc3RkbGliJmd0OyByZXF1aXJlbWVudHMgbWlzc2luZyBzaXplX3QgdHlwZWRlZjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYy5saWJyYXJ5Ij4gW2xpYi5hbGcuYy5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIERlYyAyMDAwPC9wPgo8cD4KVGhlICZsdDtjc3RkbGliJmd0OyBoZWFkZXIgZmlsZSBjb250YWlucyBwcm90b3R5cGVzIGZvciBic2VhcmNoIGFuZApxc29ydCAoQysrIFN0YW5kYXJkIHNlY3Rpb24gMjUuNCBwYXJhZ3JhcGhzIDMgYW5kIDQpIGFuZCBvdGhlcgpwcm90b3R5cGVzIChDKysgU3RhbmRhcmQgc2VjdGlvbiAyMS40IHBhcmFncmFwaCAxIHRhYmxlIDQ5KSB0aGF0CnJlcXVpcmUgdGhlIHR5cGVkZWYgc2l6ZV90LiBZZXQgc2l6ZV90IGlzIG5vdCBsaXN0ZWQgaW4gdGhlCiZsdDtjc3RkbGliJmd0OyBzeW5vcHNpcyB0YWJsZSA3OCBpbiBzZWN0aW9uIDI1LjQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZSB0eXBlIHNpemVfdCB0byBUYWJsZSA3OCAoc2VjdGlvbiAyNS40KSBhbmQgYWRkCnRoZSB0eXBlIHNpemVfdCAmbHQ7Y3N0ZGxpYiZndDsgdG8gVGFibGUgOTcgKHNlY3Rpb24gQy4yKS4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2luY2Ugc2l6ZV90IGlzIGluICZsdDtzdGRsaWIuaCZndDssIGl0IG11c3QgYWxzbyBiZSBpbiAmbHQ7Y3N0ZGxpYiZndDsuPC9wPgo8aHI+CjxhIG5hbWU9IjI4OCI+PGgzPjI4OC4mbmJzcDsmbHQ7Y2Vycm5vJmd0OyByZXF1aXJlbWVudHMgbWlzc2luZyBtYWNybyBFSUxTRVE8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWRpYWdub3N0aWNzLmh0bWwjbGliLmVycm5vIj4gW2xpYi5lcnJub108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBEZWMgMjAwMDwvcD4KPHA+CklTTy9JRUMgOTg5OToxOTkwL0FtZW5kbWVudDE6MTk5NCBTZWN0aW9uIDQuMyBTdGF0ZXM6ICJUaGUgbGlzdApvZiBtYWNyb3MgZGVmaW5lZCBpbiAmbHQ7ZXJybm8uaCZndDsgaXMgYWRqdXN0ZWQgdG8gaW5jbHVkZSBhIG5ldwptYWNybywgRUlMU0VRIgo8L3A+Cgo8cD4KSVNPL0lFQyAxNDg4MjoxOTk4KEUpIHNlY3Rpb24gMTkuMyBkb2VzIG5vdCByZWZlcgp0byB0aGUgYWJvdmUgYW1lbmRtZW50Lgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpVcGRhdGUgVGFibGUgMjYgKHNlY3Rpb24gMTkuMykgIkhlYWRlciAgJmx0O2NlcnJubyZndDsgc3lub3BzaXMiCmFuZCBUYWJsZSA5NSAoc2VjdGlvbiBDLjIpICJTdGFuZGFyZCBNYWNyb3MiIHRvIGluY2x1ZGUgRUlMU0VRLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjkxIj48aDM+MjkxLiZuYnNwO1VuZGVyc3BlY2lmaWNhdGlvbiBvZiBzZXQgYWxnb3JpdGhtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zZXQub3BlcmF0aW9ucyI+IFtsaWIuYWxnLnNldC5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAzIEphbiAyMDAxPC9wPgo8cD4KVGhlIHN0YW5kYXJkIGxpYnJhcnkgY29udGFpbnMgZm91ciBhbGdvcml0aG1zIHRoYXQgY29tcHV0ZSBzZXQKb3BlcmF0aW9ucyBvbiBzb3J0ZWQgcmFuZ2VzOiA8dHQ+c2V0X3VuaW9uPC90dD4sIDx0dD5zZXRfaW50ZXJzZWN0aW9uPC90dD4sCjx0dD5zZXRfZGlmZmVyZW5jZTwvdHQ+LCBhbmQgPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+LiAgRWFjaApvZiB0aGVzZSBhbGdvcml0aG1zIHRha2VzIHR3byBzb3J0ZWQgcmFuZ2VzIGFzIGlucHV0cywgYW5kIHdyaXRlcyB0aGUKb3V0cHV0IG9mIHRoZSBhcHByb3ByaWF0ZSBzZXQgb3BlcmF0aW9uIHRvIGFuIG91dHB1dCByYW5nZS4gIFRoZSBlbGVtZW50cwppbiB0aGUgb3V0cHV0IHJhbmdlIGFyZSBzb3J0ZWQuCjwvcD4KCjxwPgpUaGUgb3JkaW5hcnkgbWF0aGVtYXRpY2FsIGRlZmluaXRpb25zIGFyZSBnZW5lcmFsaXplZCBzbyB0aGF0IHRoZXkKYXBwbHkgdG8gcmFuZ2VzIGNvbnRhaW5pbmcgbXVsdGlwbGUgY29waWVzIG9mIGEgZ2l2ZW4gZWxlbWVudC4gIFR3bwplbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSAidGhlIHNhbWUiIGlmLCBhY2NvcmRpbmcgdG8gYW4Kb3JkZXJpbmcgcmVsYXRpb24gcHJvdmlkZWQgYnkgdGhlIHVzZXIsIG5laXRoZXIgb25lIGlzIGxlc3MgdGhhbiB0aGUKb3RoZXIuICBTbywgZm9yIGV4YW1wbGUsIGlmIG9uZSBpbnB1dCByYW5nZSBjb250YWlucyBmaXZlIGNvcGllcyBvZiBhbgplbGVtZW50IGFuZCBhbm90aGVyIGNvbnRhaW5zIHRocmVlLCB0aGUgb3V0cHV0IHJhbmdlIG9mIDx0dD5zZXRfdW5pb248L3R0Pgp3aWxsIGNvbnRhaW4gZml2ZSBjb3BpZXMsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9pbnRlcnNlY3Rpb248L3R0PiB3aWxsIGNvbnRhaW4gdGhyZWUsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9kaWZmZXJlbmNlPC90dD4gd2lsbCBjb250YWluIHR3bywgYW5kIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+IHdpbGwgY29udGFpbiB0d28uCjwvcD4KCjxwPgpCZWNhdXNlIHR3byBlbGVtZW50cyBjYW4gYmUgInRoZSBzYW1lIiBmb3IgdGhlIHB1cnBvc2VzCm9mIHRoZXNlIHNldCBhbGdvcml0aG1zLCB3aXRob3V0IGJlaW5nIGlkZW50aWNhbCBpbiBvdGhlciByZXNwZWN0cwooY29uc2lkZXIsIGZvciBleGFtcGxlLCBzdHJpbmdzIHVuZGVyIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiksCnRoaXMgcmFpc2VzIGEgbnVtYmVyIG9mIHVuYW5zd2VyZWQgcXVlc3Rpb25zOgo8L3A+Cgo8dWw+CjxsaT5JZiB3ZSdyZSBjb3B5aW5nIGFuIGVsZW1lbnQgdGhhdCdzIHByZXNlbnQgaW4gYm90aCBvZiB0aGUKaW5wdXQgcmFuZ2VzLCB3aGljaCBvbmUgZG8gd2UgY29weSBpdCBmcm9tPzwvbGk+CjxsaT5JZiB0aGVyZSBhcmUgPGk+bjwvaT4gY29waWVzIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHJlbGV2YW50CmlucHV0IHJhbmdlLCBhbmQgdGhlIG91dHB1dCByYW5nZSB3aWxsIGNvbnRhaW4gZmV3ZXIgY29waWVzIChzYXkKPGk+bTwvaT4pIHdoaWNoIG9uZXMgZG8gd2UgY2hvb3NlPyAgVGhlIGZpcnN0IDxpPm08L2k+LCBvciB0aGUgbGFzdAo8aT5tPC9pPiwgb3Igc29tZXRoaW5nIGVsc2U/PC9saT4KPGxpPkFyZSB0aGVzZSBvcGVyYXRpb25zIHN0YWJsZT8gIFRoYXQgaXMsIGRvZXMgYSBydW4gb2YgZXF1aXZhbGVudAplbGVtZW50cyBhcHBlYXIgaW4gdGhlIG91dHB1dCByYW5nZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBhcyBpdAphcHBlYXJlZCBpbiB0aGUgaW5wdXQgcmFuZ2Uocyk/PC9saT4KPC91bD4KCjxwPgpUaGUgc3RhbmRhcmQgc2hvdWxkIGVpdGhlciBhbnN3ZXIgdGhlc2UgcXVlc3Rpb25zLCBvciBleHBsaWNpdGx5CnNheSB0aGF0IHRoZSBhbnN3ZXJzIGFyZSB1bnNwZWNpZmllZC4gIEkgcHJlZmVyIHRoZSBmb3JtZXIgb3B0aW9uLApzaW5jZSwgYXMgZmFyIGFzIEkga25vdywgYWxsIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBiZWhhdmUgdGhlCnNhbWUgd2F5Lgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIDI1LjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LnVuaW9uIj4gW2xpYi5zZXQudW5pb25dPC9hPiBwYXJhZ3JhcGggNTo8L3A+CjxibG9ja3F1b3RlPgpJZiBbZmlyc3QxLCBsYXN0MSkgY29udGFpbnMgPGk+bTwvaT4gZWxlbWVudHMgdGhhdCBhcmUgZXF1aXZhbGVudCB0bwplYWNoIG90aGVyIGFuZCBbZmlyc3QyLCBsYXN0MikgY29udGFpbnMgPGk+bjwvaT4gZWxlbWVudHMgdGhhdCBhcmUKZXF1aXZhbGVudCB0byB0aGVtLCB0aGVuIG1heCg8aT5tPC9pPiwgPGk+bjwvaT4pIG9mIHRoZXNlIGVsZW1lbnRzCndpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgcmFuZ2U6IGFsbCA8aT5tPC9pPiBvZiB0aGVzZSBlbGVtZW50cwpmcm9tIFtmaXJzdDEsIGxhc3QxKSwgYW5kIHRoZSBsYXN0IG1heCg8aT5uLW08L2k+LCAwKSBvZiB0aGVtIGZyb20KW2ZpcnN0MiwgbGFzdDIpLCBpbiB0aGF0IG9yZGVyLgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIDI1LjMuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LmludGVyc2VjdGlvbiI+IFtsaWIuc2V0LmludGVyc2VjdGlvbl08L2E+IHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvIGVhY2gKb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZSBmaXJzdCBtaW4oPGk+bTwvaT4sIDxpPm48L2k+KSBvZiB0aG9zZSAKZWxlbWVudHMgZnJvbSBbZmlyc3QxLCBsYXN0MSkgYXJlIGNvcGllZCB0byB0aGUgb3V0cHV0IHJhbmdlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgYSBuZXcgcGFyYWdyYXBoLCA8Yj5Ob3RlczwvYj4sIGFmdGVyIDI1LjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LmRpZmZlcmVuY2UiPiBbbGliLnNldC5kaWZmZXJlbmNlXTwvYT4KcGFyYWdyYXBoIDQ6PC9wPgo8YmxvY2txdW90ZT4KSWYgW2ZpcnN0MSwgbGFzdDEpIGNvbnRhaW5zIDxpPm08L2k+IGVsZW1lbnRzIHRoYXQgYXJlIGVxdWl2YWxlbnQgdG8gZWFjaApvdGhlciBhbmQgW2ZpcnN0MiwgbGFzdDIpIGNvbnRhaW5zIDxpPm48L2k+IGVsZW1lbnRzIHRoYXQgYXJlCmVxdWl2YWxlbnQgdG8gdGhlbSwgdGhlIGxhc3QgbWF4KDxpPm0tbjwvaT4sIDApIGVsZW1lbnRzIGZyb20gCltmaXJzdDEsIGxhc3QxKSBhcmUgY29waWVkIHRvIHRoZSBvdXRwdXQgcmFuZ2UuCjwvYmxvY2txdW90ZT4KCjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGgsIDxiPk5vdGVzPC9iPiwgYWZ0ZXIgMjUuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5zZXQuc3ltbWV0cmljLmRpZmZlcmVuY2UiPiBbbGliLnNldC5zeW1tZXRyaWMuZGlmZmVyZW5jZV08L2E+CnBhcmFncmFwaCA0OjwvcD4KPGJsb2NrcXVvdGU+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvCmVhY2ggb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZW4gfDxpPm0gLSBuPC9pPnwgb2YgdGhvc2UgZWxlbWVudHMgd2lsbCBiZQpjb3BpZWQgdG8gdGhlIG91dHB1dCByYW5nZTogdGhlIGxhc3QgPGk+bSAtIG48L2k+IG9mIHRoZXNlIGVsZW1lbnRzCmZyb20gW2ZpcnN0MSwgbGFzdDEpIGlmIDxpPm08L2k+ICZndDsgPGk+bjwvaT4sIGFuZCB0aGUgbGFzdCA8aT5uIC0KbTwvaT4gb2YgdGhlc2UgZWxlbWVudHMgZnJvbSBbZmlyc3QyLCBsYXN0MikgaWYgPGk+bTwvaT4gJmx0OyA8aT5uPC9pPi4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1NhbnRhIENydXo6IGl0J3MgYmVsaWV2ZWQgdGhhdCB0aGlzIGxhbmd1YWdlIGlzIGNsZWFyZXIgdGhhbgogIHdoYXQncyBpbiB0aGUgU3RhbmRhcmQuICBIb3dldmVyLCBpdCdzIGFsc28gYmVsaWV2ZWQgdGhhdCB0aGUKICBTdGFuZGFyZCBtYXkgYWxyZWFkeSBtYWtlIHRoZXNlIGd1YXJhbnRlZXMgKGFsdGhvdWdoIG5vdCBxdWl0ZSBpbgogIHRoZXNlIHdvcmRzKS4gIEJpbGwgYW5kIEhvd2FyZCB3aWxsIGNoZWNrIGFuZCBzZWUgd2hldGhlciB0aGV5IHRoaW5rCiAgdGhhdCBzb21lIG9yIGFsbCBvZiB0aGVzZSBjaGFuZ2VzIG1heSBiZSByZWR1bmRhbnQuICBJZiBzbywgd2UgbWF5CiAgY2xvc2UgdGhpcyBpc3N1ZSBhcyBOQUQuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rm9yIHNpbXBsZSBjYXNlcywgdGhlc2UgZGVzY3JpcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvIHdoYXQncwogIGFscmVhZHkgaW4gdGhlIFN0YW5kYXJkLiAgRm9yIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMsIHRoZXkgZGVzY3JpYmUKICB0aGUgYmVoYXZpb3Igb2YgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLjwvcD4KPGhyPgo8YSBuYW1lPSIyOTIiPjxoMz4yOTIuJm5ic3A7ZWZmZWN0cyBvZiBhLmNvcHlmbXQgKGEpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5tZW1iZXJzIj4gW2xpYi5iYXNpYy5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNSBKYW4gMjAwMTwvcD4KPHA+VGhlIEVmZmVjdHMgY2xhdXNlIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24gPHR0PmNvcHlmbXQoKTwvdHQ+IGluCjI3LjQuNC4yLCBwMTUgZG9lc24ndCBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSB0aGUgbGVmdC1oYW5kIHNpZGUKYXJndW1lbnQgaXMgaWRlbnRpY2FsIHRvIHRoZSBhcmd1bWVudCBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLCB0aGF0IGlzCjx0dD4odGhpcyA9PSAmYW1wO3Jocyk8L3R0Pi4gIElmIHRoZSB0d28gYXJndW1lbnRzIGFyZSBpZGVudGljYWwgdGhlcmUKaXMgbm8gbmVlZCB0byBjb3B5IGFueSBvZiB0aGUgZGF0YSBtZW1iZXJzIG9yIGNhbGwgYW55IGNhbGxiYWNrcwpyZWdpc3RlcmVkIHdpdGggPHR0PnJlZ2lzdGVyX2NhbGxiYWNrKCk8L3R0Pi4gIEFsc28sIGFzIEhvd2FyZCBIaW5uYW50CnBvaW50cyBvdXQgaW4gbWVzc2FnZSBjKytzdGQtbGliLTgxNDkgaXQgYXBwZWFycyB0byBiZSBpbmNvcnJlY3QgdG8KYWxsb3cgdGhlIG9iamVjdCB0byBmaXJlIDx0dD5lcmFzZV9ldmVudDwvdHQ+IGZvbGxvd2VkIGJ5Cjx0dD5jb3B5Zm10X2V2ZW50PC90dD4gc2luY2UgdGhlIGNhbGxiYWNrIGhhbmRsaW5nIHRoZSBsYXR0ZXIgZXZlbnQKbWF5IGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IGZyZWVkIGJ5IHRoZSBmb3JtZXIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIEVmZmVjdHMgY2xhdXNlIGluIDI3LjQuNC4yLCBwMTUgZnJvbTwvcD4KCjxibG9ja3F1b3RlPgo8Yj4tMTUtIEVmZmVjdHM6PC9iPkFzc2lnbnMgdG8gdGhlIG1lbWJlciBvYmplY3RzIG9mIDx0dD4qdGhpczwvdHQ+CnRoZSBjb3JyZXNwb25kaW5nIG1lbWJlciBvYmplY3RzIG9mIDx0dD5yaHM8L3R0PiwgZXhjZXB0IHRoYXQuLi4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KPGI+LTE1LSBFZmZlY3RzOjwvYj5JZiA8dHQ+KHRoaXMgPT0gJmFtcDtyaHMpPC90dD4gZG9lcyBub3RoaW5nLiBPdGhlcndpc2UKYXNzaWducyB0byB0aGUgbWVtYmVyIG9iamVjdHMgb2YgPHR0Pip0aGlzPC90dD4gdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVyCm9iamVjdHMgb2YgPHR0PnJoczwvdHQ+LCBleGNlcHQgdGhhdC4uLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjk0Ij48aDM+Mjk0LiZuYnNwO1VzZXIgZGVmaW5lZCBtYWNyb3MgYW5kIHN0YW5kYXJkIGhlYWRlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLm1hY3JvLm5hbWVzIj4gW2xpYi5tYWNyby5uYW1lc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0phbWVzIEthbnplJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEphbiAyMDAxPC9wPgo8cD5QYXJhZ3JhcGggMiBvZiAxNy40LjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLm1hY3JvLm5hbWVzIj4gW2xpYi5tYWNyby5uYW1lc108L2E+IHJlYWRzOiAiQQp0cmFuc2xhdGlvbiB1bml0IHRoYXQgaW5jbHVkZXMgYSBoZWFkZXIgc2hhbGwgbm90IGNvbnRhaW4gYW55IG1hY3Jvcwp0aGF0IGRlZmluZSBuYW1lcyBkZWNsYXJlZCBpbiB0aGF0IGhlYWRlci4iIEFzIEkgcmVhZCB0aGlzLCBpdAp3b3VsZCBtZWFuIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9ncmFtIGlzIGxlZ2FsOjwvcD4KCjxwcmU+ICAjZGVmaW5lIG5wb3MgMy4xNAogICNpbmNsdWRlICZsdDtzc3RyZWFtJmd0Owo8L3ByZT4KCjxwPnNpbmNlIG5wb3MgaXMgbm90IGRlZmluZWQgaW4gJmx0O3NzdHJlYW0mZ3Q7LiAgSXQgaXMsIGhvd2V2ZXIsIGRlZmluZWQKaW4gJmx0O3N0cmluZyZndDssIGFuZCBpdCBpcyBoYXJkIHRvIGltYWdpbmUgYW4gaW1wbGVtZW50YXRpb24gaW4Kd2hpY2ggJmx0O3NzdHJlYW0mZ3Q7IGRpZG4ndCBpbmNsdWRlICZsdDtzdHJpbmcmZ3Q7LjwvcD4KCjxwPkkgdGhpbmsgdGhhdCB0aGlzIHBocmFzZSB3YXMgcHJvYmFibHkgZm9ybXVsYXRlZCBiZWZvcmUgaXQgd2FzCmRlY2lkZWQgdGhhdCBhIHN0YW5kYXJkIGhlYWRlciBtYXkgZnJlZWx5IGluY2x1ZGUgb3RoZXIgc3RhbmRhcmQKaGVhZGVycy4gIFRoZSBwaHJhc2Ugd291bGQgYmUgcGVyZmVjdGx5IGFwcHJvcHJpYXRlIGZvciBDLCBmb3IKZXhhbXBsZS4gIEluIGxpZ2h0IG9mIDE3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5oZWFkZXJzIj4gW2xpYi5yZXMub24uaGVhZGVyc108L2E+IHBhcmFncmFwaCAxLCBob3dldmVyLAppdCBpc24ndCBzdHJpbmdlbnQgZW5vdWdoLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5Gb3IgMTcuNC4zLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5tYWNyby5uYW1lcyI+IFtsaWIubWFjcm8ubmFtZXNdPC9hPiwgcmVwbGFjZSB0aGUgY3VycmVudCB3b3JkaW5nLCB3aGljaCByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogICAgIDxwPkVhY2ggbmFtZSBkZWZpbmVkIGFzIGEgbWFjcm8gaW4gYSBoZWFkZXIgaXMgcmVzZXJ2ZWQgdG8gdGhlCiAgICAgaW1wbGVtZW50YXRpb24gZm9yIGFueSB1c2UgaWYgdGhlIHRyYW5zbGF0aW9uIHVuaXQgaW5jbHVkZXMKICAgICB0aGUgaGVhZGVyLjE2OCk8L3A+CgogICAgIDxwPkEgdHJhbnNsYXRpb24gdW5pdCB0aGF0IGluY2x1ZGVzIGEgaGVhZGVyIHNoYWxsIG5vdCBjb250YWluIGFueQogICAgIG1hY3JvcyB0aGF0IGRlZmluZSBuYW1lcyBkZWNsYXJlZCBvciBkZWZpbmVkIGluIHRoYXQgaGVhZGVyLiBOb3Igc2hhbGwKICAgICBzdWNoIGEgdHJhbnNsYXRpb24gdW5pdCBkZWZpbmUgbWFjcm9zIGZvciBuYW1lcyBsZXhpY2FsbHkKICAgICBpZGVudGljYWwgdG8ga2V5d29yZHMuPC9wPgoKICAgICA8cD4xNjgpIEl0IGlzIG5vdCBwZXJtaXNzaWJsZSB0byByZW1vdmUgYSBsaWJyYXJ5IG1hY3JvIGRlZmluaXRpb24gYnkKICAgICB1c2luZyB0aGUgI3VuZGVmIGRpcmVjdGl2ZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGggdGhlIHdvcmRpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgICAgPHA+QSB0cmFuc2xhdGlvbiB1bml0IHRoYXQgaW5jbHVkZXMgYSBzdGFuZGFyZCBsaWJyYXJ5IGhlYWRlciBzaGFsbCBub3QKICAgICAjZGVmaW5lIG9yICN1bmRlZiBuYW1lcyBkZWNsYXJlZCBpbiBhbnkgc3RhbmRhcmQgbGlicmFyeSBoZWFkZXIuPC9wPgoKICAgICA8cD5BIHRyYW5zbGF0aW9uIHVuaXQgc2hhbGwgbm90ICNkZWZpbmUgb3IgI3VuZGVmIG5hbWVzIGxleGljYWxseQogICAgIGlkZW50aWNhbCB0byBrZXl3b3Jkcy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltMaWxsZWhhbW1lcjogQmVtYW4gcHJvdmlkZWQgbmV3IHdvcmRpbmddPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMjk1Ij48aDM+Mjk1LiZuYnNwO0lzIGFicyBkZWZpbmVkIGluICZsdDtjbWF0aCZndDs/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5udW1hcnJheSI+IFtsaWIubnVtYXJyYXldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKZW5zIE1hdXJlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBKYW4gMjAwMTwvcD4KPHA+ClRhYmxlIDgwIGxpc3RzIHRoZSBjb250ZW50cyBvZiB0aGUgJmx0O2NtYXRoJmd0OyBoZWFkZXIuICBJdCBkb2VzIG5vdApsaXN0IDx0dD5hYnMoKTwvdHQ+LiAgSG93ZXZlciwgMjYuNSwgcGFyYWdyYXBoIDYsIHdoaWNoIGxpc3RzIGFkZGVkIApzaWduYXR1cmVzIHByZXNlbnQgaW4gJmx0O2NtYXRoJmd0OywgZG9lcyBzYXkgdGhhdCBzZXZlcmFsIG92ZXJsb2FkcwpvZiA8dHQ+YWJzKCk8L3R0PiBzaG91bGQgYmUgZGVmaW5lZCBpbiAmbHQ7Y21hdGgmZ3Q7Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCA8dHQ+YWJzPC90dD4gdG8gVGFibGUgODAuICBBbHNvLCByZW1vdmUgdGhlIHBhcmVudGhldGljYWwgbGlzdApvZiBmdW5jdGlvbnMgIihhYnMoKSwgZGl2KCksIHJhbmQoKSwgc3JhbmQoKSkiIGZyb20gMjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5udW1hcnJheSI+IFtsaWIubnVtYXJyYXldPC9hPiwKcGFyYWdyYXBoIDEuCjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBNb2RpZmllZCBwcm9wb3NlZCByZXNvbHV0aW9uIHNvIHRoYXQgaXQgYWxzbyBnZXRzCnJpZCBvZiB0aGF0IHZlc3RpZ2lhbCBsaXN0IG9mIGZ1bmN0aW9ucyBpbiBwYXJhZ3JhcGggMS5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbGwgdGhpcyBEUiBkb2VzIGlzIGZpeCBhIHR5cG87IGl0J3MgdW5jb250cm92ZXJzaWFsLiAgQSAKc2VwYXJhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSdyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaW4gCnB1dHRpbmcgc29tZSBvdmVybG9hZHMgaW4gJmx0O2NtYXRoJmd0OyB0aGF0IHdlIGFyZW4ndCBhbHNvIApwdXR0aW5nIGluICZsdDtjc3RkbGliJmd0Oy4gIFRoYXQncyBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjI5NyI+PGgzPjI5Ny4mbmJzcDtjb25zdF9tZW1fZnVuX3QmbHQ7Jmd0Ozo6YXJndW1lbnRfdHlwZSBzaG91bGQgYmUgY29uc3QgVCo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC41LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmxvZ2ljYWwub3BlcmF0aW9ucyI+IFtsaWIubG9naWNhbC5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgSmFuIDIwMDE8L3A+CjxwPlRoZSBjbGFzcyB0ZW1wbGF0ZXMgPHR0PmNvbnN0X21lbV9mdW5fdDwvdHQ+IGluIDIwLjUuOCwgcDggYW5kCjx0dD5jb25zdF9tZW1fZnVuMV90PC90dD4KaW4gMjAuNS44LCBwOSBkZXJpdmUgZnJvbSA8dHQ+dW5hcnlfZnVuY3Rpb24mbHQ7VCosIFMmZ3Q7PC90dD4sIGFuZAo8dHQ+YmluYXJ5X2Z1bmN0aW9uJmx0O1QqLApBLCBTJmd0OzwvdHQ+LCByZXNwZWN0aXZlbHkuIENvbnNlcXVlbnRseSwgdGhlaXIgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiwgYW5kCjx0dD5maXJzdF9hcmd1bWVudF90eXBlPC90dD4KbWVtYmVycywgcmVzcGVjdGl2ZWx5LCBhcmUgYm90aCBkZWZpbmVkIHRvIGJlIDx0dD5UKjwvdHQ+IChub24tY29uc3QpLgpIb3dldmVyLCB0aGVpciBmdW5jdGlvbiBjYWxsIG1lbWJlciBvcGVyYXRvciB0YWtlcyBhIDx0dD5jb25zdCBUKjwvdHQ+CmFyZ3VtZW50LiBJdCBpcyBteSBvcGluaW9uIHRoYXQgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiBzaG91bGQgYmUgPHR0PmNvbnN0ClQqPC90dD4gaW5zdGVhZCwgc28gdGhhdCBvbmUgY2FuIGVhc2lseSByZWZlciB0byBpdCBpbiBnZW5lcmljIGNvZGUuIFRoZQpleGFtcGxlIGJlbG93IGRlcml2ZWQgZnJvbSBleGlzdGluZyBjb2RlIGZhaWxzIHRvIGNvbXBpbGUgZHVlIHRvIHRoZQpkaXNjcmVwYW5jeToKPC9wPgoKPHA+PHR0PnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OzwvdHQ+Cjxicj48dHQ+dm9pZCBmb28gKHR5cGVuYW1lIFQ6OmFyZ3VtZW50X3R5cGUgYXJnKSZuYnNwOyZuYnNwOyAvLyAjMTwvdHQ+Cjxicj48dHQ+ezwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVuYW1lIFQ6OnJlc3VsdF90eXBlIChUOjoqcGYpICh0eXBlbmFtZQpUOjphcmd1bWVudF90eXBlKQpjb25zdCA9Jm5ic3A7Jm5ic3A7IC8vICMyPC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJmFtcDtUOjpvcGVyYXRvcigpOzwvdHQ+Cjxicj48dHQ+fTwvdHQ+CjwvcD4KCjxwPjx0dD5zdHJ1Y3QgWCB7IC8qIC4uLiAqLyB9OzwvdHQ+PC9wPgoKPHA+PHR0PmludCBtYWluICgpPC90dD4KPGJyPjx0dD57PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgWCB4OzwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGZvbyZsdDtzdGQ6OmNvbnN0X21lbV9mdW5fdCZsdDt2b2lkLCBYJmd0OwomZ3Q7KCZhbXA7eCk7Jm5ic3A7Jm5ic3A7Ci8vICMzPC90dD4KPGJyPjx0dD59PC90dD4KPC9wPgoKPHA+IzEgPHR0PmZvbygpPC90dD4gdGFrZXMgYSBwbGFpbiB1bnF1YWxpZmllZCA8dHQ+WCo8L3R0PiBhcyBhbiBhcmd1bWVudAo8YnI+IzIgdGhlIHR5cGUgb2YgdGhlIHBvaW50ZXIgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHR5cGUgb2YgdGhlIG1lbWJlcgpmdW5jdGlvbgo8YnI+IzMgdGhlIGFkZHJlc3Mgb2YgYSBjb25zdGFudCBiZWluZyBwYXNzZWQgdG8gYSBmdW5jdGlvbiB0YWtpbmcgYSBub24tY29uc3QKPHR0PlgqPC90dD4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgdGhlIHRvcCBwb3J0aW9uIG9mIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFzcyB0ZW1wbGF0ZQpjb25zdF9tZW1fZnVuX3QgaW4gMjAuNS44LCBwOAo8L3A+CjxwPjx0dD50ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCZndDsgY2xhc3MgY29uc3RfbWVtX2Z1bl90PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgOiBwdWJsaWMKdW5hcnlfZnVuY3Rpb24mbHQ7VCosIFMmZ3Q7IHs8L3R0Pgo8L3A+CjxwPndpdGg8L3A+CjxwPjx0dD50ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCZndDsgY2xhc3MgY29uc3RfbWVtX2Z1bl90PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgOiBwdWJsaWMKdW5hcnlfZnVuY3Rpb24mbHQ7PGI+Y29uc3Q8L2I+IFQqLCBTJmd0OyB7PC90dD4KPC9wPgo8cD5BbHNvIHJlcGxhY2UgdGhlIHRvcCBwb3J0aW9uIG9mIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFzcyB0ZW1wbGF0ZQpjb25zdF9tZW1fZnVuMV90IGluIDIwLjUuOCwgcDk8L3A+CjxwPjx0dD50ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQSZndDsgY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDogcHVibGljCmJpbmFyeV9mdW5jdGlvbiZsdDtUKiwgQSwgUyZndDsgezwvdHQ+CjwvcD4KPHA+d2l0aDwvcD4KPHA+PHR0PnRlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBJmd0OyBjbGFzcyBjb25zdF9tZW1fZnVuMV90PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgOiBwdWJsaWMKYmluYXJ5X2Z1bmN0aW9uJmx0OzxiPmNvbnN0PC9iPiBUKiwgQSwgUyZndDsgezwvdHQ+CjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgc2ltcGx5IGEgY29udHJhZGljdGlvbjogdGhlIDx0dD5hcmd1bWVudF90eXBlPC90dD4gdHlwZWRlZiwKYW5kIHRoZSBhcmd1bWVudCB0eXBlIGl0c2VsZiwgYXJlIG5vdCB0aGUgc2FtZS48L3A+Cjxocj4KPGEgbmFtZT0iMjk4Ij48aDM+Mjk4LiZuYnNwOzo6b3BlcmF0b3IgZGVsZXRlW10gcmVxdWlyZW1lbnQgaW5jb3JyZWN0L2luc3VmZmljaWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjUuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5hcnJheSI+IFtsaWIubmV3LmRlbGV0ZS5hcnJheV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0pvaG4gQS4gUGVkcmV0dGkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgSmFuIDIwMDE8L3A+CjxwPgpUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiA8dHQ+b3BlcmF0b3IgZGVsZXRlW108L3R0PiBkZXNjcmliZWQgaW4gMTguNS4xLjIsIHAxMiAtCm5hbWVseSB0aGF0IGZvciBub24tbnVsbCB2YWx1ZSBvZiA8aT5wdHI8L2k+LCB0aGUgb3BlcmF0b3IgcmVjbGFpbXMgc3RvcmFnZQphbGxvY2F0ZWQgYnkgdGhlIGVhcmxpZXIgY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3W108L3R0PiAtIGlzIG5vdApjb3JyZWN0IGluIGFsbCBjYXNlcy4gU2luY2UgdGhlIHNwZWNpZmllZCA8dHQ+b3BlcmF0b3IgbmV3W108L3R0PiBkZWZhdWx0CmJlaGF2aW9yIGlzIHRvIGNhbGwgPHR0Pm9wZXJhdG9yIG5ldzwvdHQ+ICgxOC41LjEuMiwgcDQsIHA4KSwgd2hpY2ggY2FuIGJlCnJlcGxhY2VkLCBhbG9uZyB3aXRoIDx0dD5vcGVyYXRvciBkZWxldGU8L3R0PiwgYnkgdGhlIHVzZXIsIHRvIGltcGxlbWVudCB0aGVpcgpvd24gbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBzcGVjaWZpZWQgZGVmYXVsdCBiZWhhdmlvciBvZjx0dD4gb3BlcmF0b3IKZGVsZXRlW108L3R0PiBtdXN0IGJlIHRvIGNhbGwgPHR0Pm9wZXJhdG9yIGRlbGV0ZTwvdHQ+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE4LjUuMS4yLCBwMTIgZnJvbTwvcD4KPGJsb2NrcXVvdGU+CjxiPi0xMi08L2I+IDxiPkRlZmF1bHQgYmVoYXZpb3I6PC9iPgo8dWw+CjxsaT4KRm9yIGEgbnVsbCB2YWx1ZSBvZiA8aT48dHQ+cHRyPC90dD48L2k+ICwgZG9lcyBub3RoaW5nLgo8L2xpPgo8bGk+CkFueSBvdGhlciB2YWx1ZSBvZiA8aT48dHQ+cHRyPC90dD48L2k+IHNoYWxsIGJlIGEgdmFsdWUgcmV0dXJuZWQKZWFybGllciBieSBhIGNhbGwgdG8gdGhlIGRlZmF1bHQgPHR0Pm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KTwvdHQ+LgpbRm9vdG5vdGU6IFRoZSB2YWx1ZSBtdXN0IG5vdCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgYnkgYW4gaW50ZXJ2ZW5pbmcKY2FsbCB0byA8dHQ+b3BlcmF0b3IgZGVsZXRlW10odm9pZCopPC90dD4gKDE3LjQuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5hcmd1bWVudHMiPiBbbGliLnJlcy5vbi5hcmd1bWVudHNdPC9hPikuCi0tLSBlbmQgZm9vdG5vdGVdCkZvciBzdWNoIGEgbm9uLW51bGwgdmFsdWUgb2YgPGk+PHR0PnB0cjwvdHQ+PC9pPiAsIHJlY2xhaW1zIHN0b3JhZ2UKYWxsb2NhdGVkIGJ5IHRoZSBlYXJsaWVyIGNhbGwgdG8gdGhlIGRlZmF1bHQgPHR0Pm9wZXJhdG9yIG5ld1tdPC90dD4uCjwvbGk+CjwvdWw+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxiPi0xMi08L2I+IDxiPkRlZmF1bHQgYmVoYXZpb3I6IDwvYj5DYWxscyA8dHQ+b3BlcmF0b3IKZGVsZXRlKDwvdHQ+PGk+cHRyPC9pPikKb3IgPHR0Pm9wZXJhdG9yIGRlbGV0ZSg8aT5wdHI8L2k+LCBzdGQ6Om5vdGhyb3cpPC90dD4gcmVzcGVjdGl2ZWx5Lgo8L2Jsb2NrcXVvdGU+CjxwPmFuZCBleHB1bmdlIHBhcmFncmFwaCAxMy48L3A+Cjxocj4KPGEgbmFtZT0iMzAwIj48aDM+MzAwLiZuYnNwO2xpc3Q6Om1lcmdlKCkgc3BlY2lmaWNhdGlvbiBpbmNvbXBsZXRlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5kZXF1ZS5zcGVjaWFsIj4gW2xpYi5kZXF1ZS5zcGVjaWFsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Sm9obiBQZWRyZXR0aSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKYW4gMjAwMTwvcD4KPHA+ClRoZSAiRWZmZWN0cyIgY2xhdXNlIGZvciBsaXN0OjptZXJnZSgpICgyMy4yLjIuNCwgcDIzKQphcHBlYXJzIHRvIGJlIGluY29tcGxldGU6IGl0IGRvZXNuJ3QgY292ZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIGFyZ3VtZW50Cmxpc3QgaXMgaWRlbnRpY2FsIHRvICp0aGlzIChpLmUuLCB0aGlzID09ICZhbXA7eCkuIFRoZSByZXF1aXJlbWVudCBpbiB0aGUKbm90ZSBpbiBwMjQgKGJlbG93KSBpcyB0aGF0IHggYmUgZW1wdHkgYWZ0ZXIgdGhlIG1lcmdlIHdoaWNoIGlzIHN1cmVseQp1bmludGVuZGVkIGluIHRoaXMgY2FzZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuc3BlY2lhbCI+IFtsaWIuZGVxdWUuc3BlY2lhbF08L2E+LCByZXBsYWNlIHBhcmFncmFwcyAyMy0yNSB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgoyMyBFZmZlY3RzOiBpZiAoJmFtcDt4ID09IHRoaXMpIGRvZXMgbm90aGluZzsgb3RoZXJ3aXNlLCBtZXJnZXMgdGhlIHR3bwpzb3J0ZWQgcmFuZ2VzIFtiZWdpbigpLCBlbmQoKSkgYW5kIFt4LmJlZ2luKCksIHguZW5kKCkpLiAgVGhlIHJlc3VsdAppcyBhIHJhbmdlIGluIHdoaWNoIHRoZSBlbGVtZW50cyB3aWxsIGJlIHNvcnRlZCBpbiBub24tZGVjcmVhc2luZwpvcmRlciBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyaW5nIGRlZmluZWQgYnkgY29tcDsgdGhhdCBpcywgZm9yIGV2ZXJ5Cml0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIG90aGVyIHRoYW4gdGhlIGZpcnN0LCB0aGUgY29uZGl0aW9uIGNvbXAoKmksCiooaSAtIDEpKSB3aWxsIGJlIGZhbHNlLgo8L3A+Cgo8cD4KMjQgTm90ZXM6IFN0YWJsZTogaWYgKCZhbXA7eCAhPSB0aGlzKSwgdGhlbiBmb3IgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUKdHdvIG9yaWdpbmFsIHJhbmdlcywgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFtiZWdpbigpLAplbmQoKSkgYWx3YXlzIHByZWNlZGUgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFt4LmJlZ2luKCksCnguZW5kKCkpLiAgSWYgKCZhbXA7eCAhPSB0aGlzKSB0aGUgcmFuZ2UgW3guYmVnaW4oKSwgeC5lbmQoKSkgaXMgZW1wdHkKYWZ0ZXIgdGhlIG1lcmdlLgo8L3A+Cgo8cD4KMjUgQ29tcGxleGl0eTogQXQgbW9zdCBzaXplKCkgKyB4LnNpemUoKSAtIDEgYXBwbGljYXRpb25zIG9mIGNvbXAgaWYKKCZhbXA7eCAhICA9IHRoaXMpOyBvdGhlcndpc2UsIG5vIGFwcGxpY2F0aW9ucyBvZiBjb21wIGFyZSBwZXJmb3JtZWQuICBJZgphbiBleGNlcHRpb24gaXMgdGhyb3duIG90aGVyIHRoYW4gYnkgYSBjb21wYXJpc29uIHRoZXJlIGFyZSBubwplZmZlY3RzLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ29wZW5oYWdlbjogVGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gZGlkIG5vdCBmaXggYWxsIG9mCnRoZSBwcm9ibGVtcyBpbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLnNwZWNpYWwiPiBbbGliLmRlcXVlLnNwZWNpYWxdPC9hPiwgcDIyLTI1LiAgVGhyZWUgZGlmZmVyZW50CnBhcmFncmFwaHMgKDIzLCAyNCwgMjUpIGRlc2NyaWJlIHRoZSBlZmZlY3RzIG9mIDx0dD5tZXJnZTwvdHQ+LgpDaGFuZ2luZyBwMjMsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG90aGVyIHR3bywgYXBwZWFycyB0byBpbnRyb2R1Y2UKY29udHJhZGljdGlvbnMuICBBZGRpdGlvbmFsbHksICJtZXJnZXMgdGhlIGFyZ3VtZW50IGxpc3QgaW50byB0aGUKbGlzdCIgaXMgZXhjZXNzaXZlbHkgdmFndWUuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1DdXJh52FvOiBSb2JlcnQgS2xhcmVyIHByb3ZpZGVkIG5ldyB3b3JkaW5nLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzMDEiPjxoMz4zMDEuJm5ic3A7YmFzaWNfc3RyaW5nIHRlbXBsYXRlIGN0b3IgZWZmZWN0cyBjbGF1c2Ugb21pdHMgYWxsb2NhdG9yIGFyZ3VtZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IEphbiAyMDAxPC9wPgo8cD4KVGhlIGVmZmVjdHMgY2xhdXNlIGZvciB0aGUgYmFzaWNfc3RyaW5nIHRlbXBsYXRlIGN0b3IgaW4gMjEuMy4xLCBwMTUKbGVhdmVzIG91dCB0aGUgdGhpcmQgYXJndW1lbnQgb2YgdHlwZSBBbGxvY2F0b3IuIEkgYmVsaWV2ZSB0aGlzIHRvIGJlCmEgbWlzdGFrZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2U8L3A+Cgo8YmxvY2txdW90ZT4KICAgIDxwPjxiPi0xNS0gRWZmZWN0czo8L2I+IElmIDxpPjx0dD5JbnB1dEl0ZXJhdG9yPC90dD48L2k+IGlzIGFuIGludGVncmFsCiAgICB0eXBlLCBlcXVpdmFsZW50IHRvPC9wPgoKICAgIDxibG9ja3F1b3RlPjx0dD5iYXNpY19zdHJpbmcoc3RhdGljX2Nhc3QmbHQ7c2l6ZV90eXBlJmd0OyhiZWdpbiksCiAgICBzdGF0aWNfY2FzdCZsdDt2YWx1ZV90eXBlJmd0OyhlbmQpKTwvdHQ+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgICA8cD48Yj4tMTUtIEVmZmVjdHM6PC9iPiBJZiA8aT48dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+PC9pPiBpcyBhbiBpbnRlZ3JhbAogICAgdHlwZSwgZXF1aXZhbGVudCB0bzwvcD4KCiAgICA8YmxvY2txdW90ZT48dHQ+YmFzaWNfc3RyaW5nKHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoYmVnaW4pLAogICAgc3RhdGljX2Nhc3QmbHQ7dmFsdWVfdHlwZSZndDsoZW5kKSwgPGI+YTwvYj4pPC90dD48L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIzMDMiPjxoMz4zMDMuJm5ic3A7Qml0c2V0IGlucHV0IG9wZXJhdG9yIHVuZGVyc3BlY2lmaWVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy41LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5iaXRzZXQub3BlcmF0b3JzIj4gW2xpYi5iaXRzZXQub3BlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzUgRmViIDIwMDE8L3A+CjxwPgpJbiAyMy4zLjUuMywgd2UgYXJlIHRvbGQgdGhhdCA8dHQ+Yml0c2V0PC90dD4ncyBpbnB1dCBvcGVyYXRvcgoiRXh0cmFjdHMgdXAgdG8gPGk+TjwvaT4gKHNpbmdsZS1ieXRlKSBjaGFyYWN0ZXJzIGZyb20KPGk+aXM8L2k+LiIsIHdoZXJlIDxpPmlzPC9pPiBpcyBhIHN0cmVhbSBvZiB0eXBlCjx0dD5iYXNpY19pc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7PC90dD4uCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgZG9lcyBub3Qgc2F5IHdoYXQgaXQgbWVhbnMgdG8gZXh0cmFjdCBzaW5nbGUgYnl0ZQpjaGFyYWN0ZXJzIGZyb20gYSBzdHJlYW0gd2hvc2UgY2hhcmFjdGVyIHR5cGUsIDx0dD5jaGFyVDwvdHQ+LCBpcyBpbgpnZW5lcmFsIG5vdCBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciB0eXBlLiAgRXhpc3RpbmcgaW1wbGVtZW50YXRpb25zCmRpZmZlci4KPC9wPgoKPHA+CkEgcmVhc29uYWJsZSBzb2x1dGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgPHR0PndpZGVuKCk8L3R0PiBhbmQvb3IKPHR0Pm5hcnJvdygpPC90dD4sIHNpbmNlIHRoZXkgYXJlIHRoZSBzdXBwbGllZCBtZWNoYW5pc20gZm9yCmNvbnZlcnRpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIGJldHdlZW4gPHR0PmNoYXI8L3R0PiBhbmQgCmFyYml0cmFyeSA8dHQ+Y2hhclQ8L3R0Pi4KPC9wPgoKPHA+TmFycm93aW5nIHRoZSBpbnB1dCBjaGFyYWN0ZXJzIGlzIG5vdCB0aGUgc2FtZSBhcyB3aWRlbmluZyB0aGUKbGl0ZXJhbHMgPHR0PicwJzwvdHQ+IGFuZCA8dHQ+JzEnPC90dD4sIGJlY2F1c2UgdGhlcmUgbWF5IGJlIHNvbWUKbG9jYWxlcyBpbiB3aGljaCBtb3JlIHRoYW4gb25lIHdpZGUgY2hhcmFjdGVyIG1hcHMgdG8gdGhlIG5hcnJvdwpjaGFyYWN0ZXIgPHR0PicwJzwvdHQ+LiAgTmFycm93aW5nIG1lYW5zIHRoYXQgYWx0ZXJuYXRlCnJlcHJlc2VudGF0aW9ucyBtYXkgYmUgdXNlZCBmb3IgYml0c2V0IGlucHV0LCB3aWRlbmluZyBtZWFucyB0aGF0CnRoZXkgbWF5IG5vdCBiZS48L3A+Cgo8cD5Ob3RlIHRoYXQgZm9yIG51bWVyaWMgaW5wdXQsIDx0dD5udW1fZ2V0Jmx0OyZndDs8L3R0PgooMjIuMi4yLjEuMi84KSBjb21wYXJlcyBpbnB1dCBjaGFyYWN0ZXJzIHRvIHdpZGVuZWQgdmVyc2lvbiBvZiBuYXJyb3cKY2hhcmFjdGVyIGxpdGVyYWxzLjwvcD4KCjxwPkZyb20gUGV0ZSBCZWNrZXIsIGluIGMrK3N0ZC1saWItODIyNDo8L3A+CjxibG9ja3F1b3RlPgo8cD4KRGlmZmVyZW50IHdyaXRpbmcgc3lzdGVtcyBjYW4gaGF2ZSBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUKZGlnaXRzIHRoYXQgcmVwcmVzZW50IDAgYW5kIDEuIEZvciBleGFtcGxlLCBpbiB0aGUgVW5pY29kZSByZXByZXNlbnRhdGlvbgpvZiB0aGUgRGV2YW5hZ2FyaSBzY3JpcHQgKHVzZWQgaW4gbWFueSBvZiB0aGUgSW5kaWMgbGFuZ3VhZ2VzKSB0aGUgZGlnaXQgMAppcyAweDA5NjYsIGFuZCB0aGUgZGlnaXQgMSBpcyAweDA5NjcuIENhbGxpbmcgbmFycm93IHdvdWxkIHRyYW5zbGF0ZSB0aG9zZQppbnRvICcwJyBhbmQgJzEnLiBCdXQgVW5pY29kZSBhbHNvIHByb3ZpZGVzIHRoZSBBU0NJSSB2YWx1ZXMgMHgwMDMwIGFuZAoweDAwMzEgZm9yIGZvciB0aGUgTGF0aW4gcmVwcmVzZW50YXRpb25zIG9mICcwJyBhbmQgJzEnLCBhcyB3ZWxsIGFzIGNvZGUKcG9pbnRzIGZvciB0aGUgc2FtZSBudW1lcmljIHZhbHVlcyBpbiBzZXZlcmFsIG90aGVyIHNjcmlwdHMgKFRhbWlsIGhhcyBubwpjaGFyYWN0ZXIgZm9yIDAsIGJ1dCBkb2VzIGhhdmUgdGhlIGRpZ2l0cyAxLTkpLCBhbmQgYW55IG9mIHRoZXNlIHZhbHVlcwp3b3VsZCBhbHNvIGJlIG5hcnJvd2VkIHRvICcwJyBhbmQgJzEnLgo8L3A+Cgo8cD4uLi48L3A+Cgo8cD4KSXQncyBmYWlybHkgY29tbW9uIHRvIGludGVybWl4IGJvdGggbmF0aXZlIGFuZCBMYXRpbgpyZXByZXNlbnRhdGlvbnMgb2YgbnVtYmVycyBpbiBhIGRvY3VtZW50LiBTbyBJIHRoaW5rIHRoZSBydWxlIGhhcyB0byBiZQp0aGF0IGlmIGEgd2lkZSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBhIGRpZ2l0IHdob3NlIHZhbHVlIGlzIDAgdGhlbiB0aGUgYml0CnNob3VsZCBiZSBjbGVhcmVkOyBpZiBpdCByZXByZXNlbnRzIGEgZGlnaXQgd2hvc2UgdmFsdWUgaXMgMSB0aGVuIHRoZSBiaXQKc2hvdWxkIGJlIHNldDsgb3RoZXJ3aXNlIHRocm93IGFuIGV4Y2VwdGlvbi4gU28gaW4gYSBEZXZhbmFnYXJpIGxvY2FsZSwKYm90aCAweDA5NjYgYW5kIDB4MDAzMCB3b3VsZCBjbGVhciB0aGUgYml0LCBhbmQgYm90aCAweDA5NjcgYW5kIDB4MDAzMQp3b3VsZCBzZXQgaXQuIFdpZGVuIGNhbid0IGRvIHRoYXQuIEl0IHdvdWxkIHBpY2sgb25lIG9mIHRob3NlIHR3byB2YWx1ZXMsCmFuZCBleGNsdWRlIHRoZSBvdGhlciBvbmUuCjwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPkZyb20gSmVucyBNYXVyZXIsIGluIGMrK3N0ZC1saWItODIzMzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CldoYXRldmVyIHdlIGRlY2lkZSwgSSB3b3VsZCBmaW5kIGl0IG1vc3Qgc3VycHJpc2luZyBpZgpiaXRzZXQgY29udmVyc2lvbiB3b3JrZWQgZGlmZmVyZW50bHkgZnJvbSBpbnQgY29udmVyc2lvbgp3aXRoIHJlZ2FyZCB0byBhbHRlcm5hdGUgbG9jYWwgcmVwcmVzZW50YXRpb25zIG9mCm51bWJlcnMuCjwvcD4KCjxwPlRodXMsIEkgdGhpbmsgdGhlIG9wdGlvbnMgYXJlOjwvcD4KPHVsPgogPGxpPiBIYXZlIGEgbmV3IGRlZmVjdCBpc3N1ZSBmb3IgMjIuMi4yLjEuMi84IHNvIHRoYXQgaXQgd2lsbApyZXF1aXJlIHRoZSB1c2Ugb2YgbmFycm93KCkuPC9saT4KCiA8bGk+IEhhdmUgYSBkZWZlY3QgaXNzdWUgZm9yIGJpdHNldCgpIHdoaWNoIGRlc2NyaWJlcyBjbGVhcmx5CnRoYXQgd2lkZW4oKSBpcyB0byBiZSB1c2VkLjwvbGk+CjwvdWw+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKICAgIDxwPlJlcGxhY2UgdGhlIGZpcnN0IHR3byBzZW50ZW5jZXMgb2YgcGFyYWdyYXBoIDUgd2l0aDo8L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBFeHRyYWN0cyB1cCB0byA8aT5OPC9pPiBjaGFyYWN0ZXJzIGZyb20gPGk+aXM8L2k+LiBTdG9yZXMgdGhlc2UKICAgIGNoYXJhY3RlcnMgaW4gYSB0ZW1wb3Jhcnkgb2JqZWN0IDxpPnN0cjwvaT4gb2YgdHlwZQogICAgPHR0PmJhc2ljX3N0cmluZyZsdDtjaGFyVCwgdHJhaXRzJmd0OzwvdHQ+LCB0aGVuIGV2YWx1YXRlcyB0aGUKICAgIGV4cHJlc3Npb24gPHR0PjxpPng8L2k+ID0gYml0c2V0Jmx0O04mZ3Q7KDxpPnN0cjwvaT4pPC90dD4uCiAgICA8L2Jsb2NrcXVvdGU+CgogICAgPHA+UmVwbGFjZSB0aGUgdGhpcmQgYnVsbGV0IGl0ZW0gaW4gcGFyYWdyYXBoIDUgd2l0aDo8L3A+CiAgICA8dWw+PGxpPgogICAgdGhlIG5leHQgaW5wdXQgY2hhcmFjdGVyIGlzIG5laXRoZXIgPHR0PjxpPmlzPC9pPi53aWRlbigwKTwvdHQ+CiAgICBub3IgPHR0PjxpPmlzPC9pPi53aWRlbigxKTwvdHQ+IChpbiB3aGljaCBjYXNlIHRoZSBpbnB1dCBjaGFyYWN0ZXIKICAgIGlzIG5vdCBleHRyYWN0ZWQpLgogICAgPC9saT48L3VsPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPklucHV0IGZvciA8dHQ+Yml0c2V0PC90dD4gc2hvdWxkIHdvcmsgdGhlIHNhbWUgd2F5IGFzIG51bWVyaWMKaW5wdXQuICBVc2luZyA8dHQ+d2lkZW48L3R0PiBkb2VzIG1lYW4gdGhhdCBhbHRlcm5hdGl2ZSBkaWdpdApyZXByZXNlbnRhdGlvbnMgd2lsbCBub3QgYmUgcmVjb2duaXplZCwgYnV0IHRoaXMgd2FzIGEga25vd24gCmNvbnNlcXVlbmNlIG9mIHRoZSBkZXNpZ24gY2hvaWNlLjwvcD4KPGhyPgo8YSBuYW1lPSIzMDUiPjxoMz4zMDUuJm5ic3A7RGVmYXVsdCBiZWhhdmlvciBvZiBjb2RlY3Z0Jmx0O3djaGFyX3QsIGNoYXIsIG1ic3RhdGVfdCZndDs6Omxlbmd0aCgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IEphbiAyMDAxPC9wPgo8cD4yMi4yLjEuNS8zIGludHJvZHVjZXMgY29kZWN2dCBpbiBwYXJ0IHdpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyBjb252ZXJ0cyBiZXR3ZWVuIHRoZSBuYXRpdmUKICBjaGFyYWN0ZXIgc2V0cyBmb3IgdGlueSBhbmQgd2lkZSBjaGFyYWN0ZXJzLiBJbnN0YW50aWF0aW9ucyBvbgogIG1ic3RhdGVfdCBwZXJmb3JtIGNvbnZlcnNpb24gYmV0d2VlbiBlbmNvZGluZ3Mga25vd24gdG8gdGhlIGxpYnJhcnkKICBpbXBsZW1lbnRvci4KPC9ibG9ja3F1b3RlPgoKPHA+QnV0IDIyLjIuMS41LjIvMTAgZGVzY3JpYmVzIGRvX2xlbmd0aCBpbiBwYXJ0IHdpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgLi4uIGNvZGVjdnQmbHQ7d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Jmd0OyAuLi4gcmV0dXJuKHMpIHRoZSBsZXNzZXIgb2YgbWF4IGFuZCAKICAoZnJvbV9lbmQtZnJvbSkuCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgc2VtYW50aWNzIG9mIGRvX2luIGFuZCBkb19sZW5ndGggYXJlIGxpbmtlZC4gIFdoYXQgb25lIGRvZXMgbXVzdApiZSBjb25zaXN0ZW50IHdpdGggd2hhdCB0aGUgb3RoZXIgZG9lcy4gIDIyLjIuMS41LzMgbGVhZHMgbWUgdG8KYmVsaWV2ZSB0aGF0IHRoZSB2ZW5kb3IgaXMgYWxsb3dlZCB0byBjaG9vc2UgdGhlIGFsZ29yaXRobSB0aGF0CmNvZGVjdnQmbHQ7d2NoYXJfdCxjaGFyLG1ic3RhdGVfdCZndDs6OmRvX2luIHBlcmZvcm1zIHNvIHRoYXQgaXQgbWFrZXMKaGlzIGN1c3RvbWVycyBoYXBweSBvbiBhIGdpdmVuIHBsYXRmb3JtLiAgQnV0IDIyLjIuMS41LjIvMTAgZXhwbGljaXRseQpzYXlzIHdoYXQgY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0Ozo6ZG9fbGVuZ3RoIG11c3QKcmV0dXJuLiAgQW5kIHRodXMgaW5kaXJlY3RseSBzcGVjaWZpZXMgdGhlIGFsZ29yaXRobSB0aGF0CmNvZGVjdnQmbHQ7d2NoYXJfdCxjaGFyLG1ic3RhdGVfdCZndDs6OmRvX2luIG11c3QgcGVyZm9ybS4gIEkgYmVsaWV2ZQp0aGF0IHRoaXMgaXMgbm90IHdoYXQgd2FzIGludGVuZGVkIGFuZCBpcyBhIGRlZmVjdC4KPC9wPgoKPHA+RGlzY3Vzc2lvbiBmcm9tIHRoZSAtbGliIHJlZmxlY3RvcjoKCjxicj5UaGlzIHByb3Bvc2FsIHdvdWxkIGhhdmUgdGhlIGVmZmVjdCBvZiBtYWtpbmcgdGhlIHNlbWFudGljcyBvZgphbGwgb2YgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIGluIDx0dD5jb2RlY3Z0Jmx0O3djaGFyX3QsIGNoYXIsCm1ic3RhdGVfdCZndDs8L3R0PiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQuICBJcyB0aGF0IHdoYXQgd2Ugd2FudCwgb3IKZG8gd2Ugd2FudCB0byBtYW5kYXRlIHNwZWNpZmljIGJlaGF2aW9yIGZvciB0aGUgYmFzZSBjbGFzcyB2aXJ0dWFscwphbmQgbGVhdmUgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmllZCBiZWhhdmlvciBmb3IgdGhlIGNvZGVjdnRfYnluYW1lCmRlcml2ZWQgY2xhc3M/ICBUaGUgdHJhZGVvZmYgaXMgdGhhdCBmb3JtZXIgYWxsb3dzIGltcGxlbWVudG9ycyB0bwp3cml0ZSBhIGJhc2UgY2xhc3MgdGhhdCBhY3R1YWxseSBkb2VzIHNvbWV0aGluZyB1c2VmdWwsIHdoaWxlIHRoZQpsYXR0ZXIgZ2l2ZXMgdXNlcnMgYSB3YXkgdG8gZ2V0IGtub3duIGFuZCBzcGVjaWZpZWQtLS1hbGJlaXQKdXNlbGVzcy0tLWJlaGF2aW9yLCBhbmQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhlIHN0YW5kYXJkCmhhbmRsZXMgb3RoZXIgZmFjZXRzLiAgSXQgaXMgbm90IGNsZWFyIHdoYXQgdGhlIG9yaWdpbmFsIGludGVudGlvbgp3YXMuPC9wPgoKPHA+Ck5hdGhhbiBoYXMgc3VnZ2VzdCBhIGNvbXByb21pc2U6IGEgY2hhcmFjdGVyIHRoYXQgaXMgYSB3aWRlbmVkIHZlcnNpb24Kb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IG11c3QgYmUKY29udmVydGVkIHRvIGEgb25lLWJ5dGUgc2VxdWVuY2UsIGJ1dCB0aGVyZSBpcyBubyBzdWNoIHJlcXVpcmVtZW50CmZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBiYXNpYyBleGVjdXRpb24gY2hhcmFjdGVyIHNldC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgMjIuMi4xLjUuMi81IGZyb206CjwvcD4KPHA+ClRoZSBpbnN0YW50aWF0aW9ucyByZXF1aXJlZCBpbiBUYWJsZSA1MSAobGliLmxvY2FsZS5jYXRlZ29yeSksIG5hbWVseQpjb2RlY3Z0Jmx0O3djaGFyX3QsY2hhcixtYnN0YXRlX3QmZ3Q7IGFuZApjb2RlY3Z0Jmx0O2NoYXIsY2hhcixtYnN0YXRlX3QmZ3Q7LCBzdG9yZSBubyBjaGFyYWN0ZXJzLiBTdG9yZXMgbm8gbW9yZQp0aGFuICh0b19saW1pdC10bykgZGVzdGluYXRpb24gZWxlbWVudHMuIEl0IGFsd2F5cyBsZWF2ZXMgdGhlIHRvX25leHQKcG9pbnRlciBwb2ludGluZyBvbmUgYmV5b25kIHRoZSBsYXN0IGVsZW1lbnQgc3VjY2Vzc2Z1bGx5IHN0b3JlZC4KPC9wPgo8cD4KdG86CjwvcD4KPHA+ClN0b3JlcyBubyBtb3JlIHRoYW4gKHRvX2xpbWl0LXRvKSBkZXN0aW5hdGlvbiBlbGVtZW50cywgYW5kIGxlYXZlcyB0aGUKdG9fbmV4dCBwb2ludGVyIHBvaW50aW5nIG9uZSBiZXlvbmQgdGhlIGxhc3QgZWxlbWVudCBzdWNjZXNzZnVsbHkKc3RvcmVkLiAgY29kZWN2dCZsdDtjaGFyLGNoYXIsbWJzdGF0ZV90Jmd0OyBzdG9yZXMgbm8gY2hhcmFjdGVycy4KPC9wPgoKPHA+Q2hhbmdlIDIyLjIuMS41LjIvMTAgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KLTEwLSBSZXR1cm5zOiAoZnJvbV9uZXh0LWZyb20pIHdoZXJlIGZyb21fbmV4dCBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSBpbgp0aGUgcmFuZ2UgW2Zyb20sZnJvbV9lbmRdIHN1Y2ggdGhhdCB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIGluIHRoZQpyYW5nZSBbZnJvbSxmcm9tX25leHQpIHJlcHJlc2VudHMgbWF4IG9yIGZld2VyIHZhbGlkIGNvbXBsZXRlCmNoYXJhY3RlcnMgb2YgdHlwZSBpbnRlcm5ULiBUaGUgaW5zdGFudGlhdGlvbnMgcmVxdWlyZWQgaW4gVGFibGUgNTEKKDIxLjEuMS4xLjEpLCBuYW1lbHkgY29kZWN2dCZsdDt3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3QmZ3Q7IGFuZApjb2RlY3Z0Jmx0O2NoYXIsIGNoYXIsIG1ic3RhdGVfdCZndDssIHJldHVybiB0aGUgbGVzc2VyIG9mIG1heCBhbmQKKGZyb21fZW5kLWZyb20pLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KLTEwLSBSZXR1cm5zOiAoZnJvbV9uZXh0LWZyb20pIHdoZXJlIGZyb21fbmV4dCBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSBpbiAKdGhlIHJhbmdlIFtmcm9tLGZyb21fZW5kXSBzdWNoIHRoYXQgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyBpbiB0aGUgcmFuZ2UgCltmcm9tLGZyb21fbmV4dCkgcmVwcmVzZW50cyBtYXggb3IgZmV3ZXIgdmFsaWQgY29tcGxldGUgY2hhcmFjdGVycyBvZiAKdHlwZSBpbnRlcm5ULiBUaGUgaW5zdGFudGlhdGlvbiBjb2RlY3Z0Jmx0O2NoYXIsIGNoYXIsIG1ic3RhdGVfdCZndDsgcmV0dXJucyAKdGhlIGxlc3NlciBvZiBtYXggYW5kIChmcm9tX2VuZC1mcm9tKS4gCjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBOYXRoYW4gc3VnZ2VzdGVkIGFuIGFsdGVybmF0aXZlIHJlc29sdXRpb246IHNhbWUgYXMKYWJvdmUsIGJ1dCByZXF1aXJlIHRoYXQsIGluIHRoZSBkZWZhdWx0IGVuY29kaW5nLCBhIGNoYXJhY3RlciBmcm9tIHRoZQpiYXNpYyBleGVjdXRpb24gY2hhcmFjdGVyIHNldCB3b3VsZCBtYXAgdG8gYSBzaW5nbGUgZXh0ZXJuYWwKY2hhcmFjdGVyLiAgVGhlIHN0cmF3IHBvbGwgd2FzIDgtMSBpbiBmYXZvciBvZiB0aGUgcHJvcG9zZWQKcmVzb2x1dGlvbi5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZGVmYXVsdCBlbmNvZGluZyBzaG91bGQgYmUgd2hhdGV2ZXIgdXNlcnMgb2YgYSBnaXZlbiBwbGF0Zm9ybQp3b3VsZCBleHBlY3QgdG8gYmUgdGhlIG1vc3QgbmF0dXJhbC4gIFRoaXMgdmFyaWVzIGZyb20gcGxhdGZvcm0gdG8KcGxhdGZvcm0uICBJbiBtYW55IGNhc2VzIHRoZXJlIGlzIGEgcHJlZXhpc3RpbmcgQyBsaWJyYXJ5LCBhbmQgdXNlcnMKd291bGQgZXhwZWN0IHRoZSBkZWZhdWx0IGVuY29kaW5nIHRvIGJlIHdoYXRldmVyIEMgdXNlcyBpbiB0aGUgZGVmYXVsdAoiQyIgbG9jYWxlLiAgV2UgY291bGQgaW1wb3NlIGEgZ3VhcmFudGVlIGxpa2UgdGhlIG9uZSBOYXRoYW4gc3VnZ2VzdGVkCihhIGNoYXJhY3RlciBmcm9tIHRoZSBiYXNpYyBleGVjdXRpb24gY2hhcmFjdGVyIHNldCBtdXN0IG1hcCB0byBhCnNpbmdsZSBleHRlcm5hbCBjaGFyYWN0ZXIpLCBidXQgdGhpcyB3b3VsZCBydWxlIG91dCBpbXBvcnRhbnQKZW5jb2RpbmdzIHRoYXQgYXJlIGluIGNvbW1vbiB1c2U6IGl0IHdvdWxkIHJ1bGUgb3V0IEpJUywgZm9yCmV4YW1wbGUsIGFuZCBpdCB3b3VsZCBydWxlIG91dCBhIGZpeGVkLXdpZHRoIGVuY29kaW5nIG9mIFVDUy00LjwvcD4KCjxwPjxpPltDdXJh52FvOiBmaXhlZCByYXRpb25hbGUgdHlwbyBhdCB0aGUgcmVxdWVzdCBvZiBJY2hpcm8gS29zaGlkYTsKInNoaWZ0LUpJUyIgY2hhbmdlZCB0byAiSklTIi5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzA2Ij48aDM+MzA2LiZuYnNwO29mZnNldG9mIG1hY3JvIGFuZCBub24tUE9EIHR5cGVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnN1cHBvcnQudHlwZXMiPiBbbGliLnN1cHBvcnQudHlwZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEZlYiAyMDAxPC9wPiAKPHA+U3BsaWNlZCB0b2dldGhlciBmcm9tIHJlZmxlY3RvciBtZXNzYWdlcyBjKytzdGQtbGliLTgyOTQgYW5kIC04Mjk1OjwvcD4KCjxwPjE4LjEsIHBhcmFncmFwaCA1LCByZWFkczogIlRoZSBtYWNybyA8dHQ+b2Zmc2V0b2Y8L3R0PgphY2NlcHRzIGEgcmVzdHJpY3RlZCBzZXQgb2YgPGk+dHlwZTwvaT4gYXJndW1lbnRzIGluIHRoaXMKSW50ZXJuYXRpb25hbCBTdGFuZGFyZC4gPGk+dHlwZTwvaT4gc2hhbGwgYmUgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9ECnVuaW9uIChjbGF1c2UgOSkuIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIG9mZnNldG9mIG1hY3JvIHRvIGEgZmllbGQKdGhhdCBpcyBhIHN0YXRpYyBkYXRhIG1lbWJlciBvciBhIGZ1bmN0aW9uIG1lbWJlciBpcwp1bmRlZmluZWQuIjwvcD4KCjxwPkZvciB0aGUgUE9EIHJlcXVpcmVtZW50LCBpdCBkb2Vzbid0IHNheSAibm8gZGlhZ25vc3RpYwpyZXF1aXJlZCIgb3IgInVuZGVmaW5lZCBiZWhhdmlvciIuIEkgcmVhZCAxLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLmNvbXBsaWFuY2UiPiBbaW50cm8uY29tcGxpYW5jZV08L2E+LCBwYXJhZ3JhcGggMSwgdG8gbWVhbiB0aGF0IGEgZGlhZ25vc3RpYyBpcyByZXF1aXJlZC4KSXQncyBub3QgY2xlYXIgd2hldGhlciB0aGlzIHJlcXVpcmVtZW50IHdhcyBpbnRlbmRlZC4gIFdoaWxlIGl0J3MKcG9zc2libGUgdG8gcHJvdmlkZSBzdWNoIGEgZGlhZ25vc3RpYywgdGhlIGV4dHJhIGNvbXBsaWNhdGlvbiBkb2Vzbid0CnNlZW0gdG8gYWRkIGFueSB2YWx1ZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAxOC4xLCBwYXJhZ3JhcGggNSwgdG8gIklmIDxpPnR5cGU8L2k+IGlzIG5vdCBhIFBPRApzdHJ1Y3R1cmUgb3IgYSBQT0QgdW5pb24gdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4iPC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IHN0cmF3IHBvbGwgd2FzIDctNCBpbiBmYXZvci4gIEl0IHdhcyBnZW5lcmFsbHkKYWdyZWVkIHRoYXQgcmVxdWlyaW5nIGEgZGlhZ25vc3RpYyB3YXMgaW5hZHZlcnRlbnQsIGJ1dCBzb21lIExXRwptZW1iZXJzIHRob3VnaHQgdGhhdCBkaWFnbm9zdGljcyBzaG91bGQgYmUgcmVxdWlyZWQgd2hlbmV2ZXIKcG9zc2libGUuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMwNyI+PGgzPjMwNy4mbmJzcDtMYWNrIG9mIHJlZmVyZW5jZSB0eXBlZGVmcyBpbiBjb250YWluZXIgYWRhcHRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Ij4gW2xpYi5saXN0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgTWFyIDIwMDE8L3A+Cgo8cD5Gcm9tIHJlZmxlY3RvciBtZXNzYWdlIGMrK3N0ZC1saWItODMzMC4gIFNlZSBhbHNvIGxpYi04MzE3LjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgaXMgY3VycmVudGx5IGluY29uc2lzdGVudCBpbiAyMy4yLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3QuY2FwYWNpdHkiPiBbbGliLmxpc3QuY2FwYWNpdHldPC9hPgpwYXJhZ3JhcGggMSBhbmQgMjMuMi4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm1vZGlmaWVycyI+IFtsaWIubGlzdC5tb2RpZmllcnNdPC9hPiBwYXJhZ3JhcGggMS4KMjMuMi4zLjMvMSwgZm9yIGV4YW1wbGUsIHNheXM6CjwvcD4KCjxibG9ja3F1b3RlPgotMS0gQW55IHNlcXVlbmNlIHN1cHBvcnRpbmcgb3BlcmF0aW9ucyBiYWNrKCksIHB1c2hfYmFjaygpIGFuZCBwb3BfYmFjaygpIApjYW4gYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBzdGFjay4gSW4gcGFydGljdWxhciwgdmVjdG9yIChsaWIudmVjdG9yKSwgbGlzdCAKKGxpYi5saXN0KSBhbmQgZGVxdWUgKGxpYi5kZXF1ZSkgY2FuIGJlIHVzZWQuIAo8L2Jsb2NrcXVvdGU+Cgo8cD5CdXQgdGhpcyBpcyBmYWxzZTogdmVjdG9yJmx0O2Jvb2wmZ3Q7IGNhbiBub3QgYmUgdXNlZCwgYmVjYXVzZSB0aGUKY29udGFpbmVyIGFkYXB0b3JzIHJldHVybiBhIFQmYW1wOyByYXRoZXIgdGhhbiB1c2luZyB0aGUgdW5kZXJseWluZwpjb250YWluZXIncyByZWZlcmVuY2UgdHlwZS48L3A+Cgo8cD5UaGlzIGlzIGEgY29udHJhZGljdGlvbiB0aGF0IGNhbiBiZSBmaXhlZCBieTo8L3A+Cgo8b2w+CjxsaT5Nb2RpZnlpbmcgdGhlc2UgcGFyYWdyYXBocyB0byBzYXkgdGhhdCB2ZWN0b3ImbHQ7Ym9vbCZndDsKICAgIGlzIGFuIGV4Y2VwdGlvbi48L2xpPgo8bGk+UmVtb3ZpbmcgdGhlIHZlY3RvciZsdDtib29sJmd0OyBzcGVjaWFsaXphdGlvbi48L2xpPgo8bGk+Q2hhbmdpbmcgdGhlIHJldHVybiB0eXBlcyBvZiBzdGFjayBhbmQgcHJpb3JpdHlfcXVldWUgdG8gdXNlIAogICAgcmVmZXJlbmNlIHR5cGVkZWYncy48L2xpPgo8L29sPgoKPHA+CkkgcHJvcG9zZSAzLiAgVGhpcyBkb2VzIG5vdCBwcmVjbHVkZSBvcHRpb24gMiBpZiB3ZSBjaG9vc2UgdG8gZG8gaXQKbGF0ZXIgKHNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM5NiI+OTY8L2E+KTsgdGhlIGlzc3VlcyBhcmUgaW5kZXBlbmRlbnQuICBPcHRpb24KMyBvZmZlcnMgYSBzbWFsbCBzdGVwIHRvd2FyZHMgc3VwcG9ydCBmb3IgcHJveGllZCBjb250YWluZXJzLiAgVGhpcwpzbWFsbCBzdGVwIGZpeGVzIGEgY3VycmVudCBjb250cmFkaWN0aW9uLCBpcyBlYXN5IGZvciB2ZW5kb3JzIHRvCmltcGxlbWVudCwgaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiBhdCBsZWFzdCBvbmUgcG9wdWxhciBsaWIsIGFuZApkb2VzIG5vdCBicmVhayBhbnkgY29kZS4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5TdW1tYXJ5OiBBZGQgcmVmZXJlbmNlIGFuZCBjb25zdF9yZWZlcmVuY2UgdHlwZWRlZnMgdG8gcXVldWUsCnByaW9yaXR5X3F1ZXVlIGFuZCBzdGFjay4gIENoYW5nZSByZXR1cm4gdHlwZXMgb2YgInZhbHVlX3R5cGUmYW1wOyIgdG8KInJlZmVyZW5jZSIuICBDaGFuZ2UgcmV0dXJuIHR5cGVzIG9mICJjb25zdCB2YWx1ZV90eXBlJmFtcDsiIHRvCiJjb25zdF9yZWZlcmVuY2UiLiAgRGV0YWlsczo8L3A+Cgo8cD5DaGFuZ2UgMjMuMi4zLjEvMSBmcm9tOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSBkZXF1ZSZsdDtUJmd0OyAmZ3Q7CiAgICBjbGFzcyBxdWV1ZSB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgcXVldWUoY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgdmFsdWVfdHlwZSZhbXA7ICAgICAgIGZyb250KCkgICAgICAgICAgIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICBjb25zdCB2YWx1ZV90eXBlJmFtcDsgZnJvbnQoKSBjb25zdCAgICAgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIHZhbHVlX3R5cGUmYW1wOyAgICAgICBiYWNrKCkgICAgICAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICBjb25zdCB2YWx1ZV90eXBlJmFtcDsgYmFjaygpIGNvbnN0ICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KSAgICAgIHsgYy5wdXNoX2JhY2soeCk7IH0KICAgICAgdm9pZCBwb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjLnBvcF9mcm9udCgpOyB9CiAgICB9Owo8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSBkZXF1ZSZsdDtUJmd0OyAmZ3Q7CiAgICBjbGFzcyBxdWV1ZSB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHF1ZXVlKGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIHJlZmVyZW5jZSAgICAgICAgIGZyb250KCkgICAgICAgICAgIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICBjb25zdF9yZWZlcmVuY2UgICBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgcmVmZXJlbmNlICAgICAgICAgYmFjaygpICAgICAgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgY29uc3RfcmVmZXJlbmNlICAgYmFjaygpIGNvbnN0ICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KSAgICAgIHsgYy5wdXNoX2JhY2soeCk7IH0KICAgICAgdm9pZCBwb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjLnBvcF9mcm9udCgpOyB9CiAgICB9Owo8L3ByZT4KCjxwPkNoYW5nZSAyMy4yLjMuMi8xIGZyb206PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IHZlY3RvciZsdDtUJmd0OywKICAgICAgICAgICAgICBjbGFzcyBDb21wYXJlID0gbGVzcyZsdDt0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUmZ3Q7ICZndDsKICAgIGNsYXNzIHByaW9yaXR5X3F1ZXVlIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CiAgICAgIENvbXBhcmUgY29tcDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHByaW9yaXR5X3F1ZXVlKGNvbnN0IENvbXBhcmUmYW1wOyB4ID0gQ29tcGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CiAgICAgICAgcHJpb3JpdHlfcXVldWUoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBhcmUmYW1wOyB4ID0gQ29tcGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB0b3AoKSBjb25zdCB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KTsKICAgICAgdm9pZCBwb3AoKTsKICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgbm8gZXF1YWxpdHkgaXMgcHJvdmlkZWQKICB9CjwvcHJlPgoKPHA+dG86PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IHZlY3RvciZsdDtUJmd0OywKICAgICAgICAgICAgICBjbGFzcyBDb21wYXJlID0gbGVzcyZsdDt0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUmZ3Q7ICZndDsKICAgIGNsYXNzIHByaW9yaXR5X3F1ZXVlIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKICAgICAgQ29tcGFyZSBjb21wOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgcHJpb3JpdHlfcXVldWUoY29uc3QgQ29tcGFyZSZhbXA7IHggPSBDb21wYXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwogICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgICBwcmlvcml0eV9xdWV1ZShJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcGFyZSZhbXA7IHggPSBDb21wYXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgY29uc3RfcmVmZXJlbmNlICAgdG9wKCkgY29uc3QgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCk7CiAgICAgIHZvaWQgcG9wKCk7CiAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIG5vIGVxdWFsaXR5IGlzIHByb3ZpZGVkCiAgfQo8L3ByZT4KCjxwPkFuZCBjaGFuZ2UgMjMuMi4zLjMvMSBmcm9tOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSBkZXF1ZSZsdDtUJmd0OyAmZ3Q7CiAgICBjbGFzcyBzdGFjayB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgc3RhY2soY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgdmFsdWVfdHlwZSZhbXA7ICAgICAgIHRvcCgpICAgICAgICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB0b3AoKSBjb25zdCAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpICAgICAgeyBjLnB1c2hfYmFjayh4KTsgfQogICAgICB2b2lkIHBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGMucG9wX2JhY2soKTsgfQogICAgfTsKCiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmx0OyAoY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmd0OyAoY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmd0Oz0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmx0Oz0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgfQo8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSBkZXF1ZSZsdDtUJmd0OyAmZ3Q7CiAgICBjbGFzcyBzdGFjayB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBzdGFjayhjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICByZWZlcmVuY2UgICAgICAgICB0b3AoKSAgICAgICAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICBjb25zdF9yZWZlcmVuY2UgICB0b3AoKSBjb25zdCAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpICAgICAgeyBjLnB1c2hfYmFjayh4KTsgfQogICAgICB2b2lkIHBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGMucG9wX2JhY2soKTsgfQogICAgfTsKCiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmx0OyAoY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmd0OyAoY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmd0Oz0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyJmd0OwogICAgICBib29sIG9wZXJhdG9yJmx0Oz0oY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeSk7CiAgfQo8L3ByZT4KCjxwPjxpPltDb3BlbmhhZ2VuOiBUaGlzIGNoYW5nZSB3YXMgZGlzY3Vzc2VkIGJlZm9yZSB0aGUgSVMgd2FzIHJlbGVhc2VkCmFuZCBpdCB3YXMgZGVsaWJlcmF0ZWx5IG5vdCBhZG9wdGVkLiAgTmV2ZXJ0aGVsZXNzLCB0aGUgTFdHIGJlbGlldmVzCihzdHJhdyBwb2xsOiAxMC0yKSB0aGF0IGl0IGlzIGEgZ2VudWluZSBkZWZlY3QuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMwOCI+PGgzPjMwOC4mbmJzcDtUYWJsZSA4MiBtZW50aW9ucyB1bnJlbGF0ZWQgaGVhZGVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pbnB1dC5vdXRwdXQiPiBbbGliLmlucHV0Lm91dHB1dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBNYXIgMjAwMTwvcD4KPHA+ClRhYmxlIDgyIGluIHNlY3Rpb24gMjcgbWVudGlvbnMgdGhlIGhlYWRlciAmbHQ7Y3N0ZGxpYiZndDsgZm9yIFN0cmluZwpzdHJlYW1zICgyNy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmcuc3RyZWFtcyI+IFtsaWIuc3RyaW5nLnN0cmVhbXNdPC9hPikgYW5kIHRoZSBoZWFkZXJzICZsdDtjc3RkaW8mZ3Q7IGFuZAombHQ7Y3djaGFyJmd0OyBmb3IgRmlsZSBzdHJlYW1zICgyNy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlLnN0cmVhbXMiPiBbbGliLmZpbGUuc3RyZWFtc108L2E+KS4gSXQncyBub3QgY2xlYXIKd2h5IHRoZXNlIGhlYWRlcnMgYXJlIG1lbnRpb25lZCBpbiB0aGlzIGNvbnRleHQgc2luY2UgdGhleSBkbyBub3QKZGVmaW5lIGFueSBvZiB0aGUgbGlicmFyeSBlbnRpdGllcyBkZXNjcmliZWQgYnkgdGhlCnN1YmNsYXVzZXMuIEFjY29yZGluZyB0byAxNy40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5jb250ZW50cyI+IFtsaWIuY29udGVudHNdPC9hPiwgb25seSBzdWNoIGhlYWRlcnMKYXJlIHRvIGJlIGxpc3RlZCBpbiB0aGUgc3VtbWFyeS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSAmbHQ7Y3N0ZGxpYiZndDsgYW5kICZsdDtjd2NoYXImZ3Q7IGZyb20KVGFibGUgODIuPC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IGNoYW5nZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gc2xpZ2h0bHkuICBUaGUKb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiBhbHNvIHNhaWQgdG8gcmVtb3ZlICZsdDtjc3RkaW8mZ3Q7IGZyb20KVGFibGUgODIuICBIb3dldmVyLCAmbHQ7Y3N0ZGlvJmd0OyBpcyBtZW50aW9uZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4Kc2VjdGlvbiAyNy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlLnN0cmVhbXMiPiBbbGliLmZpbGUuc3RyZWFtc108L2E+LCBpbmNsdWRpbmcgMjcuOC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5jLmZpbGVzIj4gW2xpYi5jLmZpbGVzXTwvYT4uXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMxMCI+PGgzPjMxMC4mbmJzcDtJcyBlcnJubyBhIG1hY3JvPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmhlYWRlcnMiPiBbbGliLmhlYWRlcnNdPC9hPiwgMTkuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1kaWFnbm9zdGljcy5odG1sI2xpYi5lcnJubyI+IFtsaWIuZXJybm9dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIE1hciAyMDAxPC9wPgogIDxwPgogIEV4YWN0bHkgaG93IHNob3VsZCBlcnJubyBiZSBkZWNsYXJlZCBpbiBhIGNvbmZvcm1pbmcgQysrIGhlYWRlcj8KICA8L3A+CgogIDxwPgogIFRoZSBDIHN0YW5kYXJkIHNheXMgaW4gNy4xLjQgdGhhdCBpdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIGVycm5vIGlzIGEKICBtYWNybyBvciBhbiBpZGVudGlmaWVyIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4gIEluIHNvbWUgaW1wbGVtZW50YXRpb25zCiAgaXQgY2FuIGJlIGVpdGhlciwgZGVwZW5kaW5nIG9uIGNvbXBpbGUtdGltZSBvcHRpb25zLiAgKEUuZy4sIG9uCiAgU29sYXJpcyBpbiBtdWx0aS10aHJlYWRpbmcgbW9kZSwgZXJybm8gaXMgYSBtYWNybyB0aGF0IGV4cGFuZHMgdG8gYQogIGZ1bmN0aW9uIGNhbGwsIGJ1dCBpcyBhbiBleHRlcm4gaW50IG90aGVyd2lzZS4gICJVbnNwZWNpZmllZCIgYWxsb3dzCiAgc3VjaCB2YXJpYWJpbGl0eS4pCiAgPC9wPgoKICA8cD5UaGUgQysrIHN0YW5kYXJkOjwvcD4KICA8dWw+CiAgPGxpPjE3LjQuMS4yIHNheXMgaW4gYSBub3RlIHRoYXQgZXJybm8gbXVzdCBiZSBtYWNybyBpbiBDLiAoZmFsc2UpPC9saT4KICA8bGk+MTcuNC4zLjEuMyBmb290bm90ZSAxNjYgc2F5cyBlcnJubyBpcyByZXNlcnZlZCBhcyBhbiBleHRlcm5hbCAKICAgICAgbmFtZSAodHJ1ZSksIGFuZCBpbXBsaWVzIHRoYXQgaXQgaXMgYW4gaWRlbnRpZmllci48L2xpPgogIDxsaT4xOS4zIHNpbXBseSBsaXN0cyBlcnJubyBhcyBhIG1hY3JvIChieSB3aGF0IHJlYXNvbmluZz8pIGFuZCBnb2VzCiAgICAgIG9uIHRvIHNheSB0aGF0IHRoZSBjb250ZW50cyBvZiBvZiBDKysgJmx0O2Vycm5vLmgmZ3Q7IGFyZSB0aGUKICAgICAgc2FtZSBhcyBpbiBDLCBiZWdnaW5nIHRoZSBxdWVzdGlvbi48L2xpPgogIDxsaT5DLjIsIHRhYmxlIDk1IGxpc3RzIGVycm5vIGFzIGEgbWFjcm8sIHdpdGhvdXQgY29tbWVudC48L2xpPgogIDwvdWw+CgogIDxwPkkgZmluZCBubyBvdGhlciByZWZlcmVuY2VzIHRvIGVycm5vLjwvcD4KCiAgPHA+V2Ugc2hvdWxkIGVpdGhlciBleHBsaWNpdGx5IHNheSB0aGF0IGVycm5vIG11c3QgYmUgYSBtYWNybywgZXZlbgogIHRob3VnaCBpdCBuZWVkIG5vdCBiZSBhIG1hY3JvIGluIEMsIG9yIGVsc2UgZXhwbGljaXRseSBsZWF2ZSBpdAogIHVuc3BlY2lmaWVkLiAgV2UgYWxzbyBuZWVkIHRvIHNheSBzb21ldGhpbmcgYWJvdXQgbmFtZXNwYWNlIHN0ZC4gCiAgQSB1c2VyIHdobyBpbmNsdWRlcyAmbHQ7Y2Vycm5vJmd0OyBuZWVkcyB0byBrbm93IHdoZXRoZXIgdG8gd3JpdGUKICA8dHQ+ZXJybm88L3R0Piwgb3IgPHR0Pjo6ZXJybm88L3R0Piwgb3IgPHR0PnN0ZDo6ZXJybm88L3R0Piwgb3IKICBlbHNlICZsdDtjZXJybm8mZ3Q7IGlzIHVzZWxlc3MuPC9wPgoKICA8cD5Ud28gYWNjZXB0YWJsZSBmaXhlczo8L3A+CiAgPHVsPgogICAgPGxpPjxwPmVycm5vIG11c3QgYmUgYSBtYWNyby4gVGhpcyBpcyB0cml2aWFsbHkgc2F0aXNmaWVkIGJ5IGFkZGluZzxicj4KICAgICAgICAmbmJzcDsmbmJzcDsjZGVmaW5lIGVycm5vICg6OnN0ZDo6ZXJybm8pPGJyPgogICAgICAgIHRvIHRoZSBoZWFkZXJzIGlmIGVycm5vIGlzIG5vdCBhbHJlYWR5IGEgbWFjcm8uIFlvdSB0aGVuIGFsd2F5cwogICAgICAgIHdyaXRlIGVycm5vIHdpdGhvdXQgYW55IHNjb3BlIHF1YWxpZmljYXRpb24sIGFuZCBpdCBhbHdheXMgZXhwYW5kcwogICAgICAgIHRvIGEgY29ycmVjdCByZWZlcmVuY2UuIFNpbmNlIGl0IGlzIGFsd2F5cyBhIG1hY3JvLCB5b3Uga25vdyB0bwogICAgICAgIGF2b2lkIHVzaW5nIGVycm5vIGFzIGEgbG9jYWwgaWRlbnRpZmVyLjwvcD48L2xpPgogICAgPGxpPjxwPmVycm5vIGlzIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBUaGlzIGZpeCBpcyBpbmZlcmlvciwgYmVjYXVzZQogICAgICAgIDo6ZXJybm8gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgd2VsbC1mb3JtZWQuPC9wPjwvbGk+CiAgPC91bD4KCiAgPHA+PGk+WwogICAgVGhpcyBpc3N1ZSB3YXMgZmlyc3QgcmFpc2VkIGluIDE5OTksIGJ1dCBpdCBzbGlwcGVkIHRocm91Z2ggCiAgICB0aGUgY3JhY2tzLgogIF08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgPHA+Q2hhbmdlIHRoZSBOb3RlIGluIHNlY3Rpb24gMTcuNC4xLjJwNSBmcm9tPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgTm90ZTogdGhlIG5hbWVzIGRlZmluZWQgYXMgbWFjcm9zIGluIEMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgogICAgYXNzZXJ0LCBlcnJubywgb2Zmc2V0b2YsIHNldGptcCwgdmFfYXJnLCB2YV9lbmQsIGFuZCB2YV9zdGFydC4KICAgIDwvYmxvY2txdW90ZT4KCiAgPHA+dG88L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBOb3RlOiB0aGUgbmFtZXMgZGVmaW5lZCBhcyBtYWNyb3MgaW4gQyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CiAgICBhc3NlcnQsIG9mZnNldG9mLCBzZXRqbXAsIHZhX2FyZywgdmFfZW5kLCBhbmQgdmFfc3RhcnQuCiAgICA8L2Jsb2NrcXVvdGU+CgogIDxwPkluIHNlY3Rpb24gMTkuMywgY2hhbmdlIHBhcmFncmFwaCAyIGZyb208L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBUaGUgY29udGVudHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnkgaGVhZGVyCiAgICAmbHQ7ZXJybm8uaCZndDsuCiAgICA8L2Jsb2NrcXVvdGU+CgogIDxwPnRvPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgVGhlIGNvbnRlbnRzIGFyZSB0aGUgc2FtZSBhcyB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5IGhlYWRlciAKICAgICZsdDtlcnJuby5oJmd0OywgZXhjZXB0IHRoYXQgZXJybm8gc2hhbGwgYmUgZGVmaW5lZCBhcyBhIG1hY3JvLgogICAgPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QysrIG11c3Qgbm90IGxlYXZlIGl0IHVwIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBkZWNpZGUgd2hldGhlciBvcgpub3QgYSBuYW1lIGlzIGEgbWFjcm87IGl0IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IGV4YWN0bHkgd2hpY2ggbmFtZXMKYXJlIHJlcXVpcmVkIHRvIGJlIG1hY3Jvcy4gIFRoZSBvbmx5IG9uZSB0aGF0IHJlYWxseSB3b3JrcyBpcyBmb3IgaXQKdG8gYmUgYSBtYWNyby48L3A+Cgo8cD48aT5bQ3VyYedhbzogYWRkaXRpb25hbCByYXRpb25hbGUgYWRkZWQuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMxMSI+PGgzPjMxMS4mbmJzcDtJbmNvcnJlY3Qgd29yZGluZyBpbiBiYXNpY19vc3RyZWFtIGNsYXNzIHN5bm9wc2lzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0iPiBbbGliLm9zdHJlYW1dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmR5IFNhd3llciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMSBNYXIgMjAwMTwvcD4KCjxwPkluIDI3LjYuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtIj4gW2xpYi5vc3RyZWFtXTwvYT4sIHRoZSBzeW5vcHNpcyBvZiBjbGFzcyBiYXNpY19vc3RyZWFtIHNheXM6PC9wPgoKPHByZT4gIC8vIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zcwogIHRlbXBsYXRlJmx0O2NsYXNzIHRyYWl0cyZndDsKICAgIGJhc2ljX29zdHJlYW0mbHQ7Y2hhcix0cmFpdHMmZ3Q7JmFtcDsgb3BlcmF0b3ImbHQ7Jmx0OyggYmFzaWNfb3N0cmVhbSZsdDtjaGFyLHRyYWl0cyZndDsmYW1wOywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogKTsKPC9wcmU+Cgo8cD5Qcm9ibGVtczo8L3A+Cjx1bD4KPGxpPlRvbyBtYW55ICdzJ3MgYXQgdGhlIGVuZCBvZiAic3BlY2lhbGl6YXRpb25zcyIgPC9saT4KPGxpPlRoaXMgaXMgYW4gb3ZlcmxvYWQsIG5vdCBhIHBhcnRpYWwgc3BlY2lhbGl6YXRpb248L2xpPgo8L3VsPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgc3lub3BzaXMgaW4gMjcuNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0iPiBbbGliLm9zdHJlYW1dPC9hPiwgcmVtb3ZlIHRoZSAKPGk+Ly8gcGFydGlhbCBzcGVjaWFsaXphdGlvbnNzPC9pPiBjb21tZW50LiAgQWxzbyByZW1vdmUgdGhlIHNhbWUgCmNvbW1lbnQgKGNvcnJlY3RseSBzcGVsbGVkLCBidXQgc3RpbGwgaW5jb3JyZWN0KSBmcm9tIHRoZSBzeW5vcHNpcyBpbiAKMjcuNi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyIj4gW2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdPC9hPi4KPC9wPgoKPHA+PGk+WwpQcmUtUmVkbW9uZDogYWRkZWQgMjcuNi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyIj4gW2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdPC9hPiBiZWNhdXNlIG9mIE1hcnRpbidzCmNvbW1lbnQgaW4gYysrc3RkLWxpYi04OTM5LgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzEyIj48aDM+MzEyLiZuYnNwO1RhYmxlIDI3IGlzIG1pc3NpbmcgaGVhZGVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi51dGlsaXRpZXMiPiBbbGliLnV0aWxpdGllc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBNYXIgMjAwMTwvcD4KPHA+VGFibGUgMjcgaW4gc2VjdGlvbiAyMCBsaXN0cyB0aGUgaGVhZGVyICZsdDttZW1vcnkmZ3Q7IChvbmx5KSBmb3IKTWVtb3J5IChsaWIubWVtb3J5KSBidXQgbmVnbGVjdHMgdG8gbWVudGlvbiB0aGUgaGVhZGVycwombHQ7Y3N0ZGxpYiZndDsgYW5kICZsdDtjc3RyaW5nJmd0OyB0aGF0IGFyZSBkaXNjdXNzZWQgaW4gMjAuNC42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLnJlbCI+IFtsaWIubWV0YS5yZWxdPC9hPi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkICZsdDtjc3RkbGliJmd0OyBhbmQgJmx0O2NzdHJpbmcmZ3Q7IHRvIFRhYmxlIDI3LCBpbiB0aGUgc2FtZSByb3cKYXMgJmx0O21lbW9yeSZndDsuPC9wPgo8aHI+CjxhIG5hbWU9IjMxNSI+PGgzPjMxNS4mbmJzcDtCYWQgInJhbmdlIiBpbiBsaXN0Ojp1bmlxdWUgY29tcGxleGl0eTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuc3BlY2lhbCI+IFtsaWIuZGVxdWUuc3BlY2lhbF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEgTWF5IDIwMDE8L3A+CjxwPgoyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLnNwZWNpYWwiPiBbbGliLmRlcXVlLnNwZWNpYWxdPC9hPiwgUGFyYSAyMSBkZXNjcmliZXMgdGhlIGNvbXBsZXhpdHkgb2YKbGlzdDo6dW5pcXVlIGFzOiAiSWYgdGhlIHJhbmdlIChsYXN0IC0gZmlyc3QpIGlzIG5vdCBlbXB0eSwgZXhhY3RseQoobGFzdCAtIGZpcnN0KSAtMSBhcHBsaWNhdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLApvdGhlcndpc2Ugbm8gYXBwbGljYXRpb25zIG9mIHRoZSBwcmVkaWNhdGUpIi4KPC9wPgoKPHA+CiIobGFzdCAtIGZpcnN0KSIgaXMgbm90IGEgcmFuZ2UuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSAicmFuZ2UiIGZyb20gKGxhc3QgLSBmaXJzdCkgdG8gW2ZpcnN0LCBsYXN0KS4KPC9wPgo8aHI+CjxhIG5hbWU9IjMxNiI+PGgzPjMxNi4mbmJzcDtWYWd1ZSB0ZXh0IGluIFRhYmxlIDY5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NCBNYXkgMjAwMTwvcD4KPHA+VGFibGUgNjkgc2F5cyB0aGlzIGFib3V0IGFfdW5pcS5pbnNlcnQodCk6PC9wPgoKPGJsb2NrcXVvdGU+Cmluc2VydHMgdCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBlbGVtZW50IGluIHRoZSBjb250YWluZXIgd2l0aCBrZXkKZXF1aXZhbGVudCB0byB0aGUga2V5IG9mIHQuIFRoZSBib29sIGNvbXBvbmVudCBvZiB0aGUgcmV0dXJuZWQgcGFpciAKaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc2VydGlvbiB0YWtlcyBwbGFjZSBhbmQgdGhlIGl0ZXJhdG9yIGNvbXBvbmVudCBvZiB0aGUKcGFpciBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgZXF1aXZhbGVudCB0byB0aGUga2V5IG9mIHQuCjwvYmxvY2txdW90ZT4KCjxwPlRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgbW9yZSBzcGVjaWZpYyBhYm91dCBleGFjdGx5IGhvdyB0aGUgYm9vbCBjb21wb25lbnQKaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc2VydGlvbiB0YWtlcyBwbGFjZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSB0ZXh0IGluIHF1ZXN0aW9uIHRvPC9wPgoKPGJsb2NrcXVvdGU+Ci4uLlRoZSBib29sIGNvbXBvbmVudCBvZiB0aGUgcmV0dXJuZWQgcGFpciBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnNlcnRpb24KdGFrZXMgcGxhY2UuLi4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjMxNyI+PGgzPjMxNy4mbmJzcDtJbnN0YW50aWF0aW9uIHZzLiBzcGVjaWFsaXphdGlvbiBvZiBmYWNldHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsaXphdGlvbiI+IFtsaWIubG9jYWxpemF0aW9uXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzQgTWF5IDIwMDE8L3A+CjxwPgpUaGUgbG9jYWxpemF0aW9uIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIHJlZmVycyB0byBzcGVjaWFsaXphdGlvbnMgb2YKdGhlIGZhY2V0IHRlbXBsYXRlcyBhcyBpbnN0YW50aWF0aW9ucyBldmVuIHRob3VnaCB0aGUgcmVxdWlyZWQgZmFjZXRzCmFyZSB0eXBpY2FsbHkgc3BlY2lhbGl6ZWQgcmF0aGVyIHRoYW4gZXhwbGljaXRseSAob3IgaW1wbGljaXRseSkKaW5zdGFudGlhdGVkLiBJbiB0aGUgY2FzZSBvZiBjdHlwZSZsdDtjaGFyJmd0OyBhbmQKY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7IChhbmQgdGhlIHdjaGFyX3QgdmVyc2lvbnMpLCB0aGVzZSBmYWNldHMgYXJlCmFjdHVhbGx5IHJlcXVpcmVkIHRvIGJlIHNwZWNpYWxpemVkLiBUaGUgdGVybWlub2xvZ3kgc2hvdWxkIGJlCmNvcnJlY3RlZCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGRvZXNuJ3QgbWFuZGF0ZSBleHBsaWNpdAppbnN0YW50aWF0aW9uICh0aGUgdGVybSBzcGVjaWFsaXphdGlvbiBlbmNvbXBhc3NlcyBib3RoIGV4cGxpY2l0Cmluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocywgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIHdvcmQKaW5zdGFudGlhdGlvbiBvciBpbnN0YW50aWF0aW9ucyB3aXRoIHNwZWNpYWxpemF0aW9uIG9yIHNwZWNpYWxpemF0aW9ucywKcmVzcGVjdGl2ZWx5Ogo8L3A+Cgo8YmxvY2txdW90ZT4KMjIuMS4xLjEuMSwgcDQsIFRhYmxlIDUyLCAyMi4yLjEuMSwgcDIsIDIyLjIuMS41LCBwMywgMjIuMi4xLjUuMSwgcDUsCjIyLjIuMS41LjIsIHAxMCwgMjIuMi4yLCBwMiwgMjIuMi4zLjEsIHAxLCAyMi4yLjMuMS4yLCBwMSwgcDIgYW5kIHAzLCAKMjIuMi40LjEsIHAxLCAyMi4yLjQuMS4yLCBwMSwgMjIsMiw1LCBwMSwgMjIsMiw2LCBwMiwgMjIuMi42LjMuMiwgcDcsIGFuZApGb290bm90ZSAyNDIuCjwvYmxvY2txdW90ZT4KCjxwPkFuZCBjaGFuZ2UgdGhlIHRleHQgaW4gMjIuMS4xLjEuMSwgcDQgZnJvbTwvcD4KCjxibG9ja3F1b3RlPgogICAgQW4gaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aG9zZSBpbnN0YW50aWF0aW9ucwogICAgZm9yIGZhY2V0IHRlbXBsYXRlcyBpZGVudGlmaWVkIGFzIG1lbWJlcnMgb2YgYSBjYXRlZ29yeSwgYW5kCiAgICBmb3IgdGhvc2Ugc2hvd24gaW4gVGFibGUgNTI6CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBBbiBpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRob3NlIHNwZWNpYWxpemF0aW9ucy4uLgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bTmF0aGFuIHdpbGwgcmV2aWV3IHRoZXNlIGNoYW5nZXMsIGFuZCB3aWxsIGxvb2sgZm9yIHBsYWNlcyB3aGVyZQpleHBsaWNpdCBzcGVjaWFsaXphdGlvbiBpcyBuZWNlc3NhcnkuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpcyBhIHNpbXBsZSBtYXR0ZXIgb2Ygb3V0ZGF0ZWQgbGFuZ3VhZ2UuICBUaGUgbGFuZ3VhZ2UgdG8KZGVzY3JpYmUgdGVtcGxhdGVzIHdhcyBjbGFyaWZpZWQgZHVyaW5nIHRoZSBzdGFuZGFyZGl6YXRpb24gcHJvY2VzcywKYnV0IHRoZSB3b3JkaW5nIGluIGNsYXVzZSAyMiB3YXMgbmV2ZXIgdXBkYXRlZCB0byByZWZsZWN0IHRoYXQKY2hhbmdlLjwvcD4KPGhyPgo8YSBuYW1lPSIzMTgiPjxoMz4zMTguJm5ic3A7TWlzbGVhZGluZyBjb21tZW50IGluIGRlZmluaXRpb24gb2YgbnVtcHVuY3RfYnluYW1lPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lIj4gW2xpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIE1heSAyMDAxPC9wPgo8cD5UaGUgZGVmaW5pdGlvbiBvZiB0aGUgbnVtcHVuY3RfYnluYW1lIHRlbXBsYXRlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKY29tbWVudDo8L3A+Cgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0Jmx0O2NoYXJUJmd0OyB7CiAgICAvLyB0aGlzIGNsYXNzIGlzIHNwZWNpYWxpemVkIGZvciBjaGFyIGFuZCB3Y2hhcl90LgogICAgICAgIC4uLgo8L3ByZT4KCjxwPlRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gb2YgdGhlIHNwZWNpYWxpemF0aW9ucyBhbmQgaXQgc2VlbXMKY29uY2VpdmFibGUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBleHBsaWNpdGx5IHNwZWNpYWxpemUgdGhlCnRlbXBsYXRlIGF0IGFsbCwgYnV0IHNpbXBseSBwcm92aWRlIHRoZSBwcmltYXJ5IHRlbXBsYXRlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIGNvbW1lbnQgZnJvbSB0aGUgdGV4dCBpbiAyMi4yLjMuMiBhbmQgZnJvbSB0aGUgcHJvcG9zZWQKcmVzb2x1dGlvbiBvZiBsaWJyYXJ5IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjgiPjIyODwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjMxOSI+PGgzPjMxOS4mbmJzcDtTdG9yYWdlIGFsbG9jYXRpb24gd29yZGluZyBjb25mdXNlcyAiUmVxdWlyZWQgYmVoYXZpb3IiLCAiUmVxdWlyZXMiPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLnNpbmdsZSI+IFtsaWIubmV3LmRlbGV0ZS5zaW5nbGVdPC9hPiwgMTguNS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLmFycmF5Ij4gW2xpYi5uZXcuZGVsZXRlLmFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgTWF5IDIwMDE8L3A+CjxwPlRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgMTcuMy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuc3RydWN0dXJlLnNwZWNpZmljYXRpb25zIj4gW2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnNdPC9hPiB0aGF0ICJSZXF1aXJlZApiZWhhdmlvciIgZWxlbWVudHMgZGVzY3JpYmUgInRoZSBzZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uCnByb3ZpZGVkIGJ5IGVpdGhlciB0aGUgaW1wbGVtZW50YXRpb24gb3IgYSBDKysgcHJvZ3JhbS4iPC9wPgoKPHA+VGhlIHN0YW5kYXJkIHNwZWNpZmllcyAxNy4zLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnMiPiBbbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc108L2E+IHRoYXQgIlJlcXVpcmVzIgplbGVtZW50cyBkZXNjcmliZSAidGhlIHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiI8L3A+Cgo8cD5JbiB0aGUgc2VjdGlvbnMgbm90ZWQgYmVsb3csIHRoZSBjdXJyZW50IHdvcmRpbmcgc3BlY2lmaWVzCiJSZXF1aXJlZCBCZWhhdmlvciIgZm9yIHdoYXQgYXJlIGFjdHVhbGx5IHByZWNvbmRpdGlvbnMsIGFuZCB0aHVzCnNob3VsZCBiZSBzcGVjaWZpZWQgYXMgIlJlcXVpcmVzIi48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5JbiAxOC41LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuc2luZ2xlIj4gW2xpYi5uZXcuZGVsZXRlLnNpbmdsZV08L2E+IFBhcmEgMTIgQ2hhbmdlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+UmVxdWlyZWQgYmVoYXZpb3I6IGFjY2VwdCBhIHZhbHVlIG9mIHB0ciB0aGF0IGlzIG51bGwgb3IgdGhhdCB3YXMKICByZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+UmVxdWlyZXM6IHRoZSB2YWx1ZSBvZiBwdHIgaXMgbnVsbCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYW4KICBlYXJsaWVyIGNhbGwgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAxOC41LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuYXJyYXkiPiBbbGliLm5ldy5kZWxldGUuYXJyYXldPC9hPiBQYXJhIDExIENoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVkIGJlaGF2aW9yOiBhY2NlcHQgYSB2YWx1ZSBvZiBwdHIgdGhhdCBpcyBudWxsIG9yIHRoYXQgd2FzCiAgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVzOiB0aGUgdmFsdWUgb2YgcHRyIGlzIG51bGwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFuCiAgZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPGhyPgo8YSBuYW1lPSIzMjAiPjxoMz4zMjAuJm5ic3A7bGlzdDo6YXNzaWduIG92ZXJzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmRlcXVlLmNvbnMiPiBbbGliLmRlcXVlLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBNYXkgMjAwMTwvcD4KPHA+ClNlY3Rpb24gMjMuMi4yLjEsIHBhcmFncmFwaHMgNi04IHNwZWNpZnkgdGhhdCBsaXN0IGFzc2lnbiAoYm90aCBmb3JtcykgaGF2ZQp0aGUgImVmZmVjdHMiIG9mIGEgY2FsbCB0byBlcmFzZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8gaW5zZXJ0Lgo8L3A+Cgo8cD4KSSB3b3VsZCBsaWtlIHRvIGRvY3VtZW50IHRoYXQgaW1wbGVtZW50ZXJzIGhhdmUgdGhlIGZyZWVkb20gdG8gaW1wbGVtZW50IAphc3NpZ24gYnkgb3RoZXIgbWV0aG9kcywgYXMgbG9uZyBhcyB0aGUgZW5kIHJlc3VsdCBpcyB0aGUgc2FtZSBhbmQgdGhlIApleGNlcHRpb24gZ3VhcmFudGVlIGlzIGFzIGdvb2Qgb3IgYmV0dGVyIHRoYW4gdGhlIGJhc2ljIGd1YXJhbnRlZS4KPC9wPgoKPHA+ClRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGlzIHRvIHVzZSBUJ3MgYXNzaWdubWVudCBvcGVyYXRvciB0byByZWN5Y2xlCmV4aXN0aW5nIG5vZGVzIGluIHRoZSBsaXN0IGluc3RlYWQgb2YgZXJhc2luZyB0aGVtIGFuZCByZWFsbG9jYXRpbmcKdGhlbSB3aXRoIG5ldyB2YWx1ZXMuICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0LCB3aXRoIGNhcmVmdWwKY29kaW5nLCBtb3N0IGNvbW1vbiBjYXNlcyBvZiBhc3NpZ24gKGV2ZXJ5dGhpbmcgYnV0IGFzc2lnbm1lbnQgd2l0aAp0cnVlIGlucHV0IGl0ZXJhdG9ycykgY2FuIGVsZXZhdGUgdGhlIGV4Y2VwdGlvbiBzYWZldHkgdG8gc3Ryb25nIGlmClQncyBhc3NpZ25tZW50IGhhcyBhIG5vdGhyb3cgZ3VhcmFudGVlICh3aXRoIG5vIGV4dHJhIG1lbW9yeSBjb3N0KS4KTWV0cm93ZXJrcyBkb2VzIHRoaXMuICBIb3dldmVyIEkgZG8gbm90IHByb3Bvc2UgdGhhdCB0aGlzIHN1YnRsZXR5IGJlCnN0YW5kYXJkaXplZC4gIEl0IGlzIGEgUW9JIGlzc3VlLiAgPC9wPgoKPHA+RXhpc3RpbmcgcHJhY3Rpc2U6Ck1ldHJvd2Vya3MgYW5kIFNHSSByZWN5Y2xlIG5vZGVzLCBEaW5rdW13YXJlIGFuZCBSb2d1ZSBXYXZlIGRvbid0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIzLjIuMi4xLzcgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+RWZmZWN0czo8L3A+Cgo8cHJlPiAgIGVyYXNlKGJlZ2luKCksIGVuZCgpKTsKICAgaW5zZXJ0KGJlZ2luKCksIGZpcnN0LCBsYXN0KTsKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5FZmZlY3RzOiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIGxpc3Qgd2l0aCB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIDIzLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnNlcXVlbmNlLnJlcW10cyI+IFtsaWIuc2VxdWVuY2UucmVxbXRzXTwvYT4sIGluIFRhYmxlIDY3IChzZXF1ZW5jZSByZXF1aXJlbWVudHMpLCAKYWRkIHR3byBuZXcgcm93czo8L3A+CjxwcmU+ICAgICAgYS5hc3NpZ24oaSxqKSAgICAgdm9pZCAgICAgIHByZTogaSxqIGFyZSBub3QgaXRlcmF0b3JzIGludG8gYS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VzIGVsZW1lbnRzIGluIGEgd2l0aCBhIGNvcHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFtpLCBqKS4KCiAgICAgIGEuYXNzaWduKG4sdCkgICAgIHZvaWQgICAgICBwcmU6IHQgaXMgbm90IGEgcmVmZXJlbmNlIGludG8gYS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VzIGVsZW1lbnRzIGluIGEgd2l0aCBuIGNvcGllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdC4KPC9wcmU+Cgo8cD5DaGFuZ2UgMjMuMi4yLjEvOCBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5FZmZlY3RzOjwvcD4KPHByZT4gICBlcmFzZShiZWdpbigpLCBlbmQoKSk7CiAgIGluc2VydChiZWdpbigpLCBuLCB0KTsKPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPkVmZmVjdHM6IFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCB3aXRoIG4gY29waWVzIG9mIHQuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogUHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgY2hhbmdlZCBzbGlnaHRseS4gIFByZXZpb3VzCnZlcnNpb24gbWFkZSBleHBsaWNpdCBzdGF0ZW1lbnQgYWJvdXQgZXhjZXB0aW9uIHNhZmV0eSwgd2hpY2ggd2Fzbid0CmNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGV4Y2VwdGlvbiBzYWZldHkgaXMgZXhwcmVzc2VkIGVsc2V3aGVyZS4KQWxzbywgdGhlIGNoYW5nZSBpbiB0aGUgc2VxdWVuY2UgcmVxdWlyZW1lbnRzIGlzIG5ldy4gIFdpdGhvdXQgdGhhdApjaGFuZ2UsIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhhdCBhc3NpZ25tZW50IG9mCmEgc3VicmFuZ2Ugd291bGQgaGF2ZSB0byB3b3JrLiAgVGhhdCB0b28gd291bGQgaGF2ZSBiZWVuCm92ZXJzcGVjaWZpY2F0aW9uOyBpdCB3b3VsZCBlZmZlY3RpdmVseSBtYW5kYXRlIHRoYXQgYXNzaWdubWVudCB1c2UgYQp0ZW1wb3JhcnkuICBIb3dhcmQgcHJvdmlkZWQgd29yZGluZy4KXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogTWFkZSBlZGl0b3JpYWwgaW1wcm92ZW1lbnQgaW4gd29yZGluZzsgY2hhbmdlZAoiUmVwbGFjZXMgZWxlbWVudHMgaW4gYSB3aXRoIGNvcGllcyBvZiBlbGVtZW50cyBpbiBbaSwgaikuIgp3aXRoICJSZXBsYWNlcyB0aGUgZWxlbWVudHMgb2YgYSB3aXRoIGEgY29weSBvZiBbaSwgaikuIgpDaGFuZ2VzIG5vdCBkZWVtZWQgc2VyaW91cyBlbm91Z2ggdG8gcmVxdXJlIHJlcmV2aWV3Ll08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzMjEiPjxoMz4zMjEuJm5ic3A7VHlwbyBpbiBudW1fZ2V0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtLZXZpbiBEamFuZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBNYXkgMjAwMTwvcD4KPHA+ClNlY3Rpb24gMjIuMi4yLjEuMiBhdCBwNyBzdGF0ZXMgdGhhdCAiQSBsZW5ndGggc3BlY2lmaWVyIGlzIGFkZGVkIHRvCnRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uLCBpZiBuZWVkZWQsIGFzIGluZGljYXRlZCBpbiBUYWJsZSA1Ni4iCkhvd2V2ZXIsIFRhYmxlIDU2IHVzZXMgdGhlIHRlcm0gImxlbmd0aCBtb2RpZmllciIsIG5vdCAibGVuZ3RoCnNwZWNpZmllciIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjIuMi4yLjEuMiBhdCBwNywgY2hhbmdlIHRoZSB0ZXh0ICJBIGxlbmd0aCBzcGVjaWZpZXIgaXMgYWRkZWQgLi4uIgp0byBiZSAiQSBsZW5ndGggbW9kaWZpZXIgaXMgYWRkZWQgLi4uIgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5DIHVzZXMgdGhlIHRlcm0gImxlbmd0aCBtb2RpZmllciIuICBXZSBzaG91bGQgYmUgY29uc2lzdGVudC48L3A+Cjxocj4KPGEgbmFtZT0iMzIyIj48aDM+MzIyLiZuYnNwO2l0ZXJhdG9yIGFuZCBjb25zdF9pdGVyYXRvciBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSB0eXBlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTWF5IDIwMDE8L3A+CjxwPgpJdCdzIHdpZGVseSBhc3N1bWVkIHRoYXQsIGlmIFggaXMgYSBjb250YWluZXIsCml0ZXJhdG9yX3RyYWl0cyZsdDtYOjppdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgYW5kCml0ZXJhdG9yX3RyYWl0cyZsdDtYOjpjb25zdF9pdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgc2hvdWxkIGJvdGggYmUKWDo6dmFsdWVfdHlwZS4gIEhvd2V2ZXIsIHRoaXMgaXMgbm93aGVyZSBzdGF0ZWQuICBUaGUgbGFuZ3VhZ2UgaW4KVGFibGUgNjUgaXMgbm90IHByZWNpc2UgYWJvdXQgdGhlIGl0ZXJhdG9ycycgdmFsdWUgdHlwZXMgKGl0IHByZWRhdGVzCml0ZXJhdG9yX3RyYWl0cyksIGFuZCBjb3VsZCBldmVuIGJlIGludGVycHJldGVkIGFzIHNheWluZyB0aGF0Cml0ZXJhdG9yX3RyYWl0cyZsdDtYOjpjb25zdF9pdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgc2hvdWxkIGJlICJjb25zdApYOjp2YWx1ZV90eXBlIi4KPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjc5Ij4yNzk8L2E+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBUYWJsZSA2NSAoIkNvbnRhaW5lciBSZXF1aXJlbWVudHMiKSwgY2hhbmdlIHRoZSByZXR1cm4gdHlwZSBmb3IKWDo6aXRlcmF0b3IgdG8gIml0ZXJhdG9yIHR5cGUgd2hvc2UgdmFsdWUgdHlwZSBpcyBUIi4gIENoYW5nZSB0aGUKcmV0dXJuIHR5cGUgZm9yIFg6OmNvbnN0X2l0ZXJhdG9yIHRvICJjb25zdGFudCBpdGVyYXRvciB0eXBlIHdob3NlCnZhbHVlIHR5cGUgaXMgVCIuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoaXMgYmVsb25ncyBhcyBhIGNvbnRhaW5lciByZXF1aXJlbWVudCwgcmF0aGVyIHRoYW4gYW4gaXRlcmF0b3IKcmVxdWlyZW1lbnQsIGJlY2F1c2UgdGhlIHdob2xlIG5vdGlvbiBvZiBpdGVyYXRvci9jb25zdF9pdGVyYXRvcgpwYWlycyBpcyBzcGVjaWZpYyB0byBjb250YWluZXJzJyBpdGVyYXRvci4KPC9wPgo8cD4KSXQgaXMgZXhpc3RpbmcgcHJhY3RpY2UgdGhhdCAoZm9yIGV4YW1wbGUpIAppdGVyYXRvcl90cmFpdHMmbHQ7bGlzdCZsdDtpbnQmZ3Q7Ojpjb25zdF9pdGVyYXRvciZndDs6OnZhbHVlX3R5cGUKaXMgImludCIsIHJhdGhlciB0aGFuICJjb25zdCBpbnQiLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgKdGhlIHdheSB0aGF0IGNvbnN0IHBvaW50ZXJzIGFyZSBoYW5kbGVkOiB0aGUgc3RhbmRhcmQgYWxyZWFkeSAKcmVxdWlyZXMgdGhhdCBpdGVyYXRvcl90cmFpdHMmbHQ7Y29uc3QgaW50KiZndDs6OnZhbHVlX3R5cGUgaXMgaW50Lgo8L3A+Cjxocj4KPGEgbmFtZT0iMzI0Ij48aDM+MzI0LiZuYnNwO0RvIG91dHB1dCBpdGVyYXRvcnMgaGF2ZSB2YWx1ZSB0eXBlcz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm91dHB1dC5pdGVyYXRvcnMiPiBbbGliLm91dHB1dC5pdGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZlIEFicmFoYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgSnVuZSAyMDAxPC9wPgoKPHA+VGFibGUgNzMgc3VnZ2VzdHMgdGhhdCBvdXRwdXQgaXRlcmF0b3JzIGhhdmUgdmFsdWUgdHlwZXMuICBJdCAKcmVxdWlyZXMgdGhlIGV4cHJlc3Npb24gIiphID0gdCIuICBBZGRpdGlvbmFsbHksIGFsdGhvdWdoIFRhYmxlIDczCm5ldmVyIGxpc3RzICJhID0gdCIgb3IgIlgoYSkgPSB0IiBpbiB0aGUgImV4cHJlc3Npb25zIiBjb2x1bW4sIGl0CmNvbnRhaW5zIGEgbm90ZSBzYXlpbmcgdGhhdCAiYSA9IHQiIGFuZCAiWChhKSA9IHQiIGhhdmUgZXF1aXZhbGVudAooYnV0IG5vd2hlcmUgc3BlY2lmaWVkISkgc2VtYW50aWNzLjwvcD4KCjxwPkFjY29yZGluZyB0byAyNC4xLzksIHQgaXMgc3VwcG9zZWQgdG8gYmUgImEgdmFsdWUgb2YgdmFsdWUgdHlwZQpUIjo8L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgWCwgbiBkZW5vdGVzIGEKICAgIHZhbHVlIG9mIHRoZSBkaWZmZXJlbmNlIHR5cGUgRGlzdGFuY2UsIHUsIHRtcCwgYW5kIG0gZGVub3RlCiAgICBpZGVudGlmaWVycywgciBkZW5vdGVzIGEgdmFsdWUgb2YgWCZhbXA7LCB0IGRlbm90ZXMgYSB2YWx1ZSBvZgogICAgdmFsdWUgdHlwZSBULgogICAgPC9ibG9ja3F1b3RlPgoKPHA+VHdvIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFuZGFyZCB0aGF0IGFyZSByZWxldmFudCB0byB3aGV0aGVyCm91dHB1dCBpdGVyYXRvcnMgaGF2ZSB2YWx1ZSB0eXBlczo8L3A+Cgo8dWw+CiAgICA8bGk+MjQuMS8xIHNheXMgIkFsbCBpdGVyYXRvcnMgaSBzdXBwb3J0IHRoZSBleHByZXNzaW9uICppLAogICAgcmVzdWx0aW5nIGluIGEgdmFsdWUgb2Ygc29tZSBjbGFzcywgZW51bWVyYXRpb24sIG9yIGJ1aWx0LWluIHR5cGUKICAgIFQsIGNhbGxlZCB0aGUgdmFsdWUgdHlwZSBvZiB0aGUgaXRlcmF0b3IiLjwvbGk+CgogICAgPGxpPgogICAgMjQuMy4xLzEsIHdoaWNoIHNheXMgIkluIHRoZSBjYXNlIG9mIGFuIG91dHB1dCBpdGVyYXRvciwgdGhlIHR5cGVzCiAgICBpdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7OjpkaWZmZXJlbmNlX3R5cGUKICAgIGl0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgYXJlIGJvdGggZGVmaW5lZCBhcyB2b2lkLiIKICAgIDwvbGk+CjwvdWw+Cgo8cD5UaGUgZmlyc3Qgb2YgdGhlc2UgcGFzc2FnZXMgc3VnZ2VzdHMgdGhhdCAiKmkiIGlzIHN1cHBvc2VkIHRvCnJldHVybiBhIHVzZWZ1bCB2YWx1ZSwgd2hpY2ggY29udHJhZGljdHMgdGhlIG5vdGUgaW4gMjQuMS4yLzIgc2F5aW5nCnRoYXQgdGhlIG9ubHkgdmFsaWQgdXNlIG9mICIqaSIgZm9yIG91dHB1dCBpdGVyYXRvcnMgaXMgaW4gYW4KZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSAiKmkgPSB0Ii4gIFRoZSBzZWNvbmQgb2YgdGhlc2UgcGFzc2FnZXMgYXBwZWFycwp0byBjb250cmFkaWN0IFRhYmxlIDczLCBiZWNhdXNlIGl0IHN1Z2dlc3RzIHRoYXQgIippIidzIHJldHVybiB2YWx1ZQpzaG91bGQgYmUgdm9pZC4gIFRoZSBzZWNvbmQgcGFzc2FnZSBpcyBhbHNvIGJyb2tlbiBpbiB0aGUgY2FzZSBvZiBhIGFuCml0ZXJhdG9yIHR5cGUsIGxpa2Ugbm9uLWNvbnN0IHBvaW50ZXJzLCB0aGF0IHNhdGlzZmllcyBib3RoIHRoZSBvdXRwdXQKaXRlcmF0b3IgcmVxdWlyZW1lbnRzIGFuZCB0aGUgZm9yd2FyZCBpdGVyYXRvciByZXF1aXJlbWVudHMuPC9wPgoKPHA+V2hhdCBzaG91bGQgdGhlIHN0YW5kYXJkIHNheSBhYm91dCA8dHQ+Kmk8L3R0PidzIHJldHVybiB2YWx1ZSB3aGVuCmkgaXMgYW4gb3V0cHV0IGl0ZXJhdG9yLCBhbmQgd2hhdCBzaG91bGQgaXQgc2F5IGFib3V0IHRoYXQgdCBpcyBpbiB0aGUKZXhwcmVzc2lvbiAiKmkgPSB0Ij8gIEZpbmFsbHksIHNob3VsZCB0aGUgc3RhbmRhcmQgc2F5IGFueXRoaW5nIGFib3V0Cm91dHB1dCBpdGVyYXRvcnMnIHBvaW50ZXIgYW5kIHJlZmVyZW5jZSB0eXBlcz88L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjI0LjEgcDEsIGNoYW5nZTwvcD4KCjxibG9ja3F1b3RlPgo8cD5BbGwgaXRlcmF0b3JzIDx0dD5pPC90dD4gc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiA8dHQ+Kmk8L3R0PiwgcmVzdWx0aW5nCmluIGEgdmFsdWUgb2Ygc29tZSBjbGFzcywgZW51bWVyYXRpb24sIG9yIGJ1aWx0LWluIHR5cGUgPHR0PlQ8L3R0PiwKY2FsbGVkIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvci48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwPkFsbCBpbnB1dCBpdGVyYXRvcnMgPHR0Pmk8L3R0PiBzdXBwb3J0IHRoZSBleHByZXNzaW9uIDx0dD4qaTwvdHQ+LApyZXN1bHRpbmcgaW4gYSB2YWx1ZSBvZiBzb21lIGNsYXNzLCBlbnVtZXJhdGlvbiwgb3IgYnVpbHQtaW4gdHlwZQo8dHQ+VDwvdHQ+LCBjYWxsZWQgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yLiBBbGwgb3V0cHV0Cml0ZXJhdG9ycyBzdXBwb3J0IHRoZSBleHByZXNzaW9uIDx0dD4qaSA9IG88L3R0PiB3aGVyZSA8dHQ+bzwvdHQ+IGlzIGEKdmFsdWUgb2Ygc29tZSB0eXBlIHRoYXQgaXMgaW4gdGhlIHNldCBvZiB0eXBlcyB0aGF0IGFyZSA8aT53cml0YWJsZTwvaT4gdG8KdGhlIHBhcnRpY3VsYXIgaXRlcmF0b3IgdHlwZSBvZiA8dHQ+aTwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjI0LjEgcDksIGFkZDwvcD4KCjxibG9ja3F1b3RlPgo8cD48dHQ+bzwvdHQ+IGRlbm90ZXMgYSB2YWx1ZSBvZiBzb21lIHR5cGUgdGhhdCBpcyB3cml0YWJsZSB0byB0aGUKb3V0cHV0IGl0ZXJhdG9yLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPlRhYmxlIDczLCBjaGFuZ2U8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT4qYSA9IHQKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIgPSBvCjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgY2hhbmdlPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIrKyA9IHQKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIrKyA9IG8KPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltwb3N0LVJlZG1vbmQ6IEplcmVteSBwcm92aWRlZCB3b3JkaW5nXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBjb25zaWRlcmVkIHR3byBvcHRpb25zOiBjaGFuZ2UgYWxsIG9mIHRoZSBsYW5ndWFnZSB0aGF0CnNlZW1zIHRvIGltcGx5IHRoYXQgb3V0cHV0IGl0ZXJhdG9ycyBoYXZlIHZhbHVlIHR5cGVzLCB0aHVzIG1ha2luZyBpdApjbGVhciB0aGF0IG91dHB1dCBpdGVyYXRvcnMgaGF2ZSBubyB2YWx1ZSB0eXBlcywgb3IgZWxzZSBkZWZpbmUgdmFsdWUKdHlwZXMgZm9yIG91dHB1dCBpdGVyYXRvciBjb25zaXN0ZW50bHkuICBUaGUgTFdHIGNob3NlIHRoZSBmb3JtZXIKb3B0aW9uLCBiZWNhdXNlIGl0IHNlZW1zIGNsZWFyIHRoYXQgb3V0cHV0IGl0ZXJhdG9ycyB3ZXJlIG5ldmVyCmludGVuZGVkIHRvIGhhdmUgdmFsdWUgdHlwZXMuICBUaGlzIHdhcyBhIGRlbGliZXJhdGUgZGVzaWduIGRlY2lzaW9uLAphbmQgYW55IGxhbmd1YWdlIHN1Z2dlc3Rpbmcgb3RoZXJ3aXNlIGlzIHNpbXBseSBhIG1pc3Rha2UuPC9wPgoKPHA+QSBmdXR1cmUgcmV2aXNpb24gb2YgdGhlIHN0YW5kYXJkIG1heSB3aXNoIHRvIHJldmlzaXQgdGhpcyBkZXNpZ24KZGVjaXNpb24uPC9wPgo8aHI+CjxhIG5hbWU9IjMyNSI+PGgzPjMyNS4mbmJzcDtNaXNsZWFkaW5nIHRleHQgaW4gbW9uZXlwdW5jdCZsdDsmZ3Q7Ojpkb19ncm91cGluZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDIgSnVsIDIwMDE8L3A+CjxwPlRoZSBSZXR1cm5zIGNsYXVzZSBpbiAyMi4yLjYuMy4yLCBwMyBzYXlzIGFib3V0Cm1vbmV5cHVuY3QmbHQ7Y2hhclQmZ3Q7Ojpkb19ncm91cGluZygpCjwvcD4KCjxibG9ja3F1b3RlPgogICAgUmV0dXJuczogQSBwYXR0ZXJuIGRlZmluZWQgaWRlbnRpY2FsbHkgYXMgdGhlIHJlc3VsdCBvZgogICAgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7Ojpkb19ncm91cGluZygpLjI0MSkKPC9ibG9ja3F1b3RlPgoKPHA+Rm9vdG5vdGUgMjQxIHRoZW4gcmVhZHM8L3A+Cgo8YmxvY2txdW90ZT4KICAgIFRoaXMgaXMgbW9zdCBjb21tb25seSB0aGUgdmFsdWUgIlwwMDMiIChub3QgIjMiKS4KPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSByZXR1cm5zIGNsYXVzZSBzZWVtcyB0byBpbXBseSB0aGF0IHRoZSB0d28gbWVtYmVyIGZ1bmN0aW9ucyBtdXN0CnJldHVybiBhbiBpZGVudGljYWwgdmFsdWUgd2hpY2ggaW4gcmVhbGl0eSBtYXkgb3IgbWF5IG5vdCBiZSB0cnVlLApzaW5jZSB0aGUgZmFjZXRzIGFyZSB1c3VhbGx5IGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHN0cnVjdCBzdGQ6Omxjb252CmFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBncm91cGluZyBhbmQgbW9uX2dyb3VwaW5nLCByZXNwZWN0aXZlbHkuClRoZSBmb290bm90ZSBhbHNvIGltcGxpZXMgdGhhdCB0aGUgbWVtYmVyIGZ1bmN0aW9uIG9mIHRoZSBtb25leXB1bmN0CmZhY2V0IChyYXRoZXIgdGhhbiB0aGUgb3ZlcnJpZGRlbiB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBtb25leXB1bmN0X2J5bmFtZSkKbW9zdCBjb21tb25seSByZXR1cm4gIlwwMDMiLCB3aGljaCBjb250cmFkaWN0cyB0aGUgQyBzdGFuZGFyZCB3aGljaApzcGVjaWZpZXMgdGhlIHZhbHVlIG9mICIiIGZvciB0aGUgKG1vc3QgY29tbW9uKSBDIGxvY2FsZS4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSB0ZXh0IGluIFJldHVybnMgY2xhdXNlIGluIDIyLjIuNi4zLjIsIHAzIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIFJldHVybnM6IEEgcGF0dGVybiBkZWZpbmVkIGlkZW50aWNhbGx5IGFzLCBidXQgbm90IG5lY2Vzc2FyaWx5CiAgICBlcXVhbCB0bywgdGhlIHJlc3VsdCBvZiBudW1wdW5jdCZsdDtjaGFyVCZndDs6OmRvX2dyb3VwaW5nKCkuMjQxKQo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgcmVwbGFjZSB0aGUgdGV4dCBpbiBGb290bm90ZSAyNDEgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD4KCjxibG9ja3F1b3RlPgogICAgVG8gc3BlY2lmeSBncm91cGluZyBieSAzcyB0aGUgdmFsdWUgaXMgIlwwMDMiLCBub3QgIjMiLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhlIGZ1bmRhbWVudGFsIHByb2JsZW0gaXMgdGhhdCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGxvY2FsZSBmYWNldAp2aXJ0dWFscyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOiBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgYmFzZQpjbGFzcywgYW5kIGRlc2NyaWJpbmcgdGhlIG1lYW5pbmcgb2YgYW5kIGNvbnN0cmFpbnRzIG9uIHRoZSBiZWhhdmlvcgppbiBhcmJpdHJhcnkgZGVyaXZlZCBjbGFzc2VzLiAgVGhlIG5ldyB3b3JkaW5nIG1ha2VzIHRoYXQgc2VwYXJhdGlvbiBhCmxpdHRsZSBiaXQgY2xlYXJlci4gIFRoZSBmb290bm90ZSAod2hpY2ggaXMgbm9ubm9ybWF0aXZlKSBpcyBub3QKc3VwcG9zZWQgdG8gc2F5IHdoYXQgdGhlIGdyb3VwaW5nIGlzIGluIHRoZSAiQyIgbG9jYWxlIG9yIGluIGFueSBvdGhlcgpsb2NhbGUuIEl0IGlzIGp1c3QgYSByZW1pbmRlciB0aGF0IHRoZSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHNtYWxsCmludGVnZXJzLCBub3QgQVNDSUkgY2hhcmFjdGVycy4KPC9wPgo8aHI+CjxhIG5hbWU9IjMyNyI+PGgzPjMyNy4mbmJzcDtUeXBvIGluIHRpbWVfZ2V0IGZhY2V0IGluIHRhYmxlIDUyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VGlraSBXYW4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDYgSnVsIDIwMDE8L3A+CjxwPlRoZSA8dHQ+d2NoYXJfdDwvdHQ+IHZlcnNpb25zIG9mIDx0dD50aW1lX2dldDwvdHQ+IGFuZAo8dHQ+dGltZV9nZXRfYnluYW1lPC90dD4gYXJlIGxpc3RlZCBpbmNvcnJlY3RseSBpbiB0YWJsZSA1MiwKcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMuICBJbiBib3RoIGNhc2VzIHRoZSBzZWNvbmQgdGVtcGxhdGUKcGFyYW1ldGVyIGlzIGdpdmVuIGFzIE91dHB1dEl0ZXJhdG9yLiAgSXQgc2hvdWxkIGluc3RlYWQgYmUKSW5wdXRJdGVyYXRvciwgc2luY2UgdGhlc2UgYXJlIGlucHV0IGZhY2V0cy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHRhYmxlIDUyLCByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywgaW4gCjIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+LCBjaGFuZ2U8L3A+CjxwcmU+ICAgIHRpbWVfZ2V0Jmx0O3djaGFyX3QsIE91dHB1dEl0ZXJhdG9yJmd0OwogICAgdGltZV9nZXRfYnluYW1lJmx0O3djaGFyX3QsIE91dHB1dEl0ZXJhdG9yJmd0Owo8L3ByZT4KPHA+dG88L3A+CjxwcmU+ICAgIHRpbWVfZ2V0Jmx0O3djaGFyX3QsIElucHV0SXRlcmF0b3ImZ3Q7CiAgICB0aW1lX2dldF9ieW5hbWUmbHQ7d2NoYXJfdCwgSW5wdXRJdGVyYXRvciZndDsKPC9wcmU+Cgo8cD48aT5bUmVkbW9uZDogVmVyeSBtaW5vciBjaGFuZ2UgaW4gcHJvcG9zZWQgcmVzb2x1dGlvbi4gIE9yaWdpbmFsIGhhZAphIHR5cG8sIHdjaGFydCBpbnN0ZWFkIG9mIHdjaGFyX3QuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMyOCI+PGgzPjMyOC4mbmJzcDtCYWQgc3ByaW50ZiBmb3JtYXQgbW9kaWZpZXIgaW4gbW9uZXlfcHV0Jmx0OyZndDs6OmRvX3B1dCgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi42LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tb25leS5wdXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5tb25leS5wdXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDcgSnVsIDIwMDE8L3A+CjxwPlRoZSBzcHJpbnRmIGZvcm1hdCBzdHJpbmcgLCAiJS4wMWYiICh0aGF0J3MgdGhlIGRpZ2l0IG9uZSksIGluIHRoZQpkZXNjcmlwdGlvbiBvZiB0aGUgZG9fcHV0KCkgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbW9uZXlfcHV0IGZhY2V0IGluCjIyLjIuNi4yLjIsIHAxIGlzIGluY29ycmVjdC4gRmlyc3QsIHRoZSBmIGZvcm1hdCBzcGVjaWZpZXIgaXMgd3JvbmcKZm9yIHZhbHVlcyBvZiB0eXBlIGxvbmcgZG91YmxlLCBhbmQgc2Vjb25kLCB0aGUgcHJlY2lzaW9uIG9mIDAxCmRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLiBXaGF0IHdhcyBtb3N0IGxpa2VseSBpbnRlbmRlZCB3YXMKIiUuMExmIi4sIHRoYXQgaXMgYSBwcmVjaXNpb24gb2YgemVybyBmb2xsb3dlZCBieSB0aGUgTCBsZW5ndGgKbW9kaWZpZXIuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZm9ybWF0IHN0cmluZyB0byAiJS4wTGYiLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZpeGVzIGFuIG9idmlvdXMgdHlwbzwvcD4KPGhyPgo8YSBuYW1lPSIzMjkiPjxoMz4zMjkuJm5ic3A7dmVjdG9yIGNhcGFjaXR5LCByZXNlcnZlIGFuZCByZWFsbG9jYXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnByaW9yaXR5LnF1ZXVlIj4gW2xpYi5wcmlvcml0eS5xdWV1ZV08L2E+LCAyMy4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FudGhvbnkgV2lsbGlhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgSnVsIDIwMDE8L3A+CjxwPgpUaGVyZSBpcyBhbiBhcHBhcmVudCBjb250cmFkaWN0aW9uIGFib3V0IHdoaWNoIGNpcmN1bXN0YW5jZXMgY2FuIGNhdXNlCmEgcmVhbGxvY2F0aW9uIG9mIGEgdmVjdG9yIGluIFNlY3Rpb24gMjMuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5wcmlvcml0eS5xdWV1ZSI+IFtsaWIucHJpb3JpdHkucXVldWVdPC9hPiBhbmQKc2VjdGlvbiAyMy4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+Lgo8L3A+Cgo8cD4yMy4yLjQuMnA1IHNheXM6PC9wPgo8YmxvY2txdW90ZT4KTm90ZXM6IFJlYWxsb2NhdGlvbiBpbnZhbGlkYXRlcyBhbGwgdGhlIHJlZmVyZW5jZXMsIHBvaW50ZXJzLCBhbmQgaXRlcmF0b3JzCnJlZmVycmluZyB0byB0aGUgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLiBJdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8KcmVhbGxvY2F0aW9uIHRha2VzIHBsYWNlIGR1cmluZyBpbnNlcnRpb25zIHRoYXQgaGFwcGVuIGFmdGVyIGEgY2FsbCB0bwpyZXNlcnZlKCkgdW50aWwgdGhlIHRpbWUgd2hlbiBhbiBpbnNlcnRpb24gd291bGQgbWFrZSB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yCmdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gcmVzZXJ2ZSgpLgo8L2Jsb2NrcXVvdGU+Cgo8cD5XaGljaCBpbXBsaWVzIGlmIEkgZG88L3A+Cgo8cHJlPiAgc3RkOjp2ZWN0b3ImbHQ7aW50Jmd0OyB2ZWM7CiAgdmVjLnJlc2VydmUoMjMpOwogIHZlYy5yZXNlcnZlKDApOwogIHZlYy5pbnNlcnQodmVjLmVuZCgpLDEpOwo8L3ByZT4KCjxwPnRoZW4gdGhlIGltcGxlbWVudGF0aW9uIG1heSByZWFsbG9jYXRlIHRoZSB2ZWN0b3IgZm9yIHRoZSBpbnNlcnQsCmFzIHRoZSBzaXplIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgY2FsbCB0byByZXNlcnZlIHdhcyB6ZXJvLjwvcD4KCjxwPkhvd2V2ZXIsIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGhzICgyMy4yLjQuMiwgcDEtMikgc3RhdGU6PC9wPgo8YmxvY2txdW90ZT4KPHA+CihjYXBhY2l0eSkgUmV0dXJuczogVGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyB0aGUgdmVjdG9yCmNhbiBob2xkIHdpdGhvdXQgcmVxdWlyaW5nIHJlYWxsb2NhdGlvbgo8L3A+CjxwPgouLi5BZnRlciByZXNlcnZlKCksIGNhcGFjaXR5KCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUKYXJndW1lbnQgb2YgcmVzZXJ2ZSBpZiByZWFsbG9jYXRpb24gaGFwcGVuczsgYW5kIGVxdWFsIHRvIHRoZSBwcmV2aW91cyB2YWx1ZQpvZiBjYXBhY2l0eSgpIG90aGVyd2lzZS4uLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpUaGlzIGltcGxpZXMgdGhhdCB2ZWMuY2FwYWNpdHkoKSBpcyBzdGlsbCAyMywgYW5kIHNvIHRoZSBpbnNlcnQoKQpzaG91bGQgbm90IHJlcXVpcmUgYSByZWFsbG9jYXRpb24sIGFzIHZlYy5zaXplKCkgaXMgMC4gVGhpcyBpcyBiYWNrZWQKdXAgYnkgMjMuMi40LjNwMToKPC9wPgo8YmxvY2txdW90ZT4KKGluc2VydCkgTm90ZXM6IENhdXNlcyByZWFsbG9jYXRpb24gaWYgdGhlIG5ldyBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgb2xkCmNhcGFjaXR5Lgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhvdWdoIHRoaXMgZG9lc24ndCBydWxlIG91dCByZWFsbG9jYXRpb24gaWYgdGhlIG5ldyBzaXplIGlzIGxlc3MKdGhhbiB0aGUgb2xkIGNhcGFjaXR5LCBJIHRoaW5rIHRoZSBpbnRlbnQgaXMgY2xlYXIuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSB3b3JkaW5nIG9mIDIzLjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIucHJpb3JpdHkucXVldWUiPiBbbGliLnByaW9yaXR5LnF1ZXVlXTwvYT4gcGFyYWdyYXBoIDUgdG86PC9wPgoKPGJsb2NrcXVvdGU+Ck5vdGVzOiBSZWFsbG9jYXRpb24gaW52YWxpZGF0ZXMgYWxsIHRoZSByZWZlcmVuY2VzLCBwb2ludGVycywgYW5kCml0ZXJhdG9ycyByZWZlcnJpbmcgdG8gdGhlIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZS4gSXQgaXMgZ3VhcmFudGVlZAp0aGF0IG5vIHJlYWxsb2NhdGlvbiB0YWtlcyBwbGFjZSBkdXJpbmcgaW5zZXJ0aW9ucyB0aGF0IGhhcHBlbiBhZnRlciBhCmNhbGwgdG8gcmVzZXJ2ZSgpIHVudGlsIHRoZSB0aW1lIHdoZW4gYW4gaW5zZXJ0aW9uIHdvdWxkIG1ha2UgdGhlIHNpemUKb2YgdGhlIHZlY3RvciBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIGNhcGFjaXR5KCkuCjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyBtb2RpZmllZCBzbGlnaHRseS4gIEluCnRoZSBvcmlnaW5hbCwgdGhlIGd1YXJhbnRlZSB3YXMgdGhhdCB0aGVyZSB3b3VsZCBiZSBubyByZWFsbG9jYXRpb24KdW50aWwgdGhlIHNpemUgd291bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBjYXBhY2l0eSgpIGFmdGVyIHRoZQptb3N0IHJlY2VudCBjYWxsIHRvIHJlc2VydmUoKS4gIFRoZSBMV0cgZGlkIG5vdCBiZWxpZXZlIHRoYXQgdGhlCiJhZnRlciB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byByZXNlcnZlKCkiIGFkZGVkIGFueSB1c2VmdWwKaW5mb3JtYXRpb24uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgd2FzIGdlbmVyYWwgYWdyZWVtZW50IHRoYXQsIHdoZW4gcmVzZXJ2ZSgpIGlzIGNhbGxlZCB0d2ljZSBpbgpzdWNjZXNzaW9uIGFuZCB0aGUgYXJndW1lbnQgdG8gdGhlIHNlY29uZCBpbnZvY2F0aW9uIGlzIHNtYWxsZXIgdGhhbgp0aGUgYXJndW1lbnQgdG8gdGhlIGZpcnN0LCB0aGUgaW50ZW50IHdhcyBmb3IgdGhlIHNlY29uZCBpbnZvY2F0aW9uIHRvCmhhdmUgbm8gZWZmZWN0LiAgV29yZGluZyBpbXBseWluZyB0aGF0IHN1Y2ggY2FzZXMgaGF2ZSBhbiBlZmZlY3Qgb24KcmVhbGxvY2F0aW9uIGd1YXJhbnRlZXMgd2FzIGluYWR2ZXJ0YW50LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzEiPjxoMz4zMzEuJm5ic3A7YmFkIGRlY2xhcmF0aW9uIG9mIGRlc3RydWN0b3IgZm9yIGlvc19iYXNlOjpmYWlsdXJlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zOjpmYWlsdXJlIj4gW2xpYi5pb3M6OmZhaWx1cmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQcmVtQW5hbmQgTS4gUmFvJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEF1ZyAyMDAxPC9wPgo8cD4KV2l0aCB0aGUgY2hhbmdlIGluIDE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiB0byBzdGF0ZQogICAiQW4gaW1wbGVtZW50YXRpb24gbWF5IHN0cmVuZ3RoZW4gdGhlIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIGZvciBhIAogICAgbm9uLXZpcnR1YWwgZnVuY3Rpb24gYnkgcmVtb3ZpbmcgbGlzdGVkIGV4Y2VwdGlvbnMuIgooaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExOSI+MTE5PC9hPikKYW5kIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gb2YgfmZhaWx1cmUoKSBpbiBpb3NfYmFzZTo6ZmFpbHVyZQo8L3A+CjxwcmU+ICAgIG5hbWVzcGFjZSBzdGQgewogICAgICAgY2xhc3MgaW9zX2Jhc2U6OmZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgICAuLi4KICAgICAgICAgICB2aXJ0dWFsIH5mYWlsdXJlKCk7CiAgICAgICAgICAgLi4uCiAgICAgICB9OwogICAgIH0KPC9wcmU+CjxwPnRoZSBjbGFzcyBmYWlsdXJlIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBzaW5jZSBpbiAxOC42LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi50eXBlLmluZm8iPiBbbGliLnR5cGUuaW5mb108L2E+IHRoZSBkZXN0cnVjdG9yIG9mIGNsYXNzIGV4Y2VwdGlvbiBoYXMgYW4gZW1wdHkKZXhjZXB0aW9uIHNwZWNpZmljYXRpb246PC9wPgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIGV4Y2VwdGlvbiB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIC4uLgogICAgICAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgICAgICAuLi4KICAgICAgIH07CiAgICAgfQo8L3ByZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIGRlY2xhcmF0aW9uIG9mIH5mYWlsdXJlKCkuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhhdCBkZXN0cnVjdG9ycwpvZiBvdGhlciBjbGFzc2VzIGRlcml2ZWQgZnJvbSA8dHQ+ZXhjZXB0aW9uPC90dD4gYXJlIGhhbmRsZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjMzMyI+PGgzPjMzMy4mbmJzcDtkb2VzIGVuZGwgaW1wbHkgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIGRldmljZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5tYW5pcCI+IFtsaWIub3N0cmVhbS5tYW5pcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ByZW1BbmFuZCBNLiBSYW8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgQXVnIDIwMDE8L3A+CjxwPkEgZm9vdG5vdGUgaW4gMjcuNi4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0ubWFuaXAiPiBbbGliLm9zdHJlYW0ubWFuaXBdPC9hPiBzdGF0ZXM6PC9wPgo8YmxvY2txdW90ZT4KICAgIFtGb290bm90ZTogVGhlIGVmZmVjdCBvZiBleGVjdXRpbmcgY291dCAmbHQ7Jmx0OyBlbmRsIGlzIHRvIGluc2VydCBhIAogICAgIG5ld2xpbmUgY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgc2VxdWVuY2UgY29udHJvbGxlZCBieSBjb3V0LCB0aGVuIAogICAgIHN5bmNocm9uaXplIGl0IHdpdGggYW55IGV4dGVybmFsIGZpbGUgd2l0aCB3aGljaCBpdCBtaWdodCBiZSAKICAgICBhc3NvY2lhdGVkLiAtLS0gZW5kIGZvb25vdGVdCjwvYmxvY2txdW90ZT4KCjxwPgpEb2VzIHRoZSB0ZXJtICJmaWxlIiBoZXJlIHJlZmVyIHRvIHRoZSBleHRlcm5hbCBkZXZpY2U/ClRoaXMgbGVhZHMgdG8gc29tZSBpbXBsZW1lbnRhdGlvbiBhbWJpZ3VpdHkgb24gc3lzdGVtcyB3aXRoIGZ1bGx5IApidWZmZXJlZCBmaWxlcyB3aGVyZSBhIG5ld2xpbmUgZG9lcyBub3QgY2F1c2UgYSBmbHVzaCB0byB0aGUgZGV2aWNlLgo8L3A+Cgo8cD4KQ2hvb3NpbmcgdG8gc3luYyB3aXRoIHRoZSBkZXZpY2UgbGVhZHMgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKcGVuYWx0aWVzIGZvciBlYWNoIGNhbGwgdG8gZW5kbCwgd2hpbGUgbm90IHN5bmMtaW5nIGxlYWRzIHRvCmVycm9ycyB1bmRlciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCjwvcD4KCjxwPgpJIGNvdWxkIG5vdCBmaW5kIGFueSBvdGhlciBzdGF0ZW1lbnQgdGhhdCBleHBsaWNpdGx5IGRlZmluZWQKdGhlIGJlaGF2aW9yIG9uZSB3YXkgb3IgdGhlIG90aGVyLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIGZvb3Rub3RlIDMwMCBmcm9tIHNlY3Rpb24gMjcuNi4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0ubWFuaXAiPiBbbGliLm9zdHJlYW0ubWFuaXBdPC9hPi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBhbHJlYWR5IGhhdmUgbm9ybWF0aXZlIHRleHQgc2F5aW5nIHdoYXQgPHR0PmVuZGw8L3R0PiBkb2VzOiBpdAppbnNlcnRzIGEgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIGNhbGxzIDx0dD5mbHVzaDwvdHQ+LiAgVGhpcyBmb290bm90ZQppcyBhdCBiZXN0IHJlZHVuZGFudCwgYXQgd29yc3QgKGFzIHRoaXMgaXNzdWUgc2F5cykgbWlzbGVhZGluZywKYmVjYXVzZSBpdCBhcHBlYXJzIHRvIG1ha2UgcHJvbWlzZXMgYWJvdXQgd2hhdCA8dHQ+Zmx1c2g8L3R0Pgpkb2VzLjwvcD4KPGhyPgo8YSBuYW1lPSIzMzQiPjxoMz4zMzQuJm5ic3A7bWFwOjpvcGVyYXRvcltdIHNwZWNpZmljYXRpb24gZm9yY2VzIGluZWZmaWNpZW50IGltcGxlbWVudGF0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAuYWNjZXNzIj4gW2xpYi5tYXAuYWNjZXNzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmVhIEdyaWZmaW5pJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIFNlcCAyMDAxPC9wPgo8cD4KVGhlIGN1cnJlbnQgc3RhbmRhcmQgZGVzY3JpYmVzIG1hcDo6b3BlcmF0b3JbXSB1c2luZyBhCmNvZGUgZXhhbXBsZS4gVGhhdCBjb2RlIGV4YW1wbGUgaXMgaG93ZXZlciBxdWl0ZQppbmVmZmljaWVudCBiZWNhdXNlIGl0IHJlcXVpcmVzIHNldmVyYWwgdXNlbGVzcyBjb3BpZXMKb2YgYm90aCB0aGUgcGFzc2VkIGtleV90eXBlIHZhbHVlIGFuZCBvZiBkZWZhdWx0CmNvbnN0cnVjdGVkIG1hcHBlZF90eXBlIGluc3RhbmNlcy4KTXkgb3BpbmlvbiBpcyB0aGF0IHdhcyBub3QgbWVhbnQgYnkgdGhlIGNvbWl0ZWUgdG8KcmVxdWlyZSBhbGwgdGhvc2UgdGVtcG9yYXJ5IGNvcGllcy4gCjwvcD4KCjxwPkN1cnJlbnRseSBtYXA6Om9wZXJhdG9yW10gYmVoYXZpb3VyIGlzIHNwZWNpZmllZCBhczogPC9wPgo8cHJlPiAgUmV0dXJuczoKICAgICgqKChpbnNlcnQobWFrZV9wYWlyKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+CiAgCjxwPgpUaGlzIHNwZWNpZmljYXRpb24gaG93ZXZlciB1c2VzIG1ha2VfcGFpciB0aGF0IGlzIGEKdGVtcGxhdGUgZnVuY3Rpb24gb2Ygd2hpY2ggcGFyYW1ldGVycyBpbiB0aGlzIGNhc2UKd2lsbCBiZSBkZWR1Y2VkIGJlaW5nIG9mIHR5cGUgY29uc3Qga2V5X3R5cGUmYW1wOyBhbmQKY29uc3QgVCZhbXA7LiBUaGlzIHdpbGwgY3JlYXRlIGEgcGFpciZsdDtrZXlfdHlwZSxUJmd0OyB0aGF0Cmlzbid0IHRoZSBjb3JyZWN0IHR5cGUgZXhwZWN0ZWQgYnkgbWFwOjppbnNlcnQgc28KYW5vdGhlciBjb3B5IHdpbGwgYmUgcmVxdWlyZWQgdXNpbmcgdGhlIHRlbXBsYXRlCmNvbnZlcnNpb24gY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHBhaXIgdG8gYnVpbGQKdGhlIHJlcXVpcmVkIHBhaXImbHQ7Y29uc3Qga2V5X3R5cGUsVCZndDsgaW5zdGFuY2UuCjwvcD4KCjxwPklmIHdlIGNvbnNpZGVyIGNhbGxpbmcgb2Yga2V5X3R5cGUgY29weSBjb25zdHJ1Y3RvcgphbmQgbWFwcGVkX3R5cGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgY29weQpjb25zdHJ1Y3RvciBhcyBvYnNlcnZhYmxlIGJlaGF2aW91ciAoYXMgSSB0aGluayB3ZQpzaG91bGQpIHRoZW4gdGhlIHN0YW5kYXJkIGlzIGluIHRoaXMgcGxhY2UgcmVxdWlyaW5nCnR3byBjb3BpZXMgb2YgYSBrZXlfdHlwZSBlbGVtZW50IHBsdXMgYSBkZWZhdWx0CmNvbnN0cnVjdGlvbiBhbmQgdHdvIGNvcHkgY29uc3RydWN0aW9uIG9mIGEgbWFwcGVkX3R5cGUKKHN1cHBvc2luZyB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50CmluIHRoZSBtYXA7IG90aGVyd2lzZSBhdCBsZWFzdCBhbm90aGVyIGNvcHkKY29uc3RydWN0aW9uIGZvciBlYWNoIHR5cGUpLiAKPC9wPgoKPHA+QSBzaW1wbGUgKGhhbGYpIHNvbHV0aW9uIHdvdWxkIGJlIHJlcGxhY2luZyB0aGUgZGVzY3JpcHRpb24gd2l0aDo8L3A+CjxwcmU+ICBSZXR1cm5zOgogICAgKCooKGluc2VydCh2YWx1ZV90eXBlKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+Cgo8cD5UaGlzIHdpbGwgcmVtb3ZlIHRoZSB3cm9uZyB0eXBlZCBwYWlyIGNvbnN0cnVjdGlvbiB0aGF0CnJlcXVpcmVzIG9uZSBleHRyYSBjb3B5IG9mIGJvdGgga2V5IGFuZCB2YWx1ZS48L3A+Cgo8cD5Ib3dldmVyIHN0aWxsIHRoZSB1c2luZyBvZiBtYXA6Omluc2VydCByZXF1aXJlcyB0ZW1wb3JhcnkKb2JqZWN0cyB3aGlsZSB0aGUgb3BlcmF0aW9uLCBmcm9tIGEgbG9naWNhbCBwb2ludCBvZiB2aWV3LApkb2Vzbid0IHJlcXVpcmUgYW55LiA8L3A+Cgo8cD5JIHRoaW5rIHRoYXQgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgbGVhdmluZyBmcmVlIGFuCmltcGxlbWVudGVyIHRvIHVzZSBhIGRpZmZlcmVudCBhcHByb2FjaCB0aGFuIG1hcDo6aW5zZXJ0CnRoYXQsIGJlY2F1c2Ugb2YgaXRzIGludGVyZmFjZSwgZm9yY2VzIGRlZmF1bHQgY29uc3RydWN0ZWQKdGVtcG9yYXJpZXMgYW5kIGNvcGllcyBpbiB0aGlzIGNhc2UuClRoZSBiZXN0IHNvbHV0aW9uIGluIG15IG9waW5pb24gd291bGQgYmUganVzdCByZXF1aXJpbmcKbWFwOjpvcGVyYXRvcltdIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUKcGFydCBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnQgY3JlYXRpbmcgYSBkZWZhdWx0IGVsZW1lbnQKd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBpZiBubyBzdWNoIGFuIGVsZW1lbnQgaXMgYWxyZWFkeQpwcmVzZW50IGluIHRoZSBjb250YWluZXIuIEFsc28gYSBsb2dhcml0aG1pYyBjb21wbGV4aXR5CnJlcXVpcmVtZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIHRoZSBvcGVyYXRpb24uCjwvcD4KCjxwPgpUaGlzIHdvdWxkIGFsbG93IGxpYnJhcnkgaW1wbGVtZW50ZXJzIHRvIHdyaXRlIGFsdGVybmF0aXZlCmltcGxlbWVudGF0aW9ucyBub3QgdXNpbmcgbWFwOjppbnNlcnQgYW5kIHJlYWNoaW5nIG9wdGltYWwKcGVyZm9ybWFuY2UgaW4gYm90aCBjYXNlcyBvZiB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgYmVpbmcKcHJlc2VudCBvciBhYnNlbnQgZnJvbSB0aGUgbWFwIChubyB0ZW1wb3JhcmllcyBhdCBhbGwgYW5kCmp1c3QgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHBhaXIgaW5zaWRlIHRoZSBjb250YWluZXIgaWYKdGhlIGVsZW1lbnQgaXNuJ3QgcHJlc2VudCkuClNvbWUgaW1wbGVtZW50ZXIgaGFzIGFscmVhZHkgdGFrZW4gdGhpcyBvcHRpb24gYnV0IEkgdGhpbmsKdGhhdCB0aGUgY3VycmVudCB3b3JkaW5nIG9mIHRoZSBzdGFuZGFyZCBydWxlcyB0aGF0IGFzCm5vbi1jb25mb3JtaW5nLiAKPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+ClJlcGxhY2UgMjMuMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAuYWNjZXNzIj4gW2xpYi5tYXAuYWNjZXNzXTwvYT4gcGFyYWdyYXBoIDEgd2l0aAo8L3A+CjxibG9ja3F1b3RlPgo8cD4KLTEtIEVmZmVjdHM6ICBJZiB0aGVyZSBpcyBubyBrZXkgZXF1aXZhbGVudCB0byB4IGluIHRoZSBtYXAsIGluc2VydHMgCnZhbHVlX3R5cGUoeCwgVCgpKSBpbnRvIHRoZSBtYXAuCjwvcD4KPHA+Ci0yLSBSZXR1cm5zOiBBIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUgY29ycmVzcG9uZGluZyB0byB4IGluICp0aGlzLgo8L3A+CjxwPgotMy0gQ29tcGxleGl0eTogbG9nYXJpdGhtaWMuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1RoaXMgaXMgdGhlIHNlY29uZCBvcHRpb24gbWVudGlvbmVkIGFib3ZlLiAgSG93YXJkIHByb3ZpZGVkCndvcmRpbmcuICBXZSBtYXkgYWxzbyB3aXNoIHRvIGhhdmUgYSBibGFua2V0IHN0YXRlbWVudCBzb21ld2hlcmUgaW4KY2xhdXNlIDE3IHNheWluZyB0aGF0IHdlIGRvIG5vdCBpbnRlbmQgdGhlIHNlbWFudGljcyBvZiBzYW1wbGUgY29kZQpmcmFnbWVudHMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgc3BlY2lmaW5nIGV4YWN0bHkgaG93IG1hbnkgY29waWVzIGFyZQptYWRlLiAgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5OCI+OTg8L2E+IGZvciBhIHNpbWlsYXIgcHJvYmxlbS5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBpcyB0aGUgc2Vjb25kIHNvbHV0aW9uIGRlc2NyaWJlZCBhYm92ZTsgYXMgbm90ZWQsIGl0IGlzCmNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBwcmFjdGljZS4KPC9wPgoKPHA+Tm90ZSB0aGF0IHdlIG5vdyBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbXBsZXhpdHkgZXhwbGljaXRseSwgYmVjYXVzZQp3ZSBhcmUgbm8gbG9uZ2VyIGRlZmluaW5nIDx0dD5vcGVyYXRvcltdPC90dD4gaW4gdGVybXMgb2YKPHR0Pmluc2VydDwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzUiPjxoMz4zMzUuJm5ic3A7bWlub3IgaXNzdWUgd2l0aCBjaGFyX3RyYWl0cywgdGFibGUgMzc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlIj4gW2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5keSBTYXd5ZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDYgU2VwIDIwMDE8L3A+CjxwPgpUYWJsZSAzNywgaW4gMjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMucmVxdWlyZSI+IFtsaWIuY2hhci50cmFpdHMucmVxdWlyZV08L2E+LCBkZXNjaWJlcyBjaGFyX3RyYWl0czo6YXNzaWduCmFzOgo8L3A+CjxwcmU+ICBYOjphc3NpZ24oYyxkKSAgIGFzc2lnbnMgYyA9IGQuCjwvcHJlPgoKPHA+QW5kIHBhcmEgMSBzYXlzOjwvcD4KCjxibG9ja3F1b3RlPgogWy4uLl0gYyBhbmQgZCBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgQ2hhclQgWy4uLl0KPC9ibG9ja3F1b3RlPgoKPHA+Ck5hdHVyYWxseSwgaWYgYyBhbmQgZCBhcmUgPGk+dmFsdWVzPC9pPiwgdGhlbiB0aGUgYXNzaWdubWVudCBpcwooZWZmZWN0aXZlbHkpIG1lYW5pbmdsZXNzLiBJdCdzIGNsZWFybHkgaW50ZW5kZWQgdGhhdCAoaW4gdGhlIGNhc2Ugb2YKYXNzaWduLCBhdCBsZWFzdCksICdjJyBpcyBpbnRlbmRlZCB0byBiZSBhIHJlZmVyZW5jZSB0eXBlLgo8L3A+Cgo8cD5JIGRpZCBhIHF1aWNrIHN1cnZleSBvZiB0aGUgZm91ciBpbXBsZW1lbnRhdGlvbnMgSSBoYXBwZW5lZCB0byBoYXZlCmx5aW5nIGFyb3VuZCwgYW5kIHN1cmUgZW5vdWdoIHRoZXkgYWxsIGhhdmUgc2lnbmF0dXJlczo8L3A+CjxwcmU+ICAgIGFzc2lnbiggY2hhclQmYW1wOywgY29uc3QgY2hhclQmYW1wOyApOwo8L3ByZT4KCjxwPihvciB0aGUgZXF1aXZhbGVudCkuIEl0J3MgYWxzbyBkZXNjcmliZWQgdGhpcyB3YXkgaW4gTmljbydzIGJvb2suCihOb3QgdG8gbWVudGlvbiB0aGUgc3lub3BzZXMgb2YgY2hhcl90cmFpdHMmbHQ7Y2hhciZndDsgaW4gMjEuMS4zLjEKYW5kIGNoYXJfdHJhaXRzJmx0O3djaGFyX3QmZ3Q7IGluIDIxLjEuMy4yLi4uKQo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdG8gMjEuMS4xIHBhcmEgMTo8L3A+CjxibG9ja3F1b3RlPgogciBkZW5vdGVzIGFuIGx2YWx1ZSBvZiBDaGFyVAo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBvZiBhc3NpZ24gaW4gdGhlIHRhYmxlIHRvOjwvcD4KPHByZT4gIFg6OmFzc2lnbihyLGQpICAgYXNzaWducyByID0gZAo8L3ByZT4KPGhyPgo8YSBuYW1lPSIzMzYiPjxoMz4zMzYuJm5ic3A7Q2xhdXNlIDE3IGxhY2sgb2YgcmVmZXJlbmNlcyB0byBkZXByZWNhdGVkIGhlYWRlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5saWJyYXJ5Ij4gW2xpYi5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGV0bGVmIFZvbGxtYW5uJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA1IFNlcCAyMDAxPC9wPgo8cD5Gcm9tIGMrK3N0ZC1lZGl0LTg3Mzo8L3A+Cgo8cD4xNy40LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5oZWFkZXJzIj4gW2xpYi5oZWFkZXJzXTwvYT4sIFRhYmxlIDExLiAgSW4gdGhpcyB0YWJsZSwgdGhlIGhlYWRlcgombHQ7c3Ryc3RyZWFtJmd0OyBpcyBtaXNzaW5nLjwvcD4KCjxwPlRoaXMgc2hvd3MgYSBnZW5lcmFsIHByb2JsZW06IFRoZSB3aG9sZSBjbGF1c2UgMTcgcmVmZXJzIHF1aXRlCm9mdGVuIHRvIGNsYXVzZXMgMTggdGhyb3VnaCAyNywgYnV0IEQuNyBpcyBhbHNvIGEgcGFydCBvZiB0aGUgc3RhbmRhcmQKbGlicmFyeSAodGhvdWdoIGEgZGVwcmVjYXRlZCBvbmUpLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPlRvIDE3LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmhlYWRlcnMiPiBbbGliLmhlYWRlcnNdPC9hPiBUYWJsZSAxMSwgQysrIExpYnJhcnkgSGVhZGVycywgYWRkCiImbHQ7c3Ryc3RyZWFtJmd0OyIuPC9wPgoKPHA+SW4gdGhlIGZvbGxvd2luZyBwbGFjZXMsIGNoYW5nZSAiY2xhdXNlcyAxNyB0aHJvdWdoIDI3IiB0byAiY2xhdXNlcwoxNyB0aHJvdWdoIDI3IGFuZCBBbm5leCBEIjo8L3A+Cgo8dWw+CjxsaT4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLnJlZnMiPiBbaW50cm8ucmVmc108L2E+IE5vcm1hdGl2ZSByZWZlcmVuY2VzLzEvZm9vdG5vdGUgMTwvbGk+CjxsaT4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLmRlZnMiPiBbaW50cm8uZGVmc108L2E+IERlZmluaXRpb25zLzE8L2xpPgo8bGk+NyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2RjbC5odG1sI2RjbC5kY2wiPiBbZGNsLmRjbF08L2E+IExpYnJhcnkgaW50cm9kdWN0aW9uLzk8L2xpPgo8bGk+MTcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5kZXNjcmlwdGlvbiI+IFtsaWIuZGVzY3JpcHRpb25dPC9hPiBNZXRob2Qgb2YgZGVzY3JpcHRpb24gKEluZm9ybWF0aXZlKS8xPC9saT4KPGxpPjE3LjMuMi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuY2hhcmFjdGVyLnNlcSI+IFtsaWIuY2hhcmFjdGVyLnNlcV08L2E+IENoYXJhY3RlciBzZXF1ZW5jZXMvMS9idWxsZXQgMjwvbGk+CjxsaT4xNy4zLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5mdW5jdGlvbnMud2l0aGluLmNsYXNzZXMiPiBbbGliLmZ1bmN0aW9ucy53aXRoaW4uY2xhc3Nlc108L2E+IEZ1bmN0aW9ucyB3aXRoaW4gY2xhc3Nlcy8xPC9saT4KPGxpPjE3LjMuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLm9iamVjdHMud2l0aGluLmNsYXNzZXMiPiBbbGliLm9iamVjdHMud2l0aGluLmNsYXNzZXNdPC9hPiBQcml2YXRlIG1lbWJlcnMvMS8oMiBwbGFjZXMpPC9saT4KPGxpPjE3LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVxdWlyZW1lbnRzIj4gW2xpYi5yZXF1aXJlbWVudHNdPC9hPiBMaWJyYXJ5LXdpZGUgcmVxdWlyZW1lbnRzLzE8L2xpPgo8bGk+MTcuNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuaGVhZGVycyI+IFtsaWIuaGVhZGVyc108L2E+IEhlYWRlcnMvNDwvbGk+CjxsaT4xNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+IFJlcGxhY2VtZW50IGZ1bmN0aW9ucy8xPC9saT4KPGxpPjE3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmdsb2JhbC5mdW5jdGlvbnMiPiBbbGliLmdsb2JhbC5mdW5jdGlvbnNdPC9hPiBHbG9iYWwgb3Igbm9uLW1lbWJlciBmdW5jdGlvbnMvMjwvbGk+CjxsaT4xNy40LjQuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5wcm90ZWN0aW9uLndpdGhpbi5jbGFzc2VzIj4gW2xpYi5wcm90ZWN0aW9uLndpdGhpbi5jbGFzc2VzXTwvYT4gUHJvdGVjdGlvbiB3aXRoaW4gY2xhc3Nlcy8xPC9saT4KPC91bD4KCgo8aHI+CjxhIG5hbWU9IjMzNyI+PGgzPjMzNy4mbmJzcDtyZXBsYWNlX2NvcHlfaWYncyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIElucHV0SXRlcmF0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVwbGFjZSI+IFtsaWIuYWxnLnJlcGxhY2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEZXRsZWYgVm9sbG1hbm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDcgU2VwIDIwMDE8L3A+CjxwPkZyb20gYysrc3RkLWVkaXQtODc2OjwvcD4KCjxwPgpJbiBzZWN0aW9uIDI1LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXBsYWNlIj4gW2xpYi5hbGcucmVwbGFjZV08L2E+IGJlZm9yZSBwNDogVGhlIG5hbWUgb2YgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0ZW1wbGF0ZSByZXBsYWNlX2NvcHlfaWYgc2hvdWxkIGJlICJJbnB1dEl0ZXJhdG9yIgppbnN0ZWFkIG9mICJJdGVyYXRvciIuICBBY2NvcmRpbmcgdG8gMTcuMy4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIudHlwZS5kZXNjcmlwdGlvbnMiPiBbbGliLnR5cGUuZGVzY3JpcHRpb25zXTwvYT4gcDEgdGhlCnBhcmFtZXRlciBuYW1lIGNvbnZleXMgcmVhbCBub3JtYXRpdmUgbWVhbmluZy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSA8dHQ+SXRlcmF0b3I8L3R0PiB0byA8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzgiPjxoMz4zMzguJm5ic3A7IGlzIHdoaXRlc3BhY2UgYWxsb3dlZCBiZXR3ZWVuIGAtJyBhbmQgYSBkaWdpdD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3JpZXMiPiBbbGliLmxvY2FsZS5jYXRlZ29yaWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IFNlcCAyMDAxPC9wPgo8cD4KRnJvbSBTdGFnZSAyIHByb2Nlc3NpbmcgaW4gMjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiwgcDggYW5kIDkgKHRoZQpvcmlnaW5hbCB0ZXh0IG9yIHRoZSB0ZXh0IGNvcnJlY3RlZCBieSB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZgppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIxIj4yMjE8L2E+KSBpdCBzZWVtcyBjbGVhciB0aGF0IG5vIHdoaXRlc3BhY2UgaXMgYWxsb3dlZAp3aXRoaW4gYSBudW1iZXIsIGJ1dCAyMi4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5udW1wdW5jdCI+IFtsaWIubG9jYWxlLm51bXB1bmN0XTwvYT4sIHAyLCB3aGljaCBnaXZlcyB0aGUKZm9ybWF0IGZvciBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMsIHNheXMgdGhhdCB3aGl0ZXNwYWNlIGlzCm9wdGlvbmFsIGJldHdlZW4gYSBwbHVzbWludXMgYW5kIGEgc2lnbi4KPC9wPgoKPHA+ClRoZSB0ZXh0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCB0byBlaXRoZXIgY29uc2lzdGVudGx5IGFsbG93IG9yCmRpc2FsbG93IHdoaXRlc3BhY2UgYmV0d2VlbiBhIHBsdXNtaW51cyBhbmQgYSBzaWduLiBJdCBtaWdodCBiZQp3b3J0aHdoaWxlIHRvIGNvbnNpZGVyIHRoZSBmYWN0IHRoYXQgdGhlIEMgbGlicmFyeSBzdGRpbyBmYWNpbGl0eSBkb2VzCm5vdCBwZXJtaXQgd2hpdGVzcGFjZSBlbWJlZGRlZCBpbiBudW1iZXJzIGFuZCBuZWl0aGVyIGRvZXMgdGhlIEMgb3IKQysrIGNvcmUgbGFuZ3VhZ2UgKHRoZSBzeW50YXggb2YgaW50ZWdlci1saXRlcmFscyBpcyBnaXZlbiBpbiAyLjEzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sZXguaHRtbCNsZXguaWNvbiI+IFtsZXguaWNvbl08L2E+LCB0aGF0IG9mIGZsb2F0aW5nLXBvaW50LWxpdGVyYWxzIGluIDIuMTMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xleC5odG1sI2xleC5mY29uIj4gW2xleC5mY29uXTwvYT4gb2YgdGhlIEMrKyBzdGFuZGFyZCkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZpcnN0IHBhcnQgb2YgMjIuMi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubnVtcHVuY3QiPiBbbGliLmxvY2FsZS5udW1wdW5jdF08L2E+IHBhcmFncmFwaCAyIGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCA8dHQ+d2hpdGVzcGFjZTwvdHQ+IGlzIGFzIGRldGVybWluZWQgYnkgdGhlIGZhY2V0Cjx0dD5jdHlwZSZsdDtjaGFyVCZndDs8L3R0PiAoMjIuMi4xLjEpLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQKPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlIHJlc3VsdHMgb2YgY29ycmVzcG9uZGluZwo8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4gIEludGVnZXIgdmFsdWVzIGhhdmUgdGhlCmZvcm1hdDoKPC9wPgo8cHJlPiAgaW50ZWdlciAgIDo6PSBbc2lnbl0gdW5pdHMKICBzaWduICAgICAgOjo9IHBsdXNtaW51cyBbd2hpdGVzcGFjZV0KICBwbHVzbWludXMgOjo9ICcrJyB8ICctJwogIHVuaXRzICAgICA6Oj0gZGlnaXRzIFt0aG91c2FuZHMtc2VwIHVuaXRzXQogIGRpZ2l0cyAgICA6Oj0gZGlnaXQgW2RpZ2l0c10KPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQgPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlCnJlc3VsdHMgb2YgY29ycmVzcG9uZGluZyA8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4KSW50ZWdlciB2YWx1ZXMgaGF2ZSB0aGUgZm9ybWF0Ogo8L3A+CjxwcmU+ICBpbnRlZ2VyICAgOjo9IFtzaWduXSB1bml0cwogIHNpZ24gICAgICA6Oj0gcGx1c21pbnVzCiAgcGx1c21pbnVzIDo6PSAnKycgfCAnLScKICB1bml0cyAgICAgOjo9IGRpZ2l0cyBbdGhvdXNhbmRzLXNlcCB1bml0c10KICBkaWdpdHMgICAgOjo9IGRpZ2l0IFtkaWdpdHNdCjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGluIDIyLjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm51bXB1bmN0Ij4gW2xpYi5sb2NhbGUubnVtcHVuY3RdPC9hPiBwYXJhZ3JhcGggMiBoYXMgYW55IG5vcm1hdGl2ZSB3ZWlnaHQ6IG5vdGhpbmcgaW4gdGhlCnN0YW5kYXJkIHNheXMgaG93LCBvciB3aGV0aGVyLCBpdCdzIHVzZWQuICBIb3dldmVyLCB0aGVyZSdzIG5vIHJlYXNvbgpmb3IgaXQgdG8gZGlmZmVyIGdyYXR1aXRvdXNseSBmcm9tIHRoZSB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9uIG9mCm51bWVyaWMgcHJvY2Vzc2luZyBpbiAyMi4yLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLmdldC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLmdldC52aXJ0dWFsc108L2E+LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gcmVtb3ZlcyBhbGwgbWVudGlvbiBvZiAid2hpdGVzcGFjZSIgZnJvbSB0aGF0IGZvcm1hdC48L3A+Cjxocj4KPGEgbmFtZT0iMzM5Ij48aDM+MzM5LiZuYnNwO2RlZmluaXRpb24gb2YgYml0bWFzayB0eXBlIHJlc3RyaWN0ZWQgdG8gY2xhdXNlIDI3PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4sIDE3LjMuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuYml0bWFzay50eXBlcyI+IFtsaWIuYml0bWFzay50eXBlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBTZXB0ZW1iZXIgMjAwMTwvcD4KPHA+ClRoZSBjdHlwZV9jYXRlZ29yeTo6bWFzayB0eXBlIGlzIGRlY2xhcmVkIHRvIGJlIGFuIGVudW0gaW4gMjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4gd2l0aCBwMSB0aGVuIHN0YXRpbmcgdGhhdCBpdCBpcyBhIGJpdG1hc2sgdHlwZSwgbW9zdApsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBkZWZpbml0aW9uIG9mIGJpdG1hc2sgdHlwZSBpbiAxNy4zLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmJpdG1hc2sudHlwZXMiPiBbbGliLmJpdG1hc2sudHlwZXNdPC9hPiwgcDEuIEhvd2V2ZXIsIHRoZSBzYWlkIGRlZmluaXRpb24gb25seSBhcHBsaWVzIHRvCmNsYXVzZSAyNywgbWFraW5nIHRoZSByZWZlcmVuY2UgaW4gMjIuMi4xIHNvbWV3aGF0IGR1YmlvdXMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DbGFyaWZ5IDE3LjMuMi4xLjIsIHAxIGJ5IGNoYW5naW5nIHRoZSBjdXJyZW50IHRleHQgZnJvbTwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgU2V2ZXJhbCB0eXBlcyBkZWZpbmVkIGluIGNsYXVzZSAyNyBhcmUgYml0bWFzayB0eXBlcy4gRWFjaCBiaXRtYXNrIHR5cGUKICAgIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhbiBlbnVtZXJhdGVkIHR5cGUgdGhhdCBvdmVybG9hZHMgY2VydGFpbiBvcGVyYXRvcnMsCiAgICBhcyBhbiBpbnRlZ2VyIHR5cGUsIG9yIGFzIGEgYml0c2V0ICgyMy4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi50ZW1wbGF0ZS5iaXRzZXQiPiBbbGliLnRlbXBsYXRlLmJpdHNldF08L2E+KS4KICAgIDwvYmxvY2txdW90ZT4KPHA+dG8gcmVhZDwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgU2V2ZXJhbCB0eXBlcyBkZWZpbmVkIGluIGNsYXVzZXMgbGliLmxhbmd1YWdlLnN1cHBvcnQgdGhyb3VnaCAKICAgIGxpYi5pbnB1dC5vdXRwdXQgYW5kIEFubmV4IEQgYXJlIGJpdG1hc2sgdHlwZXMuIEVhY2ggYml0bWFzayB0eXBlIGNhbgogICAgYmUgaW1wbGVtZW50ZWQgYXMgYW4gZW51bWVyYXRlZCB0eXBlIHRoYXQgb3ZlcmxvYWRzIGNlcnRhaW4gb3BlcmF0b3JzLAogICAgYXMgYW4gaW50ZWdlciAgdHlwZSwgb3IgYXMgYSBiaXRzZXQgKGxpYi50ZW1wbGF0ZS5iaXRzZXQpLgogICAgPC9ibG9ja3F1b3RlPgoKPHA+CkFkZGl0aW9uYWxseSwgY2hhbmdlIHRoZSBkZWZpbml0aW9uIGluIDIyLjIuMSB0byBhZG9wdCB0aGUgc2FtZQpjb252ZW50aW9uIGFzIGluIGNsYXVzZSAyNyBieSByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIHRleHQgd2l0aCB0aGUKZm9sbG93aW5nIChub3RlLCBpbiBwYXJ0aWNsdWFyLCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvIDE3LjMuMi4xLjIgaW4KMjIuMi4xLCBwMSk6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4yMi4yLjEgVGhlIGN0eXBlIGNhdGVnb3J5IFtsaWIuY2F0ZWdvcnkuY3R5cGVdPC9wPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogICAgY2xhc3MgY3R5cGVfYmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiA8Yj48aT5UPC9pPjwvYj4gbWFzazsKCiAgICAgICAgLy8gbnVtZXJpYyB2YWx1ZXMgYXJlIGZvciBleHBvc2l0aW9uIG9ubHkuCiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSAxICZsdDsmbHQ7IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAxICZsdDsmbHQ7IDE7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSAxICZsdDsmbHQ7IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSAxICZsdDsmbHQ7IDM7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAxICZsdDsmbHQ7IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAxICZsdDsmbHQ7IDU7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAxICZsdDsmbHQ7IDY7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAxICZsdDsmbHQ7IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMSAmbHQ7Jmx0OyA4OwogICAgICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gYWxwaGEgfCBkaWdpdDsKICAgICAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IGFsbnVtIHwgcHVuY3Q7CiAgICB9Owp9CjwvcHJlPgoKPHA+VGhlIHR5cGUgPHR0Pm1hc2s8L3R0PiBpcyBhIGJpdG1hc2sgdHlwZSAoMTcuMy4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5iaXRtYXNrLnR5cGVzIj4gW2xpYi5iaXRtYXNrLnR5cGVzXTwvYT4pLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0N1cmHnYW86IFRoZSBMV0cgbm90ZXMgdGhhdCBUIGFib3ZlIHNob3VsZCBiZSBib2xkLWl0YWxpY3MgdG8gYmUKY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzQwIj48aDM+MzQwLiZuYnNwO2ludGVycHJldGF0aW9uIG9mIDx0dD5oYXNfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYyk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDE8L3A+CjxwPgpJdCdzIHVuY2xlYXIgd2hldGhlciAyMi4xLjEuMS4xLCBwMyBzYXlzIHRoYXQKPHR0Pmhhc19mYWNldCZsdDtGYWNldCZndDsobG9jKTwvdHQ+IHJldHVybnMgdHJ1ZSBmb3IgYW55IDx0dD5GYWNldDwvdHQ+CmZyb20gVGFibGUgNTEgb3Igd2hldGhlciBpdCBpbmNsdWRlcyBUYWJsZSA1MiBhcyB3ZWxsOgo8L3A+Cgo8YmxvY2txdW90ZT4KRm9yIGFueSBsb2NhbGUgPHR0PmxvYzwvdHQ+IGVpdGhlciBjb25zdHJ1Y3RlZCwgb3IgcmV0dXJuZWQgYnkKbG9jYWxlOjpjbGFzc2ljKCksIGFuZCBhbnkgZmFjZXQgPHR0PkZhY2V0PC90dD4gdGhhdCBpcyBhIG1lbWJlciBvZiBhCnN0YW5kYXJkIGNhdGVnb3J5LCA8dHQ+aGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpPC90dD4gaXMgdHJ1ZS4gRWFjaApsb2NhbGUgbWVtYmVyIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgPHR0PmxvY2FsZTo6Y2F0ZWdvcnk8L3R0Pgphcmd1bWVudCBvcGVyYXRlcyBvbiB0aGUgY29ycmVzcG9uZGluZyBzZXQgb2YgZmFjZXRzLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSXQgc2VlbXMgdGhhdCBpdCBjb21lcyBkb3duIHRvIHdoaWNoIGZhY2V0cyBhcmUgY29uc2lkZXJlZCB0byBiZSBtZW1iZXJzIG9mIGEKc3RhbmRhcmQgY2F0ZWdvcnkuIEludHVpdGl2ZWx5LCBJIHdvdWxkIGNsYXNzaWZ5IGFsbCB0aGUgZmFjZXRzIGluIFRhYmxlIDUyIGFzCm1lbWJlcnMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGFuZGFyZCBjYXRlZ29yaWVzLCBidXQgdGhlcmUgYXJlIGFuIHVuYm91bmRlZCBzZXQKb2YgdGhlbS4uLgo8L3A+Cgo8cD4KVGhlIHBhcmFncmFwaCBpbXBsaWVzIHRoYXQsIGZvciBpbnN0YW5jZSwgPHR0Pmhhc19mYWNldCZsdDtudW1fcHV0Jmx0O0MsCk91dHB1dEl0ZXJhdG9yJmd0OyAmZ3Q7KGxvYyk8L3R0PiBtdXN0IGFsd2F5cyByZXR1cm4gdHJ1ZS4gSSBkb24ndCB0aGluayB0aGF0J3MKcG9zc2libGUuIElmIGl0IHdlcmUsIHRoZW4gPHR0PnVzZV9mYWNldCZsdDtudW1fcHV0Jmx0O0MsIE91dHB1dEl0ZXJhdG9yJmd0OwomZ3Q7KGxvYyk8L3R0PiB3b3VsZCBoYXZlIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byBhIGRpc3RpbmN0IG9iamVjdCBmb3IgZWFjaAp2YWxpZCBzcGVjaWFsaXphdGlvbiBvZiA8dHQ+bnVtX3B1dCZsdDtDLCBPdXRwdXRJdGVyYXRvcnkmZ3Q7PC90dD4sIHdoaWNoIGlzCmNsZWFybHkgaW1wb3NzaWJsZS4KPC9wPgoKPHA+Ck9uIHRoZSBvdGhlciBoYW5kLCBpZiBub25lIG9mIHRoZSBmYWNldHMgaW4gVGFibGUgNTIgaXMgYSBtZW1iZXIgb2YgYSBzdGFuZGFyZApjYXRlZ29yeSB0aGVuIG5vbmUgb2YgdGhlIGxvY2FsZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBlbnRpcmUKY2F0ZWdvcmllcyBvZiBmYWNldHMgd2lsbCB3b3JrIHByb3Blcmx5Lgo8L3A+Cgo8cD4KSXQgc2VlbXMgdGhhdCB3aGF0IHAzIHNob3VsZCBtZW50aW9uIHRoYXQgaXQncyByZXF1aXJlZCAocGVybWl0dGVkPykKdG8gaG9sZCBvbmx5IGZvciBzcGVjaWFsaXphdGlvbnMgb2YgPHR0PkZhY2V0PC90dD4gZnJvbSBUYWJsZSA1MiBvbgo8dHQ+QzwvdHQ+IGZyb20gdGhlIHNldCB7IDx0dD5jaGFyPC90dD4sIDx0dD53Y2hhcl90PC90dD4gfSwgYW5kCjx0dD5JbnB1dEl0ZXJhdG9yPC90dD4gYW5kIDx0dD5PdXRwdXRJdGVyYXRvcjwvdHQ+IGZyb20gdGhlIHNldCBvZgp7CntpLG99PHR0PnN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+Jmx0O3s8dHQ+Y2hhcjwvdHQ+LDx0dD53Y2hhcl90PC90dD59PHR0PiZndDs8L3R0Pgp9Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4sIHBhcmFncmFwaCAzLCBjaGFuZ2UKInRoYXQgaXMgYSBtZW1iZXIgb2YgYSBzdGFuZGFyZCBjYXRlZ29yeSIgdG8gInNob3duIGluIFRhYmxlIDUxIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZmFjZXRzIGluIFRhYmxlIDUyIGFyZSBhbiB1bmJvdW5kZWQgc2V0LiAgTG9jYWxlcyBzaG91bGQgbm90IGJlCnJlcXVpcmVkIHRvIGNvbnRhaW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGZhY2V0cy48L3A+IAoKPHA+SXQncyBub3QgbmVjZXNzYXJ5IHRvIHRhbGsgYWJvdXQgd2hpY2ggdmFsdWVzIG9mIElucHV0SXRlcmF0b3IgYW5kCk91dHB1dEl0ZXJhdG9yIG11c3QgYmUgc3VwcG9ydGVkLiAgVGFibGUgNTEgYWxyZWFkeSBjb250YWlucyBhCmNvbXBsZXRlIGxpc3Qgb2YgdGhlIG9uZXMgd2UgbmVlZC48L3A+Cjxocj4KPGEgbmFtZT0iMzQxIj48aDM+MzQxLiZuYnNwO1ZlY3RvciByZWFsbG9jYXRpb24gYW5kIHN3YXA8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnByaW9yaXR5LnF1ZXVlIj4gW2xpYi5wcmlvcml0eS5xdWV1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FudGhvbnkgV2lsbGlhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgU2VwIDIwMDE8L3A+CjxwPkl0IGlzIGEgY29tbW9uIGlkaW9tIHRvIHJlZHVjZSB0aGUgY2FwYWNpdHkgb2YgYSB2ZWN0b3IgYnkgc3dhcHBpbmcgaXQgd2l0aAphbiBlbXB0eSBvbmU6PC9wPgo8cHJlPiAgc3RkOjp2ZWN0b3ImbHQ7U29tZVR5cGUmZ3Q7IHZlYzsKICAvLyBmaWxsIHZlYyB3aXRoIGRhdGEKICBzdGQ6OnZlY3RvciZsdDtTb21lVHlwZSZndDsoKS5zd2FwKHZlYyk7CiAgLy8gdmVjIGlzIG5vdyBlbXB0eSwgd2l0aCBtaW5pbWFsIGNhcGFjaXR5CjwvcHJlPgoKPHA+SG93ZXZlciwgdGhlIHdvcmRpbmcgb2YgMjMuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5wcmlvcml0eS5xdWV1ZSI+IFtsaWIucHJpb3JpdHkucXVldWVdPC9hPnBhcmFncmFwaCA1IHByZXZlbnRzCnRoZSBjYXBhY2l0eSBvZiBhIHZlY3RvciBiZWluZyByZWR1Y2VkLCBmb2xsb3dpbmcgYSBjYWxsIHRvCnJlc2VydmUoKS4gVGhpcyBpbnZhbGlkYXRlcyB0aGUgaWRpb20sIGFzIHN3YXAoKSBpcyB0aHVzIHByZXZlbnRlZApmcm9tIHJlZHVjaW5nIHRoZSBjYXBhY2l0eS4gVGhlIHByb3Bvc2VkIHdvcmRpbmcgZm9yIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMjkiPjMyOTwvYT4gZG9lcyBub3QgYWZmZWN0IHRoaXMuICBDb25zZXF1ZW50bHksIHRoZSBleGFtcGxlIGFib3ZlCnJlcXVpcmVzIHRoZSB0ZW1wb3JhcnkgdG8gYmUgZXhwYW5kZWQgdG8gY2F0ZXIgZm9yIHRoZSBjb250ZW50cyBvZgp2ZWMsIGFuZCB0aGUgY29udGVudHMgYmUgY29waWVkIGFjcm9zcy4gVGhpcyBpcyBhIGxpbmVhci10aW1lCm9wZXJhdGlvbi48L3A+Cgo8cD5Ib3dldmVyLCB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50cyBzdGF0ZSB0aGF0IHN3YXAgbXVzdCBoYXZlIGNvbnN0YW50CmNvbXBsZXhpdHkgKDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gbm90ZSB0byB0YWJsZSA2NSkuPC9wPgoKPHA+VGhpcyBpcyBhbiBpbXBvcnRhbnQgaXNzdWUsIGFzIHJlYWxsb2NhdGlvbiBhZmZlY3RzIHRoZSB2YWxpZGl0eSBvZgpyZWZlcmVuY2VzIGFuZCBpdGVyYXRvcnMuPC9wPgoKPHA+SWYgdGhlIHdvcmRpbmcgb2YgMjMuMi40LjJwNSBpcyB0YWtlbiB0byBiZSB0aGUgZGVzaXJlZCBpbnRlbnQsIHRoZW4KcmVmZXJlbmNlcyBhbmQgaXRlcmF0b3JzIHJlbWFpbiB2YWxpZCBhZnRlciBhIGNhbGwgdG8gc3dhcCwgaWYgdGhleSByZWZlciB0bwphbiBlbGVtZW50IGJlZm9yZSB0aGUgbmV3IGVuZCgpIG9mIHRoZSB2ZWN0b3IgaW50byB3aGljaCB0aGV5IG9yaWdpbmFsbHkKcG9pbnRlZCwgaW4gd2hpY2ggY2FzZSB0aGV5IHJlZmVyIHRvIHRoZSBlbGVtZW50IGF0IHRoZSBzYW1lIGluZGV4IHBvc2l0aW9uLgpJdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgdGhhdCByZWZlcnJlZCB0byBhbiBlbGVtZW50IHdob3NlIGluZGV4IHBvc2l0aW9uCndhcyBiZXlvbmQgdGhlIG5ldyBlbmQgb2YgdGhlIHZlY3RvciBhcmUgaW52YWxpZGF0ZWQuPC9wPgoKPHA+SWYgdGhlIG5vdGUgdG8gdGFibGUgNjUgaXMgdGFrZW4gYXMgdGhlIGRlc2lyZWQgaW50ZW50LCB0aGVuIHRoZXJlIGFyZSB0d28KcG9zc2liaWxpdGllcyB3aXRoIHJlZ2FyZCB0byBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXM6PC9wPgoKPG9sPgo8bGk+QWxsIEl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBpbnRvIGJvdGggdmVjdG9ycyBhcmUgaW52YWxpZGF0ZWQuPC9saT4KPGxpPkl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBpbnRvIGVpdGhlciB2ZWN0b3IgcmVtYWluIHZhbGlkLCBhbmQgcmVtYWluCnBvaW50aW5nIHRvIHRoZSBzYW1lIGVsZW1lbnQuIENvbnNlcXVlbnRseSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgdGhhdApyZWZlcnJlZCB0byBvbmUgdmVjdG9yIG5vdyByZWZlciB0byB0aGUgb3RoZXIsIGFuZCB2aWNlLXZlcnNhLjwvbGk+Cjwvb2w+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgbmV3IHBhcmFncmFwaCBhZnRlciAyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnByaW9yaXR5LnF1ZXVlIj4gW2xpYi5wcmlvcml0eS5xdWV1ZV08L2E+IHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+ICB2b2lkIHN3YXAodmVjdG9yJmx0O1QsQWxsb2NhdG9yJmd0OyZhbXA7IHgpOwo8L3ByZT4KPHA+PGI+RWZmZWN0czo8L2I+IEV4Y2hhbmdlcyB0aGUgY29udGVudHMgYW5kIGNhcGFjaXR5KCkgb2YgPHR0Pip0aGlzPC90dD4Kd2l0aCB0aGF0IG9mIDx0dD54PC90dD4uPC9wPgo8cD48Yj5Db21wbGV4aXR5OjwvYj4gQ29uc3RhbnQgdGltZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltUaGlzIHNvbHZlcyB0aGUgcHJvYmxlbSByZXBvcnRlZCBmb3IgdGhpcyBpc3N1ZS4gIFdlIG1heSBhbHNvCmhhdmUgYSBwcm9ibGVtIHdpdGggYSBjaXJjdWxhciBkZWZpbml0aW9uIG9mIHN3YXAoKSBmb3Igb3RoZXIKY29udGFpbmVycy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4Kc3dhcCBzaG91bGQgYmUgY29uc3RhbnQgdGltZS4gIFRoZSBjbGVhciBpbnRlbnQgaXMgdGhhdCBpdCBzaG91bGQganVzdApkbyBwb2ludGVyIHR3aWRkbGluZywgYW5kIHRoYXQgaXQgc2hvdWxkIGV4Y2hhbmdlIGFsbCBwcm9wZXJ0aWVzIG9mCnRoZSB0d28gdmVjdG9ycywgaW5jbHVkaW5nIHRoZWlyIHJlYWxsb2NhdGlvbiBndWFyYW50ZWVzLgo8L3A+Cjxocj4KPGEgbmFtZT0iMzQ1Ij48aDM+MzQ1LiZuYnNwO3R5cGUgdG0gaW4gJmx0O2N3Y2hhciZndDs8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYy5zdHJpbmdzIj4gW2xpYi5jLnN0cmluZ3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtDbGFyayBOZWxzb24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTkgT2N0IDIwMDE8L3A+CjxwPgpDOTksIGFuZCBwcmVzdW1hYmx5IGFtZW5kbWVudCAxIHRvIEM5MCwgc3BlY2lmeSB0aGF0ICZsdDt3Y2hhci5oJmd0OwpkZWNsYXJlcyBzdHJ1Y3QgdG0gYXMgYW4gaW5jb21wbGV0ZSB0eXBlLiBIb3dldmVyLCB0YWJsZSA0OCBpbiAyMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYy5zdHJpbmdzIj4gW2xpYi5jLnN0cmluZ3NdPC9hPiBkb2VzIG5vdCBtZW50aW9uIHRoZSB0eXBlIHRtIGFzIGJlaW5nIGRlY2xhcmVkIGluCiZsdDtjd2NoYXImZ3Q7LiBJcyB0aGlzIG9taXNzaW9uIGludGVudGlvbmFsIG9yIGFjY2lkZW50YWw/CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBzZWN0aW9uIDIxLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jLnN0cmluZ3MiPiBbbGliLmMuc3RyaW5nc108L2E+LCBhZGQgInRtIiB0byB0YWJsZSA0OC48L3A+Cjxocj4KPGEgbmFtZT0iMzQ2Ij48L2E+PGgzPjxhIG5hbWU9IjM0NiI+MzQ2LiZuYnNwO1NvbWUgaXRlcmF0b3IgbWVtYmVyIGZ1bmN0aW9ucyBzaG91bGQgYmUgY29uc3Q8L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0plcmVteSBTaWVrJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE9jdCAyMDAxPC9wPgo8cD5JdGVyYXRvciBtZW1iZXIgZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMgdGhhdCBkbyBub3QgY2hhbmdlIHRoZSBzdGF0ZQpvZiB0aGUgaXRlcmF0b3Igc2hvdWxkIGJlIGRlZmluZWQgYXMgY29uc3QgbWVtYmVyIGZ1bmN0aW9ucyBvciBhcwpmdW5jdGlvbnMgdGhhdCB0YWtlIGl0ZXJhdG9ycyBlaXRoZXIgYnkgY29uc3QgcmVmZXJlbmNlIG9yIGJ5CnZhbHVlLiBUaGUgc3RhbmRhcmQgZG9lcyBub3QgZXhwbGljaXRseSBzdGF0ZSB3aGljaCBmdW5jdGlvbnMgc2hvdWxkCmJlIGNvbnN0LiAgU2luY2UgdGhpcyBhIGZhaXJseSBjb21tb24gbWlzdGFrZSwgdGhlIGZvbGxvd2luZyBjaGFuZ2VzCmFyZSBzdWdnZXN0ZWQgdG8gbWFrZSB0aGlzIGV4cGxpY2l0LjwvcD4KCjxwPlRoZSB0YWJsZXMgYWxtb3N0IGluZGljYXRlIGNvbnN0bmVzcyBwcm9wZXJseSB0aHJvdWdoIG5hbWluZzogcgpmb3Igbm9uLWNvbnN0IGFuZCBhLGIgZm9yIGNvbnN0IGl0ZXJhdG9ycy4gVGhlIGZvbGxvd2luZyBjaGFuZ2VzCm1ha2UgdGhpcyBtb3JlIGV4cGxpY2l0IGFuZCBhbHNvIGZpeCBhIGNvdXBsZSBwcm9ibGVtcy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPiBDaGFuZ2UgdGhlIGZpcnN0IHNlY3Rpb24gb2YgcDkgZnJvbQoiSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgYSBhbmQgYiBkZW5vdGUgdmFsdWVzIG9mIFguLi4iIHRvCiJJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBYLi4uIi48L3A+Cgo8cD5JbiBUYWJsZSA3MywgY2hhbmdlPC9wPgo8cHJlPiAgICBhLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+dG88L3A+Cgo8cHJlPiAgICBhLSZndDttICAgY29uc3QgVSZhbXA7ICAgLi4uCiAgICByLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+SW4gVGFibGUgNzMgZXhwcmVzc2lvbiBjb2x1bW4sIGNoYW5nZTwvcD4KCjxwcmU+ICAgICphID0gdAo8L3ByZT4KCjxwPnRvPC9wPgoKPHByZT4gICAgKnIgPSB0CjwvcHJlPgoKPHA+PGk+W1JlZG1vbmQ6IFRoZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHNob3VsZCBiZSByZXZpZXdlZCB0byBzZWUgaWYKdGhlIHNhbWUgcHJvYmxlbSBhcHBlYXJzIHRoZXJlLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzNDciPjxoMz4zNDcuJm5ic3A7bG9jYWxlOjpjYXRlZ29yeSBhbmQgYml0bWFzayByZXF1aXJlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQLkouIFBsYXVnZXIsIE5hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBPY3QgMjAwMTwvcD4KPHA+CkluIDIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+IHBhcmFncmFwaCAxLCB0aGUgY2F0ZWdvcnkgbWVtYmVycwphcmUgZGVzY3JpYmVkIGFzIGJpdG1hc2sgZWxlbWVudHMuICBJbiBmYWN0LCB0aGUgYml0bWFzayByZXF1aXJlbWVudHMKaW4gMTcuMy4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5iaXRtYXNrLnR5cGVzIj4gW2xpYi5iaXRtYXNrLnR5cGVzXTwvYT4gZG9uJ3Qgc2VlbSBxdWl0ZSByaWdodDogPHR0Pm5vbmU8L3R0PgphbmQgPHR0PmFsbDwvdHQ+IGFyZSBiaXRtYXNrIGNvbnN0YW50cywgbm90IGJpdG1hc2sgZWxlbWVudHMuPC9wPgoKPHA+SW4gcGFydGljdWxhciwgdGhlIHJlcXVpcmVtZW50cyBmb3IgPHR0Pm5vbmU8L3R0PiBpbnRlcmFjdCBwb29ybHkKd2l0aCB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgTENfKiBjb25zdGFudHMgZnJvbSB0aGUgQyBsaWJyYXJ5IG11c3QKYmUgcmVjb2duaXphYmxlIGFzIEMrKyBsb2NhbGUgY2F0ZWdvcnkgY29uc3RhbnRzLiAgTENfKiB2YWx1ZXMgc2hvdWxkCm5vdCBiZSBtaXhlZCB3aXRoIHRoZXNlIHZhbHVlcyB0byBtYWtlIGNhdGVnb3J5IHZhbHVlcy48L3A+Cgo8cD5XZSBoYXZlIHR3byBvcHRpb25zIGZvciB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi4gIEluZm9ybWFsbHk6Cm9wdGlvbiAxIHJlbW92ZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgTENfKiB2YWx1ZXMgYmUgcmVjb2duaXplZCBhcwpjYXRlZ29yeSBhcmd1bWVudHMuICBPcHRpb24gMiBjaGFuZ2VzIHRoZSBjYXRlZ29yeSB0eXBlIHNvIHRoYXQgdGhpcwpyZXF1aXJlbWVudCBpcyBpbXBsZW1lbnRhYmxlLCBieSBhbGxvd2luZyA8dHQ+bm9uZTwvdHQ+IHRvIGJlIHNvbWUKdmFsdWUgc3VjaCBhcyAweDEwMDAgaW5zdGVhZCBvZiAwLjwvcD4KCjxwPk5hdGhhbiB3cml0ZXM6ICJJIGJlbGlldmUgbXkgcHJvcG9zZWQgcmVzb2x1dGlvbiBbT3B0aW9uIDJdIG1lcmVseQpyZS1leHByZXNzZXMgdGhlIHN0YXR1cyBxdW8gbW9yZSBjbGVhcmx5LCB3aXRob3V0IGludHJvZHVjaW5nIGFueQpjaGFuZ2VzIGJleW9uZCByZXNvbHZpbmcgdGhlIERSLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgZmlyc3QgdHdvIHBhcmFncmFwaHMgb2YgMjIuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudHlwZXMiPiBbbGliLmxvY2FsZS50eXBlc108L2E+IHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4gICAgdHlwZWRlZiBpbnQgY2F0ZWdvcnk7CjwvcHJlPgoKPHA+VmFsaWQgY2F0ZWdvcnkgdmFsdWVzIGluY2x1ZGUgdGhlIDx0dD5sb2NhbGU8L3R0PiBtZW1iZXIgYml0bWFzawplbGVtZW50cyA8dHQ+Y29sbGF0ZTwvdHQ+LCA8dHQ+Y3R5cGU8L3R0PiwgPHR0Pm1vbmV0YXJ5PC90dD4sCjx0dD5udW1lcmljPC90dD4sIDx0dD50aW1lPC90dD4sIGFuZCA8dHQ+bWVzc2FnZXM8L3R0PiwgZWFjaCBvZiB3aGljaApyZXByZXNlbnRzIGEgc2luZ2xlIGxvY2FsZSBjYXRlZ29yeS4gSW4gYWRkaXRpb24sIDx0dD5sb2NhbGU8L3R0PiBtZW1iZXIKYml0bWFzayBjb25zdGFudCA8dHQ+bm9uZTwvdHQ+IGlzIGRlZmluZWQgYXMgemVybyBhbmQgcmVwcmVzZW50cyBubwpjYXRlZ29yeS4gQW5kIGxvY2FsZSBtZW1iZXIgYml0bWFzayBjb25zdGFudCA8dHQ+YWxsPC90dD4gaXMgZGVmaW5lZCBzdWNoIHRoYXQKdGhlIGV4cHJlc3Npb248L3A+CjxwcmU+ICAgIChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8IG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMgfCBhbGwpID09IGFsbAo8L3ByZT4KPHA+CmlzIDx0dD50cnVlPC90dD4sIGFuZCByZXByZXNlbnRzIHRoZSB1bmlvbiBvZiBhbGwgY2F0ZWdvcmllcy4gIEZ1cnRoZXIKdGhlIGV4cHJlc3Npb24gPHR0PihYIHwgWSk8L3R0Piwgd2hlcmUgPHR0Plg8L3R0PiBhbmQgPHR0Plk8L3R0PiBlYWNoCnJlcHJlc2VudCBhIHNpbmdsZSBjYXRlZ29yeSwgcmVwcmVzZW50cyB0aGUgdW5pb24gb2YgdGhlIHR3bwpjYXRlZ29yaWVzLgo8L3A+Cgo8cD4KPHR0PmxvY2FsZTwvdHQ+IG1lbWJlciBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgPHR0PmNhdGVnb3J5PC90dD4KYXJndW1lbnQgcmVxdWlyZSBvbmUgb2YgdGhlIDx0dD5jYXRlZ29yeTwvdHQ+IHZhbHVlcyBkZWZpbmVkIGFib3ZlLCBvcgp0aGUgdW5pb24gb2YgdHdvIG9yIG1vcmUgc3VjaCB2YWx1ZXMuIFN1Y2ggYSA8dHQ+Y2F0ZWdvcnk8L3R0Pgphcmd1bWVudCBpZGVudGlmaWVzIGEgc2V0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLiBFYWNoIGxvY2FsZSBjYXRlZ29yeSwKaW4gdHVybiwgaWRlbnRpZmllcyBhIHNldCBvZiBsb2NhbGUgZmFjZXRzLCBpbmNsdWRpbmcgYXQgbGVhc3QgdGhvc2UKc2hvd24gaW4gVGFibGUgNTE6CjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48aT5bQ3VyYedhbzogbmVlZCBpbnB1dCBmcm9tIGxvY2FsZSBleHBlcnRzLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+Cgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQsIGFuZCByZWplY3RlZCwgYW4gYWx0ZXJuYXRlIHByb3Bvc2FsIChkZXNjcmliZWQKICBhcyAiT3B0aW9uIDIiIGluIHRoZSBkaXNjdXNzaW9uKS4gIFRoZSBtYWluIHJlYXNvbiBmb3IgcmVqZWN0aW5nIGl0CiAgd2FzIHRoYXQgbGlicmFyeSBpbXBsZW1lbnRvcnMgd2VyZSBjb25jZXJlbmVkIGFib3V0IGltcGxlbWVudGF0aW9uCiAgZGlmZmljdWx0LCBnaXZlbiB0aGF0IGdldHRpbmcgYSBDKysgbGlicmFyeSB0byB3b3JrIHNtb290aGx5IHdpdGggYQogIHNlcGFyYXRlbHkgd3JpdHRlbiBDIGxpYnJhcnkgaXMgYWxyZWFkeSBhIGRlbGljYXRlIGJ1c2luZXNzLiAgU29tZQogIGxpYnJhcnkgaW1wbGVtZW50ZXJzIHdlcmUgYWxzbyBjb25jZXJuZWQgYWJvdXQgdGhlIGlzc3VlIG9mIGFkZGluZwogIGV4dHJhIGxvY2FsZSBjYXRlZ29yaWVzLjwvcD4KCjxibG9ja3F1b3RlPgo8cD48Yj5PcHRpb24gMjo8L2I+IDxicj4KUmVwbGFjZSB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIDIyLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnR5cGVzIj4gW2xpYi5sb2NhbGUudHlwZXNdPC9hPiB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgpWYWxpZCBjYXRlZ29yeSB2YWx1ZXMgaW5jbHVkZSB0aGUgZW51bWVyYXRlZCB2YWx1ZXMuICBJbiBhZGRpdGlvbiwgdGhlCnJlc3VsdCBvZiBhcHBseWluZyBjb21tdXRhdGl2ZSBvcGVyYXRvcnMgfCBhbmQgJmFtcDsgdG8gYW55IHR3byB2YWxpZCAKdmFsdWVzIGlzIHZhbGlkLCBhbmQgcmVzdWx0cyBpbiB0aGUgc2V0d2lzZSB1bmlvbiBhbmQgaW50ZXJzZWN0aW9uLCAKcmVzcGVjdGl2ZWx5LCBvZiB0aGUgYXJndW1lbnQgY2F0ZWdvcmllcy4gIFRoZSB2YWx1ZXMgPHR0PmFsbDwvdHQ+IGFuZCAKPHR0Pm5vbmU8L3R0PiBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgZm9yIGFueSB2YWxpZCB2YWx1ZSA8dHQ+Y2F0PC90dD4sIHRoZQpleHByZXNzaW9ucyA8dHQ+KGNhdCB8IGFsbCA9PSBhbGwpPC90dD4sIDx0dD4oY2F0ICZhbXA7IGFsbCA9PSBjYXQpPC90dD4sCjx0dD4oY2F0IHwgbm9uZSA9PSBjYXQpPC90dD4gYW5kIDx0dD4oY2F0ICZhbXA7IG5vbmUgPT0gbm9uZSk8L3R0PiBhcmUgCnRydWUuICBGb3Igbm9uLWVxdWFsIHZhbHVlcyA8dHQ+Y2F0MTwvdHQ+IGFuZCA8dHQ+Y2F0MjwvdHQ+IG9mIHRoZQpyZW1haW5pbmcgZW51bWVyYXRlZCB2YWx1ZXMsIDx0dD4oY2F0MSAmYW1wOyBjYXQyID09IG5vbmUpPC90dD4gaXMgdHJ1ZS4KRm9yIGFueSB2YWxpZCBjYXRlZ29yaWVzIDx0dD5jYXQxPC90dD4gYW5kIDx0dD5jYXQyPC90dD4sIHRoZSByZXN1bHQKb2YgPHR0PihjYXQxICZhbXA7IH5jYXQyKTwvdHQ+IGlzIHZhbGlkLCBhbmQgZXF1YWxzIHRoZSBzZXR3aXNlIHVuaW9uIG9mIAp0aG9zZSBjYXRlZ29yaWVzIGZvdW5kIGluIDx0dD5jYXQxPC90dD4gYnV0IG5vdCBmb3VuZCBpbiA8dHQ+Y2F0MjwvdHQ+LgpbRm9vdG5vdGU6IGl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IDx0dD5hbGw8L3R0PiBlcXVhbCB0aGUgc2V0d2lzZSB1bmlvbgpvZiB0aGUgb3RoZXIgZW51bWVyYXRlZCB2YWx1ZXM7IGltcGxlbWVudGF0aW9ucyBtYXkgYWRkIGV4dHJhIGNhdGVnb3JpZXMuXQo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM0OSI+PGgzPjM0OS4mbmJzcDtNaW5vciB0eXBvZ3JhcGhpY2FsIGVycm9yIGluIG9zdHJlYW1faXRlcmF0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW0uaXRlcmF0b3IiPiBbbGliLm9zdHJlYW0uaXRlcmF0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmR5IFNhd3llciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBPY3QgMjAwMTwvcD4KPHA+MjQuNS4yIFtsaWIub3N0cmVhbS5pdGVyYXRvcl0gc3RhdGVzOjwvcD4KPHByZT4gICAgWy4uLl0KCiAgICBwcml2YXRlOgogICAgLy8gYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiBvdXRfc3RyZWFtOyBleHBvc2l0aW9uIG9ubHkKICAgIC8vIGNvbnN0IGNoYXIqIGRlbGltOyBleHBvc2l0aW9uIG9ubHkKPC9wcmU+Cgo8cD5XaGlsc3QgaXQncyBjbGVhcmx5IG1hcmtlZCAiZXhwb3NpdGlvbiBvbmx5IiwgSSBzdXNwZWN0ICdkZWxpbScKc2hvdWxkIGJlIG9mIHR5cGUgJ2NvbnN0IGNoYXJUKicuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNC41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW0uaXRlcmF0b3IiPiBbbGliLm9zdHJlYW0uaXRlcmF0b3JdPC9hPiwgcmVwbGFjZSA8dHQ+Y29uc3QgY2hhciogZGVsaW08L3R0PiB3aXRoCjx0dD5jb25zdCBjaGFyVCogZGVsaW08L3R0Pi4KPC9wPgo8aHI+CjxhIG5hbWU9IjM1MiI+PGgzPjM1Mi4mbmJzcDttaXNzaW5nIGZwb3MgcmVxdWlyZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMudHlwZWRlZnMiPiBbbGliLmNoYXIudHJhaXRzLnR5cGVkZWZzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgRGVjIDIwMDE8L3A+CjxwPgo8aT4oMSk8L2k+ClRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIDx0dD5zdGF0ZVQ8L3R0PiB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YKPHR0PmZwb3M8L3R0PiBsaXN0ZWQgaW4gMjcuNC4zLiBUaGUgaW50ZXJmYWNlIGFwcGVhcnMgdG8gcmVxdWlyZSB0aGF0CnRoZSB0eXBlIGJlIGF0IGxlYXN0IEFzc2lnbmFibGUgYW5kIENvcHlDb25zdHJ1Y3RpYmxlICgyNy40LjMuMSwgcDEpLAphbmQgSSB0aGluayBhbHNvIERlZmF1bHRDb25zdHJ1Y3RpYmxlICh0byBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbnMgaW4KVGFibGUgODgpLgo8L3A+CjxwPgoyMS4xLjIsIHAzLCBob3dldmVyLCBvbmx5IHJlcXVpcmVzIHRoYXQKPHR0PmNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0Ozo6c3RhdGVfdHlwZTwvdHQ+IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgpDb3B5Q29uc3RydWN0aWJsZSB0eXBlcy4KPC9wPgo8cD4KPGk+KDIpPC9pPgpBZGRpdGlvbmFsbHksIHRoZSA8dHQ+c3RhdGVUPC90dD4gdGVtcGxhdGUgYXJndW1lbnQgaGFzIG5vCmNvcnJlc3BvbmRpbmcgdHlwZWRlZiBpbiBmcG9zIHdoaWNoIG1pZ2h0IG1ha2UgaXQgZGlmZmljdWx0IHRvIHVzZSBpbgpnZW5lcmljIGNvZGUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KTW9kaWZ5IDIxLjEuMiwgcDQgZnJvbQo8L3A+CjxwPgogICAgUmVxdWlyZXM6IDx0dD5zdGF0ZV90eXBlPC90dD4gc2hhbGwgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mCiAgICAgICAgICAgICAgQ29weUNvbnN0cnVjdGlibGUgdHlwZXMgKDIwLjEuMykuCjwvcD4KPHA+CiAgICBSZXF1aXJlczogc3RhdGVfdHlwZSBzaGFsbCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQXNzaWduYWJsZQogICAgICAgICAgICAgICgyMy4xLCBwNCksIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpLCBhbmQKICAgICAgICAgICAgICBEZWZhdWx0Q29uc3RydWN0aWJsZSAgKDIwLjEuNCkgdHlwZXMuCjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGZlZWxzIHRoaXMgaXMgdHdvIGlzc3VlcywgYXMgaW5kaWNhdGVkIGFib3ZlLiBUaGUgZmlyc3QgaXMKYSBkZWZlY3QtLS1zdGQ6OmJhc2ljX2ZzdHJlYW0gaXMgdW5pbXBsZW1lbnRhYmxlIHdpdGhvdXQgdGhlc2UKYWRkaXRpb25hbCByZXF1aXJlbWVudHMtLS1hbmQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gZml4ZXMgaXQuICBUaGUKc2Vjb25kIGlzIHF1ZXN0aW9uYWJsZTsgd2hvIHdvdWxkIHVzZSB0aGF0IHR5cGVkZWY/ICBUaGUgY2xhc3MKdGVtcGxhdGUgZnBvcyBpcyB1c2VkIG9ubHkgaW4gYSB2ZXJ5IGZldyBwbGFjZXMsIGFsbCBvZiB3aGljaCBrbm93IHRoZQpzdGF0ZSB0eXBlIGFscmVhZHkuICBVbmxlc3MgbW90aXZhdGlvbiBpcyBwcm92aWRlZCwgdGhlIHNlY29uZCBzaG91bGQKYmUgY29uc2lkZXJlZCBOQUQuPC9wPgo8aHI+CjxhIG5hbWU9IjM1NCI+PGgzPjM1NC4mbmJzcDtBc3NvY2lhdGl2ZSBjb250YWluZXIgbG93ZXIvdXBwZXIgYm91bmQgcmVxdWlyZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIYW5zIEFiZXJnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IERlYyAyMDAxPC9wPgo8cD4KRGlzY3Vzc2lvbnMgaW4gdGhlIHRocmVhZCAiQXNzb2NpYXRpdmUgY29udGFpbmVyIGxvd2VyL3VwcGVyIGJvdW5kCnJlcXVpcmVtZW50cyIgb24gY29tcC5zdGQuYysrIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYSBkZWZlY3QgaW4gdGhlCkMrKyBzdGFuZGFyZCwgVGFibGUgNjkgb2Ygc2VjdGlvbiAyMy4xLjIsICJBc3NvY2lhdGl2ZSBjb250YWluZXJzIiwKW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdLiAgSXQgY3VycmVudGx5IHNheXM6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgphLmZpbmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBrZXkgZXF1aXZhbGVudCB0bwprLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KCjxwPgphLmxvd2VyX2JvdW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgKa2V5IG5vdCBsZXNzIHRoYW4gay4KPC9wPgoKPHA+CmEudXBwZXJfYm91bmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aAprZXkgZ3JlYXRlciB0aGFuIGsuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CldlIGhhdmUgIm9yIGEuZW5kKCkgaWYgc3VjaCBhbiBlbGVtZW50IGlzIG5vdCBmb3VuZCIgZm9yCjx0dD5maW5kPC90dD4sIGJ1dCBub3QgZm9yIDx0dD51cHBlcl9ib3VuZDwvdHQ+IG9yCjx0dD5sb3dlcl9ib3VuZDwvdHQ+LiAgQXMgdGhlIHRleHQgc3RhbmRzLCBvbmUgd291bGQgYmUgZm9yY2VkIHRvCmluc2VydCBhIG5ldyBlbGVtZW50IGludG8gdGhlIGNvbnRhaW5lciBhbmQgcmV0dXJuIGFuIGl0ZXJhdG9yIHRvIHRoYXQKaW4gY2FzZSB0aGUgc291Z2h0IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LCB3aGljaCBkb2VzIG5vdCBzZWVtIHRvIGJlCnRoZSBpbnRlbnRpb24gKGFuZCBub3QgcG9zc2libGUgd2l0aCB0aGUgImNvbnN0IiB2ZXJzaW9ucykuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+Q2hhbmdlIFRhYmxlIDY5IG9mIHNlY3Rpb24gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBpbmRpY2F0ZWQgZW50cmllcwp0bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CmEubG93ZXJfYm91bmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aAprZXkgbm90IGxlc3MgdGhhbiBrLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KCjxwPgphLnVwcGVyX2JvdW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgKa2V5IGdyZWF0ZXIgdGhhbiBrLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0N1cmHnYW86IExXRyByZXZpZXdlZCBQUi5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzU1Ij48aDM+MzU1LiZuYnNwO09wZXJhdGlvbmFsIHNlbWFudGljcyBmb3IgYS5iYWNrKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1lhcm9zbGF2IE1pcm9ub3YmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSmFuIDIwMDI8L3A+Cgo8cD5UYWJsZSA2OCAiT3B0aW9uYWwgU2VxdWVuY2UgT3BlcmF0aW9ucyIgaW4gMjMuMS4xLzEyCnNwZWNpZmllcyBvcGVyYXRpb25hbCBzZW1hbnRpY3MgZm9yICJhLmJhY2soKSIgYXMKIiotLWEuZW5kKCkiLCB3aGljaCBtYXkgYmUgaWxsLWZvcm1lZCA8aT5bYmVjYXVzZSBjYWxsaW5nCm9wZXJhdG9yLS0gb24gYSB0ZW1wb3JhcnkgKHRoZSByZXR1cm4pIG9mIGEgYnVpbHQtaW4gdHlwZSBpcwppbGwtZm9ybWVkXTwvaT4sIHByb3ZpZGVkIGEuZW5kKCkgcmV0dXJucyBhIHNpbXBsZSBwb2ludGVyIHJ2YWx1ZQoodGhpcyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlIGZvciBzdGQ6OnZlY3Rvcjo6ZW5kKCksIGZvcgpleGFtcGxlKS4gVGh1cywgdGhlIHNwZWNpZmljYXRpb24gaXMgbm90IG9ubHkgaW5jb3JyZWN0LCBpdApkZW1vbnN0cmF0ZXMgYSBkYW5nZXJvdXMgY29uc3RydWN0OiAiLS1hLmVuZCgpIiBtYXkKc3VjY2Vzc2Z1bGx5IGNvbXBpbGUgYW5kIHJ1biBhcyBpbnRlbmRlZCwgYnV0IGFmdGVyIGNoYW5naW5nIHRoZSB0eXBlCm9mIHRoZSBjb250YWluZXIgb3IgdGhlIG1vZGUgb2YgY29tcGlsYXRpb24gaXQgbWF5IHByb2R1Y2UKY29tcGlsZS10aW1lIGVycm9yLiA8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc3BlY2lmaWNhdGlvbiBpbiB0YWJsZSA2OCAiT3B0aW9uYWwgU2VxdWVuY2UKT3BlcmF0aW9ucyIgaW4gMjMuMS4xLzEyIGZvciAiYS5iYWNrKCkiIGZyb208L3A+CgoKPGJsb2NrcXVvdGU+CiotLWEuZW5kKCkKPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KICB7IGl0ZXJhdG9yIHRtcCA9IGEuZW5kKCk7IC0tdG1wOyByZXR1cm4gKnRtcDsgfQo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgdGhlIHNwZWNpZmljYXRpb24gZm9yICJhLnBvcF9iYWNrKCkiIGZyb208L3A+Cgo8YmxvY2txdW90ZT4KYS5lcmFzZSgtLWEuZW5kKCkpCjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgeyBpdGVyYXRvciB0bXAgPSBhLmVuZCgpOyAtLXRtcDsgYS5lcmFzZSh0bXApOyB9CjwvYmxvY2txdW90ZT4KCjxwPjxpPltDdXJh52FvOiBMV0cgY2hhbmdlZCBQUiBmcm9tICJ7IFg6Oml0ZXJhdG9yIHRtcCA9CmEuZW5kKCk7IHJldHVybiAqLS10bXA7IH0iIHRvICIqYS5yYmVnaW4oKSIsIGFuZCBmcm9tCiJ7IFg6Oml0ZXJhdG9yIHRtcCA9IGEuZW5kKCk7IGEuZXJhc2UoLS10bXApOyB9IiB0bwoiYS5lcmFzZShyYmVnaW4oKSkiLl08L2k+PC9wPgoKPHA+PGk+W1RoZXJlIGlzIGEgc2Vjb25kIHBvc3NpYmxlIGRlZmVjdDsgdGFibGUgNjggIk9wdGlvbmFsClNlcXVlbmNlIE9wZXJhdGlvbnMiIGluIHRoZSAiT3BlcmF0aW9uYWwgU2VtYW50aWNzIgpjb2x1bW4gdXNlcyBvcGVyYXRpb25zIHByZXNlbnQgb25seSBpbiB0aGUgIlJldmVyc2libGUKQ29udGFpbmVyIiByZXF1aXJlbWVudHMsIHlldCB0aGVyZSBpcyBubyBzdGF0ZWQgZGVwZW5kZW5jeQpiZXR3ZWVuIHRoZXNlIHNlcGFyYXRlIHJlcXVpcmVtZW50cyB0YWJsZXMuIEFzayBpbiBTYW50YSBDcnV6IGlmIHRoZQpMV0cgd291bGQgbGlrZSBhIG5ldyBpc3N1ZSBvcGVuZWQuXTwvaT48L3A+Cgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgZXZlbiB3b3JzZSB0aGFuIHdoYXQncyBpbgogIHRoZSBjdXJyZW50IHN0YW5kYXJkOiBlcmFzZSBpcyB1bmRlZmluZWQgZm9yIHJldmVyc2UgaXRlcmF0b3IuICBJZgogIHdlJ3JlIGdvaW5nIHRvIG1ha2UgdGhlIGNoYW5nZSwgd2UgbmVlZCB0byBkZWZpbmUgYSB0ZW1wb3JhcnkgYW5kCiAgdXNlIG9wZXJhdG9yLS0uICBBZGRpdGlvbmFsbHksIHdlIGRvbid0IGtub3cgaG93IHByZXZhbGVudCB0aGlzIGlzOgogIGRvIHdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoYW5nZSBpbiBtb3JlIHRoYW4gb25lIHBsYWNlPyAgTWFydGluIGhhcwogIHZvbHVudGVlcmVkIHRvIHJldmlldyB0aGUgc3RhbmRhcmQgYW5kIHNlZSBpZiB0aGlzIHByb2JsZW0gb2NjdXJzCiAgZWxzZXdoZXJlLl08L2k+PC9wPgoKPHA+PGk+W094Zm9yZDogTWF0dCBwcm92aWRlZCBuZXcgd29yZGluZyB0byBhZGRyZXNzIHRoZSBjb25jZXJucyByYWlzZWQKICBpbiBTYW50YSBDcnV6LiAgSXQgZG9lcyBub3QgYXBwZWFyIHRoYXQgdGhpcyBwcm9ibGVtIGFwcGVhcnMKICBhbnl3aGVyZSBlbHNlIGluIGNsYXVzZXMgMjMgb3IgMjQuXTwvaT48L3A+Cgo8cD48aT5bS29uYTogSW4gZGVmaW5pdGlvbiBvZiBvcGVyYXRpb25hbCBzZW1hbnRpY3Mgb2YgYmFjaygpLCBjaGFuZ2UKIip0bXAiIHRvICJyZXR1cm4gKnRtcDsiXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjM1OCI+PGgzPjM1OC4mbmJzcDtpbnRlcnByZXRpbmcgPHR0PnRob3VzYW5kc19zZXA8L3R0PiBhZnRlciBhIDx0dD5kZWNpbWFsX3BvaW50PC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgTWFyIDIwMDI8L3A+CjxwPgpJIGRvbid0IHRoaW5rIDx0dD50aG91c2FuZHNfc2VwPC90dD4gaXMgYmVpbmcgdHJlYXRlZCBjb3JyZWN0bHkgYWZ0ZXIKZGVjaW1hbF9wb2ludCBoYXMgYmVlbiBzZWVuLiBTaW5jZSBncm91cGluZyBhcHBsaWVzIG9ubHkgdG8gdGhlCmludGVncmFsIHBhcnQgb2YgdGhlIG51bWJlciwgdGhlIGZpcnN0IHN1Y2ggb2NjdXJyZW5jZSBzaG91bGQsIElNTywKdGVybWluYXRlIFN0YWdlIDIuIChJZiBpdCBkb2VzIG5vdCB0ZXJtaW5hdGUgaXQsIHRoZW4gMjIuMi4yLjEuMiwgcDEyCmFuZCAyMi4yLjMuMS4yLCBwMyBuZWVkIHRvIGV4cGxhaW4gaG93IDx0dD50aG91c2FuZHNfc2VwPC90dD4gaXMgdG8gYmUKaW50ZXJwcmV0ZWQgaW4gdGhlIGZyYWN0aW9uYWwgcGFydCBvZiBhIG51bWJlci4pCjwvcD4KCjxwPgpUaGUgZWFzaWVzdCBjaGFuZ2UgSSBjYW4gdGhpbmsgb2YgdGhhdCByZXNvbHZlcyB0aGlzIGlzc3VlIHdvdWxkIGJlCnNvbWV0aGluZyBsaWtlIGJlbG93Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgMjIuMi4yLjEuMiwgcDkgZnJvbQo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIElmIGRpc2NhcmQgaXMgdHJ1ZSB0aGVuIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGlzCiAgICByZW1lbWJlcmVkLCBidXQgdGhlIGNoYXJhY3RlciBpcyBvdGhlcndpc2UgaWdub3JlZC4gSWYgaXQgaXMgbm90CiAgICBkaXNjYXJkZWQsIHRoZW4gYSBjaGVjayBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBjIGlzIGFsbG93ZWQgYXMKICAgIHRoZSBuZXh0IGNoYXJhY3RlciBvZiBhbiBpbnB1dCBmaWVsZCBvZiB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIKICAgIHJldHVybmVkIGJ5IHN0YWdlIDEuIElmIHNvIGl0IGlzIGFjY3VtdWxhdGVkLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgogICAgSWYgPHR0PmRpc2NhcmQ8L3R0PiBpcyB0cnVlLCB0aGVuIGlmIDx0dD4nLic8L3R0PiBoYXMgbm90IHlldCBiZWVuCiAgICBhY2N1bXVsYXRlZCwgdGhlbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBpcyByZW1lbWJlcmVkLCBidXQKICAgIHRoZSBjaGFyYWN0ZXIgaXMgb3RoZXJ3aXNlIGlnbm9yZWQuIE90aGVyd2lzZSwgaWYgPHR0PicuJzwvdHQ+IGhhcwogICAgYWxyZWFkeSBiZWVuIGFjY3VtdWxhdGVkLCB0aGUgY2hhcmFjdGVyIGlzIGRpc2NhcmRlZCBhbmQgU3RhZ2UgMgogICAgIHRlcm1pbmF0ZXMuIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+V2UgYmVsaWV2ZSB0aGlzIHJlZmxlY3RzIHRoZSBpbnRlbnQgb2YgdGhlIFN0YW5kYXJkLiAgVGhvdXNhbmRzIHNlcAogIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgYXJlIG5vdCB1c2VmdWwgaW4gYW55IGxvY2FsZS4KICBTb21lIGZvcm1hdHRpbmcgY29udmVudGlvbnMgZG8gZ3JvdXAgZGlnaXRzIHRoYXQgZm9sbG93IHRoZSBkZWNpbWFsCiAgcG9pbnQsIGJ1dCB0aGV5IHVzdWFsbHkgaW50cm9kdWNlIGEgZGlmZmVyZW50IGdyb3VwaW5nIGNoYXJhY3RlcgogIGluc3RlYWQgb2YgcmV1c2luZyB0aGUgdGhvdXNhbmQgc2VwIGNoYXJhY3Rlci4gIElmIHdlIHdhbnQgdG8gYWRkCiAgc3VwcG9ydCBmb3Igc3VjaCBjb252ZW50aW9ucywgd2UgbmVlZCB0byBkbyBzbyBleHBsaWNpdGx5LjwvcD4KCjxocj4KPGEgbmFtZT0iMzU5Ij48aDM+MzU5LiZuYnNwO251bV9wdXQmbHQ7Jmd0Ozo6ZG9fcHV0ICguLi4sIGJvb2wpIHVuZG9jdW1lbnRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5wdXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBNYXIgMjAwMjwvcD4KPHA+MjIuMi4yLjIuMSwgcDE6PC9wPgoKICAgIDxwcmU+ICAgIGl0ZXJfdHlwZSBwdXQgKGl0ZXJfdHlwZSBvdXQsIGlvc19iYXNlJmFtcDsgc3RyLCBjaGFyX3R5cGUgZmlsbCwKICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsKSBjb25zdDsKICAgIC4uLgoKICAgIDEgICBSZXR1cm5zOiBkb19wdXQgKG91dCwgc3RyLCBmaWxsLCB2YWwpLgogICAgPC9wcmU+Cgo8cD5BRkFJQ1MsIHRoZSBiZWhhdmlvciBvZiBkb19wdXQgKC4uLiwgYm9vbCkgaXMgbm90IGRvY3VtZW50ZWQgYW55d2hlcmUsCmhvd2V2ZXIsIDIyLjIuMi4yLjIsIHAyMzo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5pdGVyX3R5cGUgcHV0IChpdGVyX3R5cGUgb3V0LCBpb3NfYmFzZSZhbXA7IHN0ciwgY2hhcl90eXBlIGZpbGwsCiAgICAgICAgICAgICAgIGJvb2wgdmFsKSBjb25zdDsKPC9wcmU+CgoKICAgICAgICBFZmZlY3RzOiBJZiAoc3RyLmZsYWdzKCkgJmFtcDsgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCB0aGVuIGRvCiAgICAgICAgICAgICBvdXQgPSBkb19wdXQob3V0LCBzdHIsIGZpbGwsIChpbnQpdmFsKQogICAgICAgICAgIE90aGVyd2lzZSBkbwo8cHJlPiAgICAgICAgICAgICBzdHJpbmdfdHlwZSBzID0KICAgICAgICAgICAgICAgICB2YWwgPyB1c2VfZmFjZXQmbHQ7Y3R5cGUmbHQ7Y2hhclQmZ3Q7ICZndDsobG9jKS50cnVlbmFtZSgpCiAgICAgICAgICAgICAgICAgICAgIDogdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykuZmFsc2VuYW1lKCk7CjwvcHJlPgogICAgICAgICAgIGFuZCB0aGVuIGluc2VydCB0aGUgY2hhcmFjdGVycyBvZiBzIGludG8gb3V0LiA8aT5vdXQ8L2k+Lgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBtZWFucyB0aGF0IHRoZSBib29sIG92ZXJsb2FkIG9mIDx0dD5kb19wdXQoKTwvdHQ+IHdpbGwgbmV2ZXIgYmUgY2FsbGVkLAp3aGljaCBjb250cmFkaWN0cyB0aGUgZmlyc3QgcGFyYWdyYXBoLiBQZXJoYXBzIHRoZSBkZWNsYXJhdGlvbgpzaG91bGQgcmVhZCA8dHQ+ZG9fcHV0KCk8L3R0PiwgYW5kIG5vdCA8dHQ+cHV0KCk8L3R0Pj8KPC9wPgoKPHA+Ck5vdGUgYWxzbyB0aGF0IHRoZXJlIGlzIG5vIDxiPlJldHVybnM8L2I+IGNsYXVzZSBmb3IgdGhpcyBmdW5jdGlvbiwgd2hpY2gKc2hvdWxkIHByb2JhYmx5IGJlIGNvcnJlY3RlZCwganVzdCBhcyBzaG91bGQgdGhlIHNlY29uZCBvY2N1cnJlbmNlCm9mIDxpPiJvdXQuIjwvaT4gaW4gdGhlIHRleHQuCjwvcD4KCjxwPgpJIHRoaW5rIHRoZSBsZWFzdCBpbnZhc2l2ZSBjaGFuZ2UgdG8gZml4IGl0IHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlCnRoZSBmb2xsb3dpbmc6CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+LCBqdXN0IGFib3ZlIHBhcmFncmFwaCAxLCByZW1vdmUKICB0aGUgPHR0PmJvb2w8L3R0PiBvdmVybG9hZC48L3A+Cgo8cD4KSW4gMjIuMi4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHNdPC9hPiwgcDIzLCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcwo8L3A+Cgo8YmxvY2txdW90ZT4KICAgICBSZXBsYWNlIDx0dD5wdXQoKTwvdHQ+IHdpdGggPHR0PmRvX3B1dCgpPC90dD4gaW4gdGhlIGRlY2xhcmF0aW9uCiAgICAgb2YgdGhlIG1lbWJlciBmdW5jdGlvbi4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CiAgICBDaGFuZ2UgdGhlIDxiPkVmZmVjdHM8L2I+IGNsYXVzZSB0byBhIDxiPlJldHVybnM8L2I+IGNsYXVzZSAodG8KICAgIGF2b2lkIHRoZSByZXF1aXJlbWVudCB0byBjYWxsIDx0dD5kb19wdXQoLi4uLCBpbnQpPC90dD4gZnJvbSA8dHQ+CiAgICBkb19wdXQgKC4uLiwgYm9vbCkpPC90dD4KICAgIGxpa2Ugc286CjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgogICAgMjMgICA8Yj5SZXR1cm5zPC9iPjogSWYgPHR0PihzdHIuZmxhZ3MoKSAmYW1wOwogICAgICAgICBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwPC90dD4gdGhlbgogICAgICAgICA8dHQ+ZG9fcHV0IChvdXQsIHN0ciwgZmlsbCwgKGxvbmcpdmFsKTwvdHQ+CiAgICAgICAgIE90aGVyd2lzZSB0aGUgZnVuY3Rpb24gb2J0YWlucyBhIHN0cmluZyA8dHQ+czwvdHQ+IGFzIGlmIGJ5CjxwcmU+ICAgICAgICAgICAgIHN0cmluZ190eXBlIHMgPQogICAgICAgICAgICAgICAgdmFsID8gdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykudHJ1ZW5hbWUoKQogICAgICAgICAgICAgICAgICAgIDogdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykuZmFsc2VuYW1lKCk7CjwvcHJlPgogICAgICAgICBhbmQgdGhlbiBpbnNlcnRzIGVhY2ggY2hhcmFjdGVyIDx0dD5jPC90dD4gb2YgcyBpbnRvIG91dCB2aWEKICAgICAgICAgICA8dHQ+Km91dCsrID0gYzwvdHQ+CiAgICAgICAgIGFuZCByZXR1cm5zIDx0dD5vdXQ8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGZpeGVzIGEgY291cGxlIG9mIG9idmlvdXMgdHlwb3MsIGFuZCBhbHNvIGZpeGVzIHdoYXQgYXBwZWFycyB0bwpiZSBhIHJlcXVpcmVtZW50IG9mIGdyYXR1aXRvdXMgaW5lZmZpY2llbmN5Lgo8L3A+Cjxocj4KPGEgbmFtZT0iMzYwIj48aDM+MzYwLiZuYnNwO2xvY2FsZSBtYW5kYXRlcyBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIE1hciAyMDAyPC9wPgo8cD4KMjIuMS4xLCBwNyAoY29waWVkIGJlbG93KSBhbGxvd3MgaW9zdHJlYW0gZm9ybWF0dGVycyBhbmQgZXh0cmFjdG9ycwp0byBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBmYWNldCBtZW1iZXJzLgpIb3dldmVyLCBzdWNoIGFzc3VtcHRpb25zIGFyZSBhcHBhcmVudGx5IG5vdCBndWFyYW50ZWVkIHRvIGhvbGQKaW4gb3RoZXIgY2FzZXMgKGUuZy4sIHdoZW4gdGhlIGZhY2V0IG1lbWJlcnMgYXJlIGJlaW5nIGNhbGxlZCBkaXJlY3RseQpyYXRoZXIgdGhhbiBhcyBhIHJlc3VsdCBvZiBpb3N0cmVhbSBjYWxscywgb3IgYmV0d2VlbiBzdWNjZXNzaXZlCmNhbGxzIHRvIHRoZSBzYW1lIGlvc3RyZWFtIGZ1bmN0aW9ucyB3aXRoIG5vIGludGVyZXZlbmluZyBjYWxscyB0bwo8dHQ+aW1idWUoKTwvdHQ+LCBvciBldmVuIHdoZW4gdGhlIGZhY2V0IG1lbWJlciBmdW5jdGlvbnMgYXJlIGNhbGxlZApmcm9tIG90aGVyIG1lbWJlciBmdW5jdGlvbnMgb2Ygb3RoZXIgZmFjZXRzKS4gVGhpcyByZXN0cmljdGlvbgpwcmV2ZW50cyBsb2NhbGUgZnJvbSBiZWluZyBpbXBsZW1lbnRlZCBlZmZpY2llbnRseS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZmlyc3Qgc2VudGVuY2UgaW4gMjIuMS4xLCBwNyBmcm9tPC9wPgo8YmxvY2txdW90ZT4KICAgIEluIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYSBsb2NhbGUgZmFjZXQgbWVtYmVyIGZ1bmN0aW9uIGR1cmluZwogICAgYSBjYWxsIHRvIGFuIGlvc3RyZWFtIGluc2VydGVyIG9yIGV4dHJhY3RvciBvciBhIHN0cmVhbWJ1ZiBtZW1iZXIKICAgIGZ1bmN0aW9uLCB0aGUgcmV0dXJuZWQgcmVzdWx0IHNoYWxsIGJlIGlkZW50aWNhbC4gW05vdGU6IFRoaXMKICAgIGltcGxpZXMgdGhhdCBzdWNoIHJlc3VsdHMgbWF5IHNhZmVseSBiZSByZXVzZWQgd2l0aG91dCBjYWxsaW5nCiAgICB0aGUgbG9jYWxlIGZhY2V0IG1lbWJlciBmdW5jdGlvbiBhZ2FpbiwgYW5kIHRoYXQgbWVtYmVyIGZ1bmN0aW9ucwogICAgb2YgaW9zdHJlYW0gY2xhc3NlcyBjYW5ub3Qgc2FmZWx5IGNhbGwgPHR0PmltYnVlKCk8L3R0PgogICAgdGhlbXNlbHZlcywgZXhjZXB0IGFzIHNwZWNpZmllZCBlbHNld2hlcmUuIC0tZW5kIG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBJbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGEgbG9jYWxlIGZhY2V0IG1lbWJlciBmdW5jdGlvbiBvbiBhIGZhY2V0CiAgICBvYmplY3QgaW5zdGFsbGVkIGluIHRoZSBzYW1lIGxvY2FsZSwgdGhlIHJldHVybmVkIHJlc3VsdCBzaGFsbCBiZQogICAgaWRlbnRpY2FsLiAuLi4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgY2hhbmdlIGlzIHJlYXNvbmFibGUgYmVjdWFzZSBpdCBjbGFyaWZpZXMgdGhlIGludGVudCBvZiB0aGlzCiAgcGFydCBvZiB0aGUgc3RhbmRhcmQuPC9wPgo8aHI+CjxhIG5hbWU9IjM2MiI+PGgzPjM2Mi4mbmJzcDtiaW5kMXN0L2JpbmQybmQgdHlwZSBzYWZldHk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtELjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmxpYi5iaW5kZXJzIj4gW2RlcHIubGliLmJpbmRlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgRGVta2luJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEFwciAyMDAyPC9wPgo8cD4KVGhlIGRlZmluaXRpb24gb2YgYmluZDFzdCgpICg8Zm9udCBjb2xvcj0icmVkIj4yMC41LjYuMjwvZm9udD4pIGNhbiByZXN1bHQgaW4KdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiB1bnNhZmUgYmluZGluZyBiZXR3ZWVuIGluY29tcGF0aWJsZSBwb2ludGVyCnR5cGVzLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBmdW5jdGlvbiB3aG9zZSBmaXJzdCBwYXJhbWV0ZXIgdHlwZSBpcwoncG9pbnRlciB0byBUJywgaXQncyBwb3NzaWJsZSB3aXRob3V0IGVycm9yIHRvIGJpbmQgYW4gYXJndW1lbnQgb2YKdHlwZSAncG9pbnRlciB0byBVJyB3aGVuIFUgZG9lcyBub3QgZGVyaXZlIGZyb20gVDoKPC9wPgo8cHJlPiAgIGZvbyhUKiwgaW50KTsKCiAgIHN0cnVjdCBUIHt9OwogICBzdHJ1Y3QgVSB7fTsKCiAgIFUgdTsKCiAgIGludCogcDsKICAgaW50KiBxOwoKICAgZm9yX2VhY2gocCwgcSwgYmluZDFzdChwdHJfZnVuKGZvbyksICZhbXA7dSkpOyAgICAvLyB1bnNhZmUgYmluZGluZwo8L3ByZT4KCjxwPgpUaGUgZGVmaW5pdGlvbiBvZiBiaW5kMXN0KCkgaW5jbHVkZXMgYSBmdW5jdGlvbmFsLXN0eWxlIGNvbnZlcnNpb24gdG8KbWFwIGl0cyBhcmd1bWVudCB0byB0aGUgZXhwZWN0ZWQgYXJndW1lbnQgdHlwZSBvZiB0aGUgYm91bmQgZnVuY3Rpb24KKHNlZSBiZWxvdyk6CjwvcD4KPHByZT4gIHR5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSh4KQo8L3ByZT4KCjxwPgpBIGZ1bmN0aW9uYWwtc3R5bGUgY29udmVyc2lvbiAoNS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9leHByLmh0bWwjZXhwci50eXBlLmNvbnYiPiBbZXhwci50eXBlLmNvbnZdPC9hPikgaXMgZGVmaW5lZCB0byBiZQpzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBhbiBleHBsaWNpdCBjYXN0IGV4cHJlc3Npb24gKDUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2V4cHIuaHRtbCNleHByLmNhc3QiPiBbZXhwci5jYXN0XTwvYT4pLCB3aGljaCBtYXkgKGFjY29yZGluZyB0byA1LjQsIHBhcmFncmFwaCA1KSBiZSBpbnRlcnByZXRlZAphcyBhIHJlaW50ZXJwcmV0X2Nhc3QsIHRodXMgbWFza2luZyB0aGUgZXJyb3IuCjwvcD4KCjxwPlRoZSBwcm9ibGVtIGFuZCBwcm9wb3NlZCBjaGFuZ2UgYWxzbyBhcHBseSB0byA8Zm9udCBjb2xvcj0icmVkIj4yMC41LjYuNDwvZm9udD4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGlzIHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgMjAuNS42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hcml0aG1ldGljLm9wZXJhdGlvbnMiPiBbbGliLmFyaXRobWV0aWMub3BlcmF0aW9uc108L2E+LzE6CiAgIkJpbmRlcnMgPHR0PmJpbmQxc3Q8L3R0PiBhbmQgPHR0PmJpbmQybmQ8L3R0PiBhcmUgZGVwcmVjYXRlZCBpbgogIGZhdm9yIG9mIDx0dD5zdGQ6OnRyMTo6YmluZDwvdHQ+LiI8L3A+Cgo8cD4oTm90ZXMgdG8gZWRpdG9yOiAoMSkgd2hlbiBhbmQgaWYgdHIxOjpiaW5kIGlzIGluY29ycG9yYXRlZCBpbnRvCiAgdGhlIHN0YW5kYXJkLCAic3RkOjp0cjE6OmJpbmQiIHNob3VsZCBiZSBjaGFuZ2VkIHRvICJzdGQ6OmJpbmQiLiAoMikKICAyMC41LjYgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIEFubmV4IEQuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgaXMgbm8gcG9pbnQgaW4gZml4aW5nIGJpbmQxc3QgYW5kIGJpbmQybmQuICB0cjE6OmJpbmQgaXMgYQogIHN1cGVyaW9yIHNvbHV0aW9uLiAgSXQgc29sdmVzIHRoaXMgcHJvYmxlbSBhbmQgb3RoZXJzLjwvcD4KPGhyPgo8YSBuYW1lPSIzNjMiPjxoMz4zNjMuJm5ic3A7TWlzc2luZyBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBpbiAyNy40LjIuMS4xPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zOjpmYWlsdXJlIj4gW2xpYi5pb3M6OmZhaWx1cmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24gYW5kIE1hcmMgUGF0ZXJubyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBNYXkgMjAwMjwvcD4KPHA+ClRoZSBkZXN0cnVjdG9yIG9mIGlvc19iYXNlOjpmYWlsdXJlIHNob3VsZCBoYXZlIGFuIGVtcHR5IHRocm93CnNwZWNpZmljYXRpb24sIGJlY2F1c2UgdGhlIGRlc3RydWN0b3Igb2YgaXRzIGJhc2UgY2xhc3MsIGV4Y2VwdGlvbiwgaXMKZGVjbGFyZWQgaW4gdGhpcyB3YXkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGRlc3RydWN0b3IgdG88L3A+CjxwcmU+ICB2aXJ0dWFsIH5mYWlsdXJlKCkgdGhyb3coKTsKPC9wcmU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIGdsaXRjaC4gIFRoaXMgaXMgYWxtb3N0IGVkaXRvcmlhbC48L3A+Cjxocj4KPGEgbmFtZT0iMzY0Ij48aDM+MzY0LiZuYnNwO0luY29uc2lzdGVudCB3b3JkaW5nIGluIDI3LjUuMi40LjI8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy41LjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5idWZmZXIiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biwgTWFyYyBQYXRlcm5vJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEwIE1heSAyMDAyPC9wPgo8cD4KMjcuNS4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyIj4gW2xpYi5zdHJlYW1idWYudmlydC5idWZmZXJdPC9hPiBwYXJhZ3JhcGggMSBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgRWZmZWN0cwpjbGF1c2UgZm9yIHNlZWtvZmYuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KTWFrZSB0aGlzIHBhcmFncmFwaCwgdGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzZXRidWYsIGNvbnNpc3RlbnQgaW4gd29yZGluZwp3aXRoIHRoZSBFZmZlY3RzIGNsYXVzZSBmb3Igc2Vla29mZiBpbiBwYXJhZ3JhcGggMyBieSBhbWVuZGluZyBwYXJhZ3JhcGggMQp0byBpbmRpY2F0ZSB0aGUgcHVycG9zZSBvZiBzZXRidWY6CjwvcD4KCjxwPk9yaWdpbmFsIHRleHQ6PC9wPgoKPGJsb2NrcXVvdGU+CjEgRWZmZWN0czogUGVyZm9ybXMgYW4gb3BlcmF0aW9uIHRoYXQgaXMgZGVmaW5lZCBzZXBhcmF0ZWx5IGZvciBlYWNoCmNsYXNzIGRlcml2ZWQgZnJvbSBiYXNpY19zdHJlYW1idWYgaW4gdGhpcyBjbGF1c2UgKDI3LjcuMS4zLCAyNy44LjEuNCkuCjwvYmxvY2txdW90ZT4KCjxwPlByb3Bvc2VkIHRleHQ6PC9wPgoKPGJsb2NrcXVvdGU+CjEgRWZmZWN0czogSW5mbHVlbmNlcyBzdHJlYW0gYnVmZmVyaW5nIGluIGEgd2F5IHRoYXQgaXMgZGVmaW5lZCBzZXBhcmF0ZWx5CmZvciBlYWNoIGNsYXNzIGRlcml2ZWQgZnJvbSBiYXNpY19zdHJlYW1idWYgaW4gdGhpcyBjbGF1c2UKKDI3LjcuMS4zLCAyNy44LjEuNCkuCjwvYmxvY2txdW90ZT4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGRvZXNuJ3QgYmVsaWV2ZSB0aGVyZSBpcyBhbnkgbm9ybWF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbgogIHRoZSBleGlzdGluZyB3b3JkaW5nIGFuZCB3aGF0J3MgaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24sIGJ1dCB0aGUKICBjaGFuZ2UgbWF5IG1ha2UgdGhlIGludGVudCBjbGVhcmVyLjwvcD4KPGhyPgo8YSBuYW1lPSIzNjUiPjxoMz4zNjUuJm5ic3A7TGFjayBvZiBjb25zdC1xdWFsaWZpY2F0aW9uIGluIGNsYXVzZSAyNzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pbnB1dC5vdXRwdXQiPiBbbGliLmlucHV0Lm91dHB1dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biwgTWFyYyBQYXRlcm5vJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEwIE1heSAyMDAyPC9wPgo8cD4KU29tZSBzdHJlYW0gYW5kIHN0cmVhbWJ1ZiBtZW1iZXIgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBub24tY29uc3QsCmV2ZW4gdGhvdWdodCB0aGV5IGFwcGVhciBvbmx5IHRvIHJlcG9ydCBpbmZvcm1hdGlvbiByYXRoZXIgdGhhbiB0bwpjaGFuZ2UgYW4gb2JqZWN0J3MgbG9naWNhbCBzdGF0ZS4gIFRoZXkgc2hvdWxkIGJlIGRlY2xhcmVkIGNvbnN0LiAgU2VlCmRvY3VtZW50IE4xMzYwIGZvciBkZXRhaWxzIGFuZCByYXRpb25hbGUuCjwvcD4KCjxwPlRoZSBsaXN0IG9mIG1lbWJlciBmdW5jdGlvbnMgdW5kZXIgZGlzY3Vzc2lvbjogPHR0PmluX2F2YWlsPC90dD4sCjx0dD5zaG93bWFueWM8L3R0PiwgPHR0PnRlbGxnPC90dD4sIDx0dD50ZWxscDwvdHQ+LCA8dHQ+aXNfb3BlbjwvdHQ+LjwvcD4KCjxwPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczIj43MzwvYT48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjguMS41LCAyNy44LjEuNywgMjcuOC4xLjgsIDI3LjguMS4xMCwgMjcuOC4xLjExLCBhbmQgMjcuOC4xLjEzPC9wPgo8cD5SZXBsYWNlPC9wPgo8cHJlPiAgYm9vbCBpc19vcGVuKCk7CjwvcHJlPgo8cD53aXRoPC9wPgo8cHJlPiAgYm9vbCBpc19vcGVuKCkgY29uc3Q7CjwvcHJlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+T2YgdGhlIGNoYW5nZXMgcHJvcG9zZWQgaW4gTjEzNjAsIHRoZSBvbmx5IG9uZSB0aGF0IGlzIHNhZmUgaXMKY2hhbmdpbmcgdGhlIGZpbGVzdHJlYW1zJyBpc19vcGVuIHRvIGNvbnN0LiAgVGhlIExXRyBiZWxpZXZlZCB0aGF0CnRoaXMgd2FzIE5BRCB0aGUgZmlyc3QgdGltZSBpdCBjb25zaWRlcmVkIHRoaXMgaXNzdWUgKGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczIj43MzwvYT4pLCBidXQgbm93IHRoaW5rcyBvdGhlcndpc2UuICBUaGUgY29ycmVzcG9uZGluZyBzdHJlYW1idWYKbWVtYmVyIGZ1bmN0aW9uLCBhZnRlciBhbGwsaXMgYWxyZWFkeSBjb25zdC48L3A+Cgo8cD5UaGUgb3RoZXIgcHJvcG9zZWQgY2hhbmdlcyBhcmUgbGVzcyBzYWZlLCBiZWNhdXNlIHNvbWUgc3RyZWFtYnVmCmZ1bmN0aW9ucyB0aGF0IGFwcGVhciBtZXJlbHkgdG8gcmVwb3J0IGEgdmFsdWUgZG8gYWN0dWFsbHkgcGVyZm9ybQptdXRhdGluZyBvcGVyYXRpb25zLiAgSXQncyBub3QgZXZlbiBjbGVhciB0aGF0IHRoZXkgc2hvdWxkIGJlCmNvbnNpZGVyZWQgImxvZ2ljYWxseSBjb25zdCIsIGJlY2F1c2Ugc3RyZWFtYnVmIGhhcyB0d28gaW50ZXJmYWNlcywgYQpwdWJsaWMgb25lIGFuZCBhIHByb3RlY3RlZCBvbmUuICBUaGVzZSBmdW5jdGlvbnMgbWF5LCBhbmQgb2Z0ZW4gZG8sCmNoYW5nZSB0aGUgc3RhdGUgYXMgZXhwb3NlZCBieSB0aGUgcHJvdGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUKc3RhdGUgZXhwb3NlZCBieSB0aGUgcHVibGljIGludGVyZmFjZSBpcyB1bmNoYW5nZWQuPC9wPgoKPHA+Tm90ZSB0aGF0IGltcGxlbWVudGVycyBjYW4gbWFrZSB0aGlzIGNoYW5nZSBpbiBhIGJpbmFyeSBjb21wYXRpYmxlCndheSBieSBwcm92aWRpbmcgYm90aCBvdmVybG9hZHM7IHRoaXMgd291bGQgYmUgYSBjb25mb3JtaW5nIGV4dGVuc2lvbi48L3A+Cgo8aHI+CjxhIG5hbWU9IjM2OSI+PGgzPjM2OS4mbmJzcDtpbyBzdHJlYW0gb2JqZWN0cyBhbmQgc3RhdGljIGN0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW0ub2JqZWN0cyI+IFtsaWIuaW9zdHJlYW0ub2JqZWN0c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1J1c2xhbiBBYmRpa2VldiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs4IEp1bCAyMDAyPC9wPgo8cD4KSXMgaXQgc2FmZSB0byB1c2Ugc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0cyBmcm9tIGNvbnN0cnVjdG9ycyBvZgpzdGF0aWMgb2JqZWN0cz8gIEFyZSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3RzIGNvbnN0cnVjdGVkIGFuZCBhcmUKdGhlaXIgYXNzb2NpYXRpb25zIGVzdGFibGlzaGVkIGF0IHRoYXQgdGltZT8KPC9wPgoKPHA+U3VycGlzaW5nbHkgZW5vdWdoLCBTdGFuZGFyZCBkb2VzIE5PVCByZXF1aXJlIHRoYXQuPC9wPgoKPHA+CjI3LjMvMiBbbGliLmlvc3RyZWFtLm9iamVjdHNdIGd1YXJhbnRlZXMgdGhhdCBzdGFuZGFyZCBpb3N0cmVhbQpvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgdGhlaXIgYXNzb2NpYXRpb25zIGFyZSBlc3RhYmxpc2hlZCBiZWZvcmUKdGhlIGJvZHkgb2YgbWFpbigpIGJlZ2lucyBleGVjdXRpb24uICBJdCBhbHNvIHJlZmVycyB0byBpb3NfYmFzZTo6SW5pdApjbGFzcyBhcyB0aGUgcGFuYWNlYSBmb3IgY29uc3RydWN0b3JzIG9mIHN0YXRpYyBvYmplY3RzLgo8L3A+Cgo8cD4KSG93ZXZlciwgdGhlcmUncyBub3RoaW5nIGluIDI3LjMgW2xpYi5pb3N0cmVhbS5vYmplY3RzXSwKaW4gMjcuNC4yIFtsaWIuaW9zLmJhc2VdLCBhbmQgaW4gMjcuNC4yLjEuNiBbbGliLmlvczo6SW5pdF0sCnRoYXQgd291bGQgcmVxdWlyZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWxsb3cgYWNjZXNzIHRvIHN0YW5kYXJkCmlvc3RyZWFtIG9iamVjdHMgZnJvbSBjb25zdHJ1Y3RvcnMgb2Ygc3RhdGljIG9iamVjdHMuCjwvcD4KCjxwPkRldGFpbHM6PC9wPgoKPHA+Q29yZSB0ZXh0IHJlZmVycyB0byBzb21lIG1hZ2ljIG9iamVjdCBpb3NfYmFzZTo6SW5pdCwgd2hpY2ggd2lsbApiZSBkaXNjdXNzZWQgYmVsb3c6PC9wPgoKPGJsb2NrcXVvdGU+CiAgICAiVGhlIFtzdGFuZGFyZCBpb3N0cmVhbV0gb2JqZWN0cyBhcmUgY29uc3RydWN0ZWQsIGFuZCB0aGVpcgogICAgYXNzb2NpYXRpb25zIGFyZSBlc3RhYmxpc2hlZCBhdCBzb21lIHRpbWUgcHJpb3IgdG8gb3IgZHVyaW5nCiAgICBmaXJzdCB0aW1lIGFuIG9iamVjdCBvZiBjbGFzcyBiYXNpY19pb3MmbHQ7Y2hhclQsdHJhaXRzJmd0Ozo6SW5pdAogICAgaXMgY29uc3RydWN0ZWQsIGFuZCBpbiBhbnkgY2FzZSBiZWZvcmUgdGhlIGJvZHkgb2YgbWFpbgogICAgYmVnaW5zIGV4ZWN1dGlvbi4iICgyNy4zLzIgW2xpYi5pb3N0cmVhbS5vYmplY3RzXSkKPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBmaXJzdCA8aT5ub24tbm9ybWF0aXZlPC9pPiBmb290bm90ZSBlbmNvdXJhZ2VzIGltcGxlbWVudGF0aW9ucwp0byBpbml0aWFsaXplIHN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgZWFybGllciB0aGFuIHJlcXVpcmVkLgo8L3A+Cgo8cD5Ib3dldmVyLCB0aGUgc2Vjb25kIDxpPm5vbi1ub3JtYXRpdmU8L2k+IGZvb3Rub3RlIG1ha2VzIGFuIGV4cGxpY2l0CmFuZCB1bnN1cHBvcnRlZCBjbGFpbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAiQ29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBmb3Igc3RhdGljIG9iamVjdHMgY2FuIGFjY2VzcyB0aGVzZQogIFtzdGFuZGFyZCBpb3N0cmVhbV0gb2JqZWN0cyB0byByZWFkIGlucHV0IGZyb20gc3RkaW4gb3Igd3JpdGUgb3V0cHV0CiAgdG8gc3Rkb3V0IG9yIHN0ZGVyci4iICgyNy4zLzIgZm9vdG5vdGUgMjY1IFtsaWIuaW9zdHJlYW0ub2JqZWN0c10pCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgb25seSBiaXQgb2YgbWFnaWMgaXMgcmVsYXRlZCB0byB0aGF0IGlvc19iYXNlOjpJbml0IGNsYXNzLiAgQUZBSUssCnRoZSByYXRpb25hbGUgYmVoaW5kIGlvc19iYXNlOjpJbml0IHdhcyB0byBicmluZyBhbiBpbnN0YW5jZSBvZiB0aGlzCmNsYXNzIHRvIGVhY2ggdHJhbnNsYXRpb24gdW5pdCB3aGljaCAjaW5jbHVkZWQgJmx0O2lvc3RyZWFtJmd0OyBvcgpyZWxhdGVkIGhlYWRlci4gIFN1Y2ggYW4gaW5jbHVzaW9uIHdvdWxkIHN1cHBvcnQgdGhlIGNsYWltIG9mIGZvb3Rub3RlCnF1b3RlZCBhYm92ZSwgYmVjYXVzZSBpbiBvcmRlciB0byB1c2Ugc29tZSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QgaXQKaXMgbmVjZXNzYXJ5IHRvICNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsuCjwvcD4KCjxwPgpIb3dldmVyLCB3aGlsZSBTdGFuZGFyZCBleHBsaWNpdGx5IGRlc2NyaWJlcyBpb3NfYmFzZTo6SW5pdCBhcwphbiBhcHByb3ByaWF0ZSBjbGFzcyBmb3IgZG9pbmcgdGhlIHRyaWNrLCBJIGZhaWxlZCB0byBmb3VuZCBhCm1lbnRpb24gb2YgYW4gX2luc3RhbmNlXyBvZiBpb3NfYmFzZTo6SW5pdCBpbiBTdGFuZGFyZC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdG8gMjcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW0ub2JqZWN0cyI+IFtsaWIuaW9zdHJlYW0ub2JqZWN0c108L2E+LCBwMiwgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBsYXN0IHNlbnRlbmNlCm9mIHRoZSBwYXJhZ3JhcGgsIHRoZSBmb2xsb3dpbmcgdHdvIHNlbnRlbmNlczo8L3A+Cgo8YmxvY2txdW90ZT4KSWYgYSB0cmFuc2xhdGlvbiB1bml0IGluY2x1ZGVzICZsdDtpb3N0cmVhbSZndDssIG9yIGV4cGxpY2l0bHkKY29uc3RydWN0cyBhbiBpb3NfYmFzZTo6SW5pdCBvYmplY3QsIHRoZXNlIHN0cmVhbSBvYmplY3RzIHNoYWxsCmJlIGNvbnN0cnVjdGVkIGJlZm9yZSBkeW5hbWljIGluaXRpYWxpemF0aW9uIG9mIG5vbi1sb2NhbApvYmplY3RzIGRlZmluZWQgbGF0ZXIgaW4gdGhhdCB0cmFuc2xhdGlvbiB1bml0LCBhbmQgdGhlc2Ugc3RyZWFtCm9iamVjdHMgc2hhbGwgYmUgZGVzdHJveWVkIGFmdGVyIHRoZSBkZXN0cnVjdGlvbiBvZiBkeW5hbWljYWxseQppbml0aWFsaXplZCBub24tbG9jYWwgb2JqZWN0cyBkZWZpbmVkIGxhdGVyIGluIHRoYXQgdHJhbnNsYXRpb24gdW5pdC4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0xpbGxlaGFtbWVyOiBNYXR0IHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+CjxwPjxpPltNb250IFRyZW1ibGFudDogTWF0dCBwcm92aWRlZCByZXZpc2VkIHdvcmRpbmcuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gdW5jb25kaXRpb25hbGx5IHJlcXVpcmVkCmltcGxlbWVudGF0aW9ucyB0byBkZWZpbmUgYW4gaW9zX2Jhc2U6OkluaXQgb2JqZWN0IG9mIHNvbWUKaW1wbGVtZW50YXRpb24tZGVmaW5lZCBuYW1lIGluIHRoZSBoZWFkZXIgJmx0O2lvc3RyZWFtJmd0Oy4gVGhhdCdzIGFuCm92ZXJzcGVjaWZpY2F0aW9uLiBGaXJzdCwgZGVmaW5pbmcgdGhlIG9iamVjdCBtYXkgYmUgdW5uZWNlc3NhcnkKYW5kIGV2ZW4gZGV0cmltZW50YWwgdG8gcGVyZm9ybWFuY2UgaWYgYW4gaW1wbGVtZW50YXRpb24gY2FuCmd1YXJhbnRlZSB0aGF0IHRoZSA4IHN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgd2lsbCBiZSBpbml0aWFsaXplZApiZWZvcmUgYW55IG90aGVyIHVzZXItZGVmaW5lZCBvYmplY3QgaW4gYSBwcm9ncmFtLiBTZWNvbmQsIHRoZXJlCmlzIG5vIG5lZWQgdG8gcmVxdWlyZSBpbXBsZW1lbnRhdGlvbnMgdG8gZG9jdW1lbnQgdGhlIG5hbWUgb2YgdGhlCm9iamVjdC48L3A+Cgo8cD4KVGhlIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uIGdpdmVzIHVzZXJzIGd1aWRhbmNlIG9uIHdoYXQgdGhleSBuZWVkIHRvCmRvIHRvIGVuc3VyZSB0aGF0IHN0cmVhbSBvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZCBkdXJpbmcgc3RhcnR1cC48L3A+Cjxocj4KPGEgbmFtZT0iMzcwIj48aDM+MzcwLiZuYnNwO01pbm9yIGVycm9yIGluIGJhc2ljX2lzdHJlYW06OmdldDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmF5IExpc2NobmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IEp1bCAyMDAyPC9wPgo8cD5EZWZlY3QgcmVwb3J0IGZvciBkZXNjcmlwdGlvbiBvZiBiYXNpY19pc3RyZWFtOjpnZXQgKHNlY3Rpb24gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIHBhcmFncmFwaCAxNS4gVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2V0IGZ1bmN0aW9uCndpdGggdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6PC9wPgoKPHByZT4gIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGdldChiYXNpY19zdHJlYW1idWYmbHQ7Y2hhcl90eXBlLHRyYWl0cyZndDsmYW1wOwogIHNiKTsKPC9wcmU+Cgo8cD5pcyBpbmNvcnJlY3QuIEl0IHJlYWRzPC9wPgoKPGJsb2NrcXVvdGU+CiAgRWZmZWN0czogQ2FsbHMgZ2V0KHMsbix3aWRlbignXG4nKSkKPC9ibG9ja3F1b3RlPgoKPHA+d2hpY2ggSSBiZWxpZXZlIHNob3VsZCBiZTo8L3A+Cgo8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBDYWxscyBnZXQoc2Isd2lkZW4oJ1xuJykpCjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIDxiPkVmZmVjdHM8L2I+IHBhcmFncmFwaCB0bzo8L3A+CjxibG9ja3F1b3RlPgogIEVmZmVjdHM6IENhbGxzIGdldChzYix0aGlzLSZndDt3aWRlbignXG4nKSkKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1ByZS1PeGZvcmQ6IE1pbm9yIGNvcnJlY3Rpb24gZnJvbSBIb3dhcmQ6IHJlcGxhY2VkICd3aWRlbicgCiAgICAgIHdpdGggJ3RoaXMtJmd0O3dpZGVuJy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG8uPC9wPgo8aHI+CjxhIG5hbWU9IjM3MSI+PGgzPjM3MS4mbmJzcDtTdGFiaWxpdHkgb2YgbXVsdGlzZXQgYW5kIG11bHRpbWFwIG1lbWJlciBmdW5jdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0ZyYW5rIENvbXBhZ25lciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMjAwMjwvcD4KPHA+ClRoZSByZXF1aXJlbWVudHMgZm9yIG11bHRpc2V0IGFuZCBtdWx0aW1hcCBjb250YWluZXJzICgyMy4xCltsaWIuY29udGFpbmVycy5yZXF1aXJlbWVudHNdLCAyMy4xLjIgW2xpYi5hc3NvY2lhdGl2ZS5yZXFtbnRzXSwKMjMuMy4yIFtsaWIubXVsdGltYXBdIGFuZCAyMy4zLjQgW2xpYi5tdWx0aXNldF0pIG1ha2Ugbm8gbWVudGlvbiBvZgp0aGUgc3RhYmlsaXR5IG9mIHRoZSByZXF1aXJlZCAobXV0YXRpbmcpIG1lbWJlciBmdW5jdGlvbnMuIEl0IGFwcGVhcnMKdGhlIHN0YW5kYXJkIGFsbG93cyB0aGVzZSBmdW5jdGlvbnMgdG8gcmVvcmRlciBlcXVpdmFsZW50IGVsZW1lbnRzIG9mCnRoZSBjb250YWluZXIgYXQgd2lsbCwgeWV0IHRoZSBwZXJ2YXNpdmUgcmVkLWJsYWNrIHRyZWUgaW1wbGVtZW50YXRpb24KYXBwZWFycyB0byBwcm92aWRlIHN0YWJsZSBiZWhhdmlvdXIuCjwvcD4KCjxwPlRoaXMgaXMgb2YgbW9zdCBjb25jZXJuIHdoZW4gY29uc2lkZXJpbmcgdGhlIGJlaGF2aW91ciBvZiBlcmFzZSgpLgpBIHN0YWJpbGl0eSByZXF1aXJlbWVudCB3b3VsZCBndWFyYW50ZWUgdGhlIGNvcnJlY3Qgd29ya2luZyBvZiB0aGUKZm9sbG93aW5nICdpZGlvbScgdGhhdCByZW1vdmVzIGVsZW1lbnRzIGJhc2VkIG9uIGEgY2VydGFpbiBwcmVkaWNhdGUKZnVuY3Rpb24uCjwvcD4KCjxwcmU+ICBtdWx0aW1hcCZsdDtpbnQsIGludCZndDsgbTsKICBtdWx0aW1hcCZsdDtpbnQsIGludCZndDs6Oml0ZXJhdG9yIGkgPSBtLmJlZ2luKCk7CiAgd2hpbGUgKGkgIT0gbS5lbmQoKSkgewogICAgICBpZiAocHJlZChpKSkKICAgICAgICAgIG0uZXJhc2UgKGkrKyk7CiAgICAgIGVsc2UKICAgICAgICAgICsraTsKICB9CjwvcHJlPgoKPHA+CkFsdGhvdWdoIGNsYXVzZSAyMy4xLjIvOCBndWFyYW50ZWVzIHRoYXQgaSByZW1haW5zIGEgdmFsaWQgaXRlcmF0b3IKdGhyb3Vnb3V0IHRoaXMgbG9vcCwgYWJzZW5jZSBvZiB0aGUgc3RhYmlsaXR5IHJlcXVpcmVtZW50IGNvdWxkCnBvdGVudGlhbGx5IHJlc3VsdCBpbiBlbGVtZW50cyBiZWluZyBza2lwcGVkLiBUaGlzIHdvdWxkIG1ha2UKdGhpcyBjb2RlIGluY29ycmVjdCwgYW5kLCBmdXJ0aGVybW9yZSwgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyB3YXkKb2YgZXJhc2luZyB0aGVzZSBlbGVtZW50cyB3aXRob3V0IGl0ZXJhdGluZyBmaXJzdCBvdmVyIHRoZSBlbnRpcmUKY29udGFpbmVyLCBhbmQgc2Vjb25kIG92ZXIgdGhlIGVsZW1lbnRzIHRvIGJlIGVyYXNlZC4gVGhpcyB3b3VsZApiZSB1bmZvcnR1bmF0ZSwgYW5kIGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gYm90aCBwZXJmb3JtYW5jZSBhbmQKY29kZSBzaW1wbGljaXR5Lgo8L3A+Cgo8cD4KSWYgdGhlIHN0YWJpbGl0eSByZXF1aXJlbWVudCBpcyBpbnRlbmRlZCwgaXQgc2hvdWxkIGJlIG1hZGUgZXhwbGljaXQKKHByb2JhYmx5IHRocm91Z2ggYW4gZXh0cmEgcGFyYWdyYXBoIGluIGNsYXVzZSAyMy4xLjIpLgo8L3A+CjxwPgpJZiBpdCB0dXJucyBvdXQgc3RhYmlsaXR5IGNhbm5vdCBiZSBndWFyYW50ZWVkLCBpJ2QgYXJndWUgdGhhdCBhCnJlbWFyayBvciBmb290bm90ZSBpcyBjYWxsZWQgZm9yIChhbHNvIHNvbWV3aGVyZSBpbiBjbGF1c2UgMjMuMS4yKSB0bwp3YXJuIGFnYWluc3QgcmVseWluZyBvbiBzdGFibGUgYmVoYXZpb3VyIChhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGNvZGUKYWJvdmUpLiAgSWYgbW9zdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBkaXNwbGF5IHN0YWJsZSBiZWhhdmlvdXIsIGFueQpwcm9ibGVtcyBlbWVyZ2luZyBvbiBhbiBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHN0YWJsZSBiZWhhdmlvdXIgd2lsbApiZSBoYXJkIHRvIHRyYWNrIGRvd24gYnkgdXNlcnMuIFRoaXMgd291bGQgYWxzbyBtYWtlIHRoZSBuZWVkIGZvciBhbgplcmFzZV9pZigpIG1lbWJlciBmdW5jdGlvbiB0aGF0IG11Y2ggZ3JlYXRlci4KPC9wPgoKPHA+VGhpcyBpc3N1ZSBpcyBzb21ld2hhdCByZWxhdGVkIHRvIExXRyBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMwIj4xMzA8L2E+LjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBlbmQgb2YgMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBwYXJhZ3JhcGggNDogCiJGb3IgPHR0Pm11bHRpc2V0PC90dD4gYW5kIDx0dD5tdWx0aW1hcDwvdHQ+LCA8dHQ+aW5zZXJ0PC90dD5hbmQgPHR0PmVyYXNlPC90dD4KICBhcmUgPGk+c3RhYmxlPC9pPjogdGhleSBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZXF1aXZhbGVudAogIGVsZW1lbnRzLjwvcD4gCgo8cD48aT5bTGlsbGVoYW1tZXI6IE1hdHQgcHJvdmlkZWQgd29yZGluZ108L2k+PC9wPgo8cD48aT5bSm9lIEdvdHRtYW4gcG9pbnRzIG91dCB0aGF0IHRoZSBwcm92aWRlZCB3b3JkaW5nIGRvZXMgbm90IGFkZHJlc3MKbXVsdGltYXAgYW5kIG11bHRpc2V0LiAgTjE3ODAgYWxzbyBhZGRyZXNzZXMgdGhpcyBpc3N1ZSBhbmQgc3VnZ2VzdHMKd29yZGluZy5dPC9pPjwvcD4KCjxwPjxpPltNb250IFRyZW1ibGFudDogQ2hhbmdlZCBzZXQgYW5kIG1hcCB0byBtdWx0aXNldCBhbmQgbXVsdGltYXAuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBhZ3JlZXMgdGhhdCB0aGlzIGd1YXJhbnRlZSBpcyBuZWNlc3NhcnkgZm9yIGNvbW1vbiB1c2VyCiAgaWRpb21zIHRvIHdvcmssIGFuZCB0aGF0IGFsbCBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSB0aGlzCiAgcHJvcGVydHkuICBOb3RlIHRoYXQgdGhpcyByZXNvbHV0aW9uIGd1YXJhbnRlZXMgc3RhYmlsaXR5IGZvcgogIG11bHRpbWFwIGFuZCBtdWx0aXNldCwgbm90IGZvciBhbGwgYXNzb2NpYXRpdmUgY29udGFpbmVycyBpbgogIGdlbmVyYWwuPC9wPgoKPGhyPgo8YSBuYW1lPSIzNzMiPjxoMz4zNzMuJm5ic3A7QXJlIGJhc2ljX2lzdHJlYW0gYW5kIGJhc2ljX29zdHJlYW0gdG8gdXNlIChleGNlcHRpb25zKCkmYW1wO2JhZGJpdCkgIT0gMCA/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPiwgMjcuNi4yLjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtLZWl0aCBCYWtlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdWwgMjAwMjwvcD4KCjxwPgpJbiAyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+IGFuZCAyNy42LjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+CihleGNlcHRpb24oKSZhbXA7YmFkYml0KSAhPSAwIGlzIHVzZWQgaW4gdGVzdGluZyBmb3IgcmV0aHJvdywgeWV0CmV4Y2VwdGlvbigpIGlzIHRoZSBjb25zdHJ1Y3RvciB0byBjbGFzcyBzdGQ6OmV4Y2VwdGlvbiBpbiAxOC42LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi50eXBlLmluZm8iPiBbbGliLnR5cGUuaW5mb108L2E+IHRoYXQgaGFzIG5vIHJldHVybiB0eXBlLiBTaG91bGQgbWVtYmVyIGZ1bmN0aW9uCmV4Y2VwdGlvbnMoKSBmb3VuZCBpbiAyNy40LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcyI+IFtsaWIuaW9zXTwvYT4gYmUgdXNlZCBpbnN0ZWFkPwo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+IGFuZCAyNy42LjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+LCBjaGFuZ2UKIihleGNlcHRpb24oKSZhbXA7YmFkYml0KSAhPSAwIiB0byAiKGV4Y2VwdGlvbnMoKSZhbXA7YmFkYml0KSAhPSAwIi4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvLjwvcD4KPGhyPgo8YSBuYW1lPSIzNzUiPjxoMz4zNzUuJm5ic3A7YmFzaWNfaW9zIHNob3VsZCBiZSBpb3NfYmFzZSBpbiAyNy43LjEuMzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1JheSBMaXNjaG5lciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNCBBdWcgMjAwMjwvcD4KPHA+CkluIFNlY3Rpb24gMjcuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi52aXJ0dWFscyI+IFtsaWIuc3RyaW5nYnVmLnZpcnR1YWxzXTwvYT46IFRhYmxlIDkwLCBUYWJsZSA5MSwgYW5kIHBhcmFncmFwaAoxNCBhbGwgY29udGFpbiByZWZlcmVuY2VzIHRvICJiYXNpY19pb3M6OiIgd2hpY2ggc2hvdWxkIGJlCiJpb3NfYmFzZTo6Ii4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgYWxsIHJlZmVyZW5jZXMgdG8gImJhc2ljX2lvcyIgaW4gVGFibGUgOTAsIFRhYmxlIDkxLCBhbmQKcGFyYWdyYXBoIDE0IHRvICJpb3NfYmFzZSIuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZpeGVzIGFuIG9idmlvdXMgdHlwby48L3A+Cjxocj4KPGEgbmFtZT0iMzc2Ij48aDM+Mzc2LiZuYnNwO2Jhc2ljX3N0cmVhbWJ1ZiBzZW1hbnRpY3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLnZpcnR1YWxzIj4gW2xpYi5zdHJpbmdidWYudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtSYXkgTGlzY2huZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTQgQXVnIDIwMDI8L3A+CjxwPgpJbiBTZWN0aW9uIDI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+LCBUYWJsZSA5MCwgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQKdGhlIGZvdXIgY29uZGl0aW9ucyBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBidXQgdGhleSBhcmUgbm90LgpUaGUgZmlyc3QgdHdvIGNhc2VzLCBhcyB3cml0dGVuLCBhcmUgc3ViY2FzZXMgb2YgdGhlIHRoaXJkLjwvcD4KCjxwPgpBcyB3cml0dGVuLCBpdCBpcyB1bmNsZWFyIHdoYXQgc2hvdWxkIGJlIHRoZSByZXN1bHQgaWYgY2FzZXMgMSBhbmQgMgphcmUgYm90aCB0cnVlLCBidXQgY2FzZSAzIGlzIGZhbHNlLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5SZXdyaXRlIHRoZXNlIGNvbmRpdGlvbnMgYXM6PC9wPgo8YmxvY2txdW90ZT4KPHA+CiAgKHdoaWNoICZhbXA7IChpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCkpID09IGlvc19iYXNlOjppbgo8L3A+Cgo8cD4KICAod2hpY2ggJmFtcDsgKGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KSkgPT0gaW9zX2Jhc2U6Om91dAo8L3A+Cgo8cD4KICAod2hpY2ggJmFtcDsgKGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KSkgPT0gCihpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCkKICAgYW5kIHdheSA9PSBlaXRoZXIgaW9zX2Jhc2U6OmJlZyBvciBpb3NfYmFzZTo6ZW5kCjwvcD4KCjxwPk90aGVyd2lzZTwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkl0J3MgY2xlYXIgd2hhdCB3ZSB3YW50ZWQgdG8gc2F5LCB3ZSBqdXN0IGZhaWxlZCB0byBzYXkgaXQuICBUaGlzCiAgZml4ZXMgaXQuPC9wPgo8aHI+CjxhIG5hbWU9IjM3OSI+PGgzPjM3OS4mbmJzcDtub25zZW5zaWNhbCBjdHlwZTo6ZG9fd2lkZW4oKSByZXF1aXJlbWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IFNlcCAyMDAyPC9wPgo8cD4KVGhlIGxhc3Qgc2VudGVuY2UgaW4gMjIuMi4xLjEuMiwgcDExIGJlbG93IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLgo8L3A+CjxwcmU+ICBjaGFyVCBkb193aWRlbiAoY2hhciBjKSBjb25zdDsKCiAgLTExLSBFZmZlY3RzOiBBcHBsaWVzIHRoZSBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uIGZyb20KICAgICAgIGEgY2hhciB2YWx1ZSBvciBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcyB0byB0aGUgY29ycmVzcG9uZGluZwogICAgICAgY2hhclQgdmFsdWUgb3IgdmFsdWVzLiBUaGUgb25seSBjaGFyYWN0ZXJzIGZvciB3aGljaCB1bmlxdWUKICAgICAgIHRyYW5zZm9ybWF0aW9ucyBhcmUgcmVxdWlyZWQgYXJlIHRob3NlIGluIHRoZSBiYXNpYyBzb3VyY2UKICAgICAgIGNoYXJhY3RlciBzZXQgKDIuMikuIEZvciBhbnkgbmFtZWQgY3R5cGUgY2F0ZWdvcnkgd2l0aCBhCiAgICAgICBjdHlwZSZsdDtjaGFyVCZndDsgZmFjZXQgY3R3IGFuZCB2YWxpZCBjdHlwZV9iYXNlOjptYXNrIHZhbHVlCiAgICAgICBNIChpcyhNLCBjKSB8fCAhY3R3LmlzKE0sIGRvX3dpZGVuKGMpKSkgaXMgdHJ1ZS4KPC9wcmU+CjxwPgpTaG91bGRuJ3QgdGhlIGxhc3Qgc2VudGVuY2UgaW5zdGVhZCByZWFkCjwvcD4KPHByZT4gICAgICAgRm9yIGFueSBuYW1lZCBjdHlwZSBjYXRlZ29yeSB3aXRoIGEgY3R5cGUmbHQ7Y2hhciZndDsgZmFjZXQgY3RjCiAgICAgICBhbmQgdmFsaWQgY3R5cGVfYmFzZTo6bWFzayB2YWx1ZSBNCiAgICAgICAoY3RjLmlzKE0sIGMpIHx8ICFpcyhNLCBkb193aWRlbihjKSkpIGlzIHRydWUuCjwvcHJlPgo8cD4KSS5lLiwgaWYgdGhlIG5hcnJvdyBjaGFyYWN0ZXIgYyBpcyBub3QgYSBtZW1iZXIgb2YgYSBjbGFzcyBvZgpjaGFyYWN0ZXJzIHRoZW4gbmVpdGhlciBpcyB0aGUgd2lkZW5lZCBmb3JtIG9mIGMuIChUbyBwYXJhcGhyYXNlCmZvb3Rub3RlIDIyNC4pCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KUmVwbGFjZSB0aGUgbGFzdCBzZW50ZW5jZSBvZiAyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiwgcDExIHdpdGggdGhlCmZvbGxvd2luZyB0ZXh0Ogo8L3A+CjxwcmU+ICAgICAgIEZvciBhbnkgbmFtZWQgY3R5cGUgY2F0ZWdvcnkgd2l0aCBhIGN0eXBlJmx0O2NoYXImZ3Q7IGZhY2V0IGN0YwogICAgICAgYW5kIHZhbGlkIGN0eXBlX2Jhc2U6Om1hc2sgdmFsdWUgTSwKICAgICAgIChjdGMuaXMoTSwgYykgfHwgIWlzKE0sIGRvX3dpZGVuKGMpKSkgaXMgdHJ1ZS4KPC9wcmU+Cgo8cD48aT5bS29uYTogTWlub3IgZWRpdC4gQWRkZWQgYSBjb21tYSBhZnRlciB0aGUgPGk+TTwvaT4gZm9yIGNsYXJpdHkuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGlzIGlzIGp1c3QgYSB0eXBvLCBhbmQgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IGZpeC48L3A+Cjxocj4KPGEgbmFtZT0iMzgwIj48aDM+MzgwLiZuYnNwO3R5cG9zIGluIGNvZGVjdnQgdGFibGVzIDUzIGFuZCA1NDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lIj4gW2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBTZXAgMjAwMjwvcD4KPHA+ClRhYmxlcyA1MyBhbmQgNTQgaW4gMjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+IGFyZSBib3RoIHRpdGxlZCAiY29udmVydApyZXN1bHQgdmFsdWVzLCIgd2hlbiBzdXJlbHkgImRvX2luL2RvX291dCByZXN1bHQgdmFsdWVzIiBtdXN0IGhhdmUKYmVlbiBpbnRlbmRlZCBmb3IgVGFibGUgNTMgYW5kICJkb191bnNoaWZ0IHJlc3VsdCB2YWx1ZXMiIGZvciBUYWJsZQo1NC4KPC9wPgo8cD4KVGFibGUgNTQsIHJvdyAzIHNheXMgdGhhdCB0aGUgbWVhbmluZyBvZiBwYXJ0aWFsIGlzICJtb3JlIGNoYXJhY3RlcnMKbmVlZGVkIHRvIGJlIHN1cHBsaWVkIHRvIGNvbXBsZXRlIHRlcm1pbmF0aW9uLiIgVGhlIGZ1bmN0aW9uIGlzIG5vdApzdXBwbGllZCBhbnkgY2hhcmFjdGVycywgaXQgaXMgZ2l2ZW4gYSBidWZmZXIgd2hpY2ggaXQgZmlsbHMgd2l0aApjaGFyYWN0ZXJzIG9yLCBtb3JlIHByZWNpc2VseSwgZGVzdGluYXRpb24gZWxlbWVudHMgKGkuZS4sIGFuIGVzY2FwZQpzZXF1ZW5jZSkuIFNvIHBhcnRpYWwgbWVhbnMgdGhhdCBzcGFjZSBmb3IgbW9yZSB0aGFuICh0b19saW1pdCAtIHRvKQpkZXN0aW5hdGlvbiBlbGVtZW50cyB3YXMgbmVlZGVkIHRvIHRlcm1pbmF0ZSBhIHNlcXVlbmNlIGdpdmVuIHRoZQp2YWx1ZSBvZiBzdGF0ZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIHRpdGxlIG9mIFRhYmxlIDUzIHRvICJkb19pbi9kb19vdXQgcmVzdWx0IHZhbHVlcyIgYW5kCnRoZSB0aXRsZSBvZiBUYWJsZSA1NCB0byAiZG9fdW5zaGlmdCByZXN1bHQgdmFsdWVzLiIKPC9wPgo8cD4KQ2hhbmdlIHRoZSB0ZXh0IGluIFRhYmxlIDU0LCByb3cgMyAodGhlIDxiPnBhcnRpYWw8L2I+IHJvdyksIHVuZGVyIHRoZQpoZWFkaW5nIE1lYW5pbmcsIHRvICJzcGFjZSBmb3IgbW9yZSB0aGFuICh0b19saW1pdCAtIHRvKSBkZXN0aW5hdGlvbgplbGVtZW50cyB3YXMgbmVlZGVkIHRvIHRlcm1pbmF0ZSBhIHNlcXVlbmNlIGdpdmVuIHRoZSB2YWx1ZSBvZiBzdGF0ZS4iCjwvcD4KPGhyPgo8YSBuYW1lPSIzODEiPjxoMz4zODEuJm5ic3A7ZGV0ZWN0aW9uIG9mIGludmFsaWQgbWJzdGF0ZV90IGluIGNvZGVjdnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSI+IFtsaWIubG9jYWxlLmNvZGVjdnQuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgU2VwIDIwMDI8L3A+CjxwPgpBbGwgYnV0IG9uZSBjb2RlY3Z0IG1lbWJlciBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgc3RhdGVfdHlwZSBhcmd1bWVudApsaXN0IGFzIG9uZSBvZiB0aGVpciBwcmVjb25kaXRpb25zIHRoYXQgdGhlIHN0YXRlX3R5cGUgYXJndW1lbnQgaGF2ZQphIHZhbGlkIHZhbHVlLiBIb3dldmVyLCBhY2NvcmRpbmcgdG8gMjIuMi4xLjUuMiwgcDYsCmNvZGVjdnQ6OmRvX3Vuc2hpZnQoKSBpcyB0aGUgb25seSBjb2RlY3Z0IG1lbWJlciB0aGF0IGlzIHN1cHBvc2VkIHRvCnJldHVybiBlcnJvciBpZiB0aGUgc3RhdGVfdHlwZSBvYmplY3QgaXMgaW52YWxpZC4KPC9wPgoKPHA+Ckl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIHRyZWF0bWVudCBvZiBzdGF0ZV90eXBlIGJ5IGFsbCBjb2RlY3Z0IG1lbWJlcgpmdW5jdGlvbnMgc2hvdWxkIGJlIHRoZSBzYW1lIGFuZCB0aGUgY3VycmVudCByZXF1aXJlbWVudHMgc2hvdWxkIGJlCmNoYW5nZWQuIFNpbmNlIHRoZSBkZXRlY3Rpb24gb2YgaW52YWxpZCBzdGF0ZV90eXBlIHZhbHVlcyBtYXkgYmUKZGlmZmljdWx0IGluIGdlbmVyYWwgb3IgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSBpbiBzb21lIHNwZWNpZmljCmNhc2VzLCBJIHByb3Bvc2UgdGhlIGZvbGxvd2luZzoKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgYSBuZXcgcGFyYWdyYXBoIGJlZm9yZSAyMi4yLjEuNS4yLCBwNSwgYW5kIGFmdGVyIHRoZSBmdW5jdGlvbgpkZWNsYXJhdGlvbiBiZWxvdwo8L3A+CjxwcmU+ICAgIHJlc3VsdCBkb191bnNoaWZ0KHN0YXRlVCZhbXA7IHN0YXRlLAogICAgZXh0ZXJuVCogdG8sIGV4dGVyblQqIHRvX2xpbWl0LCBleHRlcm5UKiZhbXA7IHRvX25leHQpIGNvbnN0Owo8L3ByZT4KPHA+CmFzIGZvbGxvd3M6CjwvcD4KPHByZT4gICAgUmVxdWlyZXM6ICh0byAmbHQ7PSB0b19lbmQpIHdlbGwgZGVmaW5lZCBhbmQgdHJ1ZTsgc3RhdGUgaW5pdGlhbGl6ZWQsCiAgICBpZiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2VxdWVuY2UsIG9yIGVsc2UgZXF1YWwgdG8gdGhlIHJlc3VsdCBvZgogICAgY29udmVydGluZyB0aGUgcHJlY2VkaW5nIGNoYXJhY3RlcnMgaW4gdGhlIHNlcXVlbmNlLgo8L3ByZT4KPHA+CmFuZCBjaGFuZ2UgdGhlIHRleHQgaW4gVGFibGUgNTQsIHJvdyA0LCB0aGUgPGI+ZXJyb3I8L2I+IHJvdywgdW5kZXIKdGhlIGhlYWRpbmcgTWVhbmluZywgZnJvbQo8L3A+CjxwcmU+ICAgIHN0YXRlIGhhcyBpbnZhbGlkIHZhbHVlCjwvcHJlPgo8cD4KdG8KPC9wPgo8cHJlPiAgICBhbiB1bnNwZWNpZmllZCBlcnJvciBoYXMgb2NjdXJyZWQKPC9wcmU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgaW50ZW50IGlzIHRoYXQgaW1wbGVtZW50YXRpb25zIHNob3VsZCBub3QgYmUgcmVxdWlyZWQgdG8gZGV0ZWN0CmludmFsaWQgc3RhdGUgdmFsdWVzOyBzdWNoIGEgcmVxdWlyZW1lbnQgYXBwZWFycyBub3doZXJlIGVsc2UuICBBbgppbnZhbGlkIHN0YXRlIHZhbHVlIGlzIGEgcHJlY29uZGl0aW9uIHZpb2xhdGlvbiwgPGk+aS5lLjwvaT4gdW5kZWZpbmVkCmJlaGF2aW9yLiAgSW1wbGVtZW50YXRpb25zIHRoYXQgZG8gY2hvb3NlIHRvIGRldGVjdCBpbnZhbGlkIHN0YXRlCnZhbHVlcywgb3IgdGhhdCBjaG9vc2UgdG8gZGV0ZWN0IGFueSBvdGhlciBraW5kIG9mIGVycm9yLCBtYXkgcmV0dXJuCjxiPmVycm9yPC9iPiBhcyBhbiBpbmRpY2F0aW9uLjwvcD4KPGhyPgo8YSBuYW1lPSIzODMiPjxoMz4zODMuJm5ic3A7QmlkaXJlY3Rpb25hbCBpdGVyYXRvciBhc3NlcnRpb24gdHlwbzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuYmlkaXJlY3Rpb25hbC5pdGVyYXRvcnMiPiBbbGliLmJpZGlyZWN0aW9uYWwuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7eXNhcGlyIChzdWJtaXR0ZWQgdmlhIGNvbXAuc3RkLmMrKykmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgT2N0IDIwMDI8L3A+CjxwPgpGb2xsb3dpbmcgYSBkaXNjdXNzaW9uIG9uIHRoZSBib29zdCBsaXN0IHJlZ2FyZGluZyBlbmQgaXRlcmF0b3JzIGFuZAp0aGUgcG9zc2liaWxpdHkgb2YgcGVyZm9ybWluZyBvcGVyYXRvci0tKCkgb24gdGhlbSwgaXQgc2VlbXMgdG8gbWUKdGhhdCB0aGVyZSBpcyBhIHR5cG8gaW4gdGhlIHN0YW5kYXJkLiAgVGhpcyB0eXBvIGhhcyBub3RoaW5nIHRvIGRvCndpdGggdGhhdCBkaXNjdXNzaW9uLgo8L3A+Cgo8cD4KSSBoYXZlIGNoZWNrZWQgdGhpcyBuZXdzZ3JvdXAsIGFzIHdlbGwgYXMgYXR0ZW1wdGVkIGEgc2VhcmNoIG9mIHRoZQpBY3RpdmUvRGVmZWN0L0Nsb3NlZCBJc3N1ZXMgTGlzdCBvbiB0aGUgc2l0ZSBmb3IgdGhlIHdvcmRzICJzIGlzCmRlcmVmZXIiIHNvIEkgYmVsaWV2ZSB0aGlzIGhhcyBub3QgYmVlbiBwcm9wb3NlZCBiZWZvcmUuICBGdXJ0aGVybW9yZSwKdGhlICJMaXN0cyBieSBJbmRleCIgbWVudGlvbnMgb25seSBEUiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyOTkiPjI5OTwvYT4gb24gc2VjdGlvbgoyNC4xLjQsIGFuZCBEUiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyOTkiPjI5OTwvYT4gaXMgbm90IHJlbGF0ZWQgdG8gdGhpcyBpc3N1ZS4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCBtYWtlcyB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBvbiBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9ycywKaW4gc2VjdGlvbiAyNC4xLjQgW2xpYi5iaWRpcmVjdGlvbmFsLml0ZXJhdG9yc10sIFRhYmxlIDc1Ogo8L3A+Cgo8cHJlPiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25hbCAgYXNzZXJ0aW9uL25vdGUKZXhwcmVzc2lvbiAgcmV0dXJuIHR5cGUgICBzZW1hbnRpY3MgICAgcHJlL3Bvc3QtY29uZGl0aW9uCgotLXIgICAgICAgICAgWCZhbXA7ICAgICAgICAgICAgICAgICAgICAgICAgcHJlOiB0aGVyZSBleGlzdHMgcyBzdWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgciA9PSArK3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3Q6IHMgaXMgZGVyZWZlcmVuY2VhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSgrK3IpID09IHIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tciA9PSAtLXMgaW1wbGllcyByID09IHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7ciA9PSAmYW1wOy0tci4KPC9wcmU+Cgo8cD4KKFNlZSA8YSBocmVmPSJodHRwOi8vYXNwbi5hY3RpdmVzdGF0ZS5jb20vQVNQTi9NYWlsL01lc3NhZ2UvYm9vc3QvMTM5NTc2MyI+aHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vTWFpbC9NZXNzYWdlL2Jvb3N0LzEzOTU3NjM8L2E+LikKPC9wPgoKPHA+CkluIHBhcnRpY3VsYXIsICJzIGlzIGRlcmVmZXJlbmNlYWJsZSIgc2VlbXMgdG8gYmUgaW4gZXJyb3IuICBJdCBzZWVtcwp0aGF0IHRoZSBpbnRlbnRpb24gd2FzIHRvIHNheSAiciBpcyBkZXJlZmVyZW5jZWFibGUiLgo8L3A+Cgo8cD4KSWYgaXQgd2VyZSB0byBzYXkgInIgaXMgZGVyZWZlcmVuY2VhYmxlIiBpdCB3b3VsZAptYWtlIHBlcmZlY3Qgc2Vuc2UuICBTaW5jZSBzIG11c3QgYmUgZGVyZWZlcmVuY2VhYmxlIHByaW9yIHRvCm9wZXJhdG9yKyssIHRoZW4gdGhlIG5hdHVyYWwgcmVzdWx0IG9mIG9wZXJhdG9yLS0gKHRvIHVuZG8gb3BlcmF0b3IrKykKd291bGQgYmUgdG8gbWFrZSByIGRlcmVmZXJlbmNlYWJsZS4gIEZ1cnRoZXJtb3JlLCB3aXRob3V0IG90aGVyCmFzc2VydGlvbnMsIGFuZCBiYXNpbmcgb25seSBvbiBwcmVjb25kaXRpb24gYW5kIHBvc3Rjb25kaXRpb25zLCB3ZQpjb3VsZCBub3Qgb3RoZXJ3aXNlIGtub3cgdGhpcy4gIFNvIGl0IGlzIGFsc28gaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZ3VhcmFudGVlIHRvICJwb3N0Y29uZGl0aW9uOiByIGlzIGRlcmVmZXJlbmNlYWJsZS4iCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZpeGVzIGFuIG9idmlvdXMgdHlwbzwvcD4KPGhyPgo8YSBuYW1lPSIzODQiPjxoMz4zODQuJm5ic3A7ZXF1YWxfcmFuZ2UgaGFzIHVuaW1wbGVtZW50YWJsZSBydW50aW1lIGNvbXBsZXhpdHk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4zLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmVxdWFsLnJhbmdlIj4gW2xpYi5lcXVhbC5yYW5nZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hhbnMgQm9zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE4IE9jdCAyMDAyPC9wPgo8cD4KU2VjdGlvbiAyNS4zLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmVxdWFsLnJhbmdlIj4gW2xpYi5lcXVhbC5yYW5nZV08L2E+CnN0YXRlcyB0aGF0IGF0IG1vc3QgMiAqIGxvZyhsYXN0IC0gZmlyc3QpICsgMQpjb21wYXJpc29ucyBhcmUgYWxsb3dlZCBmb3IgZXF1YWxfcmFuZ2UuCjwvcD4KCjxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgZXF1YWxfcmFuZ2Ugd2l0aCB0aGVzZSBjb25zdHJhaW50cy48L3A+Cgo8cD5JbiBhIHJhbmdlIG9mIG9uZSBlbGVtZW50IGFzIGluOjwvcD4KPHByZT4gICAgaW50IHggPSAxOwogICAgZXF1YWxfcmFuZ2UoJmFtcDt4LCAmYW1wO3ggKyAxLCAxKQo8L3ByZT4KCjxwPml0IGlzIGVhc3kgdG8gc2VlIHRoYXQgYXQgbGVhc3QgMiBjb21wYXJpc29uIG9wZXJhdGlvbnMgYXJlIG5lZWRlZC48L3A+Cgo8cD5Gb3IgdGhpcyBjYXNlIGF0IG1vc3QgMiAqIGxvZygxKSArIDEgPSAxIGNvbXBhcmlzb24gaXMgYWxsb3dlZC48L3A+Cgo8cD5JIGhhdmUgY2hlY2tlZCBhIGZldyBsaWJyYXJpZXMgYW5kIHRoZXkgYWxsIHVzZSB0aGUgc2FtZSAobm9uY29uZm9ybWluZykKYWxnb3JpdGhtIGZvciBlcXVhbF9yYW5nZSB0aGF0IGhhcyBhIGNvbXBsZXhpdHkgb2Y8L3A+CjxwcmU+ICAgICAyKiBsb2coZGlzdGFuY2UoZmlyc3QsIGxhc3QpKSArIDIuCjwvcHJlPgo8cD5JIGd1ZXNzIHRoaXMgaXMgdGhlIGFsZ29yaXRobSB0aGF0IHRoZSBzdGFuZGFyZCBhc3N1bWVzIGZvciBlcXVhbF9yYW5nZS48L3A+Cgo8cD4KSXQgaXMgZWFzeSB0byBzZWUgdGhhdCAyICogbG9nKGRpc3RhbmNlKSArIDIgY29tcGFyaXNvbnMgYXJlIGVub3VnaApzaW5jZSBlcXVhbCByYW5nZSBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aCBsb3dlcl9ib3VuZCBhbmQgdXBwZXJfYm91bmQKKGJvdGggbG9nKGRpc3RhbmNlKSArIDEpLgo8L3A+Cgo8cD4KSSB0aGluayBpdCBpcyBiZXR0ZXIgdG8gcmVxdWlyZSBzb21ldGhpbmcgbGlrZSAybG9nKGRpc3RhbmNlKSArIE8oMSkgIChvcgpldmVuIGxvZ2FyaXRobWljIGFzIG11bHRpc2V0OjplcXVhbF9yYW5nZSkuClRoZW4gYW4gaW1wbGVtZW50YXRpb24gaGFzIG1vcmUgcm9vbSB0byBvcHRpbWl6ZSBmb3IgY2VydGFpbiBjYXNlcyAoZS5nLgpoYXZlIGxvZyhkaXN0YW5jZSkgY2hhcmFjdGVyaXN0aWNzIHdoZW4gYXQgbW9zdCBtYXRjaCBpcyBmb3VuZCBpbiB0aGUgcmFuZ2UKYnV0IDJsb2coZGlzdGFuY2UpICsgNCBmb3IgdGhlIHdvcnN0IGNhc2UpLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIubG93ZXIuYm91bmQiPiBbbGliLmxvd2VyLmJvdW5kXTwvYT4vNCwgY2hhbmdlIDx0dD5sb2cobGFzdCAtIGZpcnN0KSArIDE8L3R0Pgp0byA8dHQ+bG9nPHN1Yj4yPC9zdWI+KGxhc3QgLSBmaXJzdCkgKyA8aT5PPC9pPigxKTwvdHQ+LjwvcD4KCjxwPkluIDI1LjMuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIudXBwZXIuYm91bmQiPiBbbGliLnVwcGVyLmJvdW5kXTwvYT4vNCwgY2hhbmdlIDx0dD5sb2cobGFzdCAtIGZpcnN0KSArIDE8L3R0Pgp0byA8dHQ+bG9nPHN1Yj4yPC9zdWI+KGxhc3QgLSBmaXJzdCkgKyA8aT5PPC9pPigxKTwvdHQ+LjwvcD4KCjxwPkluIDI1LjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuZXF1YWwucmFuZ2UiPiBbbGliLmVxdWFsLnJhbmdlXTwvYT4vNCwgY2hhbmdlIDx0dD4yKmxvZyhsYXN0IC0gZmlyc3QpICsgMTwvdHQ+CnRvIDx0dD4yKmxvZzxzdWI+Mjwvc3ViPihsYXN0IC0gZmlyc3QpICsgPGk+TzwvaT4oMSk8L3R0Pi48L3A+Cgo8cD48aT5bTWF0dCBwcm92aWRlZCB3b3JkaW5nXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQganVzdCBzYXlpbmcgPGk+TzwvaT4obG9nIG4pIGZvciBhbGwgdGhyZWUsIGJ1dArKIGRlY2lkZWQgdGhhdCB0aHJldyBhd2F5IHRvbyBtdWNoIHZhbHVhYmxlIGluZm9ybWF0aW9uLsogVGhlIGZhY3QKyiB0aGF0IGxvd2VyX2JvdW5kIGlzIHR3aWNlIGFzIGZhc3QgYXMgZXF1YWxfcmFuZ2UgaXMgaW1wb3J0YW50LgrKIEhvd2V2ZXIsIGl0J3MgYmV0dGVyIHRvIGFsbG93IGFuIGFyYml0cmFyeSBhZGRpdGl2ZSBjb25zdGFudCB0aGFuIHRvCsogc3BlY2lmeSBhbiBleGFjdCBjb3VudC7KIEFuIGV4YWN0IGNvdW50IHdvdWxkIGhhdmUgdG8KyiBpbnZvbHZlIDx0dD5mbG9vcjwvdHQ+IG9yIDx0dD5jZWlsPC90dD4uyiBJdCB3b3VsZCBiZSB0b28gZWFzeSB0bwrKIGdldCB0aGlzIHdyb25nLCBhbmQgZG9uJ3QgcHJvdmlkZSBhbnkgc3Vic3RhbnRpYWwgdmFsdWUgZm9yIHVzZXJzLjwvcD4KPGhyPgo8YSBuYW1lPSIzODYiPjxoMz4zODYuJm5ic3A7UmV2ZXJzZSBpdGVyYXRvcidzIG9wZXJhdG9yW10gaGFzIGltcG9zc2libGUgcmV0dXJuIHR5cGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC40LjEuMy4xMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmV2ZXJzZS5pdGVyLm9wLT0iPiBbbGliLnJldmVyc2UuaXRlci5vcC09XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIE9jdCAyMDAyPC9wPgo8cD5JbiAyNC40LjEuMy4xMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmV2ZXJzZS5pdGVyLm9wLT0iPiBbbGliLnJldmVyc2UuaXRlci5vcC09XTwvYT4sIDx0dD5yZXZlcnNlX2l0ZXJhdG9yJmx0OyZndDs6Om9wZXJhdG9yW108L3R0PiAKaXMgc3BlY2lmaWVkIGFzIGhhdmluZyBhIHJldHVybiB0eXBlIG9mIDx0dD5yZXZlcnNlX2l0ZXJhdG9yOjpyZWZlcmVuY2U8L3R0PiwKd2hpY2ggaXMgdGhlIHNhbWUgYXMgPHR0Pml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnJlZmVyZW5jZTwvdHQ+LgooV2hlcmUgPHR0Pkl0ZXJhdG9yPC90dD4gaXMgdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgdHlwZS4pPC9wPgoKPHA+VGhlIHRyb3VibGUgaXMgdGhhdCA8dHQ+SXRlcmF0b3I8L3R0PidzIG93biBvcGVyYXRvcltdIGRvZXNuJ3QKICBuZWNlc3NhcmlseSBoYXZlIGEgcmV0dXJuIHR5cGUKICBvZiA8dHQ+aXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6cmVmZXJlbmNlPC90dD4uICAgSXRzCiAgcmV0dXJuIHR5cGUgaXMgbWVyZWx5IHJlcXVpcmVkIHRvIGJlIGNvbnZlcnRpYmxlCiAgdG8gPHR0Pkl0ZXJhdG9yPC90dD4ncyB2YWx1ZSB0eXBlLiAgVGhlIHJldHVybiB0eXBlIHNwZWNpZmllZCBmb3IKICByZXZlcnNlX2l0ZXJhdG9yJ3Mgb3BlcmF0b3JbXSB3b3VsZCB0aHVzIGFwcGVhciB0byBiZSBpbXBvc3NpYmxlLjwvcD4KCjxwPldpdGggdGhlIHJlc29sdXRpb24gb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+LCB0aGUgdHlwZSBvZgogIDx0dD5hW25dPC90dD4gd2lsbCBjb250aW51ZSB0byBiZSByZXF1aXJlZCAoZm9yIHJhbmRvbSBhY2Nlc3MKICBpdGVyYXRvcnMpIHRvIGJlIGNvbnZlcnRpYmxlIHRvIHRoZSB2YWx1ZSB0eXBlLCBhbmQgYWxzbyA8dHQ+YVtuXSA9CiAgdDwvdHQ+IHdpbGwgYmUgYSB2YWxpZCBleHByZXNzaW9uLiAgSW1wbGVtZW50YXRpb25zIG9mCiAgPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiB3aWxsIGxpa2VseSBuZWVkIHRvIHJldHVybiBhIHByb3h5IGZyb20KICA8dHQ+b3BlcmF0b3JbXTwvdHQ+IHRvIG1lZXQgdGhlc2UgcmVxdWlyZW1lbnRzLiBBcyBtZW50aW9uZWQgaW4gdGhlCiAgY29tbWVudCBmcm9tIERhdmUgQWJyYWhhbXMsIHRoZSBzaW1wbGVzdCB3YXkgdG8gc3BlY2lmeSB0aGF0CiAgPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiBtZWV0IHRoaXMgcmVxdWlyZW1lbnQgdG8ganVzdCBtYW5kYXRlCiAgaXQgYW5kIGxlYXZlIHRoZSByZXR1cm4gdHlwZSBvZiA8dHQ+b3BlcmF0b3JbXTwvdHQ+IHVuc3BlY2lmaWVkLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkluIDI0LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5yZXZlcnNlLml0ZXIucmVxdWlyZW1lbnRzXTwvYT4gY2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdDsKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPjxiPjxpPnVuc3BlY2lmaWVkPC9pPjwvYj4gb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Q7IC8vIHNlZSA8Zm9udCBjb2xvcj0icmVkIj5saWIucmFuZG9tLmFjY2Vzcy5pdGVyYXRvcnM8L2ZvbnQ+CjwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKCgo8cD48aT5bCkNvbW1lbnRzIGZyb20gRGF2ZSBBYnJhaGFtczogSU1PIHdlIHNob3VsZCByZXNvbHZlIDM4NiBieSBqdXN0IHNheWluZwogICAgdGhhdCB0aGUgcmV0dXJuIHR5cGUgb2YgcmV2ZXJzZV9pdGVyYXRvcidzIG9wZXJhdG9yW10gaXMKICAgIHVuc3BlY2lmaWVkLCBhbGxvd2luZyB0aGUgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciByZXF1aXJlbWVudHMgdG8KICAgIGltcG9zZSBhbiBhcHByb3ByaWF0ZSByZXR1cm4gdHlwZS4gIElmIHdlIGFjY2VwdCAyOTkncyBwcm9wb3NlZAogICAgcmVzb2x1dGlvbiAoYW5kIEkgdGhpbmsgd2Ugc2hvdWxkKSwgdGhlIHJldHVybiB0eXBlIHdpbGwgYmUKICAgIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgd2hpY2ggaXMgYWJvdXQgYXMgZ29vZCBhcyB3ZSBjYW4gZG8uCl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjM4OSI+PGgzPjM4OS4mbmJzcDtDb25zdCBvdmVybG9hZCBvZiB2YWxhcnJheTo6b3BlcmF0b3JbXSByZXR1cm5zIGJ5IHZhbHVlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgiPiBbbGliLmNvbXBsZXhdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHYWJyaWVsIERvcyBSZWlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzggTm92IDIwMDI8L3A+CjxwPkNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbTo8L3A+CjxwcmU+ICAgICNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKICAgICNpbmNsdWRlICZsdDtvc3RyZWFtJmd0OwogICAgI2luY2x1ZGUgJmx0O3ZlY3RvciZndDsKICAgICNpbmNsdWRlICZsdDt2YWxhcnJheSZndDsKICAgICNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7CiAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBBcnJheSZndDsKICAgIHZvaWQgcHJpbnQoY29uc3QgQXJyYXkmYW1wOyBhKQogICAgewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OnZhbHVlX3R5cGUgVDsKICAgIGNvcHkoJmFtcDthWzBdLCAmYW1wO2FbMF0gKyBhLnNpemUoKSwKICAgIG9zdHJlYW1faXRlcmF0b3ImbHQ7VCZndDsoc3RkOjpjb3V0LCAiICIpKTsKICAgIH0KICAgIHRlbXBsYXRlJmx0O3R5cGVuYW1lIFQsIHVuc2lnbmVkIE4mZ3Q7CiAgICB1bnNpZ25lZCBzaXplKFQoJmFtcDspW05dKSB7IHJldHVybiBOOyB9CiAgICBpbnQgbWFpbigpCiAgICB7CiAgICBkb3VibGUgYXJyYXlbXSA9IHsgMC44OSwgOS4zLCA3LCA2LjIzIH07CiAgICBzdGQ6OnZlY3RvciZsdDtkb3VibGUmZ3Q7IHYoYXJyYXksIGFycmF5ICsgc2l6ZShhcnJheSkpOwogICAgc3RkOjp2YWxhcnJheSZsdDtkb3VibGUmZ3Q7IHcoYXJyYXksIHNpemUoYXJyYXkpKTsKICAgIHByaW50KHYpOyAvLyAjMQogICAgc3RkOjpjb3V0ICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKICAgIHByaW50KHcpOyAvLyAjMgogICAgc3RkOjpjb3V0ICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKICAgIH0KPC9wcmU+Cgo8cD5XaGlsZSB0aGUgY2FsbCBudW1iZXJlZCAjMSBzdWNjZWVkcywgdGhlIGNhbGwgbnVtYmVyZWQgIzIgZmFpbHMKYmVjYXVzZSB0aGUgY29uc3QgdmVyc2lvbiBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9uCnZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcltdKHNpemVfdCkgcmV0dXJucyBhIHZhbHVlIGluc3RlYWQgb2YgYQpjb25zdC1yZWZlcmVuY2UuIFRoYXQgc2VlbXMgdG8gYmUgc28gZm9yIG5vIGFwcGFyZW50IHJlYXNvbiwgbm8KYmVuZWZpdC4gTm90IG9ubHkgZG9lcyB0aGF0IGRlZmVhdHMgdXNlcnMnIGV4cGVjdGF0aW9uIGJ1dCBpdCBhbHNvCmRvZXMgaGluZGVyIGV4aXN0aW5nIHNvZnR3YXJlICh3cml0dGVuIGVpdGhlciBpbiBDIG9yIEZvcnRyYW4pCmludGVncmF0aW9uIHdpdGhpbiBwcm9ncmFtcyB3cml0dGVuIGluIEMrKy4gIFRoZXJlIGlzIG5vIHJlYXNvbiB3aHkKc3Vic2NyaXB0aW5nIGFuIGV4cHJlc3Npb24gb2YgdHlwZSB2YWxhcnJheSZsdDtUJmd0OyB0aGF0IGlzIGNvbnN0LXF1YWxpZmllZApzaG91bGQgbm90IHJldHVybiBhIGNvbnN0IFQmYW1wOy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gdGhlIGNsYXNzIHN5bm9wc2lzIGluIDI2LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4Ij4gW2xpYi5jb21wbGV4XTwvYT4sIGFuZCBpbgo8Zm9udCBjb2xvcj0icmVkIj4yNi4zLjIuMzwvZm9udD4ganVzdCBhYm92ZSBwYXJhZ3JhcGggMSwgY2hhbmdlPC9wPgo8cHJlPiAgVCBvcGVyYXRvcltdKHNpemVfdCBjb25zdCk7CjwvcHJlPgo8cD50bzwvcD4KPHByZT4gIGNvbnN0IFQmYW1wOyBvcGVyYXRvcltdKHNpemVfdCBjb25zdCk7CjwvcHJlPgoKPHA+PGk+W0tvbmE6IGZpeGVkIGEgbWlub3IgdHlwbzogcHV0IHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lCiAgd2VocmUgaXQgYmVsb25ncy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5SZXR1cm4gYnkgdmFsdWUgc2VlbXMgdG8gc2VydmUgbm8gcHVycG9zZS4gIFZhbGFyYXkgd2FzIGV4cGxpY2l0bHkKZGVzaWduZWQgdG8gaGF2ZSBhIHNwZWNpZmllZCBsYXlvdXQgc28gdGhhdCBpdCBjb3VsZCBlYXNpbHkgYmUKaW50ZWdyYXRlZCB3aXRoIGxpYnJhcmllcyBpbiBvdGhlciBsYW5ndWFnZXMsIGFuZCByZXR1cm4gYnkgdmFsdWUKZGVmZWF0cyB0aGF0IHB1cnBvc2UuICBJdCBpcyBiZWxpZXZlZCB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgaGF2ZSBubwppbXBhY3Qgb24gYWxsb3dhYmxlIG9wdGltaXphdGlvbnMuPC9wPgo8aHI+CjxhIG5hbWU9IjM5MSI+PGgzPjM5MS4mbmJzcDtub24tbWVtYmVyIGZ1bmN0aW9ucyBzcGVjaWZpZWQgYXMgY29uc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmNvbnZlcnNpb25zIj4gW2xpYi5jb252ZXJzaW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0phbWVzIEthbnplJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEwIERlYyAyMDAyPC9wPgo8cD4KVGhlIHNwZWNpZmljYXRpb25zIG9mIHRvdXBwZXIgYW5kIHRvbG93ZXIgYm90aCBzcGVjaWZ5IHRoZSBmdW5jdGlvbnMgYXMKY29uc3QsIGFsdGhvdWdodCB0aGV5IGFyZSBub3QgbWVtYmVyIGZ1bmN0aW9ucywgYW5kIGFyZSBub3Qgc3BlY2lmaWVkIGFzCmNvbnN0IGluIHRoZSBoZWFkZXIgZmlsZSBzeW5vcHNpcyBpbiBzZWN0aW9uIDIyLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGVzIj4gW2xpYi5sb2NhbGVzXTwvYT4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmNvbnZlcnNpb25zIj4gW2xpYi5jb252ZXJzaW9uc108L2E+LCByZW1vdmUgPHR0PmNvbnN0PC90dD4gZnJvbSB0aGUgZnVuY3Rpb24KICBkZWNsYXJhdGlvbnMgb2Ygc3RkOjp0b3VwcGVyIGFuZCBzdGQ6OnRvbG93ZXI8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG88L3A+Cjxocj4KPGEgbmFtZT0iMzk1Ij48aDM+Mzk1LiZuYnNwO2luY29uc2lzdGVuY2llcyBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgcmFuZCgpIGFuZCByYW5kb21fc2h1ZmZsZSgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5udW1hcnJheSI+IFtsaWIubnVtYXJyYXldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKYW1lcyBLYW56ZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEphbiAyMDAzPC9wPgo8cD4KSW4gMjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5udW1hcnJheSI+IFtsaWIubnVtYXJyYXldPC9hPiwgdGhlIEMrKyBzdGFuZGFyZCByZWZlcnMgdG8gdGhlIEMgc3RhbmRhcmQgZm9yIHRoZQpkZWZpbml0aW9uIG9mIHJhbmQoKTsgaW4gdGhlIEMgc3RhbmRhcmQsIGl0IGlzIHdyaXR0ZW4gdGhhdCAiVGhlCmltcGxlbWVudGF0aW9uIHNoYWxsIGJlaGF2ZSBhcyBpZiBubyBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzIHRoZSByYW5kCmZ1bmN0aW9uLiIKPC9wPgoKPHA+CkluIDI1LjIuMTEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmFuZG9tLnNodWZmbGUiPiBbbGliLmFsZy5yYW5kb20uc2h1ZmZsZV08L2E+LCB0aGVyZSBpcyBubyBzcGVjaWZpY2F0aW9uIGFzIHRvCmhvdyB0aGUgdHdvIHBhcmFtZXRlciB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBnZW5lcmF0ZXMgaXRzIHJhbmRvbQp2YWx1ZS4gIEkgYmVsaWV2ZSB0aGF0IGFsbCBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBpbiBmYWN0IGNhbGwgcmFuZCgpCihpbiBjb250cmFkaWN0aW9uIHdpdGggdGhlIHJlcXVpcmVtZW50IGF2b3ZlKTsgaWYgYW4gaW1wbGVtZW50YXRpb24gZG9lcwpub3QgY2FsbCByYW5kKCksIHRoZXJlIGlzIHRoZSBxdWVzdGlvbiBvZiBob3cgd2hhdGV2ZXIgcmFuZG9tIGdlbmVyYXRvcgppdCBkb2VzIHVzZSBpcyBzZWVkZWQuICBTb21ldGhpbmcgaXMgbWlzc2luZy4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gW2xpYi5jLm1hdGhdLCBhZGQgYSBwYXJhZ3JhcGggc3BlY2lmeWluZyB0aGF0IHRoZSBDIGRlZmluaXRpb24gb2YKcmFuZCBzaGFsIGJlIG1vZGlmaWVkIHRvIHNheSB0aGF0ICJVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlCmltcGxlbWVudGF0aW9uIHNoYWxsIGJlaGF2ZSBhcyBpZiBubyBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzIHRoZSByYW5kCmZ1bmN0aW9uLiIKPC9wPgoKPHA+CkluIFtsaWIuYWxnLnJhbmRvbS5zaHVmZmxlXSwgYWRkIGEgc2VudGVuY2UgdG8gdGhlIGVmZmVjdCB0aGF0ICJJbgp0aGUgdHdvIGFyZ3VtZW50IGZvcm0gb2YgdGhlIGZ1bmN0aW9uLCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugb2YKcmFuZG9tIG51bWJlcnMgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gW05vdGU6IGluIHBhcnRpY3VsYXIsIGFuCmltcGxlbWVudGF0aW9uIGlzIHBlcm1pdHRlZCB0byB1c2UgPHR0PnJhbmQ8L3R0Pi5dCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHByb3Bvc2VkIHJlcXVpcmluZyB0aGUKICB0d28tYXJndW1lbnQgZnJvbSBvZiA8dHQ+cmFuZG9tX3NodWZmbGU8L3R0PiB0bwogIHVzZSA8dHQ+cmFuZDwvdHQ+LiBXZSBkb24ndCB3YW50IHRvIGRvIHRoYXQsIGJlY2F1c2Ugc29tZSBleGlzdGluZwogIGltcGxlbWVudGF0aW9ucyBhbHJlYWR5IHVzZSBzb21ldGhpbmcgZWxzZTogZ2NjCiAgdXNlcyA8dHQ+bHJhbmQ0ODwvdHQ+LCBmb3IgZXhhbXBsZS4gIFVzaW5nIDx0dD5yYW5kPC90dD4gcHJlc2VudHMgYQogIHByb2JsZW0gaWYgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UgaXMgZ3JlYXRlciB0aGFuCiAgUkFORF9NQVguPC9wPiAKPGhyPgo8YSBuYW1lPSI0MDAiPjxoMz40MDAuJm5ic3A7cmVkdW5kYW50IHR5cGUgY2FzdCBpbiBsaWIuYWxsb2NhdG9yLm1lbWJlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFya3VzIE1hdWhhcnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgRmViIDIwMDM8L3A+CjxwPgoyMC42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4gYWxsb2NhdG9yIG1lbWJlcnMsIGNvbnRhaW5zCnRoZSBmb2xsb3dpbmcgMyBsaW5lczoKPC9wPgoKPHByZT4gIDEyIFJldHVybnM6IG5ldygodm9pZCAqKSBwKSBUKCB2YWwpCiAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgcCk7CiAgMTMgUmV0dXJuczogKChUKikgcCktJmd0O35UKCkKPC9wcmU+Cgo8cD4KVGhlIHR5cGUgY2FzdCAiKFQqKSBwIiBpbiB0aGUgbGFzdCBsaW5lIGlzIHJlZHVuZGFudCBjYXVzZQp3ZSBrbm93IHRoYXQgc3RkOjphbGxvY2F0b3ImbHQ7VCZndDs6OnBvaW50ZXIgaXMgYSB0eXBlZGVmIGZvciBUKi4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpSZXBsYWNlICIoKFQqKSBwKSIgd2l0aCAicCIuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkp1c3QgYSB0eXBvLCB0aGlzIGlzIHJlYWxseSBlZGl0b3JpYWwuPC9wPgo8aHI+CjxhIG5hbWU9IjQwMiI+PGgzPjQwMi4mbmJzcDt3cm9uZyBuZXcgZXhwcmVzc2lvbiBpbiBbc29tZV9dYWxsb2NhdG9yOjpjb25zdHJ1Y3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmRlZmF1bHQuY29uLnJlcSI+IFtsaWIuZGVmYXVsdC5jb24ucmVxXTwvYT4sIDIwLjYuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hbGxvY2F0b3IubWVtYmVycyI+IFtsaWIuYWxsb2NhdG9yLm1lbWJlcnNdPC9hPiwgJm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcmt1cyBNYXVoYXJ0Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IEZlYiAyMDAzPC9wPgo8cD4KVGhpcyBhcHBsaWVzIHRvIHRoZSBuZXcgZXhwcmVzc2lvbiB0aGF0IGlzIGNvbnRhaW5lZCBpbiBib3RoIHBhcjEyIG9mCjIwLjYuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hbGxvY2F0b3IubWVtYmVycyI+IFtsaWIuYWxsb2NhdG9yLm1lbWJlcnNdPC9hPiBhbmQgaW4gcGFyMiAodGFibGUgMzIpIG9mIDIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZGVmYXVsdC5jb24ucmVxIj4gW2xpYi5kZWZhdWx0LmNvbi5yZXFdPC9hPi4KSSB0aGluayB0aGlzIG5ldyBleHByZXNzaW9uIGlzIHdyb25nLCBpbnZvbHZpbmcgdW5pbnRlbmRlZCBzaWRlCmVmZmVjdHMuCjwvcD4KCgo8cD4yMC42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4gIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgMyBsaW5lczo8L3A+Cgo8cHJlPiAgMTEgUmV0dXJuczogdGhlIGxhcmdlc3QgdmFsdWUgTiBmb3Igd2hpY2ggdGhlIGNhbGwgYWxsb2NhdGUoTiwwKSBtaWdodCBzdWNjZWVkLgogICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3RfcmVmZXJlbmNlIHZhbCk7CiAgMTIgUmV0dXJuczogbmV3KCh2b2lkICopIHApIFQoIHZhbCkKPC9wcmU+CgoKPHA+MjAuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5kZWZhdWx0LmNvbi5yZXEiPiBbbGliLmRlZmF1bHQuY29uLnJlcV08L2E+IGluIHRhYmxlIDMyIGhhcyB0aGUgZm9sbG93aW5nIGxpbmU6PC9wPgo8cHJlPiAgYS5jb25zdHJ1Y3QocCx0KSAgIEVmZmVjdDogbmV3KCh2b2lkKilwKSBUKHQpCjwvcHJlPgoKPHA+Ci4uLi4gd2l0aCB0aGUgcHJlcmVxdWlzaXRzIGNvbWluZyBmcm9tIHRoZSBwcmVjZWRpbmcgdHdvIHBhcmFncmFwaHMsCmVzcGVjaWFsbHkgZnJvbSB0YWJsZSAzMToKPC9wPgoKPHByZT4gIGFsbG9jJmx0O1QmZ3Q7ICAgICAgICAgICAgIGEgICAgIDsvLyBhbiBhbGxvY2F0b3IgZm9yIFQKICBhbGxvYyZsdDtUJmd0Ozo6cG9pbnRlciAgICBwICAgICA7Ly8gcmFuZG9tIGFjY2VzcyBpdGVyYXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobWF5IGJlIGRpZmZlcmVudCBmcm9tIFQqKQogIGFsbG9jJmx0O1QmZ3Q7OjpyZWZlcmVuY2UgIHIgPSAqcDsvLyBUJmFtcDsKICBUIGNvbnN0JmFtcDsgICAgICAgICAgICAgdCAgICAgOwo8L3ByZT4KCjxwPgpDYXVzZSBvZiB1c2luZyAibmV3IiBidXQgbm90ICI6Om5ldyIsIGFueSBleGlzdGluZyAiVDo6b3BlcmF0b3IgbmV3IgpmdW5jdGlvbiB3aWxsIGhpZGUgdGhlIGdsb2JhbCBwbGFjZW1lbnQgbmV3IGZ1bmN0aW9uLiBXaGVuIHRoZXJlIGlzIG5vCiJUOjpvcGVyYXRvciBuZXciIHdpdGggYWRlcXVhdGUgc2lnbmF0dXJlLApldmVyeV9hbGxvYyZsdDtUJmd0Ozo6Y29uc3RydWN0KC4uKSBpcyBpbGwtZm9ybWVkLCBhbmQgbW9zdApzdGQ6OmNvbnRhaW5lciZsdDtULGV2ZXJ5X2FsbG9jJmx0O1QmZ3Q7Jmd0OyB1c2UgaXQ7IGEgd29ya2Fyb3VuZAp3b3VsZCBiZSBhZGRpbmcgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlIGZ1bmN0aW9ucyB3aXRoIGFkZXF1YXRlCnNpZ25hdHVyZSBhbmQgc2VtYW50aWMgdG8gY2xhc3MgVCwgYnV0IGNsYXNzIFQgbWlnaHQgY29tZSBmcm9tIGFub3RoZXIKcGFydHkuIE1heWJlIGV2ZW4gd29yc2UgaXMgdGhlIGNhc2Ugd2hlbiBUIGhhcyBwbGFjZW1lbnQgbmV3IGFuZApkZWxldGUgZnVuY3Rpb25zIHdpdGggYWRlcXVhdGUgc2lnbmF0dXJlIGJ1dCB3aXRoICJ1bmtub3duIiBzZW1hbnRpYzoKSSBkb250IGxpa2UgdG8gc3BlY3VsYXRlIGFib3V0IGl0LCBidXQgd2hvZXZlciBpbXBsZW1lbnRzCmFueV9jb250YWluZXImbHQ7VCxhbnlfYWxsb2MmZ3Q7IGFuZCB3YW50cyB0byB1c2UgY29uc3RydWN0KC4uKQpwcm9iYWJseSBtdXN0IHRoaW5rIGFib3V0IGl0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgIm5ldyIgd2l0aCAiOjpuZXciIGluIGJvdGggY2FzZXMuCjwvcD4KPGhyPgo8YSBuYW1lPSI0MDMiPjxoMz40MDMuJm5ic3A7YmFzaWNfc3RyaW5nOjpzd2FwIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNS44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpzd2FwIj4gW2xpYi5zdHJpbmc6OnN3YXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCZW1hbiBEYXdlcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBNYXIgMjAwMzwvcD4KCjxwPgpzdGQ6OmJhc2ljX3N0cmluZywgMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4gcGFyYWdyYXBoIDIgc2F5cyB0aGF0CmJhc2ljX3N0cmluZyAiY29uZm9ybXMgdG8gdGhlIHJlcXVpcmVtZW50cyBvZiBhIFNlcXVlbmNlLCBhcyBzcGVjaWZpZWQKaW4gKDIzLjEuMSkuIiBUaGUgc2VxdWVuY2UgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiAoMjMuMS4xKSB0byBub3QKaW5jbHVkZSBhbnkgcHJvaGliaXRpb24gb24gc3dhcCBtZW1iZXJzIHRocm93aW5nIGV4Y2VwdGlvbnMuCjwvcD4KCjxwPgpTZWN0aW9uIDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gcGFyYWdyYXBoIDEwIGRvZXMgbGltaXQgY29uZGl0aW9ucyB1bmRlcgp3aGljaCBleGNlcHRpb25zIG1heSBiZSB0aHJvd24sIGJ1dCBhcHBsaWVzIG9ubHkgdG8gImFsbCBjb250YWluZXIKdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGNsYXVzZSIgYW5kIHNvIGV4Y2x1ZGVzIGJhc2ljX3N0cmluZzo6c3dhcApiZWNhdXNlIGl0IGlzIGRlZmluZWQgZWxzZXdoZXJlLgo8L3A+Cgo8cD4KRXJpYyBOaWVibGVyIHBvaW50cyBvdXQgdGhhdCAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiBwYXJhZ3JhcGggNSBleHBsaWNpdGx5CnBlcm1pdHMgYmFzaWNfc3RyaW5nOjpzd2FwIHRvIGludmFsaWRhdGVzIGl0ZXJhdG9ycywgd2hpY2ggaXMKZGlzYWxsb3dlZCBieSAyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCAxMC4gVGh1cyB0aGUgc3RhbmRhcmQgd291bGQKYmUgY29udHJhZGljdG9yeSBpZiBpdCB3ZXJlIHJlYWQgb3IgZXh0ZW5kZWQgdG8gcmVhZCBhcyBoYXZpbmcKYmFzaWNfc3RyaW5nIG1lZXQgMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggMTAgcmVxdWlyZW1lbnRzLgo8L3A+Cgo8cD4KWWV0IHNldmVyYWwgTFdHIG1lbWJlcnMgaGF2ZSBleHByZXNzZWQgdGhlIGJlbGllZiB0aGF0IHRoZSBvcmlnaW5hbAppbnRlbnQgd2FzIHRoYXQgYmFzaWNfc3RyaW5nOjpzd2FwIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9ucyBhcwpzcGVjaWZpZWQgYnkgMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggMTAsIGFuZCB0aGF0IHRoZSBzdGFuZGFyZCBpcwp1bmNsZWFyIG9uIHRoaXMgaXNzdWUuIFRoZSBjb21wbGV4aXR5IG9mIGJhc2ljX3N0cmluZzo6c3dhcCBpcwpzcGVjaWZpZWQgYXMgImNvbnN0YW50IHRpbWUiLCBpbmRpY2F0aW5nIHRoZSBpbnRlbnQgd2FzIHRvIGF2b2lkCmNvcHlpbmcgKHdoaWNoIGNvdWxkIGNhdXNlIGEgYmFkX2FsbG9jIG9yIG90aGVyIGV4Y2VwdGlvbikuIEFuCmltcG9ydGFudCB1c2Ugb2Ygc3dhcCBpcyB0byBlbnN1cmUgdGhhdCBleGNlcHRpb25zIGFyZSBub3QgdGhyb3duIGluCmV4Y2VwdGlvbi1zYWZlIGNvZGUuCjwvcD4KCjxwPgpOb3RlOiBUaGVyZSByZW1haW5zIGxvbmcgc3RhbmRpbmcgY29uY2VybiBvdmVyIHdoZXRoZXIgb3Igbm90IGl0IGlzCnBvc3NpYmxlIHRvIHJlYXNvbmFibHkgbWVldCB0aGUgMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggMTAgc3dhcApyZXF1aXJlbWVudHMgd2hlbiBhbGxvY2F0b3JzIGFyZSB1bmVxdWFsLiBUaGUgc3BlY2lmaWNhdGlvbiBvZgpiYXNpY19zdHJpbmc6OnN3YXAgZXhjZXB0aW9uIHJlcXVpcmVtZW50cyBpcyBpbiBubyB3YXkgaW50ZW5kZWQgdG8KYWRkcmVzcywgcHJlanVkaWNlLCBvciBvdGhlcndpc2UgaW1wYWN0IHRoYXQgY29uY2Vybi4KPC9wPgoKCgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIxLjMuNS44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpzd2FwIj4gW2xpYi5zdHJpbmc6OnN3YXBdPC9hPiwgYWRkIGEgdGhyb3dzIGNsYXVzZToKPC9wPgoKPHA+ClRocm93czogU2hhbGwgbm90IHRocm93IGV4Y2VwdGlvbnMuCjwvcD4KPGhyPgo8YSBuYW1lPSI0MDQiPjxoMz40MDQuJm5ic3A7TWF5IGEgcmVwbGFjZW1lbnQgYWxsb2NhdGlvbiBmdW5jdGlvbiBiZSBkZWNsYXJlZCBpbmxpbmU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zIj4gW2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnNdPC9hPiwgMTguNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZSI+IFtsaWIubmV3LmRlbGV0ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBBcHIgMjAwMzwvcD4KPHA+ClRoZSBlaWdodCBiYXNpYyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAoc2luZ2xlLW9iamVjdAphbmQgYXJyYXkgdmVyc2lvbnMgb2YgOjpvcGVyYXRvciBuZXcgYW5kIDo6b3BlcmF0b3IgZGVsZXRlLCBpbiB0aGUKb3JkaW5hcnkgYW5kIG5vdGhyb3cgZm9ybXMpIGFyZSByZXBsYWNlYWJsZS4gIEEgQysrIHByb2dyYW0gbWF5CnByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBmb3IgYW55IG9mIHRoZW0sIHdoaWNoIHdpbGwgYmUgdXNlZAppbiBwcmVmZXJlbmNlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbidzIGRlZmluaXRpb24uICAKPC9wPgoKPHA+ClRocmVlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3RhbmRhcmQgbWVudGlvbiByZXF1aXJlbWVudHMgb24KcmVwbGFjZW1lbnQgZnVuY3Rpb25zOiAxNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+LCAxOC41LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuc2luZ2xlIj4gW2xpYi5uZXcuZGVsZXRlLnNpbmdsZV08L2E+CmFuZCAxOC41LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuYXJyYXkiPiBbbGliLm5ldy5kZWxldGUuYXJyYXldPC9hPiwgYW5kIDMuNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvYmFzaWMuaHRtbCNiYXNpYy5zdGMuZHluYW1pYyI+IFtiYXNpYy5zdGMuZHluYW1pY108L2E+Lgo8L3A+Cgo8cD5Ob25lIG9mIHRoZXNlIHRocmVlIHBsYWNlcyBzYXkgd2hldGhlciBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIG1heQogIGJlIGRlY2xhcmVkIGlubGluZS4gIDE4LjUuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5zaW5nbGUiPiBbbGliLm5ldy5kZWxldGUuc2luZ2xlXTwvYT4gcGFyYWdyYXBoIDIgc3BlY2lmaWVzIGEKICBzaWduYXR1cmUgZm9yIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiwgYnV0IHRoYXQncyBub3QgZW5vdWdoOgogIHRoZSA8dHQ+aW5saW5lPC90dD4gc3BlY2lmaWVyIGlzIG5vdCBwYXJ0IG9mIGEgZnVuY3Rpb24ncyBzaWduYXR1cmUuCiAgT25lIG1pZ2h0IGFsc28gcmVhc29uIGZyb20gNy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9kY2wuaHRtbCNkY2wuZmN0LnNwZWMiPiBbZGNsLmZjdC5zcGVjXTwvYT4gcGFyYWdyYXBoIDIsIHdoaWNoCiAgcmVxdWlyZXMgdGhhdCAiYW4gaW5saW5lIGZ1bmN0aW9uIHNoYWxsIGJlIGRlZmluZWQgaW4gZXZlcnkKICB0cmFuc2xhdGlvbiB1bml0IGluIHdoaWNoIGl0IGlzIHVzZWQsIiBidXQgdGhpcyBtYXkgbm90IGJlIHF1aXRlCiAgc3BlY2lmaWMgZW5vdWdoIGVpdGhlci4gIFdlIHNob3VsZCBlaXRoZXIgZXhwbGljaXRseSBhbGxvdyBvcgogIGV4cGxpY2l0bHkgZm9yYmlkIGlubGluZSByZXBsYWNlbWVudCBtZW1vcnkgYWxsb2NhdGlvbgogIGZ1bmN0aW9ucy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBhIG5ldyBzZW50ZW5jZSB0byB0aGUgZW5kIG9mIDE3LjQuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9ucyI+IFtsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zXTwvYT4gcGFyYWdyYXBoIDM6CiJUaGUgcHJvZ3JhbSdzIGRlZmluaXRpb25zIHNoYWxsIG5vdCBiZSBzcGVjaWZpZWQgYXMgPHR0PmlubGluZTwvdHQ+LgpObyBkaWFnbm9zdGljIGlzIHJlcXVpcmVkLiIKPC9wPgoKPHA+PGk+W0tvbmE6IGFkZGVkICJubyBkaWFnbm9zdGljIGlzIHJlcXVpcmVkIl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGUgZmFjdCB0aGF0IDx0dD5pbmxpbmU8L3R0PiBpc24ndCBtZW50aW9uZWQgYXBwZWFycyB0byBoYXZlIGJlZW4Kbm90aGluZyBtb3JlIHRoYW4gYW4gb3ZlcnNpZ2h0LiAgRXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIGRvIG5vdApwZXJtaXQgaW5saW5lIGZ1bmN0aW9ucyBhcyByZXBsYWNlbWVudCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMuClByb3ZpZGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgZGlmZmljdWx0IGluIHNvbWUgY2FzZXMsIGFuZCBpcwpiZWxpZXZlZCB0byBiZSBvZiBsaW1pdGVkIHZhbHVlLgo8L3A+Cjxocj4KPGEgbmFtZT0iNDA1Ij48aDM+NDA1LiZuYnNwO3Fzb3J0IGFuZCBQT0Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmMubGlicmFyeSI+IFtsaWIuYWxnLmMubGlicmFyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1JheSBMaXNjaG5lciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswOCBBcHIgMjAwMzwvcD4KPHA+ClNlY3Rpb24gMjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5jLmxpYnJhcnkiPiBbbGliLmFsZy5jLmxpYnJhcnldPC9hPiBkZXNjcmliZXMgYnNlYXJjaCBhbmQgcXNvcnQsIGZyb20gdGhlIEMKc3RhbmRhcmQgbGlicmFyeS4gUGFyYWdyYXBoIDQgZG9lcyBub3QgbGlzdCBhbnkgcmVzdHJpY3Rpb25zIG9uIHFzb3J0LApidXQgaXQgc2hvdWxkIGxpbWl0IHRoZSBiYXNlIHBhcmFtZXRlciB0byBwb2ludCB0byBQT0QuICBQcmVzdW1hYmx5LApxc29ydCBzb3J0cyB0aGUgYXJyYXkgYnkgY29weWluZyBieXRlcywgd2hpY2ggcmVxdWlyZXMgUE9ELgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI1LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYy5saWJyYXJ5Ij4gW2xpYi5hbGcuYy5saWJyYXJ5XTwvYT4gcGFyYWdyYXBoIDQsIGp1c3QgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9ucyBhbmQKYmVmb3JlIHRoZSBub25ub3JtYXRpdmUgbm90ZSwgYWRkIHRoZXNlIHdvcmRzOiAiYm90aCBvZiB3aGljaCBoYXZlIHRoZQpzYW1lIGJlaGF2aW9yIGFzIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbi4gIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQKdW5sZXNzIHRoZSBvYmplY3RzIGluIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDxpPmJhc2U8L2k+IGFyZSBvZiBQT0QKdHlwZS4iCjwvcD4KCjxwPjxpPltTb21ldGhpbmcgYWxvbmcgdGhlc2UgbGluZXMgaXMgY2xlYXJseSBuZWNlc3NhcnkuICBNYXR0CiAgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSI0MDYiPjxoMz40MDYuJm5ic3A7dmVjdG9yOjppbnNlcnQocykgZXhjZXB0aW9uIHNhZmV0eTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc3RhY2siPiBbbGliLnN0YWNrXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBBcHIgMjAwMzwvcD4KPHA+ClRoZXJlIGlzIGEgcG9zc2libGUgZGVmZWN0IGluIHRoZSBzdGFuZGFyZDogdGhlIHN0YW5kYXJkIHRleHQgd2FzCm5ldmVyIGludGVuZGVkIHRvIHByZXZlbnQgYXJiaXRyYXJ5IEZvcndhcmRJdGVyYXRvcnMsIHdob3NlIG9wZXJhdGlvbnMKbWF5IHRocm93IGV4Y2VwdGlvbnMsIGZyb20gYmVpbmcgcGFzc2VkLCBhbmQgaXQgYWxzbyB3YXNuJ3QgaW50ZW5kZWQKdG8gcmVxdWlyZSBhIHRlbXBvcmFyeSBidWZmZXIgaW4gdGhlIGNhc2Ugd2hlcmUgRm9yd2FyZEl0ZXJhdG9ycyB3ZXJlCnBhc3NlZCAoYW5kIEkgdGhpbmsgbW9zdCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgdXNlIG9uZSkuICBBcyBpcywgdGhlCnN0YW5kYXJkIGFwcGVhcnMgdG8gaW1wb3NlIHJlcXVpcmVtZW50cyB0aGF0IGFyZW4ndCBtZXQgYnkgYW55CmV4aXN0aW5nIGltcGxlbWVudGF0aW9uLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAyMy4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+IHBhcmFncmFwaCAxIHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KICAxLSBOb3RlczogQ2F1c2VzIHJlYWxsb2NhdGlvbiBpZiB0aGUgbmV3IHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZQogIG9sZCBjYXBhY2l0eS4gSWYgbm8gcmVhbGxvY2F0aW9uIGhhcHBlbnMsIGFsbCB0aGUgaXRlcmF0b3JzIGFuZAogIHJlZmVyZW5jZXMgYmVmb3JlIHRoZSBpbnNlcnRpb24gcG9pbnQgcmVtYWluIHZhbGlkLiBJZiBhbiBleGNlcHRpb24KICBpcyB0aHJvd24gb3RoZXIgdGhhbiBieSB0aGUgY29weSBjb25zdHJ1Y3RvciBvciBhc3NpZ25tZW50IG9wZXJhdG9yCiAgb2YgVCBvciBieSBhbnkgSW5wdXRJdGVyYXRvciBvcGVyYXRpb24gdGhlcmUgYXJlIG5vIGVmZmVjdHMuCjwvYmxvY2txdW90ZT4KCjxwPjxpPltXZSBwcm9iYWJseSBuZWVkIHRvIHNheSBzb21ldGhpbmcgc2ltaWxhciBmb3IgZGVxdWUuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjQwNyI+PGgzPjQwNy4mbmJzcDtDYW4gc2luZ3VsYXIgaXRlcmF0b3JzIGJlIGRlc3Ryb3llZD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bmUgMjAwMzwvcD4KPHA+CkNsYXVzZSAyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+LCBwYXJhZ3JhcGggNSwgc2F5cyB0aGF0IHRoZSBvbmx5IGV4cHJlc3Npb24KdGhhdCBpcyBkZWZpbmVkIGZvciBhIHNpbmd1bGFyIGl0ZXJhdG9yIGlzICJhbiBhc3NpZ25tZW50IG9mIGEKbm9uLXNpbmd1bGFyIHZhbHVlIHRvIGFuIGl0ZXJhdG9yIHRoYXQgaG9sZHMgYSBzaW5ndWxhciB2YWx1ZSIuICBUaGlzIAptZWFucyB0aGF0IGRlc3Ryb3lpbmcgYSBzaW5ndWxhciBpdGVyYXRvciAoZS5nLiBsZXR0aW5nIGFuIGF1dG9tYXRpYwp2YXJpYWJsZSBnbyBvdXQgb2Ygc2NvcGUpIGlzIHRlY2huaWNhbGx5IHVuZGVmaW5lZCBiZWhhdmlvci4gIFRoaXMKc2VlbXMgb3Zlcmx5IHN0cmljdCwgYW5kIHByb2JhYmx5IHVuaW50ZW50aW9uYWwuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBzZW50ZW5jZSBpbiBxdWVzdGlvbiB0byAiLi4uIHRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlCmRlc3Ryb3lpbmcgYW4gaXRlcmF0b3IgdGhhdCBob2xkcyBhIHNpbmd1bGFyIHZhbHVlLCBvciB0aGUgYXNzaWdubWVudApvZiBhIG5vbi1zaW5ndWxhciB2YWx1ZSB0byBhbiBpdGVyYXRvciB0aGF0IGhvbGRzIGEgc2luZ3VsYXIgdmFsdWUuIgo8L3A+Cjxocj4KPGEgbmFtZT0iNDA5Ij48aDM+NDA5LiZuYnNwO0Nsb3NpbmcgYW4gZnN0cmVhbSBzaG91bGQgY2xlYXIgZXJyb3Igc3RhdGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy44LjEuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaWZzdHJlYW0ubWVtYmVycyI+IFtsaWIuaWZzdHJlYW0ubWVtYmVyc108L2E+LCAyNy44LjEuMTAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9mc3RyZWFtLm1lbWJlcnMiPiBbbGliLm9mc3RyZWFtLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdW5lIDIwMDM8L3A+CjxwPgpBIHN0cmljdCByZWFkaW5nIG9mIDI3LjguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZnN0cmVhbXMiPiBbbGliLmZzdHJlYW1zXTwvYT4gc2hvd3MgdGhhdCBvcGVuaW5nIG9yCmNsb3NpbmcgYSBiYXNpY19baW9dZnN0cmVhbSBkb2VzIG5vdCBhZmZlY3QgdGhlIGVycm9yIGJpdHMuICBUaGlzCm1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBpZiB5b3UgcmVhZCB0aHJvdWdoIGEgZmlsZSB1cCB0byBFT0YsIGFuZAp0aGVuIGNsb3NlIHRoZSBzdHJlYW0gYW5kIHJlb3BlbiBpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLAp0aGUgRU9GIGJpdCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUgaXMgc3RpbGwgc2V0LiAgVGhpcyBpcwpjb3VudGVyaW50dWl0aXZlLgo8L3A+CjxwPgpUaGUgTFdHIGNvbnNpZGVyZWQgdGhpcyBpc3N1ZSBvbmNlIGJlZm9yZSwgYXMgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyIj4yMjwvYT4sCmFuZCBwdXQgaW4gYSBmb290bm90ZSB0byBjbGFyaWZ5IHRoYXQgdGhlIHN0cmljdCByZWFkaW5nIHdhcyBpbmRlZWQKY29ycmVjdC4gIFdlIGRpZCB0aGF0IGJlY2F1c2Ugd2UgYmVsaWV2ZWQgdGhlIHN0YW5kYXJkIHdhcwp1bmFtYmlndW91cyBhbmQgY29uc2lzdGVudCwgYW5kIHRoYXQgd2Ugc2hvdWxkIG5vdCBtYWtlIGFyY2hpdGVjdHVyYWwKY2hhbmdlcyBpbiBhIFRDLiAgTm93IHRoYXQgd2UncmUgd29ya2luZyBvbiBhIG5ldyByZXZpc2lvbiBvZiB0aGUKbGFuZ3VhZ2UsIHRob3NlIGNvbnNpZGVyYXRpb25zIG5vIGxvbmdlciBhcHBseS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5DaGFuZ2UgMjcuOC4xLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlmc3RyZWFtLm1lbWJlcnMiPiBbbGliLmlmc3RyZWFtLm1lbWJlcnNdPC9hPiwgcGFyYS4gMyBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgpDYWxscyByZGJ1ZigpLSZndDtvcGVuKHMsbW9kZXxpbikuIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwKcG9pbnRlciwgY2FsbHMgc2V0c3RhdGUoZmFpbGJpdCkgKHdoaWNoIG1heSB0aHJvdyBpb3NfYmFzZTo6ZmFpbHVyZQpbRm9vdG5vdGU6IChsaWIuaW9zdGF0ZS5mbGFncyldLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT5DYWxscyByZGJ1ZigpLSZndDtvcGVuKHMsbW9kZXxpbikuIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucwphIG51bGwgcG9pbnRlciwgY2FsbHMgc2V0c3RhdGUoZmFpbGJpdCkgKHdoaWNoIG1heSB0aHJvdwppb3NfYmFzZTo6ZmFpbHVyZSBbRm9vdG5vdGU6IChsaWIuaW9zdGF0ZS5mbGFncykpLCBlbHNlIGNhbGxzIGNsZWFyKCkuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNy44LjEuMTAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9mc3RyZWFtLm1lbWJlcnMiPiBbbGliLm9mc3RyZWFtLm1lbWJlcnNdPC9hPiwgcGFyYS4gMyBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPkNhbGxzIHJkYnVmKCktJmd0O29wZW4ocyxtb2RlfG91dCkuIElmIHRoYXQgZnVuY3Rpb24KcmV0dXJucyBhIG51bGwgcG9pbnRlciwgY2FsbHMgc2V0c3RhdGUoZmFpbGJpdCkgKHdoaWNoIG1heSB0aHJvdwppb3NfYmFzZTo6ZmFpbHVyZSBbRm9vdG5vdGU6IChsaWIuaW9zdGF0ZS5mbGFncykpLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT5DYWxscyByZGJ1ZigpLSZndDtvcGVuKHMsbW9kZXxvdXQpLiBJZiB0aGF0IGZ1bmN0aW9uCnJldHVybnMgYSBudWxsIHBvaW50ZXIsIGNhbGxzIHNldHN0YXRlKGZhaWxiaXQpICh3aGljaCBtYXkgdGhyb3cKaW9zX2Jhc2U6OmZhaWx1cmUgW0Zvb3Rub3RlOiAobGliLmlvc3RhdGUuZmxhZ3MpKSwgZWxzZSBjYWxscyBjbGVhcigpLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjcuOC4xLjEzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtLm1lbWJlcnMiPiBbbGliLmZzdHJlYW0ubWVtYmVyc108L2E+LCBwYXJhLiAzIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+Q2FsbHMgcmRidWYoKS0mZ3Q7b3BlbihzLG1vZGUpLCBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYQpudWxsIHBvaW50ZXIsIGNhbGxzIHNldHN0YXRlKGZhaWxiaXQpLCAod2hpY2ggbWF5IHRocm93Cmlvc19iYXNlOjpmYWlsdXJlKS4gKGxpYi5pb3N0YXRlLmZsYWdzKSApCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPkNhbGxzIHJkYnVmKCktJmd0O29wZW4ocyxtb2RlKSwgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGEKbnVsbCBwb2ludGVyLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwgKHdoaWNoIG1heSB0aHJvdwppb3NfYmFzZTo6ZmFpbHVyZSkuIChsaWIuaW9zdGF0ZS5mbGFncykgKSwgZWxzZSBjYWxscyBjbGVhcigpLgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxpPltLb25hOiB0aGUgTFdHIGFncmVlcyB0aGlzIGlzIGEgZ29vZCBpZGVhLiAgUG9zdC1Lb25hOiBCaWxsCnByb3ZpZGVkIHdvcmRpbmcuICBIZSBzdWdnZXN0cyBoYXZpbmcgb3Blbiwgbm90IGNsb3NlLCBjbGVhciB0aGUgZXJyb3IKZmxhZ3MuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1TeWRuZXk6IEhvd2FyZCBwcm92aWRlZCBhIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uLiAgVGhlCiAgb2xkIG9uZSBkaWRuJ3QgbWFrZSBzZW5zZSBiZWNhdXNlIGl0IHByb3Bvc2VkIHRvIGZpeCB0aGlzIGF0IHRoZQogIGxldmVsIG9mIGJhc2ljX2ZpbGVidWYsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN0cmVhbSdzCiAgZXJyb3Igc3RhdGUuICBIb3dhcmQncyBwcm9wb3NlZCByZXNvbHV0aW9uIGZpeGVzIHRoaXMgYXQgdGhlIGxldmVsCiAgb2YgdGhlIHRocmVlIGZzdHJlYW0gY2xhc3MgdGVtcGxhdGUgaW5zdGVhZC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDEwIj48aDM+NDEwLiZuYnNwO01pc3Npbmcgc2VtYW50aWNzIGZvciBzdGFjayBhbmQgcXVldWUgY29tcGFyaXNvbiBvcGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3QuY29ucyI+IFtsaWIubGlzdC5jb25zXTwvYT4sIDIzLjIuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5tb2RpZmllcnMiPiBbbGliLmxpc3QubW9kaWZpZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SGFucyBCb3MmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBKdW4gMjAwMzwvcD4KPHA+ClNlY3Rpb25zIDIzLjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5jb25zIj4gW2xpYi5saXN0LmNvbnNdPC9hPiBhbmQgMjMuMi4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm1vZGlmaWVycyI+IFtsaWIubGlzdC5tb2RpZmllcnNdPC9hPiBsaXN0CmNvbXBhcmlzb24gb3BlcmF0b3JzICg9PSwgIT0sICZsdDssICZsdDs9LCAmZ3Q7LCA9Jmd0OykgZm9yIHF1ZXVlIGFuZApzdGFjay4gIE9ubHkgdGhlIHNlbWFudGljcyBmb3IgcXVldWU6Om9wZXJhdG9yPT0gKDIzLjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5jb25zIj4gW2xpYi5saXN0LmNvbnNdPC9hPiBwYXIyKSBhbmQgcXVldWU6Om9wZXJhdG9yJmx0OyAoMjMuMi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0LmNvbnMiPiBbbGliLmxpc3QuY29uc108L2E+CnBhcjMpIGFyZSBkZWZpbmVkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIG5ldyBwYXJhZ3JhcGhzIGFmdGVyIDIzLjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5jb25zIj4gW2xpYi5saXN0LmNvbnNdPC9hPgogIHBhcmFncmFwaCAzOjwvcD4KCjxibG9ja3F1b3RlPgoKPHByZT4gIG9wZXJhdG9yIT0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgIT0geS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImZ3Q7CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDsgeS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImbHQ7PQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmbHQ7PSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZndDs9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDs9IHkuYzwvdHQ+PC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+QWRkIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocyBhdCB0aGUgZW5kIG9mIDIzLjIuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5tb2RpZmllcnMiPiBbbGliLmxpc3QubW9kaWZpZXJzXTwvYT46PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPiAgb3BlcmF0b3I9PQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyA9PSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZsdDsKPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmx0OyB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciE9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICE9IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmd0Owo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmZ3Q7IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmx0Oz0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmx0Oz0geS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImZ3Q7PQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmZ3Q7PSB5LmM8L3R0PjwvcD4KCjwvYmxvY2txdW90ZT4KCgo8cD48aT5bS29uYTogTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+ClRoZXJlIGlzbid0IGFueSByZWFsIGRvdWJ0IGFib3V0IHdoYXQgdGhlc2Ugb3BlcmF0b3JzIGFyZQpzdXBwb3NlZCB0byBkbywgYnV0IHdlIG91Z2h0IHRvIHNwZWxsIGl0IG91dC4KPGhyPgo8YSBuYW1lPSI0MTEiPjxoMz40MTEuJm5ic3A7V3JvbmcgbmFtZXMgb2Ygc2V0IG1lbWJlciBmdW5jdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuc2V0Lm9wZXJhdGlvbnMiPiBbbGliLmFsZy5zZXQub3BlcmF0aW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhbmllbCBGcmV5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzkgSnVsIDIwMDM8L3A+CjxwPgoyNS4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuc2V0Lm9wZXJhdGlvbnMiPiBbbGliLmFsZy5zZXQub3BlcmF0aW9uc108L2E+IHBhcmFncmFwaCAxIHJlYWRzOgoiVGhlIHNlbWFudGljcyBvZiB0aGUgc2V0IG9wZXJhdGlvbnMgYXJlIGdlbmVyYWxpemVkIHRvIG11bHRpc2V0cyBpbiBhIApzdGFuZGFyZCB3YXkgYnkgZGVmaW5pbmcgdW5pb24oKSB0byBjb250YWluIHRoZSBtYXhpbXVtIG51bWJlciBvZiAKb2NjdXJyZW5jZXMgb2YgZXZlcnkgZWxlbWVudCwgaW50ZXJzZWN0aW9uKCkgdG8gY29udGFpbiB0aGUgbWluaW11bSwgYW5kIApzbyBvbi4iCjwvcD4KCjxwPgpUaGlzIGlzIHdyb25nLiAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgc2V0X3VuaW9uKCkgYW5kCnNldF9pbnRlcnNlY3Rpb24oKSwgbm90IHVuaW9uKCkgYW5kIGludGVyc2VjdGlvbigpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoYXQgc2VudGVuY2UgdG8gdXNlIHRoZSBjb3JyZWN0IG5hbWVzLjwvcD4KPGhyPgo8YSBuYW1lPSI0MTIiPjxoMz40MTIuJm5ic3A7VHlwbyBpbiAyNy40LjQuMzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0YXRlLmZsYWdzIj4gW2xpYi5pb3N0YXRlLmZsYWdzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEwIEp1bCAyMDAzPC9wPgo8cD4KVGhlIEVmZmVjdHMgY2xhdXNlIGluIDI3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0YXRlLmZsYWdzIj4gW2xpYi5pb3N0YXRlLmZsYWdzXTwvYT4gcGFyYWdyYXBoIDUgc2F5cyB0aGF0IHRoZQpmdW5jdGlvbiBvbmx5IHRocm93cyBpZiB0aGUgcmVzcGVjdGl2ZSBiaXRzIGFyZSBhbHJlYWR5IHNldCBwcmlvciB0bwp0aGUgZnVuY3Rpb24gY2FsbC4gVGhhdCdzIG9idmlvdXNseSBub3QgdGhlIGludGVudC4gVGhlIHR5cG8gb3VnaHQgdG8KYmUgY29ycmVjdGVkIGFuZCB0aGUgdGV4dCByZXdvcmRlZCBhczogIklmICg8aT5zdGF0ZTwvaT4gJmFtcDsKZXhjZXB0aW9ucygpKSA9PSAwLCByZXR1cm5zLiAuLi4iCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RhdGUuZmxhZ3MiPiBbbGliLmlvc3RhdGUuZmxhZ3NdPC9hPiBwYXJhZ3JhcGggNSwgcmVwbGFjZSAiSWYgKHJkc3RhdGUoKSAmYW1wOwpleGNlcHRpb25zKCkpID09IDAiIHdpdGggIklmICgoc3RhdGUgfCAocmRidWYoKSA/IGdvb2RiaXQgOiBiYWRiaXQpKQomYW1wOyBleGNlcHRpb25zKCkpID09IDAiLgo8L3A+Cgo8cD48aT5bS29uYTogdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gd2Fzbid0IHF1aXRlIHJpZ2h0LiAgV2UKICByZWFsbHkgZG8gbWVhbiByZHN0YXRlKCk7IHRoZSBhbWJpZ3VpdHkgaXMgdGhhdCB0aGUgd29yZGluZyBpbiB0aGUKICBzdGFuZGFyZCBkb2Vzbid0IG1ha2UgaXQgY2xlYXIgd2hldGhlciB3ZSBtZWFuIHJkc3RhdGUoKSBiZWZvcmUKICBzZXR0aW5nIHRoZSBuZXcgc3RhdGUsIG9yIHJkc2F0ZSgpIGFmdGVyIHNldHRpbmcgaXQuICBXZSBpbnRlbmQgdGhlCiAgbGF0dGVyLCBvZiBjb3Vyc2UuIFBvc3QtS29uYTogTWFydGluIHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjQxMyI+PGgzPjQxMy4mbmJzcDtQcm9wb3NlZCByZXNvbHV0aW9uIHRvIExEUiM2NCBzdGlsbCB3cm9uZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OmV4dHJhY3RvcnMiPiBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCbyBQZXJzc29uJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIEp1bCAyMDAzPC9wPgo8cD4KVGhlIHNlY29uZCBzZW50ZW5jZSBvZiB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBzYXlzOgo8L3A+Cgo8cD4KIklmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMgYmVjYXVzZSBpdCBjYXVnaHQgYW4gZXhjZXB0aW9uIHRocm93bgp3aGlsZSBleHRyYWN0aW5nIGNoYXJhY3RlcnMgZnJvbSBzYiBhbmQgLi4uIgo8L3A+Cgo8cD4KSG93ZXZlciwgd2UgYXJlIG5vdCBleHRyYWN0aW5nIGZyb20gc2IsIGJ1dCBleHRyYWN0aW5nIGZyb20gdGhlCmJhc2ljX2lzdHJlYW0gKCp0aGlzKSBhbmQgaW5zZXJ0aW5nIGludG8gc2IuIEkgY2FuJ3QgcmVhbGx5IHRlbGwgaWYKImV4dHJhY3RpbmciIG9yICJzYiIgaXMgYSB0eXBvLgo8L3A+Cgo8cD48aT5bClN5ZG5leTogRGVmaW5pdGVseSBhIHJlYWwgaXNzdWUuIFdlIGFyZSwgaW5kZWVkLCBleHRyYWN0aW5nIGNoYXJhY3RlcnMKZnJvbSBhbiBpc3RyZWFtIGFuZCBub3QgZnJvbSBzYi4gVGhlIHByb2JsZW0gd2FzIHRoZXJlIGluIHRoZSBGRElTIGFuZAp3YXNuJ3QgZml4ZWQgYnkgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY0Ij42NDwvYT4uIFByb2JhYmx5IHdoYXQgd2FzIGludGVuZGVkIHdhcwp0byBoYXZlICp0aGlzIGluc3RlYWQgb2Ygc2IuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbiBmbGFnCnN0YXRlIG9mIGEgYmFzaWNfaXN0cmVhbSBvYmplY3QsIGFuZCB0aGVyZSdzIG9ubHkgb25lIGJhc2ljX2lzdHJlYW0Kb2JqZWN0IGluIHRoaXMgZGlzY3Vzc2lvbiwgc28gdGhhdCB3b3VsZCBiZSBhIGNvbnNpc3RlbnQKaW50ZXJwcmV0YXRpb24uICAoQnV0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bDogdGhlIGV4Y2VwdGlvbiBwb2xpY3kgb2YKdGhpcyBtZW1iZXIgZnVuY3Rpb24gbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBvdGhlcgpleHRyYWN0b3JzLikgIFBKUCB3aWxsIHByb3ZpZGUgd29yZGluZy4KXTwvaT48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc2VudGVuY2UgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KSWYgaXQgaW5zZXJ0ZWQgbm8gY2hhcmFjdGVycyBiZWNhdXNlIGl0IGNhdWdodCBhbiBleGNlcHRpb24gdGhyb3duCndoaWxlIGV4dHJhY3RpbmcgY2hhcmFjdGVycyBmcm9tIHNiIGFuZCBmYWlsYml0IGlzIG9uIGluIGV4Y2VwdGlvbnMoKSwKdGhlbiB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBpcyByZXRocm93bi4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CklmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMgYmVjYXVzZSBpdCBjYXVnaHQgYW4gZXhjZXB0aW9uIHRocm93bgp3aGlsZSBleHRyYWN0aW5nIGNoYXJhY3RlcnMgZnJvbSAqdGhpcyBhbmQgZmFpbGJpdCBpcyBvbiBpbiBleGNlcHRpb25zKCksCnRoZW4gdGhlIGNhdWdodCBleGNlcHRpb24gaXMgcmV0aHJvd24uCjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSI0MTQiPjxoMz40MTQuJm5ic3A7V2hpY2ggaXRlcmF0b3JzIGFyZSBpbnZhbGlkYXRlZCBieSB2LmVyYXNlKCk/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zdGFjayI+IFtsaWIuc3RhY2tdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTkgQXVnIDIwMDM8L3A+CjxwPgpDb25zaWRlciB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+aW50IEFbOF0gPSB7IDEsMyw1LDcsOSw4LDQsMiB9OwpzdGQ6OnZlY3RvciZsdDtpbnQmZ3Q7IHYoQSwgQSs4KTsKCnN0ZDo6dmVjdG9yJmx0O2ludCZndDs6Oml0ZXJhdG9yIGkxID0gdi5iZWdpbigpICsgMzsKc3RkOjp2ZWN0b3ImbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgaTIgPSB2LmJlZ2luKCkgKyA0Owp2LmVyYXNlKGkxKTsKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPgpXaGljaCBpdGVyYXRvcnMgYXJlIGludmFsaWRhdGVkIGJ5IDx0dD52LmVyYXNlKGkxKTwvdHQ+OiBpMSwgaTIsCmJvdGgsIG9yIG5laXRoZXI/CjwvcD4KCjxwPgpPbiBhbGwgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgSSBrbm93IG9mLCB0aGUgc3RhdHVzIG9mIGkxIGFuZAppMiBpcyB0aGUgc2FtZTogYm90aCBvZiB0aGVtIHdpbGwgYmUgaXRlcmF0b3JzIHRoYXQgcG9pbnQgdG8gc29tZQplbGVtZW50cyBvZiB0aGUgdmVjdG9yIChhbGJlaXQgbm90IHRoZSBzYW1lIGVsZW1lbnRzIHRoZXkgZGlkCmJlZm9yZSkuICBZb3Ugd29uJ3QgZ2V0IGEgY3Jhc2ggaWYgeW91IHVzZSB0aGVtLiAgRGVwZW5kaW5nIG9uIApleGFjdGx5IHdoYXQgeW91IG1lYW4gYnkgImludmFsaWRhdGUiLCB5b3UgbWlnaHQgc2F5IHRoYXQgbmVpdGhlciBvbmUKaGFzIGJlZW4gaW52YWxpZGF0ZWQgYmVjYXVzZSB0aGV5IHN0aWxsIHBvaW50IHRvIDxpPnNvbWV0aGluZzwvaT4sCm9yIHlvdSBtaWdodCBzYXkgdGhhdCBib3RoIGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBiZWNhdXNlIGluIGJvdGgKY2FzZXMgdGhlIGVsZW1lbnRzIHRoZXkgcG9pbnQgdG8gaGF2ZSBiZWVuIGNoYW5nZWQgb3V0IGZyb20gdW5kZXIgdGhlCml0ZXJhdG9yLgo8L3A+Cgo8cD4KVGhlIHN0YW5kYXJkIGRvZXNuJ3Qgc2F5IGVpdGhlciBvZiB0aG9zZSB0aGluZ3MuICBJdCBzYXlzIHRoYXQgZXJhc2UKaW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyAiYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZQplcmFzZSIuICBUaGlzIGRvZXNuJ3QgaW5jbHVkZSBpMSwgc2luY2UgaXQncyBhdCB0aGUgcG9pbnQgb2YgdGhlCmVyYXNlIGluc3RlYWQgb2YgYWZ0ZXIgaXQuICBJIGNhbid0IHRoaW5rIG9mIGFueSBzZW5zaWJsZSBkZWZpbml0aW9uCm9mIGludmFsaWRhdGlvbiBieSB3aGljaCBvbmUgY2FuIHNheSB0aGF0IGkyIGlzIGludmFsaWRhdGVkIGJ1dCBpMQppc24ndC4KPC9wPgoKPHA+CihUaGlzIGlzc3VlIGlzIGltcG9ydGFudCBpZiB5b3UgdHJ5IHRvIHJlYXNvbiBhYm91dCBpdGVyYXRvciB2YWxpZGl0eQpiYXNlZCBvbmx5IG9uIHRoZSBndWFyYW50ZWVzIGluIHRoZSBzdGFuZGFyZCwgcmF0aGVyIHRoYW4gcmVhc29uaW5nCmZyb20gdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWVzLiAgU3RyaWN0IGRlYnVnZ2luZyBtb2RlcywKd2hpY2ggc29tZSBwcm9ncmFtbWVycyBmaW5kIHVzZWZ1bCwgZG8gbm90IHVzZSB0eXBpY2FsIGltcGxlbWVudGF0aW9uCnRlY2huaXF1ZXMuKQo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIzLjIuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc3RhY2siPiBbbGliLnN0YWNrXTwvYT4gcGFyYWdyYXBoIDMsIGNoYW5nZSAiSW52YWxpZGF0ZXMgYWxsIHRoZQppdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZSBlcmFzZSIgdG8KIkludmFsaWRhdGVzIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhdCBvciBhZnRlciB0aGUgcG9pbnQgb2YgdGhlCmVyYXNlIi4gCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkkgYmVsaWV2ZSB0aGlzIHdhcyBlc3NlbnRpYWxseSBhIHR5cG9ncmFwaGljYWwgZXJyb3IsIGFuZCB0aGF0IGl0CiAgd2FzIHRha2VuIGZvciBncmFudGVkIHRoYXQgZXJhc2luZyBhbiBlbGVtZW50IGludmFsaWRhdGVzIGl0ZXJhdG9ycwogIHRoYXQgcG9pbnQgdG8gaXQuICBUaGUgZWZmZWN0cyBjbGF1c2UgaW4gcXVlc3Rpb24gdHJlYXRzIGl0ZXJhdG9ycwogIGFuZCByZWZlcmVuY2VzIGluIHBhcmFsbGVsLCBhbmQgaXQgd291bGQgc2VlbSBjb3VudGVyaW50dWl0aXZlIHRvCiAgc2F5IHRoYXQgYSByZWZlcmVuY2UgdG8gYW4gZXJhc2VkIHZhbHVlIHJlbWFpbnMgdmFsaWQuPC9wPgo8aHI+CjxhIG5hbWU9IjQxNSI+PGgzPjQxNS4mbmJzcDtiZWhhdmlvciBvZiBzdGQ6OndzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0ubWFuaXAiPiBbbGliLmlzdHJlYW0ubWFuaXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CjxwPgpBY2NvcmRpbmcgdG8gMjcuNi4xLjQsIHRoZSB3cygpIG1hbmlwdWxhdG9yIGlzIG5vdCByZXF1aXJlZCB0byBjb25zdHJ1Y3QKdGhlIHNlbnRyeSBvYmplY3QuIFRoZSBtYW5pcHVsYXRvciBpcyBhbHNvIG5vdCBhIG1lbWJlciBmdW5jdGlvbiBzbyB0aGUKdGV4dCBpbiAyNy42LjEsIHAxIHRocm91Z2ggNCB0aGF0IGRlc2NyaWJlcyB0aGUgZXhjZXB0aW9uIHBvbGljeSBmb3IKaXN0cmVhbSBtZW1iZXIgZnVuY3Rpb25zIGRvZXMgbm90IGFwcGx5LiBUaGF0IHNlZW1zIGluY29uc2lzdGVudCB3aXRoCnRoZSByZXN0IG9mIGV4dHJhY3RvcnMgYW5kIGFsbCB0aGUgb3RoZXIgaW5wdXQgZnVuY3Rpb25zIChpLmUuLCB3cyB3aWxsCm5vdCBjYXVzZSBhIHRpZWQgc3RyZWFtIHRvIGJlIGZsdXNoZWQgYmVmb3JlIGV4dHJhY3Rpb24sIGl0IGRvZXNuJ3QgY2hlY2sKdGhlIHN0cmVhbSdzIGV4Y2VwdGlvbnMgb3IgY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd24gZHVyaW5nIGlucHV0LCBhbmQgaXQKZG9lc24ndCBhZmZlY3QgdGhlIHN0cmVhbSdzIGdjb3VudCkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRvIDI3LjYuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLm1hbmlwIj4gW2xpYi5pc3RyZWFtLm1hbmlwXTwvYT4sIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZmlyc3Qgc2VudGVuY2UKb2YgcGFyYWdyYXBoIDEsIHRoZSBmb2xsb3dpbmcgdGV4dDoKPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluCiAgICAyNy42LjEuMywgcGFyYWdyYXBoIDEpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyCiAgICBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZCBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQogICAgc3Vic2VxdWVudCBjYWxscyB0byBpcy5nY291bnQoKS4gQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5CiAgICBvYmplY3QuLi4gIAogICAgPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtS29uYTogTWFydGluIHByb3ZpZGVkIHdvcmRpbmddPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDIwIj48aDM+NDIwLiZuYnNwO2lzIHN0ZDo6RklMRSBhIGNvbXBsZXRlIHR5cGU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtcyI+IFtsaWIuZnN0cmVhbXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CjxwPgo3LjE5LjEsIHAyLCBvZiBDOTkgcmVxdWlyZXMgdGhhdCB0aGUgRklMRSB0eXBlIG9ubHkgYmUgZGVjbGFyZWQgaW4KJmx0O3N0ZGlvLmgmZ3Q7LiAgTm9uZSBvZiB0aGUgKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIG1lbWJlcnMgb2YgdGhlCnN0cnVjdCBpcyBtZW50aW9uZWQgYW55d2hlcmUgZm9yIG9idmlvdXMgcmVhc29ucy4KPC9wPgoKPHA+CkMrKyBzYXlzIGluIDI3LjguMSwgcDIgdGhhdCBGSUxFIGlzIGEgdHlwZSB0aGF0J3MgZGVmaW5lZCBpbiAmbHQ7Y3N0ZGlvJmd0Oy4gSXMKaXQgcmVhbGx5IHRoZSBpbnRlbnQgdGhhdCBGSUxFIGJlIGEgY29tcGxldGUgdHlwZSBvciBpcyBhbiBpbXBsZW1lbnRhdGlvbgphbGxvd2VkIHRvIGp1c3QgZGVjbGFyZSBpdCB3aXRob3V0IHByb3ZpZGluZyBhIGZ1bGwgZGVmaW5pdGlvbj8KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAyNy44LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZzdHJlYW1zIj4gW2xpYi5mc3RyZWFtc108L2E+IHBhcmFncmFwaCAyLCBjaGFuZ2UKICAiZGVmaW5lZCIgdG8gImRlY2xhcmVkIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBkb24ndCB3YW50IHRvIGltcG9zZSBhbnkgcmVzdHJpY3Rpb25zIGJleW9uZCB3aGF0IHRoZSBDIHN0YW5kYXJkCiAgYWxyZWFkeSBzYXlzLiBXZSBkb24ndCB3YW50IHRvIG1ha2UgYW55dGhpbmcgaW1wbGVtZW50YXRpb24gZGVmaW5lZCwKICBiZWNhdXNlIHRoYXQgaW1wb3NlcyBuZXcgcmVxdWlyZW1lbnRzIGluIGltcGxlbWVudGF0aW9ucy48L3A+Cjxocj4KPGEgbmFtZT0iNDI1Ij48aDM+NDI1LiZuYnNwO3JldHVybiB2YWx1ZSBvZiBzdGQ6OmdldF90ZW1wb3JhcnlfYnVmZmVyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZXRhLmhlbHAiPiBbbGliLm1ldGEuaGVscF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOCBTZXAgMjAwMzwvcD4KPHA+ClRoZSBzdGFuZGFyZCBpcyBub3QgY2xlYXIgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBvbiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbQphIGNhbGwgdG8gZ2V0X3RlbXBvcmFyeV9idWZmZXIoMCkuIEluIHBhcnRpY3VsYXIsIGl0IGZhaWxzIHRvIHNwZWNpZnkgd2hldGhlcgp0aGUgY2FsbCBzaG91bGQgcmV0dXJuIGEgZGlzdGluY3QgcG9pbnRlciBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkIChsaWtlCm9wZXJhdG9yIG5ldyksIG9yIHdoZXRoZXIgdGhlIHZhbHVlIGlzIHVuc3BlY2lmaWVkIChhcyBpZiByZXR1cm5lZCBieQptYWxsb2MpLiBUaGUgc3RhbmRhcmQgYWxzbyBmYWlscyB0byBtZW50aW9uIHdoYXQgdGhlIHJlcXVpcmVkIGJlaGF2aW9yCmlzIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiAwLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIwLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIubWV0YS5oZWxwIj4gW2xpYi5tZXRhLmhlbHBdPC9hPiBwYXJhZ3JhcGggMiBmcm9tICIuLi5vciBhIHBhaXIgb2YgMAp2YWx1ZXMgaWYgbm8gc3RvcmFnZSBjYW4gYmUgb2J0YWluZWQiIHRvICIuLi5vciBhIHBhaXIgb2YgMCB2YWx1ZXMgaWYKbm8gc3RvcmFnZSBjYW4gYmUgb2J0YWluZWQgb3IgaWYgPGk+bjwvaT4gJmx0Oz0gMC4iPC9wPgo8cD48aT5bS29uYTogTWF0dCBwcm92aWRlZCB3b3JkaW5nXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iNDI2Ij48aDM+NDI2LiZuYnNwO3NlYXJjaF9uKCksIGZpbGxfbigpLCBhbmQgZ2VuZXJhdGVfbigpIHdpdGggbmVnYXRpdmUgbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjEuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zZWFyY2giPiBbbGliLmFsZy5zZWFyY2hdPC9hPiwgMjUuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbGwiPiBbbGliLmFsZy5maWxsXTwvYT4sIDI1LjIuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5nZW5lcmF0ZSI+IFtsaWIuYWxnLmdlbmVyYXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE4IFNlcCAyMDAzPC9wPgo8cD4KVGhlIGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgYXJlIGluY29ycmVjdAoob3IgZG9uJ3QgZXZlbiBtYWtlIHNlbnNlKSBmb3IgbmVnYXRpdmUgbjo8L3A+Cgo8cD4yNS4xLjksIHA3IChzZWFyY2hfbik6Cjxicj4KQ29tcGxleGl0eTogQXQgbW9zdCAobGFzdDEgLSBmaXJzdDEpICogY291bnQgYXBwbGljYXRpb25zCm9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZS48L3A+Cgo8cD4yNS4yLjUsIHAzIChmaWxsX24pOgo8YnI+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuKSBhc3NpZ25tZW50cy48L3A+Cjxicj4KCjxwPjI1LjIuNiwgcDMgKGdlbmVyYXRlX24pOgo8YnI+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuKSBhc3NpZ25tZW50cy48L3A+Cgo8cD4KSW4gYWRkaXRpb24sIHRoZSBSZXF1aXJlbWVudHMgb3IgdGhlIEVmZmVjdHMgY2xhdXNlcyBmb3IgdGhlIGxhdHRlciB0d28KdGVtcGxhdGVzIGRvbid0IHNheSBhbnl0aGluZyBhYm91dCB0aGUgYmVoYXZpb3Igd2hlbiBuIGlzIG5lZ2F0aXZlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjEuOSwgcDcgdG88L3A+Cgo8YmxvY2txdW90ZT4KQ29tcGxleGl0eTogQXQgbW9zdCAobGFzdDEgLSBmaXJzdDEpICogY291bnQgYXBwbGljYXRpb25zCm9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSBpZiBjb3VudCBpcyBwb3NpdGl2ZSwKb3IgMCBvdGhlcndpc2UuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4yLjUsIHAyIHRvPC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQXNzaWducyB2YWx1ZSB0aHJvdWdoIGFsbCB0aGUgaXRlcmF0b3JzIGluIHRoZSByYW5nZSBbZmlyc3QsCmxhc3QpLCBvciBbZmlyc3QsIGZpcnN0ICsgbikgaWYgbiBpcyBwb3NpdGl2ZSwgbm9uZSBvdGhlcndpc2UuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4yLjUsIHAzIHRvOjwvcD4KPGJsb2NrcXVvdGU+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuIGlmIG4gaXMgcG9zaXRpdmUsCm9yIDAgb3RoZXJ3aXNlKSBhc3NpZ25tZW50cy4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyNS4yLjYsIHAxIAp0byAobm90aWNlIHRoZSBjb3JyZWN0aW9uIGZvciB0aGUgbWlzc3BlbGxlZCAidGhyb3VnaCIpOgo8L3A+CjxibG9ja3F1b3RlPgpFZmZlY3RzOiBJbnZva2VzIHRoZSBmdW5jdGlvbiBvYmplY3QgZ2VuYW5kIGFzc2lnbnMgdGhlIHJldHVybgp2YWx1ZSBvZiBnZW4gdGhyb3VnaCBhbGwgdGhlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSwKb3IgW2ZpcnN0LCBmaXJzdCArIG4pIGlmIG4gaXMgcG9zaXRpdmUsIG9yIFtmaXJzdCwgZmlyc3QpCm90aGVyd2lzZS4KPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjIuNiwgcDMgdG86PC9wPgo8YmxvY2txdW90ZT4KQ29tcGxleGl0eTogRXhhY3RseSBsYXN0IC0gZmlyc3QgKG9yIG4gaWYgbiBpcyBwb3NpdGl2ZSwKb3IgMCBvdGhlcndpc2UpIGFzc2lnbm1lbnRzLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JbmZvcm1hbGx5LCB3ZSB3YW50IHRvIHNheSB0aGF0IHdoZW5ldmVyIHdlIHNlZSBhIG5lZ2F0aXZlIG51bWJlcgogIHdlIHRyZWF0IGl0IHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgemVyby4gIFdlIGJlbGlldmUgdGhlIGFib3ZlCiAgY2hhbmdlcyBkbyB0aGF0IChhbHRob3VnaCB0aGV5IG1heSBub3QgYmUgdGhlIG1pbmltYWwgd2F5IG9mIHNheWluZwogIHNvKS4gIFRoZSBMV0cgY29uc2lkZXJlZCBhbmQgcmVqZWN0ZWQgdGhlIGFsdGVybmF0aXZlIG9mIHNheWluZyB0aGF0CiAgbmVnYXRpdmUgbnVtYmVycyBhcmUgdW5kZWZpbmVkIGJlaGF2aW9yLjwvcD4KPGhyPgo8YSBuYW1lPSI0MjgiPjxoMz40MjguJm5ic3A7c3RyaW5nOjplcmFzZShpdGVyYXRvcikgdmFsaWRpdHk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjUuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6ZXJhc2UiPiBbbGliLnN0cmluZzo6ZXJhc2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CjxwPgoyMy4xLjEsIHAzIGFsb25nIHdpdGggVGFibGUgNjcgc3BlY2lmeSBhcyBhIHByZXJlcXVpc2l0ZSBmb3IgYS5lcmFzZShxKQp0aGF0IHEgbXVzdCBiZSBhIHZhbGlkIGRlcmVmZXJlbmNlYWJsZSBpdGVyYXRvciBpbnRvIHRoZSBzZXF1ZW5jZSBhLgo8L3A+Cgo8cD4KSG93ZXZlciwgMjEuMy41LjUsIHA1IGRlc2NyaWJpbmcgc3RyaW5nOjplcmFzZShwKSBvbmx5IHJlcXVpcmVzIHRoYXQKcCBiZSBhIHZhbGlkIGl0ZXJhdG9yLgo8L3A+Cgo8cD4KVGhpcyBtYXkgYmUgaW50ZXJlcHJldGVkIGFzIGEgcmVsYXhhdGlvbiBvZiB0aGUgZ2VuZXJhbCByZXF1aXJlbWVudCwKd2hpY2ggaXMgbW9zdCBsaWtlbHkgbm90IHRoZSBpbnRlbnQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgMjEuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmVyYXNlIj4gW2xpYi5zdHJpbmc6OmVyYXNlXTwvYT4gcGFyYWdyYXBoIDUuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBjb25zaWRlcmVkIHR3byBvcHRpb25zOiBjaGFuZ2luZyB0aGUgc3RyaW5nIHJlcXVpcmVtZW50cyB0bwogIG1hdGNoIHRoZSBnZW5lcmFsIGNvbnRhaW5lciByZXF1aXJlbWVudHMsIG9yIGp1c3QgcmVtb3ZpbmcgdGhlCiAgZXJyb25lb3VzIHN0cmluZyByZXF1aXJlbWVudHMgYWx0b2dldGhlci4gIFRoZSBMV0cgY2hvc2UgdGhlIGxhdHRlcgogIG9wdGlvbiwgb24gdGhlIGdyb3VuZHMgdGhhdCBkdXBsaWNhdGluZyB0ZXh0IGFsd2F5cyByaXNrcyB0aGUKICBwb3NzaWJpbGl0eSB0aGF0IGl0IG1pZ2h0IGJlIGR1cGxpY2F0ZWQgaW5jb3JyZWN0bHkuPC9wPgo8aHI+CjxhIG5hbWU9IjQzMiI+PGgzPjQzMi4mbmJzcDtzdHJpbmdidWY6Om92ZXJmbG93KCkgbWFrZXMgb25seSBvbmUgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi52aXJ0dWFscyI+IFtsaWIuc3RyaW5nYnVmLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Q2hyaXN0aWFuIFcgQnJvY2smbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgU2VwIDIwMDM8L3A+CjxwPjI3LjcuMS4zIHBhciA4IHNheXM6PC9wPgo8YmxvY2txdW90ZT4KTm90ZXM6IFRoZSBmdW5jdGlvbiBjYW4gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSBvbmx5IGlmCiAgICAoIG1vZGUgJmFtcDsgaW9zX2Jhc2U6Om91dCkgIT0gMC4gVG8gbWFrZSBhIHdyaXRlIHBvc2l0aW9uCiAgICBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbiByZWFsbG9jYXRlcyAob3IgaW5pdGlhbGx5IGFsbG9jYXRlcykgYW4KICAgIGFycmF5IG9iamVjdCB3aXRoIGEgc3VmZmljaWVudCBudW1iZXIgb2YgZWxlbWVudHMgdG8gaG9sZCB0aGUKICAgIGN1cnJlbnQgYXJyYXkgb2JqZWN0IChpZiBhbnkpLCBwbHVzIG9uZSBhZGRpdGlvbmFsIHdyaXRlIHBvc2l0aW9uLgogICAgSWYgKCBtb2RlICZhbXA7IGlvc19iYXNlOjppbikgIT0gMCwgdGhlIGZ1bmN0aW9uIGFsdGVycyB0aGUgcmVhZCBlbmQKICAgIHBvaW50ZXIgZWdwdHIoKSB0byBwb2ludCBqdXN0IHBhc3QgdGhlIG5ldyB3cml0ZSBwb3NpdGlvbiAoYXMKICAgIGRvZXMgdGhlIHdyaXRlIGVuZCBwb2ludGVyIGVwcHRyKCkpLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHNlbnRlbmNlcyAicGx1cyBvbmUgYWRkaXRpb25hbCB3cml0ZSBwb3NpdGlvbi4iIGFuZCBlc3BlY2lhbGx5CiAgICAiKGFzIGRvZXMgdGhlIHdyaXRlIGVuZCBwb2ludGVyIGVwcHRyKCkpIiBDT1VMRCBieSBpbnRlcnByZXRlZAogICAgKGFuZCBpcyBpbnRlcnByZXRlZCBieSBhdCBsZWFzdCBteSBsaWJyYXJ5IHZlbmRvcikgYXM6CjwvcD4KCjxibG9ja3F1b3RlPgogICAgcG9zdC1jb25kaXRpb246IGVwcHRyKCkgPT0gcHB0cigpKzEKPC9ibG9ja3F1b3RlPgoKPHA+ClRoaXMgV09VTEQgZm9yY2Ugc3B1dGMoKSB0byBjYWxsIHRoZSB2aXJ0dWFsIG92ZXJmbG93KCkgZWFjaCB0aW1lLgo8L3A+Cgo8cD5UaGUgcHJvcG9zZWQgY2hhbmdlIGFsc28gYWZmZWN0cyBEZWZlY3QgUmVwb3J0IDE2OS48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjI3LjcuMS4xLzIgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgoyLSBOb3RlczogVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBubyBhcnJheSBvYmplY3QuCjwvYmxvY2txdW90ZT4KCjxwPgp0bzoKPC9wPgoKPGJsb2NrcXVvdGU+CjItIFBvc3Rjb25kaXRpb246IHN0cigpID09ICIiLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KMjcuNy4xLjEvMyBDaGFuZ2U6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTMtIEVmZmVjdHM6IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZiwKaW5pdGlhbGl6aW5nIHRoZSBiYXNlIGNsYXNzIHdpdGggYmFzaWNfc3RyZWFtYnVmKCkKKGxpYi5zdHJlYW1idWYuY29ucyksIGFuZCBpbml0aWFsaXppbmcgbW9kZSB3aXRoIHdoaWNoIC4gVGhlbiBjb3BpZXMKdGhlIGNvbnRlbnQgb2Ygc3RyIGludG8gdGhlIGJhc2ljX3N0cmluZ2J1ZiB1bmRlcmx5aW5nIGNoYXJhY3RlcgpzZXF1ZW5jZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgc2VxdWVuY2VzIGFjY29yZGluZyB0bwp3aGljaC4gSWYgd2hpY2ggJmFtcDsgaW9zX2Jhc2U6Om91dCBpcyB0cnVlLCBpbml0aWFsaXplcyB0aGUgb3V0cHV0CnNlcXVlbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc2VxdWVuY2UuIElmIHdoaWNoICZhbXA7IGlvc19iYXNlOjppbiBpcwp0cnVlLCBpbml0aWFsaXplcyB0aGUgaW5wdXQgc2VxdWVuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0zLSBFZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyBiYXNpY19zdHJpbmdidWYsCmluaXRpYWxpemluZyB0aGUgYmFzZSBjbGFzcyB3aXRoIGJhc2ljX3N0cmVhbWJ1ZigpCihsaWIuc3RyZWFtYnVmLmNvbnMpLCBhbmQgaW5pdGlhbGl6aW5nIG1vZGUgd2l0aCB3aGljaC4gVGhlbiBjb3BpZXMKdGhlIGNvbnRlbnQgb2Ygc3RyIGludG8gdGhlIGJhc2ljX3N0cmluZ2J1ZiB1bmRlcmx5aW5nIGNoYXJhY3RlcgpzZXF1ZW5jZS4gSWYgd2hpY2ggJmFtcDsgaW9zX2Jhc2U6Om91dCBpcyB0cnVlLCBpbml0aWFsaXplcyB0aGUgb3V0cHV0CnNlcXVlbmNlIHN1Y2ggdGhhdCBwYmFzZSgpIHBvaW50cyB0byB0aGUgZmlyc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIsCmVwcHRyKCkgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLCBhbmQgaWYgKHdoaWNoICZhbXA7Cmlvc19iYXNlOjphdGUpIGlzIHRydWUsIHBwdHIoKSBpcyBzZXQgZXF1YWwgdG8KZXBwdHIoKSBlbHNlIHBwdHIoKSBpcyBzZXQgZXF1YWwgdG8gcGJhc2UoKS4gSWYgd2hpY2ggJmFtcDsgaW9zX2Jhc2U6OmluCmlzIHRydWUsIGluaXRpYWxpemVzIHRoZSBpbnB1dCBzZXF1ZW5jZSBzdWNoIHRoYXQgZWJhY2soKSBhbmQgZ3B0cigpCnBvaW50IHRvIHRoZSBmaXJzdCB1bmRlcmx5aW5nIGNoYXJhY3RlciBhbmQgZWdwdHIoKSBwb2ludHMgb25lIHBhc3QKdGhlIGxhc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+MjcuNy4xLjIvMSBDaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMS0gUmV0dXJuczogQSBiYXNpY19zdHJpbmcgb2JqZWN0IHdob3NlIGNvbnRlbnQgaXMgZXF1YWwgdG8gdGhlCmJhc2ljX3N0cmluZ2J1ZiB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZS4gSWYgdGhlIGJ1ZmZlciBpcyBvbmx5CmNyZWF0ZWQgaW4gaW5wdXQgbW9kZSwgdGhlIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlIGlzIGVxdWFsIHRvCnRoZSBpbnB1dCBzZXF1ZW5jZTsgb3RoZXJ3aXNlLCBpdCBpcyBlcXVhbCB0byB0aGUgb3V0cHV0IHNlcXVlbmNlLiBJbgpjYXNlIG9mIGFuIGVtcHR5IHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucwpiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xLSBSZXR1cm5zOiBBIGJhc2ljX3N0cmluZyBvYmplY3Qgd2hvc2UgY29udGVudCBpcyBlcXVhbCB0byB0aGUKYmFzaWNfc3RyaW5nYnVmIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlLiBJZiB0aGUgYmFzaWNfc3RyaW5nYnVmCndhcyBjcmVhdGVkIG9ubHkgaW4gaW5wdXQgbW9kZSwgdGhlIHJlc3VsdGFudCBiYXNpY19zdHJpbmcgY29udGFpbnMKdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUgcmFuZ2UgW2ViYWNrKCksIGVncHRyKCkpLiAgSWYgdGhlCmJhc2ljX3N0cmluZ2J1ZiB3YXMgY3JlYXRlZCB3aXRoICh3aGljaCAmYW1wOyBpb3NfYmFzZTo6b3V0KSBiZWluZyB0cnVlCnRoZW4gdGhlIHJlc3VsdGFudCBiYXNpY19zdHJpbmcgY29udGFpbnMgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUKcmFuZ2UgW3BiYXNlKCksIGhpZ2hfbWFyaykgd2hlcmUgaGlnaF9tYXJrIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIG9uZQpwYXN0IHRoZSBoaWdoZXN0IGluaXRpYWxpemVkIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLiAgQ2hhcmFjdGVycyBjYW4KYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIHRocm91Z2ggd3JpdGluZyB0byB0aGUgc3RyZWFtLCBvciBieQpjb25zdHJ1Y3RpbmcgdGhlIGJhc2ljX3N0cmluZ2J1ZiB3aXRoIGEgYmFzaWNfc3RyaW5nLCBvciBieSBjYWxsaW5nCnRoZSBzdHIoYmFzaWNfc3RyaW5nKSBtZW1iZXIgZnVuY3Rpb24uICBJbiB0aGUgY2FzZSBvZiBjYWxsaW5nIHRoZQpzdHIoYmFzaWNfc3RyaW5nKSBtZW1iZXIgZnVuY3Rpb24sIGFsbCBjaGFyYWN0ZXJzIGluaXRpYWxpemVkIHByaW9yIHRvCnRoZSBjYWxsIGFyZSBub3cgY29uc2lkZXJlZCB1bmluaXRpYWxpemVkIChleGNlcHQgZm9yIHRob3NlCmNoYXJhY3RlcnMgcmUtaW5pdGlhbGl6ZWQgYnkgdGhlIG5ldyBiYXNpY19zdHJpbmcpLiAgT3RoZXJ3aXNlIHRoZQpiYXNpY19zdHJpbmdidWYgaGFzIGJlZW4gY3JlYXRlZCBpbiBuZWl0aGVyIGlucHV0IG5vciBvdXRwdXQgbW9kZSBhbmQKYSB6ZXJvIGxlbmd0aCBiYXNpY19zdHJpbmcgaXMgcmV0dXJuZWQuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CjI3LjcuMS4yLzIgQ2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0yLSBFZmZlY3RzOiBJZiB0aGUgYmFzaWNfc3RyaW5nYnVmJ3MgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMKbm90IGVtcHR5LCBkZWFsbG9jYXRlcyBpdC4gVGhlbiBjb3BpZXMgdGhlIGNvbnRlbnQgb2YgcyBpbnRvIHRoZQpiYXNpY19zdHJpbmdidWYgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UgYW5kIGluaXRpYWxpemVzIHRoZQppbnB1dCBhbmQgb3V0cHV0IHNlcXVlbmNlcyBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgc3RvcmVkIHdoZW4gY3JlYXRpbmcKdGhlIGJhc2ljX3N0cmluZ2J1ZiBvYmplY3QuIElmIChtb2RlJmFtcDtpb3NfYmFzZTo6b3V0KSBpcyB0cnVlLCB0aGVuCmluaXRpYWxpemVzIHRoZSBvdXRwdXQgc2VxdWVuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZS4gSWYKKG1vZGUmYW1wO2lvc19iYXNlOjppbikgaXMgdHJ1ZSwgdGhlbiBpbml0aWFsaXplcyB0aGUgaW5wdXQgc2VxdWVuY2Ugd2l0aAp0aGUgdW5kZXJseWluZyBzZXF1ZW5jZS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0yLSBFZmZlY3RzOiBDb3BpZXMgdGhlIGNvbnRlbnQgb2YgcyBpbnRvIHRoZSBiYXNpY19zdHJpbmdidWYKdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuIElmIG1vZGUgJmFtcDsgaW9zX2Jhc2U6Om91dCBpcyB0cnVlLAppbml0aWFsaXplcyB0aGUgb3V0cHV0IHNlcXVlbmNlIHN1Y2ggdGhhdCBwYmFzZSgpIHBvaW50cyB0byB0aGUgZmlyc3QKdW5kZXJseWluZyBjaGFyYWN0ZXIsIGVwcHRyKCkgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0IHVuZGVybHlpbmcKY2hhcmFjdGVyLCBhbmQgaWYgKG1vZGUgJmFtcDsgaW9zX2Jhc2U6OmF0ZSkgaXMgdHJ1ZSwKcHB0cigpIGlzIHNldCBlcXVhbCB0byBlcHB0cigpIGVsc2UgcHB0cigpIGlzIHNldCBlcXVhbCB0byBwYmFzZSgpLiBJZgptb2RlICZhbXA7IGlvc19iYXNlOjppbiBpcyB0cnVlLCBpbml0aWFsaXplcyB0aGUgaW5wdXQgc2VxdWVuY2Ugc3VjaCB0aGF0CmViYWNrKCkgYW5kIGdwdHIoKSBwb2ludCB0byB0aGUgZmlyc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIgYW5kIGVncHRyKCkKcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPlJlbW92ZSAyNy4yLjEuMi8zLiAgKFNhbWUgcmF0aW9uYWxlIGFzIGlzc3VlIDIzODogaW5jb3JyZWN0IGFuZCB1bm5lY2Vzc2FyeS4pPC9wPgoKPHA+MjcuNy4xLjMvMSBDaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgoxLSBSZXR1cm5zOiBJZiB0aGUgaW5wdXQgc2VxdWVuY2UgaGFzIGEgcmVhZCBwb3NpdGlvbiBhdmFpbGFibGUsCnJldHVybnMgdHJhaXRzOjp0b19pbnRfdHlwZSgqZ3B0cigpKS4gIE90aGVyd2lzZSwgcmV0dXJucwp0cmFpdHM6OmVvZigpLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KMS0gUmV0dXJuczogSWYgdGhlIGlucHV0IHNlcXVlbmNlIGhhcyBhIHJlYWQgcG9zaXRpb24gYXZhaWxhYmxlLApyZXR1cm5zIHRyYWl0czo6dG9faW50X3R5cGUoKmdwdHIoKSkuICBPdGhlcndpc2UsIHJldHVybnMKdHJhaXRzOjplb2YoKS4gIEFueSBjaGFyYWN0ZXIgaW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdoaWNoIGhhcyBiZWVuCmluaXRpYWxpemVkIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgaW5wdXQgc2VxdWVuY2UuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+MjcuNy4xLjMvOSBDaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotOS0gTm90ZXM6IFRoZSBmdW5jdGlvbiBjYW4gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSBvbmx5IGlmICgKbW9kZSAmYW1wOyBpb3NfYmFzZTo6b3V0KSAhPSAwLiBUbyBtYWtlIGEgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlLCB0aGUKZnVuY3Rpb24gcmVhbGxvY2F0ZXMgKG9yIGluaXRpYWxseSBhbGxvY2F0ZXMpIGFuIGFycmF5IG9iamVjdCB3aXRoIGEKc3VmZmljaWVudCBudW1iZXIgb2YgZWxlbWVudHMgdG8gaG9sZCB0aGUgY3VycmVudCBhcnJheSBvYmplY3QgKGlmCmFueSksIHBsdXMgb25lIGFkZGl0aW9uYWwgd3JpdGUgcG9zaXRpb24uIElmICggbW9kZSAmYW1wOyBpb3NfYmFzZTo6aW4pICE9CjAsIHRoZSBmdW5jdGlvbiBhbHRlcnMgdGhlIHJlYWQgZW5kIHBvaW50ZXIgZWdwdHIoKSB0byBwb2ludCBqdXN0IHBhc3QKdGhlIG5ldyB3cml0ZSBwb3NpdGlvbiAoYXMgZG9lcyB0aGUgd3JpdGUgZW5kIHBvaW50ZXIgZXBwdHIoKSkuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotOS0gVGhlIGZ1bmN0aW9uIGNhbiBtYWtlIGEgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlIG9ubHkgaWYgKCBtb2RlICZhbXA7Cmlvc19iYXNlOjpvdXQpICE9IDAuIFRvIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbgpyZWFsbG9jYXRlcyAob3IgaW5pdGlhbGx5IGFsbG9jYXRlcykgYW4gYXJyYXkgb2JqZWN0IHdpdGggYSBzdWZmaWNpZW50Cm51bWJlciBvZiBlbGVtZW50cyB0byBob2xkIHRoZSBjdXJyZW50IGFycmF5IG9iamVjdCAoaWYgYW55KSwgcGx1cyBvbmUKYWRkaXRpb25hbCB3cml0ZSBwb3NpdGlvbi4gSWYgKCBtb2RlICZhbXA7IGlvc19iYXNlOjppbikgIT0gMCwgdGhlCmZ1bmN0aW9uIGFsdGVycyB0aGUgcmVhZCBlbmQgcG9pbnRlciBlZ3B0cigpIHRvIHBvaW50IGp1c3QgcGFzdCB0aGUKbmV3IHdyaXRlIHBvc2l0aW9uLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjI3LjcuMS4zLzEyIENoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xMi0gXyBJZiAobmV3b2ZmICsgb2ZmKSAmbHQ7IDAsIG9yICh4ZW5kIC0geGJlZykgJmx0OyAobmV3b2ZmICsgb2ZmKSwgdGhlCnBvc2l0aW9uaW5nIG9wZXJhdGlvbiBmYWlscy4gT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gYXNzaWducyB4YmVnICsKbmV3b2ZmICsgb2ZmIHRvIHRoZSBuZXh0IHBvaW50ZXIgeG5leHQgLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEyLSBfIElmIChuZXdvZmYgKyBvZmYpICZsdDsgMCwgb3IgaWYgKG5ld29mZiArIG9mZikgcmVmZXJzIHRvIGFuCnVuaW5pdGlhbGl6ZWQgY2hhcmFjdGVyIChhcyBkZWZpbmVkIGluIDI3LjcuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYubWVtYmVycyI+IFtsaWIuc3RyaW5nYnVmLm1lbWJlcnNdPC9hPgpwYXJhZ3JhcGggMSksIHRoZSBwb3NpdGlvbmluZyBvcGVyYXRpb24gZmFpbHMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uCmFzc2lnbnMgeGJlZyArIG5ld29mZiArIG9mZiB0byB0aGUgbmV4dCBwb2ludGVyIHhuZXh0IC4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1Lb25hOiBIb3dhcmQgcHJvdmlkZWQgd29yZGluZy4gIEF0IEtvbmEgdGhlIExXRyBhZ3JlZWQgdGhhdAogIHNvbWV0aGluZyBhbG9uZyB0aGVzZSBsaW5lcyB3YXMgYSBnb29kIGlkZWEsIGJ1dCB0aGUgb3JpZ2luYWwKICBwcm9wb3NlZCByZXNvbHV0aW9uIGRpZG4ndCBzYXkgZW5vdWdoIGFib3V0IHRoZSBlZmZlY3Qgb2YgdmFyaW91cwogIG1lbWJlciBmdW5jdGlvbnMgb24gdGhlIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlcy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgY3VycmVudCBiYXNpY19zdHJpbmdidWYgZGVzY3JpcHRpb24gaXMgb3Zlci1jb25zdHJhaW5lZCBpbiBzdWNoCmEgd2F5IGFzIHRvIHByb2hpYml0IHZlbmRvcnMgZnJvbSBtYWtpbmcgdGhpcyB0aGUgaGlnaC1wZXJmb3JtYW5jZQppbi1tZW1vcnkgc3RyZWFtIGl0IHdhcyBtZWFudCB0byBiZS4gIFRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQKdGhlIHBvaW50ZXJzOiBlYmFjaygpLCBncHRyKCksIGVncHRyKCksIHBiYXNlKCksIHBwdHIoKSwgZXBwdHIoKSBhcmUKb2JzZXJ2YWJsZSBmcm9tIGEgZGVyaXZlZCBjbGllbnQsIGFuZCB0aGUgY3VycmVudCBkZXNjcmlwdGlvbgpyZXN0cmljdHMgdGhlIHJhbmdlIFtwYmFzZSgpLCBlcHB0cigpKSBmcm9tIGJlaW5nIGdyb3duIGdlb21ldHJpY2FsbHkuClRoaXMgY2hhbmdlIGFsbG93cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIGdlb21ldHJpYyBncm93dGggb2YgdGhpcwpyYW5nZS48L3A+Cgo8cD5CYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXM6IFRoZXNlIGNoYW5nZXMgd2lsbCBicmVhayBjb2RlIHRoYXQKZGVyaXZlcyBmcm9tIGJhc2ljX3N0cmluZ2J1Ziwgb2JzZXJ2ZXMgZXBwdHIoKSwgYW5kIGRlcGVuZHMgdXBvbgpbcGJhc2UoKSwgZXBwdHIoKSkgZ3Jvd2luZyBieSBvbmUgY2hhcmFjdGVyIG9uIGVhY2ggY2FsbCB0byBvdmVyZmxvdygpCihpLmUuIHRlc3Qgc3VpdGVzKS4gIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKaXNzdWVzLjwvcD4KCjxwPjI3LjcuMS4xLzI6IFRoZSBub24tbm9ybWF0aXZlIG5vdGUgaXMgbm9uLWJpbmRpbmcsIGFuZCBpZiBpdCB3ZXJlCmJpbmRpbmcsIHdvdWxkIGJlIG92ZXIgc3BlY2lmaWNhdGlvbi4gIFRoZSByZWNvbW1lbmRlZCBjaGFuZ2UgZm9jdXNlcwpvbiB0aGUgaW1wb3J0YW50IG9ic2VydmFibGUgZmFjdC48L3A+Cgo8cD4yNy43LjEuMS8zOiBUaGlzIGNoYW5nZSBkb2VzIHR3byB0aGluZ3M6IDEuICBJdCBkZXNjcmliZXMgZXhhY3RseQp3aGF0IG11c3QgaGFwcGVuIGluIHRlcm1zIG9mIHRoZSBzZXF1ZW5jZXMuICBUaGUgdGVybXMgImlucHV0CnNlcXVlbmNlIiBhbmQgIm91dHB1dCBzZXF1ZW5jZSIgYXJlIG5vdCB3ZWxsIGRlZmluZWQuICAyLiAgSXQKaW50cm9kdWNlcyBhIGNvbW1vbiBleHRlbnNpb246IG9wZW4gd2l0aCBhcHAgb3IgYXRlIG1vZGUuICBJIGNvbmN1cgp3aXRoIGlzc3VlIDIzOCB0aGF0IHBhcmFncmFwaCA0IGlzIGJvdGggd3JvbmcgYW5kIHVubmVjZXNzYXJ5LjwvcD4KCjxwPjI3LjcuMS4yLzE6IFRoaXMgY2hhbmdlIGlzIHRoZSBjcnV4IG9mIHRoZSBlZmZpY2llbmN5IGlzc3VlLiAgVGhlCnJlc3VsdGFudCBiYXNpY19zdHJpbmcgaXMgbm90IGRlcGVuZGVudCB1cG9uIGVwcHRyKCksIGFuZCB0aHVzCmltcGxlbWVudG9ycyBhcmUgZnJlZSB0byBncm93IHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBnZW9tZXRyaWNhbGx5CmR1cmluZyBvdmVyZmxvdygpICphbmQqIHBsYWNlIGVwcHRyKCkgYXQgdGhlIGVuZCBvZiB0aGF0IGJ1ZmZlci48L3A+Cgo8cD4yNy43LjEuMi8yOiAgTWFkZSBjb25zaXN0ZW50IHdpdGggdGhlIHByb3Bvc2VkIDI3LjcuMS4xLzMuPC9wPgoKPHA+MjcuNy4xLjMvMTogQ2xhcmlmaWVzIHRoYXQgY2hhcmFjdGVycyB3cml0dGVuIHRvIHRoZSBzdHJlYW0gYmV5b25kCnRoZSBpbml0aWFsbHkgc3BlY2lmaWVkIHN0cmluZyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nIGluIGFuIGkvbwpiYXNpY19zdHJlYW1idWYuPC9wPgoKPHA+MjcuNy4xLjMvOTogTWFkZSBub3JtYXRpdmUgYnkgcmVtb3ZpbmcgIk5vdGVzOiIsIGFuZCByZW1vdmVkIHRoZQp0cmFpbGluZyBwYXJlbnRoZXRpY2FsIGNvbW1lbnQgY29uY2VybmluZyBlcHB0cigpLjwvcD4KCjxwPjI3LjcuMS4zLzEyOiBSZXN0cmljdGluZyB0aGUgcG9zaXRpb25pbmcgdG8gW3hiZWcsIHhlbmQpIGlzIG5vCmxvbmdlciBhbGxvd2FibGUgc2luY2UgW3BiYXNlKCksIGVwcHRyKCkpIG1heSBub3cgY29udGFpbgp1bmluaXRpYWxpemVkIGNoYXJhY3RlcnMuICBQb3NpdGlvbmluZyBpcyBvbmx5IGFsbG93YWJsZSBvdmVyIHRoZQppbml0aWFsaXplZCByYW5nZS48L3A+Cjxocj4KPGEgbmFtZT0iNDM0Ij48aDM+NDM0LiZuYnNwO2JpdHNldDo6dG9fc3RyaW5nKCkgaGFyZCB0byB1c2U8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5tZW1iZXJzIj4gW2xpYi5iaXRzZXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBPY3QgMjAwMzwvcD4KPHA+Ckl0IGhhcyBiZWVuIHBvaW50ZWQgb3V0IGEgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGJpdHNldCB0b19zdHJpbmcoKSBtZW1iZXIKZnVuY3Rpb24gdGVtcGxhdGUgaXMgdGVkaW91cyB0byB1c2Ugc2luY2UgY2FsbGVycyBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUKZW50aXJlIHRlbXBsYXRlIGFyZ3VtZW50IGxpc3QgKDMgYXJndW1lbnRzKS4gQXQgbGVhc3QgdHdvIGltcGxlbWVudGF0aW9ucwpwcm92aWRlIGEgbnVtYmVyIG9mIG92ZXJsb2FkcyBvZiB0aGlzIHRlbXBsYXRlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIG9yZGVyIHRvIGFsbG93IGNhbGxlcnMgdG8gc3BlY2lmeSBubyB0ZW1wbGF0ZSBhcmd1bWVudHMgYXQgYWxsLCBqdXN0IHRoZQpmaXJzdCBvbmUgKGNoYXJUKSwgb3IgdGhlIGZpcnN0IDIgKGNoYXJUIGFuZCB0cmFpdHMpLCBpbiBhZGRpdGlvbiB0byBhbGwKdGhyZWUgdGVtcGxhdGUgYXJndW1lbnRzLCBhZGQgdGhlIGZvbGxvd2luZyB0aHJlZSBvdmVybG9hZHMgdG8gYm90aCB0aGUKaW50ZXJmYWNlIChkZWNsYXJhdGlvbnMgb25seSkgb2YgdGhlIGNsYXNzIHRlbXBsYXRlIGJpdHNldCBhcyB3ZWxsIGFzIHRvCnNlY3Rpb24gMjMuMy41LjIsIGltbWVkaWF0ZWx5IGFmdGVyIHAzNCwgdGhlIFJldHVybnMgY2xhdXNlIG9mIHRoZSBleGlzdGluZwp0b19zdHJpbmcoKSBtZW1iZXIgZnVuY3Rpb24gdGVtcGxhdGU6PC9wPgoKPHByZT4gICAgdGVtcGxhdGUgJmx0O2NsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7CiAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsIHRyYWl0cywgYWxsb2NhdG9yJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgICB0b19zdHJpbmcgKCkgY29uc3Q7CgogICAgLTM0LjEtIFJldHVybnM6IHRvX3N0cmluZyZsdDtjaGFyVCwgdHJhaXRzLCBhbGxvY2F0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsoKS4KCiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsIGNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0OywgYWxsb2NhdG9yJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgICB0b19zdHJpbmcgKCkgY29uc3Q7CgogICAgLTM0LjItIFJldHVybnM6IHRvX3N0cmluZyZsdDtjaGFyVCwgY2hhcl90cmFpdHMmbHQ7Y2hhclQmZ3Q7LCBhbGxvY2F0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsoKS4KCiAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhciwgY2hhcl90cmFpdHMmbHQ7Y2hhciZndDssIGFsbG9jYXRvciZsdDtjaGFyJmd0OyAmZ3Q7CiAgICB0b19zdHJpbmcgKCkgY29uc3Q7CgogICAgLTM0LjMtIFJldHVybnM6IHRvX3N0cmluZyZsdDtjaGFyLCBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0OywgYWxsb2NhdG9yJmx0O2NoYXImZ3Q7ICZndDsoKS4KPC9wcmU+Cgo8cD48aT5bS29uYTogdGhlIExXRyBhZ3JlZXMgdGhhdCB0aGlzIGlzIGFuIGltcHJvdmVtZW50IG92ZXIgdGhlCiAgc3RhdHVzIHF1by4gIERpZXRtYXIgdGhvdWdodCBhYm91dCBhbiBhbHRlcm5hdGl2ZSB1c2luZyBhIHByb3h5CiAgb2JqZWN0IGJ1dCBub3cgYmVsaWV2ZXMgdGhhdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBhYm92ZSBpcyB0aGUKICByaWdodCBjaG9pY2UuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI0MzUiPjxoMz40MzUuJm5ic3A7YnVnIGluIERSIDI1PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy43LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuaW8iPiBbbGliLnN0cmluZy5pb108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBPY3QgMjAwMzwvcD4KCjxwPgpJdCBoYXMgYmVlbiBwb2ludGVkIG91dCB0aGF0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluIERSIDI1IG1heSBub3QgYmUKcXVpdGUgdXAgdG8gc251ZmY6IDxicj4KaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDAzLTA5L21zZzAwMTQ3Lmh0bWwKaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjU8YnI+CjwvcD4KCjxwPgpJdCBsb29rcyBsaWtlIFBldHVyIGlzIHJpZ2h0LiBUaGUgY29tcGxldGUgY29ycmVjdGVkIHRleHQgaXMgY29waWVkIGJlbG93LgpJIHRoaW5rIHdlIG1heSBoYXZlIGhhdmUgYmVlbiBjb25mdXNlZCBieSB0aGUgcmVmZXJlbmNlIHRvIDIyLjIuMi4yLjIgYW5kCnRoZSBzdWJzZXF1ZW50IGRlc2NyaXB0aW9uIG9mIGBuJyB3aGljaCBhY3R1YWxseSB0YWxrcyBhYm91dCB0aGUgc2Vjb25kCmFyZ3VtZW50IHRvIHNwdXRuKCksIG5vdCBhYm91dCB0aGUgbnVtYmVyIG9mIGZpbGwgY2hhcmFjdGVycyB0byBwYWQgd2l0aC4KPC9wPgoKPHA+ClNvIHRoZSBxdWVzdGlvbiBpczogd2FzIHRoZSBvcmlnaW5hbCB0ZXh0IGNvcnJlY3Q/IElmIHRoZSBpbnRlbnQgd2FzIHRvCmZvbGxvdyBjbGFzc2ljIGlvc3RyZWFtcyB0aGVuIGl0IG1vc3QgbGlrZWx5IHdhc24ndCwgc2luY2Ugc2V0dGluZyB3aWR0aCgpCnRvIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgZG9lc24ndCB0cnVuY2F0ZSBpdCBvbiBvdXRwdXQuIFRoaXMKaXMgYWxzbyB0aGUgYmVoYXZpb3Igb2YgbW9zdCBpbXBsZW1lbnRhdGlvbnMgKGV4Y2VwdCBmb3IgU0dJJ3Mgc3RhbmRhcmQKaW9zdHJlYW1zIHdoZXJlIHRoZSBvcGVyYXRvciBkb2VzIHRydW5jYXRlKS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdGV4dCBpbiAyMS4zLjcuOSwgcDQgZnJvbTwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgSWYgYm9vbChrKSBpcyB0cnVlLCBpbnNlcnRzIGNoYXJhY3RlcnMgYXMgaWYgYnkgY2FsbGluZwogICAgb3MucmRidWYoKS0mZ3Q7c3B1dG4oc3RyLmRhdGEoKSwgbiksIHBhZGRpbmcgYXMgZGVzY3JpYmVkIGluIHN0YWdlIDMKICAgIG9mIGxpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzLCB3aGVyZSBuIGlzIHRoZSBsYXJnZXIgb2Ygb3Mud2lkdGgoKQogICAgYW5kIHN0ci5zaXplKCk7IAogICAgPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgSWYgYm9vbChrKSBpcyB0cnVlLCBkZXRlcm1pbmVzIHBhZGRpbmcgYXMgZGVzY3JpYmVkIGluCiAgICBsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscywgYW5kIHRoZW4gaW5zZXJ0cyB0aGUgcmVzdWx0aW5nCiAgICBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIDx0dD5zZXE8L3R0PiBhcyBpZiBieSBjYWxsaW5nCiAgICA8dHQ+b3MucmRidWYoKS0mZ3Q7c3B1dG4oc2VxLCBuKTwvdHQ+LCB3aGVyZSA8dHQ+bjwvdHQ+IGlzIHRoZSBsYXJnZXIgb2YKICAgIDx0dD5vcy53aWR0aCgpPC90dD4gYW5kIDx0dD5zdHIuc2l6ZSgpPC90dD47CiAgICAgPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IGl0IGFwcGVhcnMgdGhhdCBuZWl0aGVyIHRoZSBvcmlnaW5hbCB3b3JkaW5nLCBEUjI1LCBub3IgdGhlCiAgcHJvcG9zZWQgcmVzb2x1dGlvbiwgaXMgcXVpdGUgd2hhdCB3ZSB3YW50LiAgV2Ugd2FudCB0byBzYXkgdGhhdAogIHRoZSBzdHJpbmcgd2lsbCBiZSBvdXRwdXQsIHBhZGRlZCB0byBvcy53aWR0aCgpIGlmIG5lY2Vzc2FyeS4gIFdlCiAgZG9uJ3Qgd2FudCB0byBkdXBsaWNhdGUgdGhlIHBhZGRpbmcgcnVsZXMgaW4gY2xhdXNlIDIyLCBiZWNhdXNlCiAgdGhleSdyZSBjb21wbGljYXRlZCwgYnV0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBiZWNhdXNlIHRoZXkgd2VyZW4ndAogIHF1aXRlIHdyaXR0ZW4gd2l0aCBxdWl0ZSB0aGlzIGNhc2UgaW4gbWluZC4gIFdlIG5lZWQgdG8gc2F5IHdoYXQKICB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGlzLCBhbmQgdGhlbiBkZWZlciB0byBjbGF1c2UgMjIuICBQb3N0LUtvbmE6CiAgQmVuamFtaW4gcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDM2Ij48aDM+NDM2LiZuYnNwO2FyZSBjdi1xdWFsaWZpZWQgZmFjZXQgdHlwZXMgdmFsaWQgZmFjZXRzPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuZmFjZXQiPiBbbGliLmxvY2FsZS5mYWNldF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBPY3QgMjAwMzwvcD4KPHA+CklzICJjb25zdCBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7IiBhIHZhbGlkIHRlbXBsYXRlIGFyZ3VtZW50IHRvIGhhc19mYWNldCwgdXNlX2ZhY2V0LAphbmQgdGhlIGxvY2FsZSB0ZW1wbGF0ZSBjdG9yPyBBbmQgaWYgc28sIGRvZXMgaXQgZGVzaWduYXRlIHRoZSBzYW1lIEZhY2V0IGFzCnRoZSBub24tY29uc3QgInN0ZDo6Y3R5cGUmbHQ7Y2hhciZndDs/IiBXaGF0IGFib3V0ICJ2b2xhdGlsZSBzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7PyIKRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHk6IHNvbWUgZmFpbCB0byBjb21waWxlLCBvdGhlcnMKYWNjZXB0IHN1Y2ggdHlwZXMgYnV0IGJlaGF2ZSBpbmNvbnNpc3RlbnRseS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMi4xLjEuMS4yLCBwMSB0byByZWFkOjwvcD4KCjxwPlRlbXBsYXRlIHBhcmFtZXRlcnMgaW4gdGhpcyBjbGF1c2Ugd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGJlIGZhY2V0cwphcmUgdGhvc2UgbmFtZWQgRmFjZXQgaW4gZGVjbGFyYXRpb25zLiBBIHByb2dyYW0gdGhhdCBwYXNzZXMgYSB0eXBlCnRoYXQgaXMgbm90IGEgZmFjZXQsIG9yIGEgdHlwZSB0aGF0IHJlZmVycyB0byB2b2xhdGlsZS1xdWFsaWZpZWQKZmFjZXQsIGFzIGFuIChleHBsaWNpdCBvciBkZWR1Y2VkKSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gYSBsb2NhbGUKZnVuY3Rpb24gZXhwZWN0aW5nIGEgZmFjZXQsIGlzIGlsbC1mb3JtZWQuICBBIGNvbnN0LXF1YWxpZmllZCBmYWNldCBpcwphIHZhbGlkIHRlbXBsYXRlIGFyZ3VtZW50IHRvIGFueSBsb2NhbGUgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGEgRmFjZXQKdGVtcGxhdGUgcGFyYW1ldGVyLjwvcD4KCjxwPjxpPltLb25hOiBjaGFuZ2VkIHRoZSBsYXN0IHNlbnRlbmNlIGZyb20gYSBmb290bm90ZSB0byBub3JtYXRpdmUKdGV4dC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDM4Ij48aDM+NDM4LiZuYnNwO0FtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2VxdWVuY2UucmVxbXRzIj4gW2xpYi5zZXF1ZW5jZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBPY3QgMjAwMzwvcD4KCjxwPlNlY3Rpb24gMjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2VxdWVuY2UucmVxbXRzIj4gW2xpYi5zZXF1ZW5jZS5yZXFtdHNdPC9hPiwgcGFyYWdyYXBocyA5LTExLCBmaXhlZCB1cCB0aGUgcHJvYmxlbQpub3RpY2VkIHdpdGggc3RhdGVtZW50cyBsaWtlOjwvcD4KPHByZT52ZWN0b3ImbHQ7aW50Jmd0OyB2KDEwLCAxKTsKPC9wcmU+Cgo8cD5UaGUgaW50ZW50IG9mIHRoZSBhYm92ZSBzdGF0ZW1lbnQgd2FzIHRvIGNvbnN0cnVjdCB3aXRoOjwvcD4KPHByZT52ZWN0b3Ioc2l6ZV90eXBlLCBjb25zdCB2YWx1ZV90eXBlJmFtcDspOwo8L3ByZT4KCjxwPmJ1dCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZmFpbGVkIHRvIGNvbXBpbGUgYXMgdGhleSBib3VuZCB0bzo8L3A+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CnZlY3RvcihJbnB1dEl0ZXJhdG9yIGYsIElucHV0SXRlcmF0b3IgbCk7CjwvcHJlPgo8cD5pbnN0ZWFkLjwvcD4KCjxwPlBhcmFncmFwaHMgOS0xMSBzYXkgdGhhdCBpZiBJbnB1dEl0ZXJhdG9yIGlzIGFuIGludGVncmFsIHR5cGUsIHRoZW4gdGhlCm1lbWJlciB0ZW1wbGF0ZSBjb25zdHJ1Y3RvciB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzOjwvcD4KPHByZT52ZWN0b3ImbHQ7c3RhdGljX2Nhc3QmbHQ7c2l6ZV90eXBlJmd0OyhmKSwgc3RhdGljX2Nhc3QmbHQ7dmFsdWVfdHlwZSZndDsobCkpOwo8L3ByZT4KPHA+KGFuZCBzaW1pbGFybHkgZm9yIHRoZSBvdGhlciBtZW1iZXIgdGVtcGxhdGUgZnVuY3Rpb25zIG9mIHNlcXVlbmNlcykuPC9wPgoKPHA+VGhlcmUgaXMgYWxzbyBhIG5vdGUgdGhhdCBkZXNjcmliZXMgb25lIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZTo8L3A+CjxibG9ja3F1b3RlPgogICBPbmUgd2F5IHRoYXQgc2VxdWVuY2UgaW1wbGVtZW50b3JzIGNhbiBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQgaXMgdG8KICAgc3BlY2lhbGl6ZSB0aGUgbWVtYmVyIHRlbXBsYXRlIGZvciBldmVyeSBpbnRlZ3JhbCB0eXBlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IHZlY3Rvcgp7CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaXplX3R5cGU7CgogICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUpIHt9CiAgICAgdmVjdG9yKHNpemVfdHlwZSwgY29uc3QgVCZhbXA7KSB7fQoKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSSZndDsKICAgICB2ZWN0b3IoSSwgSSk7CgogICAgIC8vIC4uLgp9OwoKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CnRlbXBsYXRlICZsdDtjbGFzcyBJJmd0Owp2ZWN0b3ImbHQ7VCZndDs6OnZlY3RvcihJLCBJKSB7IC4uLiB9Cgp0ZW1wbGF0ZSAmbHQ7Jmd0Owp0ZW1wbGF0ZSAmbHQ7Jmd0Owp2ZWN0b3ImbHQ7aW50Jmd0Ozo6dmVjdG9yKGludCwgaW50KSB7IC4uLiB9Cgp0ZW1wbGF0ZSAmbHQ7Jmd0Owp0ZW1wbGF0ZSAmbHQ7Jmd0Owp2ZWN0b3ImbHQ7aW50Jmd0Ozo6dmVjdG9yKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyAuLi4gfQoKLy8gIC4uLgo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+TGFiZWwgdGhpcyBzb2x1dGlvbiAnQScuPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGFsc28gc2F5czo8L3A+CjxibG9ja3F1b3RlPgogTGVzcyBjdW1iZXJzb21lIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZXMgYWxzbyBleGlzdC4KPC9ibG9ja3F1b3RlPgo8cD4KQSBwb3B1bGFyIHRlY2huaXF1ZSBpcyB0byBub3Qgc3BlY2lhbGl6ZSBhcyBhYm92ZSwgYnV0IGluc3RlYWQgY2F0Y2gKZXZlcnkgY2FsbCB3aXRoIHRoZSBtZW1iZXIgdGVtcGxhdGUsIGRldGVjdCB0aGUgdHlwZSBvZiBJbnB1dEl0ZXJhdG9yLAphbmQgdGhlbiByZWRpcmVjdCB0byB0aGUgY29ycmVjdCBsb2dpYy4gIFNvbWV0aGluZyBsaWtlOgo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0Owp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSSZndDsKdmVjdG9yJmx0O1QmZ3Q7Ojp2ZWN0b3IoSSBmLCBJIGwpCnsKICAgICBjaG9vc2VfaW5pdChmLCBsLCBpbnQydHlwZSZsdDtpc19pbnRlZ3JhbCZsdDtJJmd0Ozo6dmFsdWUmZ3Q7KCkpOwp9Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKdGVtcGxhdGUgJmx0O2NsYXNzIEkmZ3Q7CnZlY3RvciZsdDtUJmd0Ozo6Y2hvb3NlX2luaXQoSSBmLCBJIGwsIGludDJ0eXBlJmx0O2ZhbHNlJmd0OykKewogICAgLy8gY29uc3RydWN0IHdpdGggaXRlcmF0b3JzCn0KCnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0Owp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSSZndDsKdmVjdG9yJmx0O1QmZ3Q7OjpjaG9vc2VfaW5pdChJIGYsIEkgbCwgaW50MnR5cGUmbHQ7dHJ1ZSZndDspCnsKICAgIHNpemVfdHlwZSBzeiA9IHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoZik7CiAgICB2YWx1ZV90eXBlIHYgPSBzdGF0aWNfY2FzdCZsdDt2YWx1ZV90eXBlJmd0OyhsKTsKICAgIC8vIGNvbnN0cnVjdCB3aXRoIHN6LHYKfQo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+TGFiZWwgdGhpcyBzb2x1dGlvbiAnQicuPC9wPgoKPHA+Qm90aCBvZiB0aGVzZSBzb2x1dGlvbnMgc29sdmUgdGhlIGNhc2UgdGhlIHN0YW5kYXJkIHNwZWNpZmljYWxseQptZW50aW9uczo8L3A+CjxwcmU+dmVjdG9yJmx0O2ludCZndDsgdigxMCwgMSk7ICAvLyBvaywgdmVjdG9yIHNpemUgMTAsIGluaXRpYWxpemVkIHRvIDEKPC9wcmU+Cgo8cD4KSG93ZXZlciwgKGFuZCBoZXJlIGlzIHRoZSBwcm9ibGVtKSwgdGhlIHR3byBzb2x1dGlvbnMgaGF2ZSBkaWZmZXJlbnQKYmVoYXZpb3IgaW4gc29tZSBjYXNlcyB3aGVyZSB0aGUgdmFsdWVfdHlwZSBvZiB0aGUgc2VxdWVuY2UgaXMgbm90IGFuCmludGVncmFsIHR5cGUuICBGb3IgZXhhbXBsZSBjb25zaWRlcjoKPC9wPgo8YmxvY2txdW90ZT48cHJlPiAgICAgcGFpciZsdDtjaGFyLCBjaGFyJmd0OyAgICAgICAgICAgICAgICAgICAgIHAoJ2EnLCAnYicpOwogICAgIHZlY3RvciZsdDt2ZWN0b3ImbHQ7cGFpciZsdDtjaGFyLCBjaGFyJmd0OyAmZ3Q7ICZndDsgICBkKCdhJywgJ2InKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KVGhlIHNlY29uZCBsaW5lIG9mIHRoaXMgc25pcHBldCBpcyBsaWtlbHkgYW4gZXJyb3IuICBTb2x1dGlvbiBBIGNhdGNoZXMKdGhlIGVycm9yIGFuZCByZWZ1c2VzIHRvIGNvbXBpbGUuICBUaGUgcmVhc29uIGlzIHRoYXQgdGhlcmUgaXMgbm8Kc3BlY2lhbGl6YXRpb24gb2YgdGhlIG1lbWJlciB0ZW1wbGF0ZSBjb25zdHJ1Y3RvciB0aGF0IGxvb2tzIGxpa2U6CjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7Jmd0Owp0ZW1wbGF0ZSAmbHQ7Jmd0Owp2ZWN0b3ImbHQ7dmVjdG9yJmx0O3BhaXImbHQ7Y2hhciwgY2hhciZndDsgJmd0OyAmZ3Q7Ojp2ZWN0b3IoY2hhciwgY2hhcikgeyAuLi4gfQo8L3ByZT4KCjxwPgpTbyB0aGUgZXhwcmVzc2lvbiBiaW5kcyB0byB0aGUgdW5zcGVjaWFsaXplZCBtZW1iZXIgdGVtcGxhdGUKY29uc3RydWN0b3IsIGFuZCB0aGVuIGZhaWxzIChjb21waWxlIHRpbWUpIGJlY2F1c2UgY2hhciBpcyBub3QgYW4KSW5wdXRJdGVyYXRvci4KPC9wPgoKPHA+ClNvbHV0aW9uIEIgY29tcGlsZXMgdGhlIGFib3ZlIGV4YW1wbGUgdGhvdWdoLiAgJ2EnIGlzIGNhc3RlZCB0byBhbgp1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIGFuZCB1c2VkIHRvIHNpemUgdGhlIG91dGVyIHZlY3Rvci4gICdiJyBpcwpzdGF0aWMgY2FzdGVkIHRvIHRoZSBpbm5lciB2ZWN0b3IgdXNpbmcgaXQncyBleHBsaWNpdCBjb25zdHJ1Y3RvcjoKPC9wPgoKPHByZT5leHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIG4pOwo8L3ByZT4KCjxwPgphbmQgc28geW91IGVuZCB1cCB3aXRoIGEgc3RhdGljX2Nhc3QmbHQ7c2l6ZV90eXBlJmd0OygnYScpIGJ5CnN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoJ2InKSBtYXRyaXguCjwvcD4KCjxwPgpJdCBpcyBjZXJ0YWlubHkgcG9zc2libGUgdGhhdCB0aGlzIGlzIHdoYXQgdGhlIGNvZGVyIGludGVuZGVkLiAgQnV0IHRoZQpleHBsaWNpdCBxdWFsaWZpZXIgb24gdGhlIGlubmVyIHZlY3RvciBoYXMgYmVlbiB0aHdhcnRlZCBhdCBhbnkgcmF0ZS4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCBpcyBub3QgY2xlYXIgd2hldGhlciB0aGUgZXhwcmVzc2lvbjoKPC9wPgoKPHByZT4gICAgIHZlY3RvciZsdDt2ZWN0b3ImbHQ7cGFpciZsdDtjaGFyLCBjaGFyJmd0OyAmZ3Q7ICZndDsgICBkKCdhJywgJ2InKTsKPC9wcmU+Cgo8cD4KKGFuZCBzaW1pbGFyIGV4cHJlc3Npb25zKSBhcmU6CjwvcD4KCjxvbD4KPGxpPiAgdW5kZWZpbmVkIGJlaGF2aW9yLjwvbGk+CjxsaT4gIGlsbGVnYWwgYW5kIG11c3QgYmUgcmVqZWN0ZWQuPC9saT4KPGxpPiAgbGVnYWwgYW5kIG11c3QgYmUgYWNjZXB0ZWQuPC9saT4KPC9vbD4KCjxwPk15IHByZWZlcmVuY2UgaXMgbGlzdGVkIGluIHRoZSBvcmRlciBwcmVzZW50ZWQuPC9wPgoKPHA+VGhlcmUgYXJlIHN0aWxsIG90aGVyIHRlY2huaXF1ZXMgZm9yIGltcGxlbWVudGluZyB0aGUgcmVxdWlyZW1lbnRzIG9mCnBhcmFncmFwaHMgOS0xMSwgbmFtZWx5IHRoZSAicmVzdHJpY3RlZCB0ZW1wbGF0ZSB0ZWNobmlxdWUiIChlLmcuCmVuYWJsZV9pZikuICBUaGlzIHRlY2huaXF1ZSBpcyB0aGUgbW9zdCBjb21wYWN0IGFuZCBlYXN5IHdheSBvZiBjb2RpbmcKdGhlIHJlcXVpcmVtZW50cywgYW5kIGhhcyB0aGUgYmVoYXZpb3Igb2YgIzIgKHJlamVjdHMgdGhlIGFib3ZlCmV4cHJlc3Npb24pLgo8L3A+Cgo8cD4KQ2hvb3NpbmcgMSB3b3VsZCBhbGxvdyBhbGwgaW1wbGVtZW50YXRpb24gdGVjaG5pcXVlcyBJJ20gYXdhcmUgb2YuCkNob29zaW5nIDIgd291bGQgYWxsb3cgb25seSBzb2x1dGlvbiAnQScgYW5kIHRoZSBlbmFibGVfaWYgdGVjaG5pcXVlLgpDaG9vc2luZyAzIHdvdWxkIGFsbG93IG9ubHkgc29sdXRpb24gJ0InLgo8L3A+Cgo8cD4KUG9zc2libGUgd29yZGluZyBmb3IgYSBmdXR1cmUgc3RhbmRhcmQgaWYgd2Ugd2FudGVkIHRvIGFjdGl2ZWx5IHJlamVjdAp0aGUgZXhwcmVzc2lvbiBhYm92ZSB3b3VsZCBiZSB0byBjaGFuZ2UgInN0YXRpY19jYXN0IiBpbiBwYXJhZ3JhcGhzCjktMTEgdG8gImltcGxpY2l0X2Nhc3QiIHdoZXJlIHRoYXQgaXMgZGVmaW5lZCBieToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIFUmZ3Q7CmlubGluZQpUIGltcGxpY2l0X2Nhc3QoY29uc3QgVSZhbXA7IHUpCnsKICAgICByZXR1cm4gdTsKfQo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKUmVwbGFjZSAyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+IHBhcmFncmFwaHMgOSAtIDExIHdpdGg6Cgo8cD5Gb3IgZXZlcnkgc2VxdWVuY2UgZGVmaW5lZCBpbiB0aGlzIGNsYXVzZSBhbmQgaW4gY2xhdXNlIGxpYi5zdHJpbmdzOjwvcD4KCjx1bD4KICA8bGk+CiAgICA8cD5JZiB0aGUgY29uc3RydWN0b3I8L3A+CiAgICAgICA8cHJlPiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgIFgoSW5wdXRJdGVyYXRvciBmLCBJbnB1dEl0ZXJhdG9yIGwsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgICA8L3ByZT4KICAgIDxwPmlzIGNhbGxlZCB3aXRoIGEgdHlwZSBJbnB1dEl0ZXJhdG9yIHRoYXQgZG9lcyBub3QgcXVhbGlmeSBhcwogICAgYW4gaW5wdXQgaXRlcmF0b3IsIHRoZW4gdGhlIGNvbnN0cnVjdG9yIHdpbGwgYmVoYXZlIGFzIGlmIHRoZQogICAgb3ZlcmxvYWRlZCBjb25zdHJ1Y3Rvcjo8L3A+CiAgICAgICA8cHJlPiAgICAgICBYKHNpemVfdHlwZSwgY29uc3QgdmFsdWVfdHlwZSZhbXA7ID0gdmFsdWVfdHlwZSgpLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgIDwvcHJlPgogICAgPHA+d2VyZSBjYWxsZWQgaW5zdGVhZCwgd2l0aCB0aGUgYXJndW1lbnRzIHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoZiksIGwgYW5kIGEsIHJlc3BlY3RpdmVseS48L3A+CiAgPC9saT4KCiAgPGxpPgogICAgPHA+SWYgdGhlIG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIGZvcm1zOjwvcD4KICAgICAgIDxwcmU+ICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OyAgICAgICAgICAvLyAgc3VjaCBhcyAgaW5zZXJ0KCkKICAgICAgIHJ0IGZ4MShpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGYsIElucHV0SXRlcmF0b3IgbCk7CgogICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7ICAgICAgICAgIC8vICBzdWNoIGFzICBhcHBlbmQoKSwgYXNzaWduKCkKICAgICAgIHJ0IGZ4MihJbnB1dEl0ZXJhdG9yIGYsIElucHV0SXRlcmF0b3IgbCk7CgogICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7ICAgICAgICAgIC8vICBzdWNoIGFzICByZXBsYWNlKCkKICAgICAgIHJ0IGZ4MyhpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgZiwgSW5wdXRJdGVyYXRvciBsKTsKICAgICAgIDwvcHJlPgogICAgPHA+YXJlIGNhbGxlZCB3aXRoIGEgdHlwZSBJbnB1dEl0ZXJhdG9yIHRoYXQgZG9lcyBub3QgcXVhbGlmeSBhcwogICAgYW4gaW5wdXQgaXRlcmF0b3IsIHRoZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmVoYXZlIGFzIGlmIHRoZQogICAgb3ZlcmxvYWRlZCBtZW1iZXIgZnVuY3Rpb25zOjwvcD4KICAgICAgIDxwcmU+ICAgICAgIHJ0IGZ4MShpdGVyYXRvciwgc2l6ZV90eXBlLCBjb25zdCB2YWx1ZV90eXBlJmFtcDspOwoKICAgICAgIHJ0IGZ4MihzaXplX3R5cGUsIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyk7CgogICAgICAgcnQgZngzKGl0ZXJhdG9yLCBpdGVyYXRvciwgc2l6ZV90eXBlLCBjb25zdCB2YWx1ZV90eXBlJmFtcDspOwogICAgICAgPC9wcmU+CiAgICA8cD53ZXJlIGNhbGxlZCBpbnN0ZWFkLCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cy48L3A+CiAgPC9saT4KPC91bD4KCjxwPkluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggdGhlIGFsdGVybmF0aXZlIGJpbmRpbmcgd2lsbCBmYWlsIGlmIGYgCmlzIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIFg6OnNpemVfdHlwZSBvciBpZiBsIGlzIG5vdCBpbXBsaWNpdGx5IApjb252ZXJ0aWJsZSB0byBYOjp2YWx1ZV90eXBlLjwvcD4KCjxwPgpUaGUgZXh0ZW50IHRvIHdoaWNoIGFuIGltcGxlbWVudGF0aW9uIGRldGVybWluZXMgdGhhdCBhIHR5cGUgY2Fubm90IGJlCmFuIGlucHV0IGl0ZXJhdG9yIGlzIHVuc3BlY2lmaWVkLCBleGNlcHQgdGhhdCBhcyBhIG1pbmltdW0gaW50ZWdyYWwKdHlwZXMgc2hhbGwgbm90IHF1YWxpZnkgYXMgaW5wdXQgaXRlcmF0b3JzLgo8L3A+CgoKCjxwPjxpPlsKS29uYTogYWdyZWVkIHRoYXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgcmVxdWlyZXMgPHR0PnYoJ2EnLCAnYicpPC90dD4KdG8gYmUgYWNjZXB0ZWQsIGFuZCBhbHNvIGFncmVlZCB0aGF0IHRoaXMgaXMgc3VycHJpc2luZyBiZWhhdmlvci4gIFRoZQpMV0cgY29uc2lkZXJlZCBzZXZlcmFsIG9wdGlvbnMsIGluY2x1ZGluZyBzb21ldGhpbmcgbGlrZQppbXBsaWNpdF9jYXN0LCB3aGljaCBkb2Vzbid0IGFwcGVhciB0byBiZSBxdWl0ZSB3aGF0IHdlIHdhbnQuICBXZQpjb25zaWRlcmVkIEhvd2FyZHMgdGhyZWUgb3B0aW9uczogYWxsb3cgYWNjZXB0YW5jZSBvciByZWplY3Rpb24sCnJlcXVpcmUgcmVqZWN0aW9uIGFzIGEgY29tcGlsZSB0aW1lIGVycm9yLCBhbmQgcmVxdWlyZSBhY2NlcHRhbmNlLiAgQnkKc3RyYXcgcG9sbCAoMS02LTEpLCB3ZSBjaG9zZSB0byByZXF1aXJlIGEgY29tcGlsZSB0aW1lIGVycm9yLgpQb3N0LUtvbmE6IEhvd2FyZCBwcm92aWRlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCjxwPjxpPlsKU3lkbmV5OiBUaGUgTFdHIGFncmVlZCB3aXRoIHRoaXMgZ2VuZXJhbCBkaXJlY3Rpb24sIGJ1dCB0aGVyZSB3YXMgc29tZQpkaXNjb21mb3J0IHdpdGggdGhlIHdvcmRpbmcgaW4gdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24uCkhvd2FyZCBzdWJtaXR0ZWQgbmV3IHdvcmRpbmcsIGFuZCB3ZSB3aWxsIHJldmlldyB0aGlzIGFnYWluIGluClJlZG1vbmQuCl08L2k+PC9wPgoKPHA+PGk+W1JlZG1vbmQ6IG9uZSB2ZXJ5IHNtYWxsIGNoYW5nZSBpbiB3b3JkaW5nOiB0aGUgZmlyc3QgYXJndW1lbnQKICBpcyBjYXN0IHRvIHNpemVfdC4gIFRoaXMgZml4ZXMgdGhlIHByb2JsZW0gb2Ygc29tZXRoaW5nIGxpa2UKICA8dHQ+dmVjdG9yJmx0O3ZlY3RvciZsdDtpbnQmZ3Q7ICZndDsoNSwgNSk8L3R0Piwgd2hlcmUgaW50IGlzIG5vdCAKICBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIHRoZSB2YWx1ZSB0eXBlLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZpeGVzOjwvcD4KCjxwcmU+ICB2ZWN0b3ImbHQ7aW50Jmd0OyB2KDEwLCAxKTsKPC9wcmU+Cgo8cD4Kc2luY2UgYXMgaW50ZWdyYWwgdHlwZXMgMTAgYW5kIDEgbXVzdCBiZSBkaXNxdWFsaWZpZWQgYXMgaW5wdXQKaXRlcmF0b3JzIGFuZCB0aGVyZWZvcmUgdGhlIChzaXplLHZhbHVlKSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgKGFzCmlmKS48L3A+Cgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBicmVha3M6PC9wPgoKPHByZT4gIHZlY3RvciZsdDt2ZWN0b3ImbHQ7VCZndDsgJmd0OyB2KDEwLCAxKTsKPC9wcmU+Cgo8cD4KYmVjYXVzZSB0aGUgaW50ZWdyYWwgdHlwZSAxIGlzIG5vdCAqaW1wbGljaXRseSogY29udmVydGlibGUgdG8KdmVjdG9yJmx0O1QmZ3Q7LiAgVGhlIHdvcmRpbmcgYWJvdmUgcmVxdWlyZXMgYSBkaWFnbm9zdGljLjwvcD4KCjxwPgpUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBsZWF2ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcgY29kZQp1bnNwZWNpZmllZC4KPC9wPgoKPHByZT4gIHN0cnVjdCBBCiAgewogICAgb3BlcmF0b3IgaW50ICgpIGNvbnN0IHtyZXR1cm4gMTA7fQogIH07CgogIHN0cnVjdCBCCiAgewogICAgQihBKSB7fQogIH07CgogIHZlY3RvciZsdDtCJmd0OyB2KEEoKSwgQSgpKTsKPC9wcmU+Cgo8cD4KVGhlIGltcGxlbWVudGF0aW9uIG1heSBvciBtYXkgbm90IGRldGVjdCB0aGF0IEEgaXMgbm90IGFuIGlucHV0Cml0ZXJhdG9yIGFuZCBlbXBsb3llZSB0aGUgKHNpemUsdmFsdWUpIGNvbnN0cnVjdG9yLiAgTm90ZSB0aG91Z2ggdGhhdAppbiB0aGUgYWJvdmUgZXhhbXBsZSBpZiB0aGUgQihBKSBjb25zdHJ1Y3RvciBpcyBxdWFsaWZpZWQgZXhwbGljaXQsCnRoZW4gdGhlIGltcGxlbWVudGF0aW9uIG11c3QgcmVqZWN0IHRoZSBjb25zdHJ1Y3RvciBhcyBBIGlzIG5vIGxvbmdlcgppbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIEIuCjwvcD4KPGhyPgo8YSBuYW1lPSI0NDEiPjxoMz40NDEuJm5ic3A7SXMgZnBvczo6c3RhdGUgY29uc3Q/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mcG9zIj4gW2xpYi5mcG9zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VmluY2VudCBMZWxvdXAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTm92IDIwMDM8L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mcG9zLm1lbWJlcnMiPiBbbGliLmZwb3MubWVtYmVyc108L2E+IGZwb3MmbHQ7c3RhdGVUJmd0Ozo6c3RhdGUoKSBpcyBkZWNsYXJlZApub24gY29uc3QsIGJ1dCBpbiBzZWN0aW9uIDI3LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZnBvcyI+IFtsaWIuZnBvc108L2E+IGl0IGlzIGRlY2xhcmVkIGNvbnN0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3MubWVtYmVycyI+IFtsaWIuZnBvcy5tZW1iZXJzXTwvYT4sIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgCjx0dD5mcG9zJmx0O3N0YXRlVCZndDs6OnN0YXRlKCk8L3R0PiB0byBjb25zdC4KPC9wPgo8aHI+CjxhIG5hbWU9IjQ0MiI+PGgzPjQ0Mi4mbmJzcDtzZW50cnk6Om9wZXJhdG9yIGJvb2woKSBpbmNvbnNpc3RlbnQgc2lnbmF0dXJlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW06OnNlbnRyeSI+IFtsaWIub3N0cmVhbTo6c2VudHJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VmluY2VudCBMZWxvdXAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggTm92IDIwMDM8L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjYuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtOjpzZW50cnkiPiBbbGliLm9zdHJlYW06OnNlbnRyeV08L2E+IHBhcmFncmFwaCA0LCBpbiBkZXNjcmlwdGlvbiBwYXJ0CmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDs6OnNlbnRyeTo6b3BlcmF0b3IgYm9vbCgpIGlzIGRlY2xhcmVkCmFzIG5vbiBjb25zdCwgYnV0IGluIHNlY3Rpb24gMjcuNi4yLjMsIGluIHN5bm9wc2lzIGl0IGlzIGRlY2xhcmVkCmNvbnN0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjcuNi4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW06OnNlbnRyeSI+IFtsaWIub3N0cmVhbTo6c2VudHJ5XTwvYT4gcGFyYWdyYXBoIDQsIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24Kb2YgPHR0PnNlbnRyeTo6b3BlcmF0b3IgYm9vbCgpPC90dD4gdG8gY29uc3QuCjwvcD4KPGhyPgo8YSBuYW1lPSI0NDMiPjxoMz40NDMuJm5ic3A7ZmlsZWJ1Zjo6Y2xvc2UoKSBpbmNvbnNpc3RlbnQgdXNlIG9mIEVPRjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjguMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLm1lbWJlcnMiPiBbbGliLmZpbGVidWYubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ZpbmNlbnQgTGVsb3VwJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE5vdiAyMDAzPC9wPgo8cD4KSW4gc2VjdGlvbiAyNy44LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1Zi5tZW1iZXJzIj4gW2xpYi5maWxlYnVmLm1lbWJlcnNdPC9hPiBwYXI2LCBpbiBlZmZlY3RzIGRlc2NyaXB0aW9uIG9mCmJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsIHRyYWl0cyZndDs6OmNsb3NlKCksIG92ZXJmbG93KEVPRikgaXMgdXNlZCB0d2ljZTsKc2hvdWxkIGJlIG92ZXJmbG93KHRyYWl0czo6ZW9mKCkpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSBvdmVyZmxvdyhFT0YpIHRvIG92ZXJmbG93KHRyYWl0czo6ZW9mKCkpLgo8L3A+Cjxocj4KPGEgbmFtZT0iNDQ0Ij48aDM+NDQ0LiZuYnNwO0JhZCB1c2Ugb2YgY2FzdHMgaW4gZnN0cmVhbTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZnN0cmVhbXMiPiBbbGliLmZzdHJlYW1zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VmluY2VudCBMZWxvdXAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgTm92IDIwMDM8L3A+CjxwPgoyNy44LjEuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaWZzdHJlYW0ubWVtYmVycyI+IFtsaWIuaWZzdHJlYW0ubWVtYmVyc108L2E+IHAxLCAyNy44LjEuMTAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9mc3RyZWFtLm1lbWJlcnMiPiBbbGliLm9mc3RyZWFtLm1lbWJlcnNdPC9hPiBwMSwgMjcuOC4xLjEzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtLm1lbWJlcnMiPiBbbGliLmZzdHJlYW0ubWVtYmVyc108L2E+IHAxIHNlZW1zIGhhdmUgc2FtZSBwcm9ibGVtIGFzIGV4cG9zZWQgaW4gTFdHIGlzc3VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTIiPjI1MjwvYT4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGk+W1N5ZG5leTogR2VudWluZSBkZWZlY3QuIDI3LjguMS4xMyBuZWVkcyBhIGNhc3QgdG8gY2FzdCBhd2F5CiBjb25zdG5lc3MuIFRoZSBvdGhlciB0d28gcGxhY2VzIGFyZSBzdHlsaXN0aWM6IHdlIGNvdWxkIGNoYW5nZSB0aGUKIEMtc3R5bGUgY2FzdHMgdG8gY29uc3RfY2FzdC4gUG9zdC1TeWRuZXk6IEhvd2FyZCBwcm92aWRlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCjxwPkNoYW5nZSAyNy44LjEuNy8xIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICBSZXR1cm5zOiAoYmFzaWNfZmlsZWJ1ZiZsdDtjaGFyVCx0cmFpdHMmZ3Q7KikmYW1wO3NiLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7YmFzaWNfZmlsZWJ1ZiZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiZndDsoJmFtcDtzYikuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNy44LjEuMTAvMSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgUmV0dXJuczogKGJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyopJmFtcDtzYi4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICBSZXR1cm5zOiBjb25zdF9jYXN0Jmx0O2Jhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyomZ3Q7KCZhbXA7c2IpLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjcuOC4xLjEzLzEgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIFJldHVybnM6ICZhbXA7c2IuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqJmd0OygmYW1wO3NiKS4KPC9ibG9ja3F1b3RlPgoKCgo8aHI+CjxhIG5hbWU9IjQ0NSI+PGgzPjQ0NS4mbmJzcDtpdGVyYXRvcl90cmFpdHM6OnJlZmVyZW5jZSB1bnNwZWNpZmllZCBmb3Igc29tZSBpdGVyYXRvciBjYXRlZ29yaWVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci50cmFpdHMiPiBbbGliLml0ZXJhdG9yLnRyYWl0c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OSBEZWMgMjAwMzwvcD4KPHA+ClRoZSBzdGFuZGFyZCBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIGF0IGFsbCBvbiB0aGUgcmVmZXJlbmNlIHR5cGUKb2YgaW5wdXQsIG91dHB1dCwgb3IgZm9yd2FyZCBpdGVyYXRvcnMgKGZvciBmb3J3YXJkIGl0ZXJhdG9ycyBpdApvbmx5IHNwZWNpZmllcyB0aGF0ICp4IG11c3QgYmUgdmFsdWVfdHlwZSZhbXA7IGFuZCBkb2Vzbid0IG1lbnRpb24KdGhlIHJlZmVyZW5jZSB0eXBlKS4gIEJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzJyByZWZlcmVuY2UgdHlwZSBpcwpyZXN0cmljdGVkIG9ubHkgYnkgaW1wbGljYXRpb24sIHNpbmNlIHRoZSBiYXNlIGl0ZXJhdG9yJ3MKcmVmZXJlbmNlIHR5cGUgaXMgdXNlZCBhcyB0aGUgcmV0dXJuIHR5cGUgb2YgcmV2ZXJzZV9pdGVyYXRvcidzCm9wZXJhdG9yKiwgd2hpY2ggbXVzdCBiZSBUJmFtcDsgaW4gb3JkZXIgdG8gYmUgYSBjb25mb3JtaW5nIGZvcndhcmQKaXRlcmF0b3IuCjwvcD4KCjxwPgpIZXJlJ3Mgd2hhdCBJIHRoaW5rIHdlIG91Z2h0IHRvIGJlIGFibGUgdG8gZXhwZWN0IGZyb20gYW4gaW5wdXQKb3IgZm9yd2FyZCBpdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlIFIsIHdoZXJlIGEgaXMgYW4gaXRlcmF0b3IKYW5kIFYgaXMgaXRzIHZhbHVlX3R5cGUKPC9wPgoKPHVsPgogIDxsaT4KICAgICAgKmEgaXMgY29udmVydGlibGUgdG8gUgogIDwvbGk+CgogIDxsaT4KICAgICAgUiBpcyBjb252ZXJ0aWJsZSB0byBWCiAgPC9saT4KCiAgPGxpPgogICAgICBzdGF0aWNfY2FzdCZsdDtWJmd0OyhzdGF0aWNfY2FzdCZsdDtSJmd0OygqYSkpIGlzIGVxdWl2YWxlbnQgdG8KICAgICAgc3RhdGljX2Nhc3QmbHQ7ViZndDsoKmEpIAogIDwvbGk+CjwvdWw+Cgo8cD5BIG11dGFibGUgZm9yd2FyZCBpdGVyYXRvciBvdWdodCB0byBzYXRpc2Z5LCBmb3IgeCBvZiB0eXBlIFY6PC9wPgogIDxsaT4KICAgICAgeyBSIHIgPSAqYTsgciA9IHg7IH0gaXMgZXF1aXZhbGVudCB0byAqYSA9IHg7CiAgPC9saT4KCjxwPgpJIHRoaW5rIHRoZXNlIHJlcXVpcmVtZW50cyBjYXB0dXJlIGV4aXN0aW5nIGNvbnRhaW5lciBpdGVyYXRvcnMKKGluY2x1ZGluZyB2ZWN0b3ImbHQ7Ym9vbCZndDsncyksIGJ1dCByZW5kZXIgaXN0cmVhbV9pdGVyYXRvciBpbnZhbGlkOwppdHMgcmVmZXJlbmNlIHR5cGUgd291bGQgaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGEgY29uc3RhbnQKcmVmZXJlbmNlLgo8L3A+CgoKPHA+CihKZXJlbXkgU2llaykgRHVyaW5nIHRoZSBkaXNjdXNzaW9uIGluIFN5ZG5leSwgaXQgd2FzIGZlbHQgdGhhdCBhCnNpbXBsZXIgbG9uZyB0ZXJtIHNvbHV0aW9uIGZvciB0aGlzIHdhcyBuZWVkZWQuIFRoZSBzb2x1dGlvbiBwcm9wb3NlZAp3YXMgdG8gcmVxdWlyZSA8dHQ+cmVmZXJlbmNlPC90dD4gdG8gYmUgdGhlIHNhbWUgdHlwZSBhcyA8dHQ+KmE8L3R0PgphbmQgPHR0PnBvaW50ZXI8L3R0PiB0byBiZSB0aGUgc2FtZSB0eXBlIGFzIDx0dD5hLSZndDs8L3R0Pi4gIE1vc3QKaXRlcmF0b3JzIGluIHRoZSBTdGFuZGFyZCBMaWJyYXJ5IGFscmVhZHkgbWVldCB0aGlzIHJlcXVpcmVtZW50LiBTb21lCml0ZXJhdG9ycyBhcmUgb3V0cHV0IGl0ZXJhdG9ycywgYW5kIGRvIG5vdCBuZWVkIHRvIG1lZXQgdGhlCnJlcXVpcmVtZW50LCBhbmQgb3RoZXJzIGFyZSBvbmx5IHNwZWNpZmllZCB0aHJvdWdoIHRoZSBnZW5lcmFsCml0ZXJhdG9yIHJlcXVpcmVtZW50cyAod2hpY2ggd2lsbCBjaGFuZ2Ugd2l0aCB0aGlzIHJlc29sdXRpb24pLiBUaGUKc29sZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGRlZmluaXRpb24gb2YgdGhlIHJlZmVyZW5jZSB0eXBlCnRoYXQgd2lsbCBuZWVkIHRvIGNoYW5nZSBpcyA8dHQ+aXN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+IHdoaWNoIHJldHVybnMKPHR0PmNoYXJUPC90dD4gZnJvbSA8dHQ+b3BlcmF0b3IqPC90dD4gYnV0IGhhcyBhIHJlZmVyZW5jZSB0eXBlIG9mCjx0dD5jaGFyVCZhbXA7PC90dD4uIFdlIHByb3Bvc2UgY2hhbmdpbmcgdGhlIHJlZmVyZW5jZSB0eXBlIG9mCjx0dD5pc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4gdG8gPHR0PmNoYXJUPC90dD4uCjwvcD4KCjxwPlRoZSBvdGhlciBvcHRpb24gZm9yIHJlc29sdmluZyB0aGUgaXNzdWUgd2l0aCA8dHQ+cG9pbnRlcjwvdHQ+LAogIG1lbnRpb25lZCBpbiB0aGUgbm90ZSBiZWxvdywgaXMgdG8gcmVtb3ZlIDx0dD5wb2ludGVyPC90dD4KICBhbHRvZ2V0aGVyLiBJIHByZWZlciBwbGFjaW5nIHJlcXVpcmVtZW50cyBvbiA8dHQ+cG9pbnRlcjwvdHQ+IHRvCiAgcmVtb3ZpbmcgaXQgZm9yIHR3byByZWFzb25zLiBGaXJzdCwgPHR0PnBvaW50ZXI8L3R0PiB3aWxsIGJlY29tZQogIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIGl0ZXJhdG9yIGFkYXB0b3JzIGFuZCBpbiBwYXJ0aWN1bGFyLAogIDx0dD5yZXZlcnNlX2l0ZXJhdG9yPC90dD4gd2lsbCBiZWNvbWUgbW9yZSB3ZWxsIGRlZmluZWQuIFNlY29uZCwKICByZW1vdmluZyA8dHQ+cG9pbnRlcjwvdHQ+IGlzIGEgcmF0aGVyIGRyYXN0aWMgYW5kIHB1YmxpY2x5LXZpc2libGUKICBhY3Rpb24gdG8gdGFrZS48L3A+Cgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0ZWNobmljYWxseSBlbmxhcmdlcyB0aGUgcmVxdWlyZW1lbnRzIGZvcgppdGVyYXRvcnMsIHdoaWNoIG1lYW5zIHRoZXJlIGFyZSBleGlzdGluZyBpdGVyYXRvcnMgKHN1Y2ggYXMKPHR0PmlzdHJlYW1idWZfaXRlcmF0b3I8L3R0PiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgcHJvZ3JhbW1lci1kZWZpbmVkCml0ZXJhdG9ycykgdGhhdCB3aWxsIG5vIGxvbmdlciBtZWV0IHRoZSByZXF1aXJlbWVudHMuIFdpbGwgdGhpcyBicmVhawpleGlzdGluZyBjb2RlPyBUaGUgc2NlbmFyaW8gaW4gd2hpY2ggaXQgd291bGQgaXMgaWYgYW4gYWxnb3JpdGhtCmltcGxlbWVudGF0aW9uIChzYXkgaW4gdGhlIFN0YW5kYXJkIExpYnJhcnkpIGlzIGNoYW5nZWQgdG8gcmVseSBvbgo8dHQ+aXRlcmF0b3JfdHJhaXRzOjpyZWZlcmVuY2U8L3R0PiwgYW5kIHRoZW4gaXMgdXNlZCB3aXRoIG9uZSBvZiB0aGUKaXRlcmF0b3JzIHRoYXQgZG8gbm90IGhhdmUgYW4gYXBwcm9wcmlhdGVseSBkZWZpbmVkCjx0dD5pdGVyYXRvcl90cmFpdHM6OnJlZmVyZW5jZTwvdHQ+Lgo8L3A+CgoKPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gbWFrZXMgb25lIG90aGVyIHN1YnRsZSBjaGFuZ2UuIFByZXZpb3VzbHksCml0IHdhcyByZXF1aXJlZCB0aGF0IG91dHB1dCBpdGVyYXRvcnMgaGF2ZSBhIDx0dD5kaWZmZXJlbmNlX3R5cGU8L3R0PgphbmQgPHR0PnZhbHVlX3R5cGU8L3R0PiBvZiA8dHQ+dm9pZDwvdHQ+LCB3aGljaCBtZWFucyB0aGF0IGEgZm9yd2FyZAppdGVyYXRvciBjb3VsZCBub3QgYmUgYW4gb3V0cHV0IGl0ZXJhdG9yLiBUaGlzIGlzIGNsZWFybHkgYSBtaXN0YWtlLApzbyBJJ3ZlIGNoYW5nZWQgdGhlIHdvcmRpbmcgdG8gc2F5IHRoYXQgdGhvc2UgdHlwZXMgbWF5IGJlCjx0dD52b2lkPC90dD4uCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkluIDI0LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IudHJhaXRzIj4gW2xpYi5pdGVyYXRvci50cmFpdHNdPC9hPiwgYWZ0ZXI6PC9wPgoKPGJsb2NrcXVvdGU+CmJlIGRlZmluZWQgYXMgdGhlIGl0ZXJhdG9yJ3MgZGlmZmVyZW5jZSB0eXBlLCB2YWx1ZSB0eXBlIGFuZCBpdGVyYXRvcgpjYXRlZ29yeSwgcmVzcGVjdGl2ZWx5Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5hZGQ8L3A+Cgo8YmxvY2txdW90ZT4KSW4gYWRkaXRpb24sIHRoZSB0eXBlcwo8cHJlPml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnJlZmVyZW5jZQppdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7Ojpwb2ludGVyCjwvcHJlPgptdXN0IGJlIGRlZmluZWQgYXMgdGhlIGl0ZXJhdG9yJ3MgcmVmZXJlbmNlIGFuZCBwb2ludGVyIHR5cGVzLCB0aGF0CmlzLCB0aGUgc2FtZSB0eXBlIGFzIHRoZSB0eXBlIG9mIDx0dD4qYTwvdHQ+IGFuZCA8dHQ+YS0mZ3Q7PC90dD4sCnJlc3BlY3RpdmVseS4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci50cmFpdHMiPiBbbGliLml0ZXJhdG9yLnRyYWl0c108L2E+LCBjaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CkluIHRoZSBjYXNlIG9mIGFuIG91dHB1dCBpdGVyYXRvciwgdGhlIHR5cGVzCjxwcmU+aXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6ZGlmZmVyZW5jZV90eXBlCml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUKPC9wcmU+CmFyZSBib3RoIGRlZmluZWQgYXMgPHR0PnZvaWQ8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KSW4gdGhlIGNhc2Ugb2YgYW4gb3V0cHV0IGl0ZXJhdG9yLCB0aGUgdHlwZXMKPHByZT5pdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7OjpkaWZmZXJlbmNlX3R5cGUKaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6dmFsdWVfdHlwZQppdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7OjpyZWZlcmVuY2UKaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6cG9pbnRlcgo8L3ByZT4KbWF5IGJlIGRlZmluZWQgYXMgPHR0PnZvaWQ8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjQuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yXTwvYT4sIGNoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnR5cGVuYW1lIHRyYWl0czo6b2ZmX3R5cGUsIGNoYXJUKiwgY2hhclQmYW1wOyZndDsKPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHByZT50eXBlbmFtZSB0cmFpdHM6Om9mZl90eXBlLCBjaGFyVCosIGNoYXJUJmd0Owo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpSZWRtb25kOiB0aGVyZSB3YXMgY29uY2VybiBpbiBTeWRuZXkgdGhhdCB0aGlzIG1pZ2h0IG5vdCBiZSB0aGUgb25seSBwbGFjZQp3aGVyZSB0aGluZ3Mgd2VyZSB1bmRlcnNwZWNpZmllZCBhbmQgbmVlZGVkIHRvIGJlIGNoYW5nZWQuICBKZXJlbXkKcmV2aWV3ZWQgaXRlcmF0b3JzIGluIHRoZSBzdGFuZGFyZCBhbmQgY29uZmlybWVkIHRoYXQgbm90aGluZyBlbHNlCm5lZWRlZCB0byBiZSBjaGFuZ2VkLgpdPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDQ4Ij48aDM+NDQ4LiZuYnNwO1JhbmRvbSBBY2Nlc3MgSXRlcmF0b3JzIG92ZXIgYWJzdHJhY3QgY2xhc3NlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmFuZG9tLmFjY2Vzcy5pdGVyYXRvcnMiPiBbbGliLnJhbmRvbS5hY2Nlc3MuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IEphbiAyMDA0PC9wPgo8cD4KVGFibGUgNzYsIHRoZSByYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJlcXVpcmVtZW50IHRhYmxlLCBzYXlzIHRoYXQgdGhlCnJldHVybiB0eXBlIG9mIGFbbl0gbXVzdCBiZSAiY29udmVydGlibGUgdG8gVCIuICBXaGVuIGFuIGl0ZXJhdG9yJ3MKdmFsdWVfdHlwZSBUIGlzIGFuIGFic3RyYWN0IGNsYXNzLCBub3RoaW5nIGlzIGNvbnZlcnRpYmxlIHRvIFQuClN1cmVseSB0aGlzIGlzbid0IGFuIGludGVuZGVkIHJlc3RyaWN0aW9uPwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgdG8gImNvbnZlcnRpYmxlIHRvIFQgY29uc3QmYW1wOyIuCjwvcD4KPGhyPgo8YSBuYW1lPSI0NDkiPjxoMz40NDkuJm5ic3A7TGlicmFyeSBJc3N1ZSAzMDYgR29lcyBUb28gRmFyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnN1cHBvcnQudHlwZXMiPiBbbGliLnN1cHBvcnQudHlwZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlIEJlY2tlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBKYW4gMjAwNDwvcD4KPHA+T3JpZ2luYWwgdGV4dDo8L3A+CjxibG9ja3F1b3RlPgpUaGUgbWFjcm8gb2Zmc2V0b2YgYWNjZXB0cyBhIHJlc3RyaWN0ZWQgc2V0IG9mIHR5cGUgYXJndW1lbnRzIGluIHRoaXMKSW50ZXJuYXRpb25hbCBTdGFuZGFyZC4gdHlwZSBzaGFsbCBiZSBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QgdW5pb24KKGNsYXVzZSA5KS4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgb2Zmc2V0b2YgbWFjcm8gdG8gYSBmaWVsZCB0aGF0CmlzIGEgc3RhdGljIGRhdGEgbWVtYmVyIG9yIGEgZnVuY3Rpb24gbWVtYmVyIGlzIHVuZGVmaW5lZC4iCjwvYmxvY2txdW90ZT4KCjxwPlJldmlzZWQgdGV4dDo8L3A+CjxibG9ja3F1b3RlPgoiSWYgdHlwZSBpcyBub3QgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIgo8L2Jsb2NrcXVvdGU+Cgo8cD4KTG9va3MgdG8gbWUgbGlrZSB0aGUgcmV2aXNlZCB0ZXh0IHNob3VsZCBoYXZlIHJlcGxhY2VkIG9ubHkgdGhlIHNlY29uZApzZW50ZW5jZS4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHN0YW5kaW5nIGFsb25lLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAxOC4xLCBwYXJhZ3JhcGggNSwgdG86PC9wPgoKPGJsb2NrcXVvdGU+ClRoZSBtYWNybyBvZmZzZXRvZiBhY2NlcHRzIGEgcmVzdHJpY3RlZCBzZXQgb2YgdHlwZSBhcmd1bWVudHMgaW4gdGhpcwpJbnRlcm5hdGlvbmFsIFN0YW5kYXJkLiAgSWYgdHlwZSBpcyBub3QgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uCnRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuICBUaGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBvZmZzZXRvZiBtYWNybwp0byBhIGZpZWxkIHRoYXQgaXMgYSBzdGF0aWMgZGF0YSBtZW1iZXIgb3IgYSBmdW5jdGlvbiBtZW1iZXIgaXMKdW5kZWZpbmVkLiIKPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjQ1MyI+PGgzPjQ1My4mbmJzcDtiYXNpY19zdHJpbmdidWY6OnNlZWtvZmYgbmVlZCBub3QgYWx3YXlzIGZhaWwgZm9yIGFuIGVtcHR5IHN0cmVhbTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JpbGwgUGxhdWdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBKYW4gMjAwNDwvcD4KPHByZT4gIHBvc190eXBlIGJhc2ljX3N0cmluZ2J1Zjo6c2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSk7CjwvcHJlPgo8cD4KaXMgb2JsaWdlZCB0byBmYWlsIGlmIG5vdGhpbmcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgc3RyZWFtLiBUaGlzCmlzIHVubmVjZXNzYXJ5IGFuZCB1bmRlc2lyYWJsZS4gSXQgc2hvdWxkIGJlIHBlcm1pc3NpYmxlIHRvIHNlZWsgdG8KYW4gZWZmZWN0aXZlIG9mZnNldCBvZiB6ZXJvLjwvcD4KCjxwPjxpPlsKIFN5ZG5leTogQWdyZWVkIHRoYXQgdGhpcyBpcyBhbiBhbm5veWluZyBwcm9ibGVtOiBzZWVraW5nIHRvIHplcm8gc2hvdWxkIGJlCiBsZWdhbC4gQmlsbCB3aWxsIHByb3ZpZGUgd29yZGluZy4KXTwvaT48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc2VudGVuY2UgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgpGb3IgYSBzZXF1ZW5jZSB0byBiZSBwb3NpdGlvbmVkLCBpZiBpdHMgbmV4dCBwb2ludGVyIChlaXRoZXIKZ3B0cigpIG9yIHBwdHIoKSkgaXMgYSBudWxsIHBvaW50ZXIsIHRoZSBwb3NpdGlvbmluZyBvcGVyYXRpb24KZmFpbHMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgpGb3IgYSBzZXF1ZW5jZSB0byBiZSBwb3NpdGlvbmVkLCBpZiBpdHMgbmV4dCBwb2ludGVyIChlaXRoZXIKZ3B0cigpIG9yIHBwdHIoKSkgaXMgYSBudWxsIHBvaW50ZXIgYW5kIHRoZSBuZXcgb2Zmc2V0IG5ld29mZgppcyBub256ZXJvLCB0aGUgcG9zaXRpb25pbmcgb3BlcmF0aW9uIGZhaWxzLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNDU1Ij48aDM+NDU1LiZuYnNwO2NlcnI6OnRpZSgpIGFuZCB3Y2Vycjo6dGllKCkgYXJlIG92ZXJzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbS5vYmplY3RzIj4gW2xpYi5pb3N0cmVhbS5vYmplY3RzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmlsbCBQbGF1Z2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIEphbiAyMDA0PC9wPgo8cD4KQm90aCBjZXJyOjp0aWUoKSBhbmQgd2NlcnI6OnRpZSgpIGFyZSBvYmxpZ2VkIHRvIGJlIG51bGwgYXQgcHJvZ3JhbQpzdGFydHVwLiBUaGlzIGlzIG92ZXJzcGVjaWZpY2F0aW9uIGFuZCBvdmVya2lsbC4gSXQgaXMgYm90aCB0cmFkaXRpb25hbAphbmQgdXNlZnVsIHRvIHRpZSBjZXJyIHRvIGNvdXQsIHRvIGVuc3VyZSB0aGF0IHN0YW5kYXJkIG91dHB1dCBpcyBkcmFpbmVkCndoZW5ldmVyIGFuIGVycm9yIG1lc3NhZ2UgaXMgd3JpdHRlbi4gVGhpcyBiZWhhdmlvciBzaG91bGQgYXQgbGVhc3QgYmUKcGVybWl0dGVkIGlmIG5vdCByZXF1aXJlZC4gU2FtZSBmb3Igd2NlcnI6OnRpZSgpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0byB0aGUgZGVzY3JpcHRpb24gb2YgY2Vycjo8L3A+CjxibG9ja3F1b3RlPgpBZnRlciB0aGUgb2JqZWN0IGNlcnIgaXMgaW5pdGlhbGl6ZWQsIGNlcnIudGllKCkgcmV0dXJucyAmYW1wO2NvdXQuCkl0cyBzdGF0ZSBpcyBvdGhlcndpc2UgdGhlIHNhbWUgYXMgcmVxdWlyZWQgZm9yIGJhc2ljX2lvcyZsdDtjaGFyJmd0Ozo6aW5pdAoobGliLmJhc2ljLmlvcy5jb25zKS4KPC9ibG9ja3F1b3RlPgoKPHA+QWRkIHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB3Y2Vycjo8L3A+Cgo8YmxvY2txdW90ZT4KQWZ0ZXIgdGhlIG9iamVjdCB3Y2VyciBpcyBpbml0aWFsaXplZCwgd2NlcnIudGllKCkgcmV0dXJucyAmYW1wO3djb3V0LgpJdHMgc3RhdGUgaXMgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIHJlcXVpcmVkIGZvciBiYXNpY19pb3MmbHQ7d2NoYXJfdCZndDs6OmluaXQKKGxpYi5iYXNpYy5pb3MuY29ucykuCjwvYmxvY2txdW90ZT4KCjxwPjxpPltTeWRuZXk6IHN0cmF3IHBvbGwgKDMtMSk6IHdlIHNob3VsZCA8aT5yZXF1aXJlPC9pPiwgbm90IGp1c3QKICBwZXJtaXQsIGNvdXQgYW5kIGNlcnIgdG8gYmUgdGllZCBvbiBzdGFydHVwLiAgUHJlLVJlZG1vbmQ6IEJpbGwgd2lsbAogIHByb3ZpZGUgd29yZGluZy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSI0NTciPjxoMz40NTcuJm5ic3A7Yml0c2V0IGNvbnN0cnVjdG9yOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGluaXRpYWxpemVkIGJpdHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5jb25zIj4gW2xpYi5iaXRzZXQuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhZyBIZW5yaWtzc29uJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIEphbiAyMDA0PC9wPgo8cD4KVGhlIGNvbnN0cnVjdG9yIGZyb20gdW5zaWduZWQgbG9uZyBzYXlzIGl0IGluaXRpYWxpemVzICJ0aGUgZmlyc3QgTQpiaXQgcG9zaXRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJpdCB2YWx1ZXMgaW4gdmFsLiBNIGlzIHRoZSBzbWFsbGVyCm9mIE4gYW5kIHRoZSB2YWx1ZSBDSEFSX0JJVCAqIHNpemVvZih1bnNpZ25lZCBsb25nKS4iCjwvcD4KCjxwPgpPYmplY3QtcmVwcmVzZW50YXRpb24gdnMuIHZhbHVlLXJlcHJlc2VudGF0aW9uIHN0cmlrZXMgYWdhaW4uIENIQVJfQklUICoKc2l6ZW9mICh1bnNpZ25lZCBsb25nKSBkb2VzIG5vdCBnaXZlIHVzIHRoZSBudW1iZXIgb2YgYml0cyBhbiB1bnNpZ25lZCBsb25nCnVzZXMgdG8gaG9sZCB0aGUgdmFsdWUuIFRodXMsIHRoZSBmaXJzdCBNIGJpdCBwb3NpdGlvbiBhYm92ZSBpcyBub3QKZ3VhcmFudGVlZCB0byBoYXZlIGFueSBjb3JyZXNwb25kaW5nIGJpdCB2YWx1ZXMgaW4gdmFsLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMy41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5iaXRzZXQuY29ucyI+IFtsaWIuYml0c2V0LmNvbnNdPC9hPiBwYXJhZ3JhcGggMiwgY2hhbmdlICJNIGlzIHRoZSBzbWFsbGVyIG9mCiAgTiBhbmQgdGhlIHZhbHVlIENIQVJfQklUICogc2l6ZW9mICh1bnNpZ25lZCBsb25nKS4gKDI0OSkiIHRvCiAgIjx0dD5NPC90dD4gaXMgdGhlIHNtYWxsZXIgb2YgPHR0Pk48L3R0PiBhbmQgdGhlIG51bWJlciBvZiBiaXRzIGluCiAgdGhlIHZhbHVlIHJlcHJlc2VudGF0aW9uIChzZWN0aW9uIDMuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Jhc2ljLmh0bWwjYmFzaWMudHlwZXMiPiBbYmFzaWMudHlwZXNdPC9hPikgb2YgPHR0PnVuc2lnbmVkCiAgbG9uZzwvdHQ+LiIKPC9wPgo8aHI+CjxhIG5hbWU9IjQ2MCI+PGgzPjQ2MC4mbmJzcDtEZWZhdWx0IG1vZGVzIG1pc3NpbmcgZnJvbSBiYXNpY19mc3RyZWFtIG1lbWJlciBzcGVjaWZpY2F0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZnN0cmVhbXMiPiBbbGliLmZzdHJlYW1zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVuIEh1dGNoaW5ncyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxIEFwciAyMDA0PC9wPgo8cD4KVGhlIHNlY29uZCBwYXJhbWV0ZXJzIG9mIHRoZSBub24tZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgb2YgdGhlIG9wZW4KbWVtYmVyIGZ1bmN0aW9uIGZvciBiYXNpY19mc3RyZWFtLCBuYW1lZCAibW9kZSIsIGFyZSBvcHRpb25hbAphY2NvcmRpbmcgdG8gdGhlIGNsYXNzIGRlY2xhcmF0aW9uIGluIDI3LjguMS4xMSBbbGliLmZzdHJlYW1dLiAgVGhlCnNwZWNpZmljYXRpb25zIG9mIHRoZXNlIG1lbWJlcnMgaW4gMjcuOC4xLjEyIFtsaWIuZnN0cmVhbS5jb25zXSBhbmQKMjcuOC4xLjEzIGxpYi5mc3RyZWFtLm1lbWJlcnNdIGRpc2FncmVlIHdpdGggdGhpcywgdGhvdWdoIHRoZQpjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBoYXMgdGhlICJleHBsaWNpdCIgZnVuY3Rpb24tc3BlY2lmaWVyIGltcGx5aW5nCnRoYXQgaXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgd2l0aCBvbmUgYXJndW1lbnQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy44LjEuMTIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZzdHJlYW0uY29ucyI+IFtsaWIuZnN0cmVhbS5jb25zXTwvYT4sIGNoYW5nZTwvcD4KPHByZT4gIGV4cGxpY2l0IGJhc2ljX2ZzdHJlYW0oY29uc3QgY2hhciogcywgaW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpOyAKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgZXhwbGljaXQgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUgPSBpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCk7CjwvcHJlPgo8cD5JbiAyNy44LjEuMTMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZzdHJlYW0ubWVtYmVycyI+IFtsaWIuZnN0cmVhbS5tZW1iZXJzXTwvYT4sIGNoYW5nZTwvcD4KPHByZT4gIHZvaWQgb3Blbihjb25zdCBjaGFyKnMsIGlvc19iYXNlOjpvcGVubW9kZSBtb2RlKTsgCjwvcHJlPgo8cD50bzwvcD4KICB2b2lkIG9wZW4oY29uc3QgY2hhcipzLAogICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSA9IGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KTsKPGhyPgo8YSBuYW1lPSI0NjEiPjxoMz40NjEuJm5ic3A7dGltZV9nZXQgaGFyZCBvciBpbXBvc3NpYmxlIHRvIGltcGxlbWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5nZXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS50aW1lLmdldC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JpbGwgUGxhdWdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBNYXIgMjAwNDwvcD4KPHA+ClRlbXBsYXRlIHRpbWVfZ2V0IGN1cnJlbnRseSBjb250YWlucyBkaWZmaWN1bHQsIGlmIG5vdCBpbXBvc3NpYmxlLApyZXF1aXJlbWVudHMgZm9yIGRvX2RhdGVfb3JkZXIsIGRvX2dldF90aW1lLCBhbmQgZG9fZ2V0X2RhdGUuIEFsbCByZXF1aXJlCnRoZSBpbXBsZW1lbnRhdGlvbiB0byBzY2FuIGEgZmllbGQgZ2VuZXJhdGVkIGJ5IHRoZSAleCBvciAlWCBjb252ZXJzaW9uCnNwZWNpZmllciBpbiBzdHJmdGltZS4gWWVzLCBkb19kYXRlX29yZGVyIGNhbiBhbHdheXMgcmV0dXJuIG5vX29yZGVyLCBidXQKdGhhdCBkb2Vzbid0IGhlbHAgdGhlIG90aGVyIGZ1bmN0aW9ucy4gVGhlIHByb2JsZW0gaXMgdGhhdCAleCBjYW4gYmUKbmVhcmx5IGFueXRoaW5nLCBhbmQgaXQgY2FuIHZhcnkgd2lkZWx5IHdpdGggbG9jYWxlcy4gSXQncyBob3JyaWJseQpvbmVyb3VzIHRvIGhhdmUgdG8gcGFyc2UgInRoaXJkIHN1bmRheSBhZnRlciBNaWNoYWVsbWFzIGluIHRoZSB5ZWFyIG9mCm91ciBMb3JkIHR3byB0aG91c2FuZCBhbmQgdGhyZWUsIiBidXQgdGhhdCdzIHdoYXQgd2UgY3VycmVudGx5IGFzayBvZgpkb19nZXRfZGF0ZS4gTW9yZSBwcmFjdGljYWxseSwgaXQgbGVhZHMgc29tZSBwZW9wbGUgdG8gdGhpbmsgdGhhdCBpZgoleCBwcm9kdWNlcyAxMC4yLjA0LCB3ZSBzaG91bGQga25vdyB0byBsb29rIGZvciBkb3RzIGFzIHNlcGFyYXRvcnMuIFN0aWxsCm5vdCBlYXN5Lgo8L3A+Cgo8cD4KTm90ZSB0aGF0IHRoaXMgaXMgdGhlIDxpPm9wcG9zaXRlPC9pPiBlZmZlY3QgZnJvbSB0aGUgaW50ZW50IHN0YXRlZCBpbiB0aGUKZm9vdG5vdGUgZWFybGllciBpbiB0aGlzIHN1YmNsYXVzZToKPC9wPgoKPGJsb2NrcXVvdGU+CiJJbiBvdGhlciB3b3JkcywgdXNlciBjb25maXJtYXRpb24gaXMgcmVxdWlyZWQgZm9yIHJlbGlhYmxlIHBhcnNpbmcgb2YKdXNlci1lbnRlcmVkIGRhdGVzIGFuZCB0aW1lcywgYnV0IG1hY2hpbmUtZ2VuZXJhdGVkIGZvcm1hdHMgY2FuIGJlCnBhcnNlZCByZWxpYWJseS4gVGhpcyBhbGxvd3MgcGFyc2VycyB0byBiZSBhZ2dyZXNzaXZlIGFib3V0IGludGVycHJldGluZwp1c2VyIHZhcmlhdGlvbnMgb24gc3RhbmRhcmQgZm9ybWF0cy4iCjwvYmxvY2txdW90ZT4KCjxwPgpXZSBzaG91bGQgZ2l2ZSBib3RoIGltcGxlbWVudGVycyBhbmQgdXNlcnMgYW4gZWFzaWVyIGFuZCBtb3JlIHJlbGlhYmxlCmFsdGVybmF0aXZlOiBwcm92aWRlIGEgKHNob3J0KSBsaXN0IG9mIGFsdGVybmF0aXZlIGRlbGltaXRlcnMgYW5kIHNheQp3aGF0IHRoZSBkZWZhdWx0IGRhdGUgb3JkZXIgaXMgZm9yIG5vX29yZGVyLiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwKYW5kIG1heGltdW0gbGF0aXR1ZGUsIHdlIGNhbiBwZXJtaXQgYW4gaW1wbGVtZW50YXRpb24gdG8gcGFyc2Ugd2hhdGV2ZXIKJXggb3IgJVggZ2VuZXJhdGVzLCBidXQgd2Ugc2hvdWxkbid0IHJlcXVpcmUgaXQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGI+SW4gdGhlIGRlc2NyaXB0aW9uOjwvYj48L3A+CjxwcmU+aXRlcl90eXBlIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBzLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSZhbXA7IGVyciwgdG0qIHQpIGNvbnN0Owo8L3ByZT4KCjxwPgoyIEVmZmVjdHM6IFJlYWRzIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgc3VudGlsIGl0IGhhcyBleHRyYWN0ZWQgdGhvc2UKc3RydWN0IHRtIG1lbWJlcnMsIGFuZCByZW1haW5pbmcgZm9ybWF0IGNoYXJhY3RlcnMsIHVzZWQgYnkKdGltZV9wdXQmbHQ7Jmd0Ozo6cHV0IHRvIHByb2R1Y2UgdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgJ1gnLCBvciB1bnRpbCBpdAplbmNvdW50ZXJzIGFuIGVycm9yIG9yIGVuZCBvZiBzZXF1ZW5jZS4KPC9wPgoKPHA+PGI+Y2hhbmdlOjwvYj4gJ1gnPC9wPgoKPHA+PGI+dG86PC9iPiAiJUg6JU06JVMiPC9wPgoKCjxwPkNoYW5nZTwvcD4KPHByZT5pdGVyX3R5cGUgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIHMsIGl0ZXJfdHlwZSBlbmQsIGlvc19iYXNlJmFtcDsgc3RyLAogICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCB0bSogdCkgY29uc3Q7Cgo0IEVmZmVjdHM6IFJlYWRzIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgcyB1bnRpbCBpdCBoYXMgZXh0cmFjdGVkIHRob3NlCnN0cnVjdCB0bSBtZW1iZXJzLCBhbmQgcmVtYWluaW5nIGZvcm1hdCBjaGFyYWN0ZXJzLCB1c2VkIGJ5CnRpbWVfcHV0Jmx0OyZndDs6OnB1dCB0byBwcm9kdWNlIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5ICd4Jywgb3IgdW50aWwgaXQKZW5jb3VudGVycyBhbiBlcnJvci4KPC9wcmU+Cgo8cD50bzwvcD4KaXRlcl90eXBlIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBzLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSZhbXA7IGVyciwgdG0qIHQpIGNvbnN0OwoKNCBFZmZlY3RzOiBSZWFkcyBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IHMgdW50aWwgaXQgaGFzIGV4dHJhY3RlZCB0aG9zZQpzdHJ1Y3QgdG0gbWVtYmVycywgYW5kIHJlbWFpbmluZyBmb3JtYXQgY2hhcmFjdGVycywgdXNlZCBieQp0aW1lX3B1dCZsdDsmZ3Q7OjpwdXQgdG8gcHJvZHVjZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzLCBvciB1bnRpbCBpdAplbmNvdW50ZXJzIGFuIGVycm9yLiBUaGUgZm9ybWF0IGRlcGVuZHMgb24gdGhlIHZhbHVlIHJldHVybmVkIGJ5CmRhdGVfb3JkZXIoKSBhcyBmb2xsb3dzOgoKICAgICAgICBkYXRlX29yZGVyKCkgIGZvcm1hdAoKICAgICAgICBub19vcmRlciAgICAgICIlbS8lZC8leSIKICAgICAgICBkbXkgICAgICAgICAgICIlZC8lbS8leSIKICAgICAgICBtZHkgICAgICAgICAgICIlbS8lZC8leSIKICAgICAgICB5bWQgICAgICAgICAgICIleS8lbS8lZCIKICAgICAgICB5ZG0gICAgICAgICAgICIleS8lZC8lbSIKCkFuIGltcGxlbWVudGF0aW9uIG1heSBhbHNvIGFjY2VwdCBhZGRpdGlvbmFsIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZm9ybWF0cy4KPHByZT48L3ByZT4KCjxwPjxpPltSZWRtb25kOiBhZ3JlZWQgdGhhdCB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtLiAgVGhlIHNvbHV0aW9uIGlzCiAgcHJvYmFibHkgdG8gbWF0Y2ggQzk5J3MgcGFyc2luZyBydWxlcy4gIEJpbGwgcHJvdmlkZWQgd29yZGluZy4KXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjQ2NCI+PGgzPjQ2NC4mbmJzcDtTdWdnZXN0aW9uIGZvciBuZXcgbWVtYmVyIGZ1bmN0aW9ucyBpbiBzdGFuZGFyZCBjb250YWluZXJzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLmFkYXB0b3JzIj4gW2xpYi5jb250YWluZXIuYWRhcHRvcnNdPC9hPiwgMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtUaG9yc3RlbiBPdHRvc2VuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIE1heSAyMDA0PC9wPgoKPHA+VG8gYWRkIHNsaWdodGx5IG1vcmUgY29udmVuaWVuY2UgdG8gdmVjdG9yJmx0O1QmZ3Q7IGFuZCBtYXAmbHQ7S2V5LFQmZ3Q7IHdlIHNob3VsZCBjb25zaWRlciB0byBhZGQ8L3A+CjxvbD4KPGxpPiBhZGQgdmVjdG9yJmx0O1QmZ3Q7OjpkYXRhKCkgbWVtYmVyIChjb25zdCBhbmQgbm9uLWNvbnN0IHZlcnNpb24pCnNlbWFudGljczogaWYoIGVtcHR5KCkgKSByZXR1cm4gMDsgZWxzZSByZXR1cm4gYnVmZmVyXzs8L2xpPgo8bGk+IGFkZCBtYXAmbHQ7S2V5LFQmZ3Q7OjphdCggY29uc3QgS2V5JmFtcDsgayApIG1lbWJlciAoY29uc3QgYW5kIG5vbi1jb25zdCB2ZXJzaW9uKQo8aT5zZW1hbnRpY3M8L2k+OiBpdGVyYXRvciBpID0gZmluZCggayApOyBpZiggaSAhPSBlbmQoKSApIHJldHVybiAqaTsgZWxzZSB0aHJvdyByYW5nZV9lcnJvcigpOzwvbGk+Cjwvb2w+Cgo8cD5SYXRpb25hbGU6PC9wPgoKPHVsPgo8bGk+VG8gb2J0YWluIGEgcG9pbnRlciB0byB0aGUgdmVjdG9yJ3MgYnVmZmVyLCBvbmUgbXVzdCB1c2UgZWl0aGVyCm9wZXJhdG9yW10oKSAod2hpY2ggY2FuIGdpdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGZvciBlbXB0eSB2ZWN0b3JzKSBvcgphdCgpICh3aGljaCB3aWxsIHRoZW4gdGhyb3cgaWYgdGhlIHZlY3RvciBpcyBlbXB0eSkuIDwvbGk+CjxsaT50cjE6OmFycmF5Jmx0O1Qsc3omZ3Q7IGFscmVhZHkgaGFzIGEgZGF0YSgpIG1lbWJlcjwvbGk+CjxsaT5lIGNhbm5vdCB1c2Ugb3BlcmF0b3JbXSgpIHdoZW4gVCBpcyBub3QgRGVmYXVsdERvbnN0cnVjdGlibGU8L2xpPgo8bGk+TmVpdGhlciB3aGVuIHRoZSBtYXAgaXMgY29uc3QuPC9saT4KPGxpPndoZW4gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgYWRkIGFuIGVsZW1lbnQgYWNjaWRlbnRseTwvbGk+CjxsaT53aGVuIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIGlmIGEga2V5IGlzIG5vdCBpbiB0aGUgbWFwPC9saT4KPC91bD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLmFkYXB0b3JzIj4gW2xpYi5jb250YWluZXIuYWRhcHRvcnNdPC9hPiwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDx0dD52ZWN0b3I8L3R0PgogIHN5bm9wc2lzIGFmdGVyICJlbGVtZW50IGFjY2VzcyIgYW5kIGJlZm9yZSAibW9kaWZpZXJzIjo8L3A+CjxwcmU+ICAvLyA8aT5bbGliLnZlY3Rvci5kYXRhXSBkYXRhIGFjY2VzczwvaT4KICBwb2ludGVyICAgICAgIGRhdGEoKTsKICBjb25zdF9wb2ludGVyIGRhdGEoKSBjb25zdDsKPC9wcmU+Cgo8cD5BZGQgYSBuZXcgc3Vic2VjdGlvbiBvZiAyMy4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIuYWRhcHRvcnMiPiBbbGliLmNvbnRhaW5lci5hZGFwdG9yc108L2E+OjwvcD4KPGJsb2NrcXVvdGU+CjxwPjIzLjIuNC54IDx0dD52ZWN0b3I8L3R0PiBkYXRhIGFjY2VzczwvcD4KPHByZT4gICBwb2ludGVyICAgICAgIGRhdGEoKTsKICAgY29uc3RfcG9pbnRlciBkYXRhKCkgY29uc3Q7CjwvcHJlPgo8cD48Yj5SZXR1cm5zOjwvYj4gQSBwb2ludGVyIHN1Y2ggdGhhdCBbZGF0YSgpLCBkYXRhKCkgKyBzaXplKCkpIGlzIGEgdmFsaWQKICAgcmFuZ2UuICBGb3IgYSBub24tZW1wdHkgdmVjdG9yLCBkYXRhKCkgPT0gJmFtcDtmcm9udCgpLjwvcD4KPHA+PGI+Q29tcGxleGl0eTo8L2I+IENvbnN0YW50IHRpbWUuPC9wPgo8cD48Yj5UaHJvd3M6PC9iPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDx0dD5tYXA8L3R0PgpzeW5vcHNpcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluZSBmb3Igb3BlcmF0b3JbXTo8L3A+CjxwcmU+ICBUJmFtcDsgICAgICAgYXQoY29uc3Qga2V5X3R5cGUmYW1wOyB4KTsKICBjb25zdCBUJmFtcDsgYXQoY29uc3Qga2V5X3R5cGUmYW1wOyB4KSBjb25zdDsKPC9wcmU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byAyMy4zLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLm1hcC5hY2Nlc3MiPiBbbGliLm1hcC5hY2Nlc3NdPC9hPjo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPiAgVCZhbXA7ICAgICAgIGF0KGNvbnN0IGtleV90eXBlJmFtcDsgeCk7CiAgY29uc3QgVCZhbXA7IGF0KGNvbnN0IGtleV90eXBlJmFtcDsgeCkgY29uc3Q7CjwvcHJlPgoKPHA+PGI+UmV0dXJuczo8L2I+IEEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHdob3NlIGtleSBpcyBlcXVpdmFsZW50CiAgdG8geCwgaWYgc3VjaCBhbiBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIG1hcC48L3A+CjxwPjxiPlRocm93czo8L2I+IDx0dD5vdXRfb2ZfcmFuZ2U8L3R0PiBpZiBubyBzdWNoIGVsZW1lbnQgaXMgcHJlc2VudC48L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+TmVpdGhlciBvZiB0aGVzZSBhZGRpdGlvbnMgcHJvdmlkZXMgYW55IG5ldyBmdW5jdGlvbmFsaXR5IGJ1dCB0aGUKICBMV0cgYWdyZWVkIHRoYXQgdGhleSBhcmUgY29udmVuaWVudCwgZXNwZWNpYWxseSBmb3Igbm92aWNlcy4gIFRoZQogIGV4Y2VwdGlvbiB0eXBlIGNob3NlbiBmb3IgPHR0PmF0PC90dD4sIDx0dD5zdGQ6Om91dF9vZl9yYW5nZTwvdHQ+LAogIHdhcyBjaG9zZW4gdG8gbWF0Y2ggPHR0PnZlY3Rvcjo6YXQ8L3R0Pi48L3A+Cjxocj4KPGEgbmFtZT0iNDY1Ij48aDM+NDY1LiZuYnNwO0NvbnRlbnRzIG9mICZsdDtjaXNvNjQ2Jmd0OzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmhlYWRlcnMiPiBbbGliLmhlYWRlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVuIDIwMDQ8L3A+CjxwPkMgaGVhZGVyICZsdDtpc282NDYuaCZndDsgZGVmaW5lcyBtYWNyb3MgZm9yIHNvbWUgb3BlcmF0b3JzLCBzdWNoIGFzCm5vdF9lcSBmb3IgIT0uPC9wPgoKPHA+U2VjdGlvbiAxNy40LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5oZWFkZXJzIj4gW2xpYi5oZWFkZXJzXTwvYT4gIkhlYWRlcnMiIHNheXMgdGhhdCBleGNlcHQgYXMgbm90ZWQgaW4KY2xhdXNlcyAxOCB0aHJvdWdoIDI3LCB0aGUgJmx0O2NuYW1lJmd0OyBDKysgaGVhZGVyIGNvbnRlbnRzIGFyZSB0aGUgc2FtZQphcyB0aGUgQyBoZWFkZXIgJmx0O25hbWUuaCZndDsuIEluIHBhcnRpY3VsYXIsIHRhYmxlIDEyIGxpc3RzCiZsdDtjaXNvNjQ2Jmd0OyBhcyBhIEMrKyBoZWFkZXIuPC9wPgoKPHA+SSBkb24ndCBmaW5kIGFueSBvdGhlciBtZW50aW9uIG9mICZsdDtjaXNvNjQ2Jmd0Oywgb3IgYW55IG1lbnRpb24gb2YKJmx0O2lzbzY0Ni5oJmd0OywgaW4gY2xhdXNlcyAxNyB0aG9yb3VnaCAyNy4gVGhhdCBpbXBsaWVzIHRoYXQgdGhlCmNvbnRlbnRzIG9mICZsdDtjaXNvNjQ2Jmd0OyBhcmUgdGhlIHNhbWUgYXMgQyBoZWFkZXIgJmx0O2lzbzY0Ni5oJmd0Oy48L3A+Cgo8cD5Bbm5leCBDIChpbmZvcm1hdGl2ZSwgbm90IG5vcm1hdGl2ZSkgaW4gW2RpZmYuaGVhZGVyLmlzbzY0Ni5oXSBDLjIuMi4yCiJIZWFkZXIgJmx0O2lzbzY0Ni5oJmd0OyIgc2F5cyB0aGF0IHRoZSBhbHRlcm5hdGl2ZSB0b2tlbnMgYXJlIG5vdApkZWZpbmVkIGFzIG1hY3JvcyBpbiAmbHQ7Y2lzbzY0NiZndDssIGJ1dCBkb2VzIG5vdCBtZW50aW9uIHRoZSBjb250ZW50cwpvZiAmbHQ7aXNvNjQ2LmgmZ3Q7LjwvcD4KCjxwPkkgZG9uJ3QgZmluZCBhbnkgbm9ybWF0aXZlIHRleHQgdG8gc3VwcG9ydCBDLjIuMi4yLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIHNlY3Rpb24gMTcuNC4xLjIgSGVhZGVycyBbbGliLmhlYWRlcnNdIGEgbmV3IHBhcmFncmFwaCBhZnRlcgogIHBhcmFncmFwaCA2ICh0aGUgb25lIGFib3V0IGZ1bmN0aW9ucyBtdXN0IGJlIGZ1bmN0aW9ucyk6PC9wPiAKCjxibG9ja3F1b3RlPgo8cD5JZGVudGlmaWVycyB0aGF0IGFyZSBrZXl3b3JkcyBvciBvcGVyYXRvcnMgaW4gQysrIHNoYWxsIG5vdCBiZSBkZWZpbmVkCmFzIG1hY3JvcyBpbiBDKysgc3RhbmRhcmQgbGlicmFyeSBoZWFkZXJzLiAKW0Zvb3Rub3RlOkluIHBhcnRpY3VsYXIsIGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgaGVhZGVyICZsdDtpc282NDYuaCZndDsKb3IgJmx0O2Npc282NDYmZ3Q7IGhhcyBubyBlZmZlY3QuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtUmVkbW9uZDogU3RldmUgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDY3Ij48aDM+NDY3LiZuYnNwO2NoYXJfdHJhaXRzOjpsdCgpLCBjb21wYXJlKCksIGFuZCBtZW1jbXAoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMuc3BlY2lhbGl6YXRpb25zLmNoYXIiPiBbbGliLmNoYXIudHJhaXRzLnNwZWNpYWxpemF0aW9ucy5jaGFyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI4IEp1biAyMDA0PC9wPgoKPHA+ClRhYmxlIDM3IGRlc2NyaWJlcyB0aGUgcmVxdWlyZW1lbnRzIG9uIFRyYWl0czo6Y29tcGFyZSgpIGluIHRlcm1zIG9mCnRob3NlIG9uIFRyYWl0czo6bHQoKS4gMjEuMS4zLjEsIHA2IHJlcXVpcmVzIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7OjpsdCgpCnRvIHlpZWxkIHRoZSBzYW1lIHJlc3VsdCBhcyBvcGVyYXRvciZsdDsoY2hhciwgY2hhcikuCjwvcD4KCjxwPgpNb3N0LCBpZiBub3QgYWxsLCBpbXBsZW1lbnRhdGlvbnMgb2YgY2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6OmNvbXBhcmUoKQpjYWxsIG1lbWNtcCgpIGZvciBlZmZpY2llbmN5LiBIb3dldmVyLCB0aGUgQyBzdGFuZGFyZCByZXF1aXJlcyBib3RoCm1lbWNtcCgpIGFuZCBzdHJjbXAoKSB0byBpbnRlcnByZXQgY2hhcmFjdGVycyB1bmRlciBjb21wYXJpc29uIGFzCnVuc2lnbmVkLCByZWdhcmRsZXNzIG9mIHRoZSBzaWduZWRuZXNzIG9mIGNoYXIuIEFzIGEgcmVzdWx0LCBhbGwKdGhlc2UgY2hhcl90cmFpdHMgaW1wbGVtZW50YXRpb25zIGZhaWwgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnQKaW1wb3NlZCBieSBUYWJsZSAzNyBvbiBjb21wYXJlKCkgd2hlbiBjaGFyIGlzIHNpZ25lZC4KPC9wPgoKCjxwPlJlYWQgZW1haWwgdGhyZWFkIHN0YXJ0aW5nIHdpdGggYysrc3RkLWxpYi0xMzQ5OSBmb3IgbW9yZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CgoKPHA+Q2hhbmdlIDIxLjEuMy4xLCBwNiBmcm9tPC9wPgo8YmxvY2txdW90ZT4KICAgIFRoZSB0d28tYXJndW1lbnQgbWVtYmVycyBhc3NpZ24sIGVxLCBhbmQgbHQgYXJlIGRlZmluZWQgaWRlbnRpY2FsbHkKICAgIHRvIHRoZSBidWlsdC1pbiBvcGVyYXRvcnMgPSwgPT0sIGFuZCAmbHQ7IHJlc3BlY3RpdmVseS4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CiAgVGhlIHR3by1hcmd1bWVudCBtZW1iZXIgYXNzaWduIGlzIGRlZmluZWQgaWRlbnRpY2FsbHkgdG8KICB0aGUgYnVpbHQtaW4gb3BlcmF0b3IgPS4gVGhlIHR3bwogIGFyZ3VtZW50IG1lbWJlcnMgZXEgYW5kIGx0IGFyZSBkZWZpbmVkIGlkZW50aWNhbGx5IHRvCiAgdGhlIGJ1aWx0LWluIG9wZXJhdG9ycyA9PSBhbmQgJmx0OyBmb3IgdHlwZSB1bnNpZ25lZCBjaGFyLgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogVGhlIExXRyBhZ3JlZWQgd2l0aCB0aGlzIGdlbmVyYWwgZGlyZWN0aW9uLCBidXQgd2UKICBhbHNvIG5lZWQgdG8gY2hhbmdlIDx0dD5lcTwvdHQ+IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGlzIGNoYW5nZS4KICBQb3N0LVJlZG1vbmQ6IE1hcnRpbiBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI0NjgiPjxoMz40NjguJm5ic3A7dW5leHBlY3RlZCBjb25zZXF1ZW5jZXMgb2YgaW9zX2Jhc2U6Om9wZXJhdG9yIHZvaWQqKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdGF0ZS5mbGFncyI+IFtsaWIuaW9zdGF0ZS5mbGFnc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOCBKdW4gMjAwNDwvcD4KCjxwPlRoZSBwcm9ncmFtIGJlbG93IGlzIHJlcXVpcmVkIHRvIGNvbXBpbGUgYnV0IHdoZW4gcnVuIGl0IHR5cGljYWxseQpwcm9kdWNlcyB1bmV4cGVjdGVkIHJlc3VsdHMgZHVlIHRvIHRoZSB1c2VyLWRlZmluZWQgY29udmVyc2lvbiBmcm9tCnN0ZDo6Y291dCBvciBhbnkgb2JqZWN0IGRlcml2ZWQgZnJvbSBiYXNpY19pb3MgdG8gdm9pZCouCjwvcD4KCjxwcmU+ICAgICNpbmNsdWRlICZsdDtjYXNzZXJ0Jmd0OwogICAgI2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwoKICAgIGludCBtYWluICgpCiAgICB7CiAgICAgICAgYXNzZXJ0IChzdGQ6OmNpbi50aWUgKCkgPT0gc3RkOjpjb3V0KTsKICAgICAgICAvLyBjYWxscyBzdGQ6OmNvdXQuaW9zOjpvcGVyYXRvciB2b2lkKigpCiAgICB9CjwvcHJlPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+ClJlcGxhY2Ugc3RkOjpiYXNpY19pb3MmbHQ7Y2hhclQsIHRyYWl0cyZndDs6Om9wZXJhdG9yIHZvaWQqKCkgd2l0aCBhbm90aGVyCmNvbnZlcnNpb24gb3BlcmF0b3IgdG8gc29tZSB1bnNwZWNpZmllZCB0eXBlIHRoYXQgaXMgZ3VhcmFudGVlZCBub3QKdG8gYmUgY29udmVydGlibGUgdG8gYW55IG90aGVyIHR5cGUgZXhjZXB0IGZvciBib29sIChhIHBvaW50ZXItdG8tbWVtYmVyCm1pZ2h0IGJlIG9uZSBzdWNoIHN1aXRhYmxlIHR5cGUpLiBJbiBhZGRpdGlvbiwgbWFrZSBpdCBjbGVhciB0aGF0IHRoZQpwb2ludGVyIHR5cGUgbmVlZCBub3QgYmUgYSBwb2ludGVyIHRvIGEgY29tcGxldGUgdHlwZSBhbmQgd2hlbiBub24tbnVsbCwKdGhlIHZhbHVlIG5lZWQgbm90IGJlIHZhbGlkLgo8L3A+Cgo8cD5TcGVjaWZpY2FsbHksIGNoYW5nZSBpbiBbbGliLmlvc10gdGhlIHNpZ25hdHVyZSBvZjwvcD4KPHByZT4gICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgICBvcGVyYXRvciB1bnNwZWNpZmllZC1ib29sLXR5cGUoKSBjb25zdDsKPC9wcmU+CjxwPmFuZCBjaGFuZ2UgW2xpYi5pb3N0YXRlLmZsYWdzXSwgcDEgZnJvbTwvcD4KPHByZT4gICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPm9wZXJhdG9yIHVuc3BlY2lmaWVkLWJvb2wtdHlwZSgpIGNvbnN0OwoKICAgICAtMS0gUmV0dXJuczogaWYgZmFpbCgpIHRoZW4gYSB2YWx1ZSB0aGF0IHdpbGwgZXZhbHVhdGUgZmFsc2UgaW4gYQogICAgICBib29sZWFuIGNvbnRleHQ7IG90aGVyd2lzZSBhIHZhbHVlIHRoYXQgd2lsbCBldmFsdWF0ZSB0cnVlIGluIGEKICAgICAgYm9vbGVhbiBjb250ZXh0LiBUaGUgdmFsdWUgdHlwZSByZXR1cm5lZCBzaGFsbCBub3QgYmUKICAgICAgY29udmVydGlibGUgdG8gaW50LgoKICAgICAtMi0gW05vdGU6IFRoaXMgY29udmVyc2lvbiBjYW4gYmUgdXNlZCBpbiBjb250ZXh0cyB3aGVyZSBhIGJvb2wKICAgICAgaXMgZXhwZWN0ZWQgKGUuZy4sIGFuIGlmIGNvbmRpdGlvbik7IGhvd2V2ZXIsIGltcGxpY2l0CiAgICAgIGNvbnZlcnNpb25zIChlLmcuLCB0byBpbnQpIHRoYXQgY2FuIG9jY3VyIHdpdGggYm9vbCBhcmUgbm90CiAgICAgIGFsbG93ZWQsIGVsaW1pbmF0aW5nIHNvbWUgc291cmNlcyBvZiB1c2VyIGVycm9yLiBPbmUgcG9zc2libGUKICAgICAgaW1wbGVtZW50YXRpb24gY2hvaWNlIGZvciB0aGlzIHR5cGUgaXMgcG9pbnRlci10by1tZW1iZXIuICAtIGVuZAogICAgICBub3RlXQo8L3ByZT4KCjxwPjxpPltSZWRtb25kOiA1LTQgc3RyYXcgcG9sbCBpbiBmYXZvciBvZiBkb2luZyB0aGlzLl08L2k+PC9wPgo8cD48aT5bTGlsbGVoYW1tZXI6IERvdWcgcHJvdmlkZWQgcmV2aXNlZCB3b3JkaW5nIGZvcgogICJ1bnNwZWNpZmllZC1ib29sLXR5cGUiLl08L2k+PC9wPiAKCjxocj4KPGEgbmFtZT0iNDY5Ij48aDM+NDY5LiZuYnNwO3ZlY3RvciZsdDtib29sJmd0OyBpbGwtZm9ybWVkIHJlbGF0aW9uYWwgb3BlcmF0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudmVjdG9yIj4gW2xpYi52ZWN0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggSnVuIDIwMDQ8L3A+Cgo8cD4KVGhlIG92ZXJsb2FkcyBvZiByZWxhdGlvbmFsIG9wZXJhdG9ycyBmb3IgdmVjdG9yJmx0O2Jvb2wmZ3Q7IHNwZWNpZmllZAppbiBbbGliLnZlY3Rvci5ib29sXSBhcmUgcmVkdW5kYW50ICh0aGV5IGFyZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsCnRvIHRob3NlIHByb3ZpZGVkIGZvciB0aGUgdmVjdG9yIHByaW1hcnkgdGVtcGxhdGUpIGFuZCBtYXkgZXZlbiBiZQpkaWFnbm9zZWQgYXMgaWxsLWZvcm1lZCAocmVmZXIgdG8gRGF2ZWVkIFZhbmRldm9vcmRlJ3MgZXhwbGFuYXRpb24KaW4gYysrc3RkLWxpYi0xMzY0NykuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSBhbGwgb3ZlcmxvYWRzIG9mIG92ZXJsb2FkcyBvZiByZWxhdGlvbmFsIG9wZXJhdG9ycyBmb3IKdmVjdG9yJmx0O2Jvb2wmZ3Q7IGZyb20gW2xpYi52ZWN0b3IuYm9vbF0uCjwvcD4KPGhyPgo8YSBuYW1lPSI0NzQiPjxoMz40NzQuJm5ic3A7Y29uZnVzaW5nIEZvb3Rub3RlIDI5NzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMi41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3RlciI+IFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEgSnVsIDIwMDQ8L3A+Cgo8cD4KSSB0aGluayBGb290bm90ZSAyOTcgaXMgY29uZnVzZWQuIFRoZSBwYXJhZ3JhcGggaXQgYXBwbGllcyB0byBzZWVtcwpxdWl0ZSBjbGVhciBpbiB0aGF0IHdpZGVuKCkgaXMgb25seSBjYWxsZWQgaWYgdGhlIG9iamVjdCBpcyBub3QgYSBjaGFyCnN0cmVhbSAoaS5lLiwgbm90IGJhc2ljX29zdHJlYW0mbHQ7Y2hhciZndDspLCBzbyBpdCdzIGlycmVsZXZhbnQgd2hhdCB0aGUKdmFsdWUgb2Ygd2lkZW4oYykgaXMgb3RoZXJ3aXNlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkkgcHJvcG9zZSB0byBzdHJpa2UgdGhlIEZvb3Rub3RlLgo8L3A+Cjxocj4KPGEgbmFtZT0iNDc1Ij48L2E+PGgzPjxhIG5hbWU9IjQ3NSI+NDc1LiZuYnNwO01heSB0aGUgZnVuY3Rpb24gb2JqZWN0IHBhc3NlZCB0byBmb3JfZWFjaCBtb2RpZnkgdGhlIGVsZW1lbnRzIG9mIHRoZSBpdGVyYXRlZCBzZXF1ZW5jZT88L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuZm9yZWFjaCI+IFtsaWIuYWxnLmZvcmVhY2hdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGVwaGFuIFQuIExhdmF2ZWosIEphYWtrbyBKYXJ2aSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs5IEp1bCAyMDA0PC9wPgo8cD4KSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG9iamVjdCBwYXNzZWQgdG8gZm9yX2VhY2ggaXMgYWxsb3dlZCB0bwptb2RpZnkgdGhlIGVsZW1lbnRzIG9mIHRoZSBzZXF1ZW5jZSBiZWluZyBpdGVyYXRlZCBvdmVyLgo8L3A+Cgo8cD4KZm9yX2VhY2ggaXMgY2xhc3NpZmllZCB3aXRob3V0IGV4cGxhbmF0aW9uIGluIFtsaWIuYWxnLm5vbm1vZGlmeWluZ10sICIyNS4xCk5vbi1tb2RpZnlpbmcgc2VxdWVuY2Ugb3BlcmF0aW9ucyIuICdOb24tbW9kaWZ5aW5nIHNlcXVlbmNlIG9wZXJhdGlvbicgaXMKbmV2ZXIgZGVmaW5lZC4KPC9wPgoKPHA+CjI1KDUpIHNheXM6ICJJZiBhbiBhbGdvcml0aG0ncyBFZmZlY3RzIHNlY3Rpb24gc2F5cyB0aGF0IGEgdmFsdWUgcG9pbnRlZCB0bwpieSBhbnkgaXRlcmF0b3IgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IGlzIG1vZGlmaWVkLCB0aGVuIHRoYXQgYWxnb3JpdGhtIGhhcwphbiBhZGRpdGlvbmFsIHR5cGUgcmVxdWlyZW1lbnQ6IFRoZSB0eXBlIG9mIHRoYXQgYXJndW1lbnQgc2hhbGwgc2F0aXNmeSB0aGUKcmVxdWlyZW1lbnRzIG9mIGEgbXV0YWJsZSBpdGVyYXRvciAoMjQuMSkuIgo8L3A+Cgo8cD5mb3JfZWFjaCdzIEVmZmVjdHMgc2VjdGlvbiBkb2VzIG5vdCBtZW50aW9uIHdoZXRoZXIgYXJndW1lbnRzIGNhbiBiZQptb2RpZmllZDo8L3A+Cgo8YmxvY2txdW90ZT4KICAiRWZmZWN0czogQXBwbGllcyBmIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBldmVyeSBpdGVyYXRvciBpbiB0aGUKICAgcmFuZ2UgW2ZpcnN0LCBsYXN0KSwgc3RhcnRpbmcgZnJvbSBmaXJzdCBhbmQgcHJvY2VlZGluZyB0byBsYXN0IC0gMS4iCjwvYmxvY2txdW90ZT4KCjxwPgpFdmVyeSBvdGhlciBhbGdvcml0aG0gaW4gW2xpYi5hbGcubm9ubW9kaWZ5aW5nXSBpcyAicmVhbGx5IiBub24tbW9kaWZ5aW5nIGluCnRoZSBzZW5zZSB0aGF0IG5laXRoZXIgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcyBub3IgdGhlIGZ1bmN0aW9uIG9iamVjdHMKcGFzc2VkIHRvIHRoZSBhbGdvcml0aG1zIG1heSBtb2RpZnkgdGhlIHNlcXVlbmNlcyBvciBlbGVtZW50cyBpbiBhbnkgd2F5LgpUaGlzIERSIGFmZmVjdHMgb25seSBmb3JfZWFjaC4KPC9wPgoKPHA+CldlIHN1c3BlY3QgdGhhdCBmb3JfZWFjaCdzIGNsYXNzaWZpY2F0aW9uIGluICJub24tbW9kaWZ5aW5nIHNlcXVlbmNlCm9wZXJhdGlvbnMiIG1lYW5zIHRoYXQgdGhlIGFsZ29yaXRobSBpdHNlbGYgZG9lcyBub3QgaW5oZXJlbnRseSBtb2RpZnkgdGhlCnNlcXVlbmNlIG9yIHRoZSBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UsIGJ1dCB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QKcGFzc2VkIHRvIGl0IG1heSBtb2RpZnkgdGhlIGVsZW1lbnRzIGl0IG9wZXJhdGVzIG9uLiAKPC9wPgoKPHA+ClRoZSBvcmlnaW5hbCBTVEwgZG9jdW1lbnQgYnkgU3RlcGFub3YgYW5kIExlZSBleHBsaWNpdGx5IHByb2hpYml0ZWQgdGhlCmZ1bmN0aW9uIG9iamVjdCBmcm9tIG1vZGlmeWluZyBpdHMgYXJndW1lbnQuClRoZSAib2J2aW91cyIgaW1wbGVtZW50YXRpb24gb2YgZm9yX2VhY2ggZm91bmQgaW4gc2V2ZXJhbCBzdGFuZGFyZCBsaWJyYXJ5IAppbXBsZW1lbnRhdGlvbnMsIGhvd2V2ZXIsIGRvZXMgbm90IGltcG9zZSB0aGlzIHJlc3RyaWN0aW9uLgpBcyBhIHJlc3VsdCwgd2Ugc3VzcGVjdCB0aGF0IHRoZSB1c2Ugb2YgZm9yX2VhY2ggd2l0aCBmdW5jdGlvbiBvYmplY3RzIHRoYXQgbW9kaWZ5CnRoZWlyIGFyZ3VtZW50cyBpcyB3aWRlLXNwcmVhZC4gCklmIHRoZSByZXN0cmljdGlvbiB3YXMgcmVpbnN0YXRlZCwgYWxsIHN1Y2ggY29kZSB3b3VsZCBiZWNvbWUgbm9uLWNvbmZvcm1pbmcuCkZ1cnRoZXIsIG5vbmUgb2YgdGhlIG90aGVyIGFsZ29yaXRobXMgaW4gdGhlIFN0YW5kYXJkCmNvdWxkIHNlcnZlIHRoZSBwdXJwb3NlIG9mIGZvcl9lYWNoICh0cmFuc2Zvcm0gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBvcmRlciBpbgp3aGljaCBpdHMgZnVuY3Rpb24gb2JqZWN0IGlzIGNhbGxlZCkuIAo8L3A+Cgo8cD4KV2Ugc3VnZ2VzdCB0aGF0IHRoZSBzdGFuZGFyZCBiZSBjbGFyaWZpZWQgdG8gZXhwbGljaXRseSBhbGxvdyB0aGUgZnVuY3Rpb24gb2JqZWN0IApwYXNzZWQgdG8gZm9yX2VhY2ggbW9kaWZ5IGl0cyBhcmd1bWVudC48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIG5vbm5vcm1hdGl2ZSBub3RlIHRvIHRoZSBFZmZlY3RzIGluIDI1LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5mb3JlYWNoIj4gW2xpYi5hbGcuZm9yZWFjaF08L2E+OiBJZgp0aGUgdHlwZSBvZiAnZmlyc3QnIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgbXV0YWJsZSBpdGVyYXRvciwKJ2YnIG1heSBhcHBseSBub25jb25zdGFudCBmdW5jdGlvbnMgdGhyb3VnaCB0aGUgZGVyZWZlcmVuY2VkIGl0ZXJhdG9ycwpwYXNzZWQgdG8gaXQuCjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgbm90aGluZyBpbiB0aGUgc3RhbmRhcmQgcHJvaGliaXRzIGZ1bmN0aW9uCiAgb2JqZWN0cyB0aGF0IG1vZGlmeSB0aGUgc2VxdWVuY2UgZWxlbWVudHMuIFRoZSBwcm9ibGVtIGlzIHRoYXQKICBmb3JfZWFjaCBpcyBpbiBhIHNlY2lvbiBlbnRpdGxlZCAibm9ubXV0YXRpbmcgYWxnb3JpdGhtcyIsIGFuZCB0aGUKICB0aXRsZSBtYXkgYmUgY29uZnVzaW5nLiAgQSBub25ub3JtYXRpdmUgbm90ZSBzaG91bGQgY2xhcmlmeSB0aGF0LjwvcD4KPGhyPgo8YSBuYW1lPSI0NzgiPjxoMz40NzguJm5ic3A7U2hvdWxkIGZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIHRhYmxlIGhhdmUgYSBsaW5lIGZvciByLSZndDttPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuZm9yd2FyZC5pdGVyYXRvcnMiPiBbbGliLmZvcndhcmQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMSBKdWwgMjAwNDwvcD4KPHA+ClRoZSBGb3J3YXJkIEl0ZXJhdG9yIHJlcXVpcmVtZW50cyB0YWJsZSBjb250YWlucyB0aGUgZm9sbG93aW5nOgo8L3A+CjxwcmU+IGV4cHJlc3Npb24gIHJldHVybiB0eXBlICAgICAgICAgb3BlcmF0aW9uYWwgIHByZWNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNzCiAgPT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KICBhLSZndDttICAgICAgICBVJmFtcDsgaWYgWCBpcyBtdXRhYmxlLCAoKmEpLm0gICAgICAgcHJlOiAoKmEpLm0gaXMgd2VsbC1kZWZpbmVkLgogICAgICAgICAgICAgIG90aGVyd2lzZSBjb25zdCBVJmFtcDsKCiAgci0mZ3Q7bSAgICAgICAgVSZhbXA7ICAgICAgICAgICAgICAgICAgKCpyKS5tICAgICAgIHByZTogKCpyKS5tIGlzIHdlbGwtZGVmaW5lZC4KPC9wcmU+Cgo8cD5UaGUgc2Vjb25kIGxpbmUgbWF5IGJlIHVubmVjZXNzYXJ5LiAgUGFyYWdyYXBoIDExIG9mCiAgW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdIHNheXM6CjwvcD4KCjxibG9ja3F1b3RlPgogICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBYLCBuCiAgIGRlbm90ZXMgYSB2YWx1ZSBvZiB0aGUgZGlmZmVyZW5jZSB0eXBlIERpc3RhbmNlLCB1LCB0bXAsIGFuZCBtCiAgIGRlbm90ZSBpZGVudGlmaWVycywgciBkZW5vdGVzIGEgdmFsdWUgb2YgWCZhbXA7LCB0IGRlbm90ZXMgYSB2YWx1ZSBvZgogICB2YWx1ZSB0eXBlIFQsIG8gZGVub3RlcyBhIHZhbHVlIG9mIHNvbWUgdHlwZSB0aGF0IGlzIHdyaXRhYmxlIHRvCiAgIHRoZSBvdXRwdXQgaXRlcmF0b3IuCjwvYmxvY2txdW90ZT4KCjxwPgpCZWNhdXNlIG9wZXJhdG9ycyBjYW4gYmUgb3ZlcmxvYWRlZCBvbiBhbiBpdGVyYXRvcidzIGNvbnN0LW5lc3MsIHRoZQpjdXJyZW50IHJlcXVpcmVtZW50cyBhbGxvdyBpdGVyYXRvcnMgdG8gbWFrZSBtYW55IG9mIHRoZSBvcGVyYXRpb25zCnNwZWNpZmllZCB1c2luZyB0aGUgaWRlbnRpZmllcnMgYSBhbmQgYiBpbnZhbGlkIGZvciBub24tY29uc3QKaXRlcmF0b3JzLjwvcD4KCjxwPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3NyI+NDc3PC9hPjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+UmVtb3ZlIHRoZSAici0mZ3Q7bSIgbGluZSBmcm9tIHRoZSBGb3J3YXJkIEl0ZXJhdG9yIHJlcXVpcmVtZW50cwp0YWJsZS4gQ2hhbmdlPC9wPgo8YmxvY2txdW90ZT4KICAgICJjb25zdCBYIgo8L2Jsb2NrcXVvdGU+Cgo8cD4gdG8gPC9wPgoKPGJsb2NrcXVvdGU+CiAgICAiWCBvciBjb25zdCBYIiAKPC9ibG9ja3F1b3RlPgoKPHA+aW4gcGFyYWdyYXBoIDExIG9mIFtsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzXS48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGlzIGEgZGVmZWN0IGJlY2F1c2UgaXQgY29uc3RyYWlucyBhbiBsdmFsdWUgdG8gcmV0dXJuaW5nIGEgbW9kaWZpYWJsZSBsdmFsdWUuCjwvcD4KPGhyPgo8YSBuYW1lPSI0OTUiPjxoMz40OTUuJm5ic3A7Q2xhdXNlIDIyIHRlbXBsYXRlIHBhcmFtZXRlciByZXF1aXJlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsaXphdGlvbiI+IFtsaWIubG9jYWxpemF0aW9uXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgSmFuIDIwMDU8L3A+CjxwPkl0IGFwcGVhcnMgdGhhdCB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBmb3IgbWFueSBvZiB0aGUKdGVtcGxhdGUgcGFyYW1ldGVycyBpbiBjbGF1c2UgMjIuIEl0IGxvb2tzIGxpa2UgdGhpcyBpc3N1ZSBoYXMgbmV2ZXIKY29tZSB1cCwgZXhjZXB0IHBlcmhhcHMgZm9yIEZhY2V0LjwvcD4KCjxwPkNsYXVzZSAyMiBpc24ndCBldmVuIGxpc3RlZCBpbiAxNy4zLjIuMSBbbGliLnR5cGUuZGVzY3JpcHRpb25zXSwKZWl0aGVyLCB3aGljaCBpcyB0aGUgd29yZGluZyB0aGF0IGFsbG93cyByZXF1aXJlbWVudHMgb24gdGVtcGxhdGUKcGFyYW1ldGVycyB0byBiZSBpZGVudGlmaWVkIGJ5IG5hbWUuPC9wPgoKPHA+U28gb25lIGlzc3VlIGlzIHRoYXQgMTcuMy4yLjEgW2xpYi50eXBlLmRlc2NyaXB0aW9uc10gU2hvdWxkIGJlCmNoYW5nZWQgdG8gY292ZXIgY2xhdXNlIDIyLiBBIGJldHRlciBjaGFuZ2UsIHdoaWNoIHdpbGwgY292ZXIgdXMgaW4KdGhlIGZ1dHVyZSwgd291bGQgYmUgdG8gc2F5IHRoYXQgaXQgYXBwbGllcyB0byBhbGwgdGhlIGxpYnJhcnkKY2xhdXNlcy4gVGhlbiBpZiBhIHRlbXBsYXRlIGdldHMgYWRkZWQgdG8gYW55IGxpYnJhcnkgY2xhdXNlIHdlIGFyZQpjb3ZlcmVkLjwvcD4KCjxwPmNoYXJULCBJbnB1dEl0ZXJhdG9yLCBhbmQgb3RoZXIgbmFtZXMgd2l0aCByZXF1aXJlbWVudHMgZGVmaW5lZAplbHNld2hlcmUgYXJlIGZpbmUsIGFzc3VtaW5nIHRoZSAxNy4zLjIuMSBbbGliLnR5cGUuZGVzY3JpcHRpb25zXSBmaXguCkJ1dCB0aGVyZSBhcmUgYSBmZXcgdGVtcGxhdGUgYXJndW1lbnRzIG5hbWVzIHdoaWNoIEkgZG9uJ3QgdGhpbmsgaGF2ZQpyZXF1aXJlbWVudHMgZ2l2ZW4gZWxzZXdoZXJlOjwvcD4KCjx1bD4KPGxpPmludGVyblQgYW5kIGV4dGVyblQuICBUaGUgZml4IGlzIHRvIGFkZCB3b3JkaW5nIHNheWluZyB0aGF0IGludGVyblQKYW5kIGV4dGVyblQgbXVzdCBtZWV0IHRoZSBzYW1lIHJlcXVpcmVtZW50cyBhcyB0ZW1wbGF0ZSBhcmd1bWVudHMKbmFtZWQgY2hhclQuPC9saT4KCjxsaT5zdGF0ZVQuICBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUuIFRoZXJlIGFscmVhZHkgaXMgc29tZSB3b3JkaW5nLApidXQgaXQgc2VlbXMgYSBiaXQgdmFndWUuPC9saT4KCjxsaT5JbnRsLiAgW2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWVdIFRoZSBmaXggZm9yIHRoaXMgb25lIGlzIHRvCnJlbmFtZSAiSW50bCIgdG8gIkludGVybmF0aW9uYWwiLiBUaGUgbmFtZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvdGhlcgp0ZXh0IGlkZW50aWZpZXMgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIG5hbWUgSW50ZXJuYXRpb25hbCBidXQgbm90CmZvciBJbnRsLjwvbGk+CjwvdWw+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE3LjMuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnR5cGUuZGVzY3JpcHRpb25zIj4gW2xpYi50eXBlLmRlc2NyaXB0aW9uc108L2E+LCBwYXJhZ3JhcGggMSwgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgpUaGUgUmVxdWlyZW1lbnRzIHN1YmNsYXVzZXMgbWF5IGRlc2NyaWJlIG5hbWVzIHRoYXQgYXJlIHVzZWQgdG8Kc3BlY2lmeSBjb25zdHJhaW50cyBvbiB0ZW1wbGF0ZSBhcmd1bWVudHMuMTUzKSBUaGVzZSBuYW1lcyBhcmUgdXNlZCBpbgpjbGF1c2VzIDIwLCAyMywgMjUsIGFuZCAyNiB0byBkZXNjcmliZSB0aGUgdHlwZXMgdGhhdCBtYXkgYmUgc3VwcGxpZWQKYXMgYXJndW1lbnRzIGJ5IGEgQysrIHByb2dyYW0gd2hlbiBpbnN0YW50aWF0aW5nIHRlbXBsYXRlIGNvbXBvbmVudHMKZnJvbSB0aGUgbGlicmFyeS4gCjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KVGhlIFJlcXVpcmVtZW50cyBzdWJjbGF1c2VzIG1heSBkZXNjcmliZSBuYW1lcyB0aGF0IGFyZSB1c2VkIHRvCnNwZWNpZnkgY29uc3RyYWludHMgb24gdGVtcGxhdGUgYXJndW1lbnRzLjE1MykgVGhlc2UgbmFtZXMgYXJlIHVzZWQgaW4KbGlicmFyeSBjbGF1c2VzIHRvIGRlc2NyaWJlIHRoZSB0eXBlcyB0aGF0IG1heSBiZSBzdXBwbGllZCBhcwphcmd1bWVudHMgYnkgYSBDKysgcHJvZ3JhbSB3aGVuIGluc3RhbnRpYXRpbmcgdGVtcGxhdGUgY29tcG9uZW50cyBmcm9tCnRoZSBsaWJyYXJ5Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiB0aGUgZnJvbnQgbWF0dGVyIG9mIGNsYXNzIDIyLCBsb2NhbGVzLCBhZGQ6PC9wPgo8YmxvY2txdW90ZT4KVGVtcGxhdGUgcGFyYW1ldGVyIHR5cGVzIGludGVyblQgYW5kIGV4dGVyblQgc2hhbGwgbWVldCB0aGUKcmVxdWlyZW1lbnRzIG9mIGNoYXJUIChkZXNjcmliZWQgaW4gMjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmdzIj4gW2xpYi5zdHJpbmdzXTwvYT4pLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KIEFnYWluLCBhIGJsYW5rZXQgY2xhdXNlIGlzbid0IGJsYW5rZXQgZW5vdWdoLiBBbHNvLCB3ZSd2ZSBnb3QgYQogY291cGxlIG9mIG5hbWVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBibGFua2V0IHJlcXVpcmVtZW50IHN0YXRlbWVudHMKIGZvci4gVGhlIG9ubHkgaXNzdWUgaXMgd2hhdCB0byBkbyBhYm91dCBzdGF0ZVQuIFRoaXMgd29yZGluZyBpcwogdGhpbiwgYnV0IHByb2JhYmx5IGFkZXF1YXRlLjwvcD4KPGhyPgo8YSBuYW1lPSI0OTYiPjxoMz40OTYuJm5ic3A7SWxsZWdhbCB1c2Ugb2YgIlQiIGluIHZlY3RvciZsdDtib29sJmd0OzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3RvciI+IFtsaWIudmVjdG9yXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7cmljaGFyZEBleC1wYXJyb3QuY29tJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEwIEZlYiAyMDA1PC9wPgo8cD4KSW4gdGhlIHN5bm9wc2lzIG9mIHRoZSBzdGQ6OnZlY3RvciZsdDtib29sJmd0OyBzcGVjaWFsaXNhdGlvbiBpbiAyMy4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi52ZWN0b3IiPiBbbGliLnZlY3Rvcl08L2E+LAp0aGUgbm9uLXRlbXBsYXRlIGFzc2lnbigpIGZ1bmN0aW9uIGhhcyB0aGUgc2lnbmF0dXJlPC9wPgoKPHByZT4gIHZvaWQgYXNzaWduKCBzaXplX3R5cGUgbiwgY29uc3QgVCZhbXA7IHQgKTsKPC9wcmU+Cgo8cD5UaGUgdHlwZSwgVCwgaXMgbm90IGRlZmluZWQgaW4gdGhpcyBjb250ZXh0LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlICJUIiB3aXRoICJ2YWx1ZV90eXBlIi48L3A+Cjxocj4KPGEgbmFtZT0iNDk3Ij48aDM+NDk3LiZuYnNwO21lYW5pbmcgb2YgbnVtZXJpY19saW1pdHM6OnRyYXBzIGZvciBmbG9hdGluZyBwb2ludCB0eXBlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubnVtZXJpYy5saW1pdHMubWVtYmVycyI+IFtsaWIubnVtZXJpYy5saW1pdHMubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyIE1hciAyMDA1PC9wPgoKPHA+MTguMi4xLjIsIHA1OSBzYXlzIHRoaXMgbXVjaCBhYm91dCB0aGUgdHJhcHMgbWVtYmVyIG9mIG51bWVyaWNfbGltaXRzOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5zdGF0aWMgY29uc3QgYm9vbCB0cmFwczs8YnI+Ci01OS0gdHJ1ZSBpZiB0cmFwcGluZyBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIHR5cGUuMjA0KQo8YnI+CkZvb3Rub3RlIDIwNDogUmVxdWlyZWQgYnkgTElBLTEuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SXQncyBub3QgY2xlYXIgd2hhdCBpcyBtZWFudCBieSAiaXMgaW1wbGVtZW50ZWQiIGhlcmUuPC9wPgoKPHA+CkluIHRoZSBjb250ZXh0IG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBleHBlY3QKdG8gYmUgYWJsZSB0byB1c2UgdHJhcHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiAic2FmZWx5IiB1c2UKaW5maW5pdHkoKSwgcXVpZXRfTmFOKCksIGV0Yy4sIGluIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIHRoYXQgaXMKd2l0aG91dCBjYXVzaW5nIGEgdHJhcCAoaS5lLiwgb24gVU5JWCB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dApnZXR0aW5nIGEgc2lnbmFsKS4gV2hlbiB0cmFwcyBpcyB0cnVlLCBJIHdvdWxkIGV4cGVjdCBhbnkgb2YgdGhlCm9wZXJhdGlvbnMgaW4gc2VjdGlvbiA3IG9mIElFRUUgNzU0IHRvIGNhdXNlIGEgdHJhcCAoYW5kIG15IHByb2dyYW0KdG8gZ2V0IGEgU0lHRlBFKS4gU28sIGZvciBleGFtcGxlLCBvbiBBbHBoYSwgSSB3b3VsZCBleHBlY3QgdHJhcHMKdG8gYmUgdHJ1ZSBieSBkZWZhdWx0ICh1bmxlc3MgSSBjb21waWxlZCBteSBwcm9ncmFtIHdpdGggdGhlIC1pZWVlCm9wdGlvbiksIGZhbHNlIGJ5IGRlZmF1bHQgb24gbW9zdCBvdGhlciBwb3B1bGFyIGFyY2hpdGVjdHVyZXMsCmluY2x1ZGluZyBJQTY0LCBNSVBTLCBQQS1SSVNDLCBQUEMsIFNQQVJDLCBhbmQgeDg2IHdoaWNoIHJlcXVpcmUKdHJhcHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGJ5IHRoZSBwcm9ncmFtLgo8L3A+Cgo8cD4KQW5vdGhlciBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbiBvZiBwNTkgaXMgdGhhdCB0cmFwcyBzaG91bGQgYmUgdHJ1ZQpvbiBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0cmFwcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleQphcmUgZW5hYmxlZCBieSBkZWZhdWx0IG9yIG5vdC4gSSBkb24ndCB0aGluayBzdWNoIGFuIGludGVycHJldGF0aW9uCm1ha2VzIHRoZSB0cmFwcyBtZW1iZXIgdmVyeSB1c2VmdWwsIGV2ZW4gdGhvdWdoIHRoYXQgaXMgaG93IHRyYXBzIGlzCmltcGxlbWVudGVkIG9uIHNldmVyYWwgcGxhdGZvcm1zLiBJdCBpcyBhbHNvIHRoZSBvbmx5IHdheSB0byBpbXBsZW1lbnQKdHJhcHMgb24gcGxhdGZvcm1zIHRoYXQgYWxsb3cgcHJvZ3JhbXMgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRyYXBwaW5nCmF0IHJ1bnRpbWUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgcDU5IHRvIHJlYWQ6PC9wPgo8YmxvY2txdW90ZT5UcnVlIGlmLCBhdCBwcm9ncmFtIHN0YXJ0dXAsIHRoZXJlIGV4aXN0cyBhIHZhbHVlIG9mIHRoZSB0eXBlIHRoYXQKICB3b3VsZCBjYXVzZSBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiB1c2luZyB0aGF0IHZhbHVlIHRvIHRyYXAuPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+CiBSZWFsIGlzc3VlLCBzaW5jZSB0cmFwcGluZyBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYuIFVuY2xlYXIgd2hhdCBhCiBzdGF0aWMgcXVlcnkgY2FuIHNheSBhYm91dCBhIGR5bmFtaWMgaXNzdWUuIFRoZSByZWFsIGFkdmljZSB3ZSBzaG91bGQKIGdpdmUgdXNlcnMgaXMgdG8gdXNlIGNmZW52IGZvciB0aGVzZSBzb3J0cyBvZiBxdWVyaWVzLiBCdXQgdGhpcyBuZXcKIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgYXQgbGVhc3QgY29uc2lzdGVudCBhbmQgc2xpZ2h0bHkgYmV0dGVyIHRoYW4KIG5vdGhpbmcuPC9wPgo8aHI+CjxhIG5hbWU9IjUwNSI+PGgzPjUwNS4mbmJzcDtSZXN1bHRfdHlwZSBpbiByYW5kb20gZGlzdHJpYnV0aW9uIHJlcXVpcmVtZW50czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA1LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLnJhbmQucmVxIj4gW3RyLnJhbmQucmVxXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMgSnVsIDIwMDU8L3A+CjxwPgpUYWJsZSAxNzogUmFuZG9tIGRpc3RyaWJ1dGlvbiByZXF1aXJlbWVudHMKPC9wPgo8cD4KUm93IDEgcmVxdWlyZXMgdGhhdCBlYWNoIHJhbmRvbSBkaXN0cmlidXRpb24gcHJvdmlkZSBhIG5lc3RlZCB0eXBlICJpbnB1dF90eXBlIjsKdGhpcyB0eXBlIGRlbm90ZXMgdGhlIHR5cGUgb2YgdGhlIHZhbHVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gY29uc3VtZXMuCjwvcD4KPHA+Ckluc3BlY3Rpb24gb2YgYWxsIGRpc3RyaWJ1dGlvbnMgaW4gW3RyLnJhbmQuZGlzdF0gcmV2ZWFscyB0aGF0IGVhY2ggZGlzdHJpYnV0aW9uCnByb3ZpZGVzIGEgc2Vjb25kIHR5cGVkZWYgKCJyZXN1bHRfdHlwZSIpIHRoYXQgZGVub3RlcyB0aGUgdHlwZSBvZiB0aGUgdmFsdWVzIHRoZQpkaXN0cmlidXRpb24gcHJvZHVjZXMgd2hlbiBjYWxsZWQuICAKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJdCBzZWVtcyB0byBtZSB0aGF0IHRoaXMgaXMgYWxzbyBhIHJlcXVpcmVtZW50CmZvciBhbGwgZGlzdHJpYnV0aW9ucyBhbmQgc2hvdWxkIHRoZXJlZm9yZSBiZSAgaW5kaWNhdGVkIGFzIHN1Y2ggdmlhIGEgbmV3IHNlY29uZApyb3cgdG8gdGhpcyB0YWJsZSAxNzoKPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSI+Cjx0Ym9keT48dHI+Cjx0ZD5YOjpyZXN1bHRfdHlwZTwvdGQ+Cjx0ZD5UPC90ZD4KPHRkPi0tLTwvdGQ+Cjx0ZD5jb21waWxlLXRpbWU8L3RkPgo8L3RyPgo8L3Rib2R5PjwvdGFibGU+Cgo8cD48aT5bCkJlcmxpbjogIFZvdGVkIHRvIFdQLiAgTjE5MzIgYWRvcHRzIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uOiAgc2VlIFRhYmxlIDUgcm93IDEuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI1MDciPjxoMz41MDcuJm5ic3A7TWlzc2luZyByZXF1aXJlbWVudCBmb3IgdmFyaWF0ZV9nZW5lcmF0b3I6Om9wZXJhdG9yKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtUUjEgNS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy90cjEuaHRtbCN0ci5yYW5kLnZhciI+IFt0ci5yYW5kLnZhcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KUGFyYWdyYXBoIDExIG9mIFt0ci5yYW5kLnZhcl0gZXF1aXJlcyB0aGF0IHRoZSBtZW1iZXIgdGVtcGxhdGUKPC9wPgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHJlc3VsdF90eXBlIG9wZXJhdG9yKCkgKFQgdmFsdWUpOwo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgpyZXR1cm4KPC9wPgo8YmxvY2txdW90ZT48cHJlPmRpc3RyaWJ1dGlvbigpKGUsIHZhbHVlKQo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgpIb3dldmVyLCBub3QgYWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBhbiBvcGVyYXRvcigpIHdpdGggYSBjb3JyZXNwb25kaW5nIHNpZ25hdHVyZS4KPC9wPgoKPHA+PGk+WwpCZXJsaW46ICBBcyBhIHdvcmtpbmcgZ3JvdXAgd2Ugdm90ZWQgaW4gZmF2b3Igb2YgTjE5MzIgd2hpY2ggbWFrZXMgdGhpcyBtb290Ogp2YXJpYXRlX2dlbmVyYXRvciBoYXMgYmVlbiBlbGltaW5hdGVkLiAgVGhlbiBpbiBmdWxsIGNvbW1pdHRlZSB3ZSB2b3RlZCB0byBnaXZlCnRoaXMgaXNzdWUgV1Agc3RhdHVzIChtaXN0YWtlbmx5KS4KXTwvaT48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXZSB0aGVyZWZvcmUgIHJlY29tbWVuZCB0aGF0IHdlIGluc2VydCB0aGUgZm9sbG93aW5nIHByZWNvbmRpdGlvbiBiZWZvcmUgcGFyYWdyYXBoIDExOgo8L3A+CjxibG9ja3F1b3RlPgpQcmVjb25kaXRpb246ICA8dHQ+ZGlzdHJpYnV0aW9uKCkub3BlcmF0b3IoKShlLHZhbHVlKTwvdHQ+IGlzIHdlbGwtZm9ybWVkLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNTA4Ij48aDM+NTA4LiZuYnNwO0JhZCBwYXJhbWV0ZXJzIGZvciByYW5sdXg2NF9iYXNlXzAxPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDUuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIucmFuZC5wcmVkZWYiPiBbdHIucmFuZC5wcmVkZWZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXYWx0ZXIgQnJvd24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+ClRoZSBmaWZ0aCBvZiB0aGVzZSBlbmdpbmVzIHdpdGggcHJlZGVmaW5lZCBwYXJhbWV0ZXJzLCByYW5sdXg2NF9iYXNlXzAxLAphcHBlYXJzIHRvIGhhdmUgYW4gdW5pbnRlbnRpb25hbCBlcnJvciBmb3Igd2hpY2ggdGhlcmUgaXMgYSBzaW1wbGUgY29ycmVjdGlvbi4KVGhlIHR3byBwcmUtZGVmaW5lZCAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSBlbmdpbmVzIGFyZSBnaXZlbiBhczogCjwvcD4KPGJsb2NrcXVvdGU+PHByZT50eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmbHQ7ZmxvYXQsICAyNCwgMTAsIDI0Jmd0OyByYW5sdXhfYmFzZV8wMTsKdHlwZWRlZiBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxJmx0O2RvdWJsZSwgNDgsIDEwLCAyNCZndDsgcmFubHV4NjRfYmFzZV8wMTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KV2UgZGVtb25zdHJhdGUgYmVsb3cgdGhhdCByYW5sdXg2NF9iYXNlXzAxIGZhaWxzIHRvIG1lZXQgdGhlIGludGVudCBvZiB0aGUKcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHByb3Bvc2FsLCBidXQgdGhhdCB0aGUgc2ltcGxlIGNvcnJlY3Rpb24gdG8KPC9wPgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSZsdDtkb3VibGUsIDQ4LCAgNSwgMTImZ3Q7IHJhbmx1eDY0X2Jhc2VfMDE7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CmRvZXMgbWVldCB0aGUgaW50ZW50IG9mIGRlZmluaW5nIHdlbGwta25vd24gZ29vZCBwYXJhbWV0ZXJpemF0aW9ucy4KPC9wPgo8cD4KVGhlIHJhbmx1eDY0X2Jhc2VfMDEgZW5naW5lIGFzIHByZXNlbnRlZCBmYWlscyB0byBtZWV0IHRoZSBpbnRlbnQgZm9yCnByZWRlZmluZWQgZW5naW5lcywgc3RhdGVkIGluIHByb3Bvc2FsIE4xMzk4IChzZWN0aW9uIEUpOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpJbiBvcmRlciB0byBtYWtlIGdvb2QgcmFuZG9tIG51bWJlcnMgYXZhaWxhYmxlIHRvIGEgbGFyZ2UgbnVtYmVyIG9mIGxpYnJhcnkKdXNlcnMsIHRoaXMgcHJvcG9zYWwgbm90IG9ubHkgZGVmaW5lcyBnZW5lcmljIHJhbmRvbS1udW1iZXIgZW5naW5lcywgYnV0IGFsc28KcHJvdmlkZXMgYSBudW1iZXIgb2YgcHJlZGVmaW5lZCB3ZWxsLWtub3duIGdvb2QgcGFyYW1ldGVyaXphdGlvbnMgZm9yIHRob3NlLgo8L3A+PC9ibG9ja3F1b3RlPgo8cD4KVGhlIHByZWRlZmluZWQgcmFubHV4X2Jhc2VfMDEgZW5naW5lIGhhcyBiZWVuIHByb3ZlbiBbMSwyLDNdIHRvIGhhdmUgYSB2ZXJ5CmxvbmcgcGVyaW9kIGFuZCBzbyBtZWV0cyB0aGlzIGNyaXRlcmlvbi4gIFRoaXMgcHJvcGVydHkgbWFrZXMgaXQgc3VpdGFibGUgZm9yCnVzZSBpbiB0aGUgZXhjZWxsZW50IGRpc2NhcmRfYmxvY2sgIGVuZ2luZXMgZGVmaW5lZCBzdWJzZXF1ZW50bHkuICBUaGUgcHJvb2YKb2YgbG9uZyBwZXJpb2QgcmVsaWVzIG9uIHRoZSBmYWN0IChwcm92ZW4gaW4gWzFdKSB0aGF0IDIqKih3KnIpIC0gMioqKHcqcykKKyAxIGlzIHByaW1lICh3LCByLCBhbmQgcyBhcmUgdGVtcGxhdGUgcGFyYW1ldGVycyB0byBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxLAphcyBkZWZpbmVkIGluIFt0ci5yYW5kLmVuZy5zdWIxXSkuCjwvcD4KPHA+ClRoZSByYW5sdXg2NF9iYXNlXzAxIGVuZ2luZSBhcyBwcmVzZW50ZWQgaW4gW3RyLnJhbmQucHJlZGVmXSB1c2VzIHc9NDgsIHI9MjQsIHM9MTAuCkZvciB0aGVzZSBudW1iZXJzLCB0aGUgY29tYmluYXRpb24gMioqKHcqciktMioqKHcqcykrMSBpcyBub24tcHJpbWUgKHRob3VnaApleHBsaWNpdCBmYWN0b3JpemF0aW9uICB3b3VsZCBiZSBhIGNoYWxsZW5nZSkuICBJbiBjb25zZXF1ZW5jZSwgd2hpbGUgaXQgaXMKY2VydGFpbmx5IHBvc3NpYmxlIGZvciBzb21lIHNlZWRpbmcgc3RhdGVzIHRoYXQgdGhpcyBlbmdpbmUgd291bGQgaGF2ZSBhIHZlcnkKbG9uZyBwZXJpb2QsIGl0IGlzIG5vdCBhdCBhbGwg0ndlbGwta25vd27TIHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4gVGhlIGludGVudAppbiB0aGUgTjEzOTggcHJvcG9zYWwgaW52b2x2ZWQgdGhlIGJhc2Ugb2YgdGhlIHJhbmx1eDY0IGVuZ2luZSwgd2hpY2ggZmluZHMgaGVhdnkKdXNlIGluIHRoZSBwaHlzaWNzIGNvbW11bml0eS4gIFRoaXMgaXMgaXNvbW9ycGhpYyB0byB0aGUgcHJlZGVmaW5lZCByYW5sdXhfYmFzZV8wMSwKYnV0IGV4cGxvaXRzIHRoZSBhYmlsaXR5IG9mIGRvdWJsZSB2YXJpYWJsZXMgdG8gaG9sZCAoYXQgbGVhc3QpIDQ4IGJpdHMgb2YgbWFudGlzc2EsCnRvIGRlbGl2ZXIgNDggcmFuZG9tIGJpdHMgYXQgYSB0aW1lIHJhdGhlciB0aGFuIDI0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClRvIGFjaGlldmUgdGhpcyBpbnRlbmRlZCBiZWhhdmlvciwgdGhlIGNvcnJlY3QgdGVtcGxhdGUgcGFyYW1ldGVyaXp0aW9uICB3b3VsZCBiZToKPC9wPgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSZsdDtkb3VibGUsIDQ4LCA1LCAxMiZndDsgcmFubHV4NjRfYmFzZV8wMTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KVGhlIHNlcXVlbmNlIG9mIG1hbnRpc3NhIGJpdHMgZGVsaXZlcmVkIGJ5IHRoaXMgaXMgaXNvbW9ycGhpYyAodHJlYXRpbmcgZWFjaApkb3VibGUgYXMgaGF2aW5nIHRoZSAgYml0cyBvZiB0d28gZmxvYXRzKSB0byB0aGF0IGRlbGl2ZXJlZCBieSByYW5sdXhfYmFzZV8wMS4KPC9wPgo8cD4KPGI+UmVmZXJlbmNlczo8L2I+CjwvcD4KPG9sPgo8bGk+Ri4gSmFtZXMsIENvbXB1dC4gUGh5cy4gQ29tbXVuLiA2MCgxOTkwKSAzMjk8L2xpPgo8bGk+Ry4gTWFyc2FnbGlhIGFuZCBBLiBaYW1hbiwgQW5uLiBBcHBsLiBQcm9iIDEoMTk5MSkgNDYyPC9saT4KPGxpPk0uIEx1c2NoZXIsIENvbXB1dC4gUGh5cy4gQ29tbXVuLiA3OSgxOTk0KSAxMDAtMTEwPC9saT4KPC9vbD4KCjxwPjxpPlsKQmVybGluOiBWb3RlZCB0byBXUC4gIE4xOTMyIGFkb3B0cyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpbiAyNi4zLjUsCmp1c3QgYWJvdmUgcGFyYWdyYXBoIDUuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI1MTkiPjxoMz41MTkuJm5ic3A7RGF0YSgpIHVuZG9jdW1lbnRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSA2LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLmFycmF5LmFycmF5Ij4gW3RyLmFycmF5LmFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UGV0ZSBCZWNrZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBKdWwgMjAwNTwvcD4KPHA+Cjx0dD5hcnJheSZsdDsmZ3Q7OjpkYXRhKCk8L3R0PiBpcyBwcmVzZW50IGluIHRoZSBjbGFzcyBzeW5vcHNpcywgYnV0IG5vdCBkb2N1bWVudGVkLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBhIG5ldyBzZWN0aW9uLCBhZnRlciA2LjIuMi4zOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+VCogICAgICAgZGF0YSgpCmNvbnN0IFQqIGRhdGEoKSBjb25zdDsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KPGI+UmV0dXJuczo8L2I+IDx0dD5lbGVtczwvdHQ+Lgo8L3A+CjxwPgpDaGFuZ2UgNi4yLjIuNC8yIHRvOgo8L3A+CjxibG9ja3F1b3RlPgpJbiB0aGUgY2FzZSB3aGVyZSA8dHQ+TiA9PSAwPC90dD4sIDx0dD5iZWdpbigpID09IGVuZCgpPC90dD4uIFRoZSByZXR1cm4gdmFsdWUKb2YgPHR0PmRhdGEoKTwvdHQ+IGlzIHVuc3BlY2lmaWVkLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNTIwIj48aDM+NTIwLiZuYnNwO1Jlc3VsdF9vZiBhbmQgcG9pbnRlcnMgdG8gZGF0YSBtZW1iZXJzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDMuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLmZ1bmMuYmluZCI+IFt0ci5mdW5jLmJpbmRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlIEJlY2tlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KSW4gdGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciBiaW5kZXJzLCB0aGUgcmV0dXJuIHR5cGUgb2YgYmluZCgpIHdoZW4KY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIG1lbWJlciBkYXRhIGFzIGl0J3MgY2FsbGFibGUgb2JqZWN0IHdhcwpkZWZpbmVkIHRvIGJlIG1lbV9mbihwdHIpOyB3aGVuIFBldGVyIERpbW92IGFuZCBJICB1bmlmaWVkIHRoZQpkZXNjcmlwdGlvbnMgb2YgdGhlIFRSMSBmdW5jdGlvbiBvYmplY3RzIHdlIGhvaXN0ZWQgdGhlIGRlc2NyaXB0aW9ucwpvZiByZXR1cm4gdHlwZXMgaW50byB0aGUgSU5WT0tFIHBzZXVkby1mdW5jdGlvbiBhbmQgaW50byByZXN1bHRfb2YuClVuZm9ydHVuYXRlbHksIHdlIGxlZnQgcG9pbnRlciB0byBtZW1iZXIgZGF0YSBvdXQgb2YgcmVzdWx0X29mLCBzbwpiaW5kIGRvZXNuJ3QgaGF2ZSBhbnkgc3BlY2lmaWVkIGJlaGF2aW9yIHdoZW4gY2FsbGVkIHdpdGggYSBwb2ludGVyCnRvICBtZW1iZXIgZGF0YS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxpPlsKUGV0ZSBhbmQgUGV0ZXIgd2lsbCBwcm92aWRlIHdvcmRpbmcuCl08L2k+PC9wPgoKPHA+CkluIDIwLjUuNCBbbGliLmZ1bmMucmV0XSAoW3RyLmZ1bmMucmV0XSkgcDMgYWRkIHRoZSBmb2xsb3dpbmcgYnVsbGV0IGFmdGVyIGJ1bGxldCAyOgo8L3A+CjxvbCBzdGFydD0iMyI+CjxsaT5JZiA8dHQ+RjwvdHQ+IGlzIGEgbWVtYmVyIGRhdGEgcG9pbnRlciB0eXBlIDx0dD5SIFQ6Oio8L3R0PiwgPHR0PnR5cGU8L3R0PgpzaGFsbCBiZSA8dHQ+PGk+Y3Y8L2k+IFImYW1wOzwvdHQ+IHdoZW4gPHR0PlQxPC90dD4gaXMgPHR0PjxpPmN2PC9pPiBVMSZhbXA7PC90dD4sCjx0dD5SPC90dD4gb3RoZXJ3aXNlLjwvbGk+Cjwvb2w+Cgo8cD48aT5bClBldGVyIHByb3ZpZGVkIHdvcmRpbmcuCl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjUyMSI+PGgzPjUyMS4mbmJzcDtHYXJibGVkIHJlcXVpcmVtZW50cyBmb3IgYXJndW1lbnRfdHlwZSBpbiByZWZlcmVuY2Vfd3JhcHBlcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSAyLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3RyMS5odG1sI3RyLnV0aWwucmVmd3JwLnJlZndycCI+IFt0ci51dGlsLnJlZndycC5yZWZ3cnBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlIEJlY2tlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bCAyMDA1PC9wPgo8cD4KMi4xLjIvMywgc2Vjb25kIGJ1bGxldCBpdGVtIGN1cnJlbnRseSBzYXlzIHRoYXQgcmVmZXJlbmNlX3dyYXBwZXImbHQ7VCZndDsgaXMKZGVyaXZlZCBmcm9tIHVuYXJ5X2Z1bmN0aW9uJmx0O1QsIFImZ3Q7IGlmIFQgaXM6CjwvcD4KPGJsb2NrcXVvdGU+CmEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSB3aXRoIGN2LXF1YWxpZmllciBjdiBhbmQgbm8gYXJndW1lbnRzOwp0aGUgdHlwZSBUMSBpcyBjdiBUKiBhbmQgUiBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uOwo8L2Jsb2NrcXVvdGU+CjxwPgpUaGUgdHlwZSBvZiBUMSBjYW4ndCBiZSBjdiBUKiwgJ2NhdXNlIHRoYXQncyBhIHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIG1lbWJlcgpmdW5jdGlvbi4gSXQgc2hvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgY2xhc3MgdGhhdCBUIGlzIGEgcG9pbnRlciB0byBtZW1iZXIgb2YuCkxpa2UgdGhpczoKPC9wPgo8YmxvY2txdW90ZT4KYSBwb2ludGVyIHRvIGEgbWVtYmVyIGZ1bmN0aW9uIFIgVDA6OmYoKSBjdiAod2hlcmUgY3YgcmVwcmVzZW50cyB0aGUgbWVtYmVyCmZ1bmN0aW9uJ3MgY3YtcXVhbGlmaWVycyk7IHRoZSB0eXBlIFQxIGlzIGN2IFQwKgo8L2Jsb2NrcXVvdGU+CjxwPgpTaW1pbGFybHksIGJ1bGxldCBpdGVtIDIgaW4gMi4xLjIvNCBzaG91bGQgYmU6CjwvcD4KPGJsb2NrcXVvdGU+CmEgcG9pbnRlciB0byBhIG1lbWJlciBmdW5jdGlvbiBSIFQwOjpmKFQyKSBjdiAod2hlcmUgY3YgcmVwcmVzZW50cyB0aGUgbWVtYmVyCmZ1bmN0aW9uJ3MgY3YtcXVhbGlmaWVycyk7IHRoZSB0eXBlIFQxIGlzIGN2IFQwKgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPgpDaGFuZ2UgYnVsbGV0IGl0ZW0gMiBpbiAyLjEuMi8zOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHVsPgo8bGk+CmEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gPGRlbD50eXBlIHdpdGggY3YtcXVhbGlmaWVyIDx0dD48aT5jdjwvaT48L3R0PiBhbmQgbm8gYXJndW1lbnRzOwp0aGUgdHlwZSA8dHQ+VDE8L3R0PiBpcyA8dHQ+PGk+Y3Y8L2k+IFQqPC90dD4gYW5kIDx0dD5SPC90dD4gaXMgdGhlIHJldHVybiAKdHlwZSBvZiB0aGUgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb248L2RlbD4gPGlucz48dHQ+UiBUMDo6ZigpIDxpPmN2PC9pPjwvdHQ+Cih3aGVyZSA8dHQ+PGk+Y3Y8L2k+PC90dD4gcmVwcmVzZW50cyB0aGUgbWVtYmVyIGZ1bmN0aW9uJ3MgY3YtcXVhbGlmaWVycyk7CnRoZSB0eXBlIDx0dD5UMTwvdHQ+IGlzIDx0dD48aT5jdjwvaT4gVDAqPC90dD48L2lucz4KPC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSBidWxsZXQgaXRlbSAyIGluIDIuMS4yLzQ6CjwvcD4KCjxibG9ja3F1b3RlPgo8dWw+CjxsaT4KYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiA8ZGVsPndpdGggY3YtcXVhbGlmaWVyIDx0dD48aT5jdjwvaT48L3R0PiBhbmQgdGFraW5nIG9uZSBhcmd1bWVudApvZiB0eXBlIDx0dD5UMjwvdHQ+OyB0aGUgdHlwZSA8dHQ+VDE8L3R0PiBpcyA8dHQ+PGk+Y3Y8L2k+IFQqPC90dD4gYW5kIAo8dHQ+UjwvdHQ+IGlzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb248L2RlbD4KPGlucz48dHQ+UiBUMDo6ZihUMikgPGk+Y3Y8L2k+PC90dD4gKHdoZXJlIDx0dD48aT5jdjwvaT48L3R0PiByZXByZXNlbnRzIHRoZSBtZW1iZXIKZnVuY3Rpb24ncyBjdi1xdWFsaWZpZXJzKTsgdGhlIHR5cGUgPHR0PlQxPC90dD4gaXMgPHR0PjxpPmN2PC9pPiBUMCo8L3R0PjwvaW5zPgo8L2xpPgo8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8aHI+CjxhIG5hbWU9IjUzMCI+PGgzPjUzMC4mbmJzcDtNdXN0IGVsZW1lbnRzIG9mIGEgc3RyaW5nIGJlIGNvbnRpZ3VvdXM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IE5vdiAyMDA1PC9wPgo8cD5Jc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjkiPjY5PC9hPiwgd2hpY2ggd2FzIGluY29ycG9yYXRlZCBpbnRvIEMrKzAzLCBtYW5kYXRlZAombmJzcDsmbmJzcDsgdGhhdCB0aGUgZWxlbWVudHMgb2YgYSB2ZWN0b3IgbXVzdCBiZSBzdG9yZWQgaW4gY29udGlndW91cyBtZW1vcnkuCiZuYnNwOyZuYnNwOyBTaG91bGQgdGhlIHNhbWUgYWxzbyBhcHBseSB0byA8dHQ+YmFzaWNfc3RyaW5nPC90dD4/PC9wPgoKPHA+V2UgYWxtb3N0IHJlcXVpcmUgY29udGlndWl0eSBhbHJlYWR5LiBDbGF1c2UgMjMuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubXVsdGlzZXQiPiBbbGliLm11bHRpc2V0XTwvYT4KJm5ic3A7IGRlZmluZXMgPHR0Pm9wZXJhdG9yW108L3R0PiBhcyA8dHQ+ZGF0YSgpW3Bvc108L3R0Pi4gV2hhdCdzIG1pc3NpbmcKJm5ic3A7IGlzIGEgc2ltaWxhciBndWFyYW50ZWUgaWYgd2UgYWNjZXNzIHRoZSBzdHJpbmcncyBlbGVtZW50cyB2aWEgdGhlCiZuYnNwOyBpdGVyYXRvciBpbnRlcmZhY2UuPC9wPgoKPHA+R2l2ZW4gdGhlIGV4aXN0ZW5jZSBvZiA8dHQ+ZGF0YSgpPC90dD4sIGFuZCB0aGUgZGVmaW5pdGlvbiBvZgombmJzcDsgPHR0Pm9wZXJhdG9yW108L3R0PiBhbmQgPHR0PmF0PC90dD4gaW4gdGVybXMgb2YgPHR0PmRhdGE8L3R0PiwKJm5ic3A7IEkgZG9uJ3QgYmVsaWV2ZSBpdCdzIHBvc3NpYmxlIHRvIHdyaXRlIGEgdXNlZnVsIGFuZCBzdGFuZGFyZC0KJm5ic3A7IGNvbmZvcm1pbmcgPHR0PmJhc2ljX3N0cmluZzwvdHQ+IHRoYXQgaXNuJ3QgY29udGlndW91cy4gSSdtIG5vdAombmJzcDsgYXdhcmUgb2YgYW55IG5vbi1jb250aWd1b3VzIGltcGxlbWVudGF0aW9uLiBXZSBzaG91bGQganVzdCByZXF1aXJlCiZuYnNwOyBpdC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlIGVuZCBvZiAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiwKcGFyYWdyYXBoIDIuIDwvcD4KCjxibG9ja3F1b3RlPgombmJzcDsgPHA+VGhlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgYXJlIHN0b3JlZCBjb250aWd1b3VzbHksIG1lYW5pbmcgdGhhdCBpZgombmJzcDsgPHR0PnM8L3R0PiBpcyBhIDx0dD5iYXNpY19zdHJpbmcmbHQ7Y2hhclQsIEFsbG9jYXRvciZndDs8L3R0PiwgdGhlbgombmJzcDsgaXQgb2JleXMgdGhlIGlkZW50aXR5CiZuYnNwOyA8dHQ+JmFtcDsqKHMuYmVnaW4oKSArIG4pID09ICZhbXA7KnMuYmVnaW4oKSArIG48L3R0PgombmJzcDsgZm9yIGFsbCA8dHQ+MCAmbHQ7PSBuICZsdDsgcy5zaXplKCk8L3R0Pi4KICA8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSI1MzMiPjxoMz41MzMuJm5ic3A7dHlwbyBpbiAyLjIuMy4xMC8xPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDIuMi4zLjEwIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIudXRpbC5zbWFydHB0ci5nZXRkZWxldGVyIj4gW3RyLnV0aWwuc21hcnRwdHIuZ2V0ZGVsZXRlcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Bhb2xvIENhcmxpbmkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OSBOb3YgMjAwNTwvcD4KPHA+CkknbSBzZWVpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIHR5cG8uIFRoZSBSZXR1cm4gb2YgPHR0PmdldF9kZWxldGVyPC90dD4Kc2F5czoKPC9wPgo8YmxvY2txdW90ZT4KSWYgPHR0Pip0aGlzPC90dD4gPGk+b3duczwvaT4gYSBkZWxldGVyIDx0dD5kPC90dD4uLi4KPC9ibG9ja3F1b3RlPgo8cD4KYnV0IDx0dD5nZXRfZGVsZXRlcjwvdHQ+IGlzIGEgZnJlZSBmdW5jdGlvbiEKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpUaGVyZWZvcmUsIEkgdGhpbmsgc2hvdWxkIGJlOgo8L3A+CjxibG9ja3F1b3RlPgpJZiA8dHQ+PGRlbD4qdGhpczwvZGVsPiA8aW5zPnA8L2lucz48L3R0PiA8aT5vd25zPC9pPiBhIGRlbGV0ZXIgPHR0PmQ8L3R0Pi4uLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNTM1Ij48aDM+NTM1LiZuYnNwO3N0ZDo6c3RyaW5nOjpzd2FwIHNwZWNpZmljYXRpb24gcG9vcmx5IHdvcmRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNS44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpzd2FwIj4gW2xpYi5zdHJpbmc6OnN3YXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCZW1hbiBEYXdlcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNCBEZWMgMjAwNTwvcD4KPHA+CnN0ZDo6c3RyaW5nOjpzd2FwIGN1cnJlbnRseSBzYXlzIGZvciBlZmZlY3RzIGFuZCBwb3N0Y29uZGl0aW9uOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxpPkVmZmVjdHM6PC9pPiBTd2FwcyB0aGUgY29udGVudHMgb2YgdGhlIHR3byBzdHJpbmdzLgo8L3A+Cgo8cD4KPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD4qdGhpczwvdHQ+IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBpbiA8dHQ+PGk+czwvaT48L3R0PiwKPHR0PjxpPnM8L2k+PC90dD4gY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGluIDx0dD4qdGhpczwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpTcGVjaWZ5aW5nIGJvdGggRWZmZWN0cyBhbmQgUG9zdGNvbmRpdGlvbiBzZWVtcyByZWR1bmRhbnQsIGFuZCB0aGUgcG9zdGNvbmRpdGlvbgpuZWVkcyB0byBiZSBtYWRlIHN0cm9uZ2VyLiBVc2VycyB3b3VsZCBiZSB1bmhhcHB5IGlmIHRoZSBjaGFyYWN0ZXJzIHdlcmUgbm90IGluCnRoZSBzYW1lIG9yZGVyIGFmdGVyIHRoZSBzd2FwLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8ZGVsPjxpPkVmZmVjdHM6PC9pPiBTd2FwcyB0aGUgY29udGVudHMgb2YgdGhlIHR3byBzdHJpbmdzLjwvZGVsPgo8L3A+Cgo8cD4KPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD4qdGhpczwvdHQ+IGNvbnRhaW5zIHRoZSA8aW5zPnNhbWUgc2VxdWVuY2Ugb2Y8L2lucz4KY2hhcmFjdGVycyB0aGF0IDxkZWw+d2VyZTwvZGVsPiA8aW5zPndhczwvaW5zPiBpbiA8dHQ+PGk+czwvaT48L3R0PiwKPHR0PjxpPnM8L2k+PC90dD4gY29udGFpbnMgdGhlIDxpbnM+c2FtZSBzZXF1ZW5jZSBvZjwvaW5zPiBjaGFyYWN0ZXJzIHRoYXQKPGRlbD53ZXJlPC9kZWw+IDxpbnM+d2FzPC9pbnM+IGluIDx0dD4qdGhpczwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSI1MzciPjxoMz41MzcuJm5ic3A7VHlwb3MgaW4gdGhlIHNpZ25hdHVyZXMgaW4gMjcuNi4xLjMvNDItNDMgYW5kIDI3LjYuMi40PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQYW9sbyBDYXJsaW5pJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIEZlYiAyMDA2PC9wPgo8cD4KSW4gdGhlIG1vc3QgcmVjZW50IHdvcmtpbmcgZHJhZnQsIEknbSBzdGlsbCBzZWVpbmc6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+c2Vla2cob2ZmX3R5cGUmYW1wOyBvZmYsIGlvc19iYXNlOjpzZWVrZGlyIGRpcikKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CmFuZAo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnNlZWtwKHBvc190eXBlJmFtcDsgcG9zKQoKc2Vla3Aob2ZmX3R5cGUmYW1wOyBvZmYsIGlvc19iYXNlOjpzZWVrZGlyIGRpcikKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CnRoYXQgaXMsIGJ5IHJlZmVyZW5jZSBvZmYgYW5kIHBvcyBhcmd1bWVudHMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWZ0ZXIgMjcuNi4xLjNwNDIgY2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtnKG9mZl90eXBlPGRlbD4mYW1wOzwvZGVsPiA8aT5vZmY8L2k+LCBpb3NfYmFzZTo6c2Vla2RpciA8aT5kaXI8L2k+KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkFmdGVyIDI3LjYuMi40cDEgY2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtwKHBvc190eXBlPGRlbD4mYW1wOzwvZGVsPiA8aT5wb3M8L2k+KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkFmdGVyIDI3LjYuMi40cDMgY2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtwKG9mZl90eXBlPGRlbD4mYW1wOzwvZGVsPiA8aT5vZmY8L2k+LCBpb3NfYmFzZTo6c2Vla2RpciA8aT5kaXI8L2k+KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjUzOCI+PC9hPjxoMz48YSBuYW1lPSI1MzgiPjUzOC4mbmJzcDsyNDEgYWdhaW46IERvZXMgdW5pcXVlX2NvcHkoKSByZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlPzwvYT48L2gzPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs5IEZlYiAyMDA2PC9wPgo8cD4KSSBiZWxpZXZlIEkgYm90Y2hlZCB0aGUgcmVzb2x1dGlvbiBvZgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4KMjQxICJEb2VzIHVuaXF1ZV9jb3B5KCkgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZT8iPC9hPiB3aGljaCBub3cKaGFzIFdQIHN0YXR1cy4KPC9wPgoKPHA+ClRoaXMgdGFsa3MgYWJvdXQgPHR0PnVuaXF1ZV9jb3B5PC90dD4gcmVxdWlyZW1lbnRzIGFuZCBjdXJyZW50bHkgcmVhZHM6CjwvcD4KCjxibG9ja3F1b3RlPgotNS0gPGk+UmVxdWlyZXM6PC9pPiBUaGUgcmFuZ2VzIDx0dD5bPGk+Zmlyc3Q8L2k+LCA8aT5sYXN0PC9pPik8L3R0PiBhbmQKPHR0Pls8aT5yZXN1bHQ8L2k+LCA8aT5yZXN1bHQ8L2k+Kyg8aT5sYXN0PC9pPi08aT5maXJzdDwvaT4pKTwvdHQ+CnNoYWxsIG5vdCBvdmVybGFwLiBUaGUgZXhwcmVzc2lvbiA8dHQ+KjxpPnJlc3VsdDwvaT4gPSAqPGk+Zmlyc3Q8L2k+PC90dD4gc2hhbGwKYmUgdmFsaWQuIElmIG5laXRoZXIgPHR0PklucHV0SXRlcmF0b3I8L3R0PiBub3IgPHR0Pk91dHB1dEl0ZXJhdG9yPC90dD4gbWVldHMgdGhlCnJlcXVpcmVtZW50cyBvZiBmb3J3YXJkIGl0ZXJhdG9yIHRoZW4gdGhlIHZhbHVlIHR5cGUgb2YgPHR0PklucHV0SXRlcmF0b3I8L3R0PgptdXN0IGJlIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpLiBPdGhlcndpc2UgQ29weUNvbnN0cnVjdGlibGUgaXMgbm90IHJlcXVpcmVkLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHByb2JsZW0gKHdoaWNoIFBhb2xvIGRpc2NvdmVyZWQpIGlzIHRoYXQgd2hlbiB0aGUgaXRlcmF0b3JzIGFyZSBhdCB0aGVpcgptb3N0IHJlc3RyaWN0aXZlICg8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+LCA8dHQ+T3V0cHV0SXRlcmF0b3I8L3R0PiksIHRoZW4gd2Ugd2FudAo8dHQ+SW5wdXRJdGVyYXRvcjo6dmFsdWVfdHlwZTwvdHQ+IHRvIGJlIGJvdGggPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gYW5kCjx0dD5Db3B5QXNzaWduYWJsZTwvdHQ+IChmb3IgdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uKS4gIEhvd2V2ZXIgdGhpcwpwcm9wb3NlZCByZXNvbHV0aW9uIG9ubHkgbWFrZXMgaXQgY2xlYXIgdGhhdCBpdCBpcyA8dHQ+Q29weUNvbnN0cnVjdGlibGU8L3R0PiwKYW5kIHRoYXQgb25lIGNhbiBhc3NpZ24gZnJvbSA8dHQ+KjxpPmZpcnN0PC9pPjwvdHQ+IHRvIDx0dD4qPGk+cmVzdWx0PC9pPjwvdHQ+LgpUaGlzIGxhdHRlciByZXF1aXJlbWVudCBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbXBseSB0aGF0IHlvdSBjYW46CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+KjxpPmZpcnN0PC9pPiA9ICo8aT5maXJzdDwvaT47CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8YmxvY2txdW90ZT4KLTUtIDxpPlJlcXVpcmVzOjwvaT4gVGhlIHJhbmdlcyA8dHQ+WzxpPmZpcnN0PC9pPiwgPGk+bGFzdDwvaT4pPC90dD4gYW5kCjx0dD5bPGk+cmVzdWx0PC9pPiwgPGk+cmVzdWx0PC9pPisoPGk+bGFzdDwvaT4tPGk+Zmlyc3Q8L2k+KSk8L3R0PgpzaGFsbCBub3Qgb3ZlcmxhcC4gVGhlIGV4cHJlc3Npb24gPHR0Pio8aT5yZXN1bHQ8L2k+ID0gKjxpPmZpcnN0PC9pPjwvdHQ+CnNoYWxsCmJlIHZhbGlkLiBJZiBuZWl0aGVyIDx0dD5JbnB1dEl0ZXJhdG9yPC90dD4gbm9yIDx0dD5PdXRwdXRJdGVyYXRvcjwvdHQ+IG1lZXRzIHRoZQpyZXF1aXJlbWVudHMgb2YgZm9yd2FyZCBpdGVyYXRvciB0aGVuIHRoZSA8ZGVsPnZhbHVlIHR5cGU8L2RlbD4gCjxpbnM+PHR0PnZhbHVlX3R5cGU8L3R0PjwvaW5zPiBvZiA8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+Cm11c3QgYmUgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMykgPGlucz5hbmQgQXNzaWduYWJsZTwvaW5zPi4KT3RoZXJ3aXNlIENvcHlDb25zdHJ1Y3RpYmxlIGlzIG5vdCByZXF1aXJlZC4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjU0MCI+PGgzPjU0MC4mbmJzcDtzaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7OjpvcGVyYXRvciooKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO1RSMSAyLjIuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIudXRpbC5zbWFydHB0ci5zaGFyZWQub2JzIj4gW3RyLnV0aWwuc21hcnRwdHIuc2hhcmVkLm9ic108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBPY3QgMjAwNTwvcD4KPHA+CkknbSB0cnlpbmcgdG8gcmVjb25jaWxlIHRoZSBub3RlIGluIHRyLnV0aWwuc21hcnRwdHIuc2hhcmVkLm9icywgcDYKdGhhdCB0YWxrcyBhYm91dCB0aGUgb3BlcmF0b3IqKCkgbWVtYmVyIGZ1bmN0aW9uIG9mIHNoYXJlZF9wdHI6CjwvcD4KCjxibG9ja3F1b3RlPgogIE5vdGVzOiBXaGVuIFQgaXMgdm9pZCwgYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSB0aGlzIG1lbWJlciBmdW5jdGlvbgogIHJlbmRlcnMgdGhlIHByb2dyYW0gaWxsLWZvcm1lZC4gW05vdGU6IEluc3RhbnRpYXRpbmcgc2hhcmVkX3B0ciZsdDt2b2lkJmd0OwogIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlc3VsdCBpbiBpbnN0YW50aWF0aW5nIHRoaXMgbWVtYmVyIGZ1bmN0aW9uLgogIC0tZW5kIG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPgp3aXRoIHRoZSByZXF1aXJlbWVudCBpbiB0ZW1wLmluc3QsIHAxOgo8L3A+Cgo8YmxvY2txdW90ZT4KICBUaGUgaW1wbGljaXQgaW5zdGFudGlhdGlvbiBvZiBhIGNsYXNzIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIGNhdXNlcwogIHRoZSBpbXBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIHRoZSBkZWNsYXJhdGlvbnMsIGJ1dCBub3Qgb2YgdGhlCiAgZGVmaW5pdGlvbnMuLi4KPC9ibG9ja3F1b3RlPgoKPHA+CkkgYXNzdW1lIHRoYXQgd2hhdCB0aGUgbm90ZSBpcyByZWFsbHkgdHJ5aW5nIHRvIHNheSBpcyB0aGF0CiJpbnN0YW50aWF0aW5nIHNoYXJlZF9wdHImbHQ7dm9pZCZndDsgKm11c3Qgbm90KiByZXN1bHQgaW4gaW5zdGFudGlhdGluZwp0aGlzIG1lbWJlciBmdW5jdGlvbi4iIFRoYXQgaXMsIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZQpkZWNsYXJlZCBhIG1lbWJlciBvZiBzaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7LiBJcyBteSBpbnRlcnByZXRhdGlvbgpjb3JyZWN0Pwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyLjIuMy41cDYKPC9wPgoKPGJsb2NrcXVvdGU+Ci02LSA8ZGVsPjxpPk5vdGVzOjwvaT48L2RlbD4gV2hlbiA8dHQ+VDwvdHQ+IGlzIDx0dD52b2lkPC90dD4sIDxkZWw+YXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZQp0aGlzIG1lbWJlciBmdW5jdGlvbiByZW5kZXJzIHRoZSBwcm9ncmFtIGlsbC1mb3JtZWQuIFs8aT5Ob3RlOjwvaT4KSW5zdGFudGlhdGluZyA8dHQ+c2hhcmVkX3B0ciZsdDt2b2lkJmd0OzwvdHQ+IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlc3VsdCBpbgppbnN0YW50aWF0aW5nIHRoaXMgbWVtYmVyIGZ1bmN0aW9uLiA8aT4tLWVuZCBub3RlPC9pPl08L2RlbD4gPGlucz5pdCBpcwp1bnNwZWNpZmllZCB3aGV0aGVyIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIG9yIG5vdCwgYW5kIGlmIHNvLCB3aGF0IGl0cwpyZXR1cm4gdHlwZSBpcywgZXhjZXB0IHRoYXQgdGhlIGRlY2xhcmF0aW9uIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlCmRlZmluaXRpb24pIG9mIHRoZSBmdW5jdGlvbiBzaGFsbCBiZSB3ZWxsLWZvcm1lZC48L2lucz4KPC9ibG9ja3F1b3RlPgoKPGhyPgo8YSBuYW1lPSI1NDEiPjxoMz41NDEuJm5ic3A7c2hhcmVkX3B0ciB0ZW1wbGF0ZSBhc3NpZ25tZW50IGFuZCB2b2lkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7VFIxIDIuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvdHIxLmh0bWwjdHIudXRpbC5zbWFydHB0ci5zaGFyZWQiPiBbdHIudXRpbC5zbWFydHB0ci5zaGFyZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTYgT2N0IDIwMDU8L3A+CjxwPgpJcyB0aGUgdm9pZCBzcGVjaWFsaXphdGlvbiBvZiB0aGUgdGVtcGxhdGUgYXNzaWdubWVudCBvcGVyYXRvciB0YWtpbmcKYSBzaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7IGFzIGFuIGFyZ3VtZW50IHN1cHBvc2VkIGJlIHdlbGwtZm9ybWVkPwo8L3A+CjxwPgpJLmUuLCBpcyB0aGlzIHNuaXBwZXQgd2VsbC1mb3JtZWQ6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT5zaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7IHA7CnAub3BlcmF0b3I9Jmx0O3ZvaWQmZ3Q7KHApOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KR2NjIGNvbXBsYWlucyBhYm91dCBhdXRvX3B0ciZsdDt2b2lkJmd0Ozo6b3BlcmF0b3IqKCkgcmV0dXJuaW5nIGEgcmVmZXJlbmNlCnRvIHZvaWQuIEkgc3VzcGVjdCBpdCdzIGJlY2F1c2Ugc2hhcmVkX3B0ciBoYXMgdHdvIHRlbXBsYXRlIGFzc2lnbm1lbnQKb3BlcmF0b3JzLCBvbmUgb2Ygd2hpY2ggdGFrZXMgYXV0b19wdHIsIGFuZCB0aGUgYXV0b19wdHIgdGVtcGxhdGUgZ2V0cwppbXBsaWNpdGx5IGluc3RhbnRpYXRlZCBpbiB0aGUgcHJvY2VzcyBvZiBvdmVybG9hZCByZXNvbHV0aW9uLgo8L3A+Cgo8cD4KVGhlIG9ubHkgd2F5IEkgc2VlIGFyb3VuZCBpdCBpcyB0byBkbyB0aGUgc2FtZSB0cmljayB3aXRoIGF1dG9fcHRyJmx0O3ZvaWQmZ3Q7Cm9wZXJhdG9yKigpIGFzIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IgaW4gc2hhcmVkX3B0ciZsdDt2b2lkJmd0Oy4KPC9wPgoKPHA+ClBTIFN0cmFuZ2VseSBlbm91Z2gsIHRoZSBFREcgZnJvbnQgZW5kIGRvZXNuJ3QgbWluZCB0aGUgY29kZSwgZXZlbgp0aG91Z2ggaW4gYSBzbWFsbCB0ZXN0IGNhc2UgKGJlbG93KSBJIGNhbiByZXByb2R1Y2UgdGhlIGVycm9yIHdpdGgKaXQgYXMgd2VsbC4KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IEEgeyBUJmFtcDsgb3BlcmF0b3IqKCkgeyByZXR1cm4gKihUKikwOyB9IH07Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IEIgewogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEImYW1wOykgeyB9CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVSZndDsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBCJmx0O1UmZ3Q7JmFtcDspIHsgfQogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFUmZ3Q7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQSZsdDtVJmd0OyZhbXA7KSB7IH0KfTsKCmludCBtYWluICgpCnsKICAgIEImbHQ7dm9pZCZndDsgYjsKICAgIGIub3BlcmF0b3I9Jmx0O3ZvaWQmZ3Q7KGIpOwp9CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gW2xpYi5tZW1vcnldIGNoYW5nZToKPC9wPgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFgmZ3Q7IGNsYXNzIGF1dG9fcHRyOwo8aW5zPnRlbXBsYXRlJmx0OyZndDsgY2xhc3MgYXV0b19wdHImbHQ7dm9pZCZndDs7PC9pbnM+CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJbiBbbGliLmF1dG8ucHRyXS8yIGFkZCB0aGUgZm9sbG93aW5nIGJlZm9yZSB0aGUgbGFzdCBjbG9zaW5nIGJyYWNlOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0OyZndDsgY2xhc3MgYXV0b19wdHImbHQ7dm9pZCZndDsKewpwdWJsaWM6CiZuYnNwOyAmbmJzcDsgdHlwZWRlZiB2b2lkIGVsZW1lbnRfdHlwZTsKfTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+LS0tLS0gRW5kIG9mIGRvY3VtZW50IC0tLS0tPC9wPgo8L2JvZHk+PC9odG1sPg==